use std::fmt::Debug;
use num_traits::{Float as NumFloat, Num, NumCast, PrimInt, ToPrimitive};
use crate::impl_usize_conversions;
pub trait Float: NumFloat + Copy + Default + ToPrimitive + PartialEq + 'static {}
impl Float for f32 {}
impl Float for f64 {}
pub trait Integer:
PrimInt + TryFrom<usize> + Default + Debug + ToPrimitive + std::hash::Hash + 'static
{
fn to_usize(self) -> usize;
fn from_usize(v: usize) -> Self;
}
impl_usize_conversions!(u8, u16, u32, u64, i8, i16, i32, i64);
#[cfg(feature = "decimal")]
impl_usize_conversions!(i128);
pub trait Numeric: Num + NumCast + Copy + Default + ToPrimitive + PartialEq + 'static {}
impl Numeric for f32 {}
impl Numeric for f64 {}
impl Numeric for i8 {}
impl Numeric for i16 {}
impl Numeric for i32 {}
impl Numeric for i64 {}
impl Numeric for u8 {}
impl Numeric for u16 {}
impl Numeric for u32 {}
impl Numeric for u64 {}
#[cfg(feature = "decimal")]
impl Numeric for i128 {}
pub trait Primitive: Copy + Default + PartialEq + 'static {}
impl Primitive for f32 {}
impl Primitive for f64 {}
impl Primitive for i8 {}
impl Primitive for i16 {}
impl Primitive for i32 {}
impl Primitive for i64 {}
impl Primitive for u8 {}
impl Primitive for u16 {}
impl Primitive for u32 {}
impl Primitive for u64 {}
impl Primitive for bool {}
#[cfg(feature = "decimal")]
impl Primitive for i128 {}