spinoso_symbol/
convert.rs1use 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}