#[derive(Debug, Clone, Copy)]
pub enum Number {
Integer(i64),
UInteger(u64),
Float(f64),
}
impl PartialEq for Number {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(Number::Integer(v1), Number::Integer(v2)) => v1 == v2,
(Number::UInteger(v1), Number::UInteger(v2)) => v1 == v2,
(Number::Float(v1), Number::Float(v2)) => v1 == v2,
_ => false,
}
}
}
impl From<u8> for Number {
fn from(value: u8) -> Self {
Number::UInteger(value as u64)
}
}
impl From<u16> for Number {
fn from(value: u16) -> Self {
Number::UInteger(value as u64)
}
}
impl From<u32> for Number {
fn from(value: u32) -> Self {
Number::UInteger(value as u64)
}
}
impl From<u64> for Number {
fn from(value: u64) -> Self {
Number::UInteger(value)
}
}
impl From<i8> for Number {
fn from(value: i8) -> Self {
Number::Integer(value as i64)
}
}
impl From<i16> for Number {
fn from(value: i16) -> Self {
Number::Integer(value as i64)
}
}
impl From<i32> for Number {
fn from(value: i32) -> Self {
Number::Integer(value as i64)
}
}
impl From<i64> for Number {
fn from(value: i64) -> Self {
Number::Integer(value)
}
}
impl From<f32> for Number {
fn from(value: f32) -> Self {
Number::Float(value as f64)
}
}
impl From<f64> for Number {
fn from(value: f64) -> Self {
Number::Float(value)
}
}