fastnum 0.7.4

Fast decimal numbers library
Documentation
use crate::{
    bint::UInt,
    decimal::{
        dec::{Context, ControlBlock, ExtraPrecision, Sign, Signals},
        Decimal, ParseError,
    },
};

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

macro_rules! from_uint {
    ($n: ident, $uint: ident $(#$try: ident)?) => {
        from_uint!(@ $($try)? $n, $uint);
    };
    (@ $n: ident, $uint: ident) => {
        #[inline]
        pub const fn $n<const N: usize>(n: $uint) -> D<N> {
            D::new(
                U::$n(n),
                ControlBlock::new(
                    0,
                    Sign::Plus,
                    Signals::empty(),
                    Context::default(),
                    ExtraPrecision::new(),
                ),
            )
        }
    };
    (@ TRY $n: ident, $uint: ident) => {
        #[inline]
        pub const fn $n<const N: usize>(n: $uint) -> Result<D<N>, ParseError> {
            let Ok(u) = U::$n(n) else {
                return Err(ParseError::PosOverflow);
            };

            Ok(D::new(
                u,
                ControlBlock::new(
                    0,
                    Sign::Plus,
                    Signals::empty(),
                    Context::default(),
                    ExtraPrecision::new(),
                ),
            ))
        }
    };
}

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