serde_valid_literal/
number.rs

1#[cfg(feature = "i128")]
2use std::num::{NonZeroI128, NonZeroU128};
3use std::num::{
4    NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU16, NonZeroU32,
5    NonZeroU64, NonZeroU8, NonZeroUsize,
6};
7
8#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
9pub enum Number {
10    I8(i8),
11    I16(i16),
12    I32(i32),
13    I64(i64),
14    #[cfg(feature = "i128")]
15    I128(i128),
16    Isize(isize),
17    U8(u8),
18    U16(u16),
19    U32(u32),
20    U64(u64),
21    #[cfg(feature = "i128")]
22    U128(u128),
23    Usize(usize),
24    NonZeroI8(NonZeroI8),
25    NonZeroI16(NonZeroI16),
26    NonZeroI32(NonZeroI32),
27    NonZeroI64(NonZeroI64),
28    #[cfg(feature = "i128")]
29    NonZeroI128(NonZeroI128),
30    NonZeroIsize(NonZeroIsize),
31    NonZeroU8(NonZeroU8),
32    NonZeroU16(NonZeroU16),
33    NonZeroU32(NonZeroU32),
34    NonZeroU64(NonZeroU64),
35    #[cfg(feature = "i128")]
36    NonZeroU128(NonZeroU128),
37    NonZeroUsize(NonZeroUsize),
38    F32(f32),
39    F64(f64),
40}
41
42impl std::fmt::Display for Number {
43    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44        match *self {
45            Number::I8(num) => write!(f, "{:?}", num),
46            Number::I16(num) => write!(f, "{:?}", num),
47            Number::I32(num) => write!(f, "{:?}", num),
48            Number::I64(num) => write!(f, "{:?}", num),
49            #[cfg(feature = "i128")]
50            Number::I128(num) => write!(f, "{:?}", num),
51            Number::Isize(num) => write!(f, "{:?}", num),
52            Number::U8(num) => write!(f, "{:?}", num),
53            Number::U16(num) => write!(f, "{:?}", num),
54            Number::U32(num) => write!(f, "{:?}", num),
55            Number::U64(num) => write!(f, "{:?}", num),
56            #[cfg(feature = "i128")]
57            Number::U128(num) => write!(f, "{:?}", num),
58            Number::Usize(num) => write!(f, "{:?}", num),
59            Number::NonZeroI8(num) => write!(f, "{:?}", num),
60            Number::NonZeroI16(num) => write!(f, "{:?}", num),
61            Number::NonZeroI32(num) => write!(f, "{:?}", num),
62            Number::NonZeroI64(num) => write!(f, "{:?}", num),
63            #[cfg(feature = "i128")]
64            Number::NonZeroI128(num) => write!(f, "{:?}", num),
65            Number::NonZeroIsize(num) => write!(f, "{:?}", num),
66            Number::NonZeroU8(num) => write!(f, "{:?}", num),
67            Number::NonZeroU16(num) => write!(f, "{:?}", num),
68            Number::NonZeroU32(num) => write!(f, "{:?}", num),
69            Number::NonZeroU64(num) => write!(f, "{:?}", num),
70            #[cfg(feature = "i128")]
71            Number::NonZeroU128(num) => write!(f, "{:?}", num),
72            Number::NonZeroUsize(num) => write!(f, "{:?}", num),
73            Number::F32(num) => write!(f, "{:?}", num),
74            Number::F64(num) => write!(f, "{:?}", num),
75        }
76    }
77}
78
79macro_rules! impl_from_trait {
80    ($type:ty) => {
81        paste::paste! {
82            impl From<$type> for Number {
83                fn from(item: $type) -> Self {
84                    Number::[<$type:camel>](item)
85                }
86            }
87
88            impl From<&$type> for Number {
89                fn from(item: &$type) -> Self {
90                    Number::[<$type:camel>](*item)
91                }
92            }
93        }
94    };
95}
96
97impl_from_trait!(i8);
98impl_from_trait!(i16);
99impl_from_trait!(i32);
100impl_from_trait!(i64);
101#[cfg(feature = "i128")]
102impl_from_trait!(i128);
103impl_from_trait!(isize);
104impl_from_trait!(u8);
105impl_from_trait!(u16);
106impl_from_trait!(u32);
107impl_from_trait!(u64);
108#[cfg(feature = "i128")]
109impl_from_trait!(u128);
110impl_from_trait!(usize);
111impl_from_trait!(NonZeroI8);
112impl_from_trait!(NonZeroI16);
113impl_from_trait!(NonZeroI32);
114impl_from_trait!(NonZeroI64);
115#[cfg(feature = "i128")]
116impl_from_trait!(NonZeroI128);
117impl_from_trait!(NonZeroIsize);
118impl_from_trait!(NonZeroU8);
119impl_from_trait!(NonZeroU16);
120impl_from_trait!(NonZeroU32);
121impl_from_trait!(NonZeroU64);
122#[cfg(feature = "i128")]
123impl_from_trait!(NonZeroU128);
124impl_from_trait!(NonZeroUsize);
125impl_from_trait!(f32);
126impl_from_trait!(f64);