pub trait Number: Eq {
fn as_u32(&self) -> Option<u32>;
fn as_u64(&self) -> Option<u64>;
fn as_i32(&self) -> Option<i32>;
fn as_i64(&self) -> Option<i64>;
fn as_f32(&self) -> Option<f32>;
fn as_f32_lossy(&self) -> f32;
fn as_f64(&self) -> Option<f64>;
fn as_f64_lossy(&self) -> f64;
}
#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
pub struct Zero;
impl Number for Zero {
fn as_u32(&self) -> Option<u32> {
None
}
fn as_u64(&self) -> Option<u64> {
None
}
fn as_i32(&self) -> Option<i32> {
None
}
fn as_i64(&self) -> Option<i64> {
None
}
fn as_f32(&self) -> Option<f32> {
Some(0.0)
}
fn as_f32_lossy(&self) -> f32 {
0.0
}
fn as_f64(&self) -> Option<f64> {
Some(0.0)
}
fn as_f64_lossy(&self) -> f64 {
0.0
}
}