use lexical_util::options::ParseOptions;
use lexical_util::result::Result;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct OptionsBuilder {
no_multi_digit: bool,
}
impl OptionsBuilder {
#[inline(always)]
pub const fn new() -> Self {
Self {
no_multi_digit: true,
}
}
#[inline(always)]
pub const fn get_no_multi_digit(&self) -> bool {
self.no_multi_digit
}
#[inline(always)]
pub const fn no_multi_digit(mut self, no_multi_digit: bool) -> Self {
self.no_multi_digit = no_multi_digit;
self
}
#[inline(always)]
pub const fn is_valid(&self) -> bool {
true
}
#[inline(always)]
pub const fn build_unchecked(&self) -> Options {
Options {
no_multi_digit: self.no_multi_digit,
}
}
#[inline(always)]
pub const fn build_strict(&self) -> Options {
match self.build() {
Ok(value) => value,
Err(error) => core::panic!("{}", error.description()),
}
}
#[inline(always)]
pub const fn build(&self) -> Result<Options> {
Ok(self.build_unchecked())
}
}
impl Default for OptionsBuilder {
#[inline(always)]
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct Options {
no_multi_digit: bool,
}
impl Options {
#[must_use]
#[inline(always)]
pub const fn new() -> Self {
Self::builder().build_unchecked()
}
#[inline(always)]
#[cfg(feature = "power-of-two")]
pub const fn from_radix(_: u8) -> Self {
Self::new()
}
#[inline(always)]
pub const fn is_valid(&self) -> bool {
self.rebuild().is_valid()
}
#[inline(always)]
pub const fn get_no_multi_digit(&self) -> bool {
self.no_multi_digit
}
#[deprecated = "Setters should have a `set_` prefix. Use `set_no_multi_digit` instead. Will be removed in 2.0."]
#[inline(always)]
pub fn no_multi_digit(&mut self, no_multi_digit: bool) {
self.no_multi_digit = no_multi_digit;
}
#[deprecated = "Options should be treated as immutable, use `OptionsBuilder` instead. Will be removed in 2.0."]
#[inline(always)]
pub fn set_no_multi_digit(&mut self, no_multi_digit: bool) {
self.no_multi_digit = no_multi_digit;
}
#[inline(always)]
pub const fn builder() -> OptionsBuilder {
OptionsBuilder::new()
}
#[inline(always)]
pub const fn rebuild(&self) -> OptionsBuilder {
OptionsBuilder {
no_multi_digit: self.no_multi_digit,
}
}
}
impl Default for Options {
#[inline(always)]
fn default() -> Self {
Self::new()
}
}
impl ParseOptions for Options {
#[inline(always)]
fn is_valid(&self) -> bool {
Self::is_valid(self)
}
}
#[rustfmt::skip]
pub const STANDARD: Options = Options::new();
#[rustfmt::skip]
pub const SMALL_NUMBERS: Options = Options::builder()
.no_multi_digit(true)
.build_strict();
#[rustfmt::skip]
pub const LARGE_NUMBERS: Options = Options::builder()
.no_multi_digit(false)
.build_strict();