sexprs_data_structures/value/
unsigned_integer.rs1use 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}