sexprs_data_structures/value/
unsigned_integer.rs

1use crate::impl_number_type;
2impl_number_type!(
3    u32,
4    UnsignedInteger,
5    AsUnsignedInteger,
6    as_unsigned_integer
7);
8
9impl From<u64> for UnsignedInteger {
10    fn from(value: u64) -> UnsignedInteger {
11        if value <= u32::MAX.into() {
12            UnsignedInteger {
13                value: value as u32,
14            }
15        } else {
16            panic!(
17                "cannot convert from {:#?} to {}",
18                value,
19                UnsignedInteger::type_name()
20            )
21        }
22    }
23}
24
25impl AsNumber<u32> for u64 {
26    fn as_number(&self) -> u32 {
27        if *self <= u32::MAX.into() {
28            *self as u32
29        } else {
30            panic!(
31                "cannot convert from {:#?} to u32",
32                self,
33            )
34        }
35    }
36}
37
38impl AsNumber<u32> for &u64 {
39    fn as_number(&self) -> u32 {
40        let value = **self;
41        if value <= u32::MAX.into() {
42            value as u32
43        } else {
44            panic!(
45                "cannot convert from {:#?} to u32",
46                value,
47            )
48        }
49    }
50}
51
52impl AsUnsignedInteger for u64 {
53    fn as_unsigned_integer(&self) -> UnsignedInteger {
54        UnsignedInteger::from(*self)
55    }
56}
57
58impl AsUnsignedInteger for &u64 {
59    fn as_unsigned_integer(&self) -> UnsignedInteger {
60        UnsignedInteger::from(**self)
61    }
62}