lexical_parse_integer/
options.rs1use lexical_util::options::ParseOptions;
4use lexical_util::result::Result;
5use static_assertions::const_assert;
6
7#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
9pub struct OptionsBuilder {
10 no_multi_digit: bool,
18}
19
20impl OptionsBuilder {
21 #[inline(always)]
23 pub const fn new() -> Self {
24 Self {
25 no_multi_digit: true,
26 }
27 }
28
29 #[inline(always)]
33 pub const fn get_no_multi_digit(&self) -> bool {
34 self.no_multi_digit
35 }
36
37 #[inline(always)]
41 pub const fn no_multi_digit(mut self, no_multi_digit: bool) -> Self {
42 self.no_multi_digit = no_multi_digit;
43 self
44 }
45
46 #[inline(always)]
50 pub const fn is_valid(&self) -> bool {
51 true
52 }
53
54 #[inline(always)]
56 pub const fn build_unchecked(&self) -> Options {
57 Options {
58 no_multi_digit: self.no_multi_digit,
59 }
60 }
61
62 #[inline(always)]
64 pub const fn build(&self) -> Result<Options> {
65 Ok(self.build_unchecked())
66 }
67}
68
69impl Default for OptionsBuilder {
70 #[inline(always)]
71 fn default() -> Self {
72 Self::new()
73 }
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
90pub struct Options {
91 no_multi_digit: bool,
99}
100
101impl Options {
102 #[must_use]
104 #[inline(always)]
105 pub const fn new() -> Self {
106 Self::builder().build_unchecked()
107 }
108
109 #[inline(always)]
113 pub const fn is_valid(&self) -> bool {
114 self.rebuild().is_valid()
115 }
116
117 #[inline(always)]
119 pub const fn get_no_multi_digit(&self) -> bool {
120 self.no_multi_digit
121 }
122
123 #[inline(always)]
127 pub fn no_multi_digit(&mut self, no_multi_digit: bool) {
128 self.no_multi_digit = no_multi_digit;
129 }
130
131 #[inline(always)]
135 pub const fn builder() -> OptionsBuilder {
136 OptionsBuilder::new()
137 }
138
139 #[inline(always)]
141 pub const fn rebuild(&self) -> OptionsBuilder {
142 OptionsBuilder {
143 no_multi_digit: self.no_multi_digit,
144 }
145 }
146}
147
148impl Default for Options {
149 #[inline(always)]
150 fn default() -> Self {
151 Self::new()
152 }
153}
154
155impl ParseOptions for Options {
156 #[inline(always)]
157 fn is_valid(&self) -> bool {
158 Self::is_valid(self)
159 }
160}
161
162#[rustfmt::skip]
167pub const STANDARD: Options = Options::new();
168const_assert!(STANDARD.is_valid());
169
170#[rustfmt::skip]
172pub const SMALL_NUMBERS: Options = Options::builder()
173 .no_multi_digit(true)
174 .build_unchecked();
175const_assert!(SMALL_NUMBERS.is_valid());
176
177#[rustfmt::skip]
179pub const LARGE_NUMBERS: Options = Options::builder()
180 .no_multi_digit(false)
181 .build_unchecked();
182const_assert!(LARGE_NUMBERS.is_valid());