spinoso_symbol/
convert.rs

1use core::num::{NonZeroU8, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroUsize};
2
3use crate::{Symbol, SymbolOverflowError};
4
5impl From<u8> for Symbol {
6    #[inline]
7    fn from(id: u8) -> Self {
8        Self(id.into())
9    }
10}
11
12impl From<NonZeroU8> for Symbol {
13    #[inline]
14    fn from(sym: NonZeroU8) -> Self {
15        Self(sym.get().into())
16    }
17}
18
19impl From<u16> for Symbol {
20    #[inline]
21    fn from(id: u16) -> Self {
22        Self(id.into())
23    }
24}
25
26impl From<NonZeroU16> for Symbol {
27    #[inline]
28    fn from(sym: NonZeroU16) -> Self {
29        Self(sym.get().into())
30    }
31}
32
33impl From<u32> for Symbol {
34    #[inline]
35    fn from(id: u32) -> Self {
36        Self(id)
37    }
38}
39
40impl From<NonZeroU32> for Symbol {
41    #[inline]
42    fn from(sym: NonZeroU32) -> Self {
43        Self(sym.get())
44    }
45}
46
47impl TryFrom<u64> for Symbol {
48    type Error = SymbolOverflowError;
49
50    #[inline]
51    fn try_from(value: u64) -> Result<Self, Self::Error> {
52        let id = u32::try_from(value)?;
53        Ok(id.into())
54    }
55}
56
57impl TryFrom<NonZeroU64> for Symbol {
58    type Error = SymbolOverflowError;
59
60    #[inline]
61    fn try_from(value: NonZeroU64) -> Result<Self, Self::Error> {
62        let id = u32::try_from(value.get())?;
63        Ok(id.into())
64    }
65}
66
67impl TryFrom<usize> for Symbol {
68    type Error = SymbolOverflowError;
69
70    #[inline]
71    fn try_from(value: usize) -> Result<Self, Self::Error> {
72        let id = u32::try_from(value)?;
73        Ok(id.into())
74    }
75}
76
77impl TryFrom<NonZeroUsize> for Symbol {
78    type Error = SymbolOverflowError;
79
80    #[inline]
81    fn try_from(value: NonZeroUsize) -> Result<Self, Self::Error> {
82        let id = u32::try_from(value.get())?;
83        Ok(id.into())
84    }
85}
86
87impl From<&u8> for Symbol {
88    #[inline]
89    fn from(id: &u8) -> Self {
90        Self((*id).into())
91    }
92}
93
94impl From<&NonZeroU8> for Symbol {
95    #[inline]
96    fn from(sym: &NonZeroU8) -> Self {
97        Self(sym.get().into())
98    }
99}
100
101impl From<&u16> for Symbol {
102    #[inline]
103    fn from(id: &u16) -> Self {
104        Self((*id).into())
105    }
106}
107
108impl From<&NonZeroU16> for Symbol {
109    #[inline]
110    fn from(sym: &NonZeroU16) -> Self {
111        Self(sym.get().into())
112    }
113}
114
115impl From<&u32> for Symbol {
116    #[inline]
117    fn from(id: &u32) -> Self {
118        Self(*id)
119    }
120}
121
122impl From<&NonZeroU32> for Symbol {
123    #[inline]
124    fn from(sym: &NonZeroU32) -> Self {
125        Self(sym.get())
126    }
127}
128
129impl TryFrom<&u64> for Symbol {
130    type Error = SymbolOverflowError;
131
132    #[inline]
133    fn try_from(value: &u64) -> Result<Self, Self::Error> {
134        let id = u32::try_from(*value)?;
135        Ok(id.into())
136    }
137}
138
139impl TryFrom<&NonZeroU64> for Symbol {
140    type Error = SymbolOverflowError;
141
142    #[inline]
143    fn try_from(value: &NonZeroU64) -> Result<Self, Self::Error> {
144        let id = u32::try_from(value.get())?;
145        Ok(id.into())
146    }
147}
148
149impl TryFrom<&usize> for Symbol {
150    type Error = SymbolOverflowError;
151
152    #[inline]
153    fn try_from(value: &usize) -> Result<Self, Self::Error> {
154        let id = u32::try_from(*value)?;
155        Ok(id.into())
156    }
157}
158
159impl TryFrom<&NonZeroUsize> for Symbol {
160    type Error = SymbolOverflowError;
161
162    #[inline]
163    fn try_from(value: &NonZeroUsize) -> Result<Self, Self::Error> {
164        let id = u32::try_from(value.get())?;
165        Ok(id.into())
166    }
167}
168
169impl From<Symbol> for u32 {
170    #[inline]
171    fn from(sym: Symbol) -> Self {
172        sym.id()
173    }
174}
175
176impl From<Symbol> for u64 {
177    #[inline]
178    fn from(sym: Symbol) -> Self {
179        sym.id().into()
180    }
181}
182
183impl From<Symbol> for usize {
184    #[inline]
185    fn from(sym: Symbol) -> Self {
186        qed::lossless_cast_u32_to_usize!(sym.id())
187    }
188}
189
190impl From<Symbol> for i64 {
191    #[inline]
192    fn from(sym: Symbol) -> Self {
193        sym.id().into()
194    }
195}
196
197impl From<&Symbol> for u32 {
198    #[inline]
199    fn from(sym: &Symbol) -> Self {
200        sym.id()
201    }
202}
203
204impl From<&Symbol> for u64 {
205    #[inline]
206    fn from(sym: &Symbol) -> Self {
207        sym.id().into()
208    }
209}
210
211impl From<&Symbol> for usize {
212    #[inline]
213    fn from(sym: &Symbol) -> Self {
214        (*sym).into()
215    }
216}
217
218impl From<&Symbol> for i64 {
219    #[inline]
220    fn from(sym: &Symbol) -> Self {
221        sym.id().into()
222    }
223}