fastnum 0.7.4

Fast decimal numbers library
Documentation
use crate::decimal::{dec::parse, Decimal, ParseError};

type D<const N: usize> = Decimal<N>;

macro_rules! from_num_impls {
    ($($name:ident $num:ident $(#$try: ident)?),*) => {
        impl<const N: usize> D<N> {
            $(
                from_num_impls!(@ $($try)? $name $num);
            )*
        }

        $(
            from_num_impls!(@@ $($try)? $name $num);
        )*
    };
    (@ $name:ident $num:ident) => {
        #[inline]
        #[doc = concat!("Converts [`", stringify!($num), "`] to [Decimal].")]
        pub const fn $name(n: $num) -> Self {
            parse::$name(n)
        }
    };
    (@ TRY $name:ident $num:ident) => {
        #[inline]
        #[doc = concat!("Converts [`", stringify!($num), "`] to [Decimal].")]
        pub const fn $name(n: $num) -> Result<Self, ParseError> {
            parse::$name(n)
        }
    };
    (@@ $name:ident $num:ident) => {
        impl<const N: usize> From<$num> for D<N> {
            #[inline]
            fn from(n: $num) -> Self {
                Self::$name(n)
            }
        }
    };
    (@@ TRY $name:ident $num:ident) => {
        impl<const N: usize> TryFrom<$num> for D<N> {
            type Error = ParseError;

            #[inline]
            fn try_from(n: $num) -> Result<Self, Self::Error> {
                Self::$name(n)
            }
        }
    };
}

from_num_impls!(
    from_u8 u8,
    from_u16 u16,
    from_u32 u32,
    from_u64 u64,
    from_u128 u128 #TRY,
    from_usize usize,

    from_i8 i8,
    from_i16 i16,
    from_i32 i32,
    from_i64 i64,
    from_i128 i128 #TRY,
    from_isize isize,

    from_f32 f32,
    from_f64 f64
);