use core::fmt;
use core::{
error::Error,
fmt::{Display, Formatter},
num::ParseFloatError,
};
use num_traits::{CheckedAdd, CheckedMul, Unsigned, Zero};
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum IntegerParseError {
OutOfRange,
InvalidCharacter(char),
}
impl Display for IntegerParseError {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::OutOfRange => f.write_str("integer out of range"),
Self::InvalidCharacter(c) => {
write!(f, "invalid character '{c}'")
}
}
}
}
impl Error for IntegerParseError {}
#[derive(Debug, Clone, PartialEq)]
#[expect(clippy::exhaustive_enums)]
pub enum ParseNumberResult<
R: Copy + Zero + CheckedAdd<Output = R> + CheckedMul<Output = R> + From<u8> + Unsigned,
> {
Integer(Result<R, IntegerParseError>),
Float(Result<f64, ParseFloatError>),
}