use lexical_util::options::ParseOptions;
use lexical_util::result::Result;
use static_assertions::const_assert;
#[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(&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)]
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
}
#[inline(always)]
pub fn 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();
const_assert!(STANDARD.is_valid());
#[rustfmt::skip]
pub const SMALL_NUMBERS: Options = Options::builder()
.no_multi_digit(true)
.build_unchecked();
const_assert!(SMALL_NUMBERS.is_valid());
#[rustfmt::skip]
pub const LARGE_NUMBERS: Options = Options::builder()
.no_multi_digit(false)
.build_unchecked();
const_assert!(LARGE_NUMBERS.is_valid());