use super::generated::numeric as gen;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(u8)]
pub enum NumericType {
Decimal,
Digit,
Numeric,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct NumericValue {
pub numerator: i64,
pub denominator: u32,
}
impl NumericValue {
#[inline]
#[must_use]
pub const fn is_integer(self) -> bool {
self.denominator == 1
}
#[inline]
#[must_use]
pub const fn to_i64(self) -> Option<i64> {
if self.denominator == 1 {
Some(self.numerator)
} else {
None
}
}
#[inline]
#[must_use]
pub fn as_f64(self) -> f64 {
self.numerator as f64 / f64::from(self.denominator)
}
}
#[inline]
#[must_use]
pub const fn numeric_type(c: char) -> Option<NumericType> {
gen::numeric_type(c as u32)
}
#[inline]
#[must_use]
pub const fn numeric_value(c: char) -> Option<NumericValue> {
gen::numeric_value(c as u32)
}
#[inline]
#[must_use]
pub const fn numeric_value_u32(cp: u32) -> Option<NumericValue> {
gen::numeric_value(cp)
}