1use crate::object_format::property::property_type::PropertyType;
2
3use super::super::DataValue;
4
5#[derive(Clone, Debug)]
8pub enum DataValueInteger {
9 U8(u8),
10 I8(i8),
11 U16(u16),
12 I16(i16),
13 U32(u32),
14 I32(i32),
15 U64(u64),
16 I64(i64),
17 U128(u128),
18 I128(i128),
19 USIZE(usize),
20 ISIZE(isize),
21}
22
23impl DataValue for DataValueInteger {
24 fn serialize(&self, _: bool, _: usize) -> (PropertyType, String) {
25 match self {
26 Self::U8(inner) => (PropertyType::simple(String::from("u8")), inner.to_string()),
27 Self::I8(inner) => (PropertyType::simple(String::from("i8")), inner.to_string()),
28
29 Self::U16(inner) => (PropertyType::simple(String::from("u16")), inner.to_string()),
30 Self::I16(inner) => (PropertyType::simple(String::from("i16")), inner.to_string()),
31
32 Self::U32(inner) => (PropertyType::simple(String::from("u32")), inner.to_string()),
33 Self::I32(inner) => (PropertyType::simple(String::from("i32")), inner.to_string()),
34
35 Self::U64(inner) => (PropertyType::simple(String::from("u64")), inner.to_string()),
36 Self::I64(inner) => (PropertyType::simple(String::from("i64")), inner.to_string()),
37
38 Self::U128(inner) => (
39 PropertyType::simple(String::from("u128")),
40 inner.to_string(),
41 ),
42 Self::I128(inner) => (
43 PropertyType::simple(String::from("i128")),
44 inner.to_string(),
45 ),
46
47 Self::USIZE(inner) => (
48 PropertyType::simple(String::from("usize")),
49 inner.to_string(),
50 ),
51 Self::ISIZE(inner) => (
52 PropertyType::simple(String::from("isize")),
53 inner.to_string(),
54 ),
55 }
56 }
57
58 fn deserialize(
59 serialized_type: &crate::object_format::property::property_type::PropertyType,
60 serialized_value: &str,
61 ) -> Option<Box<dyn DataValue>>
62 where
63 Self: Sized,
64 {
65 if serialized_type.sub_types_included() {
66 return None;
67 }
68
69 match serialized_type.get_base_type() {
70 "u8" => {
71 if let Ok(parsed_int) = serialized_value.parse::<u8>() {
72 return Some(Box::new(Self::U8(parsed_int)));
73 } else {
74 return None;
75 }
76 }
77 "i8" => {
78 if let Ok(parsed_int) = serialized_value.parse::<i8>() {
79 return Some(Box::new(Self::I8(parsed_int)));
80 } else {
81 return None;
82 }
83 }
84
85 "u16" => {
86 if let Ok(parsed_int) = serialized_value.parse::<u16>() {
87 return Some(Box::new(Self::U16(parsed_int)));
88 } else {
89 return None;
90 }
91 }
92 "i16" => {
93 if let Ok(parsed_int) = serialized_value.parse::<i16>() {
94 return Some(Box::new(Self::I16(parsed_int)));
95 } else {
96 return None;
97 }
98 }
99
100 "u32" => {
101 if let Ok(parsed_int) = serialized_value.parse::<u32>() {
102 return Some(Box::new(Self::U32(parsed_int)));
103 } else {
104 return None;
105 }
106 }
107 "i32" => {
108 if let Ok(parsed_int) = serialized_value.parse::<i32>() {
109 return Some(Box::new(Self::I32(parsed_int)));
110 } else {
111 return None;
112 }
113 }
114
115 "u64" => {
116 if let Ok(parsed_int) = serialized_value.parse::<u64>() {
117 return Some(Box::new(Self::U64(parsed_int)));
118 } else {
119 return None;
120 }
121 }
122 "i64" => {
123 if let Ok(parsed_int) = serialized_value.parse::<i64>() {
124 return Some(Box::new(Self::I64(parsed_int)));
125 } else {
126 return None;
127 }
128 }
129
130 "u128" => {
131 if let Ok(parsed_int) = serialized_value.parse::<u128>() {
132 return Some(Box::new(Self::U128(parsed_int)));
133 } else {
134 return None;
135 }
136 }
137 "i128" => {
138 if let Ok(parsed_int) = serialized_value.parse::<i128>() {
139 return Some(Box::new(Self::I128(parsed_int)));
140 } else {
141 return None;
142 }
143 }
144
145 "usize" => {
146 if let Ok(parsed_int) = serialized_value.parse::<usize>() {
147 return Some(Box::new(Self::USIZE(parsed_int)));
148 } else {
149 return None;
150 }
151 }
152 "isize" => {
153 if let Ok(parsed_int) = serialized_value.parse::<isize>() {
154 return Some(Box::new(Self::ISIZE(parsed_int)));
155 } else {
156 return None;
157 }
158 }
159
160 _ => None,
161 }
162 }
163
164 fn clone_data_value(&self) -> Box<dyn DataValue> {
165 Box::new(match self {
166 Self::U8(value) => Self::U8(value.clone()),
167 Self::I8(value) => Self::I8(value.clone()),
168
169 Self::U16(value) => Self::U16(value.clone()),
170 Self::I16(value) => Self::I16(value.clone()),
171
172 Self::U32(value) => Self::U32(value.clone()),
173 Self::I32(value) => Self::I32(value.clone()),
174
175 Self::U64(value) => Self::U64(value.clone()),
176 Self::I64(value) => Self::I64(value.clone()),
177
178 Self::U128(value) => Self::U128(value.clone()),
179 Self::I128(value) => Self::I128(value.clone()),
180
181 Self::USIZE(value) => Self::USIZE(value.clone()),
182 Self::ISIZE(value) => Self::ISIZE(value.clone()),
183 })
184 }
185
186 fn as_f32(&self) -> f32 {
189 match self {
190 Self::U8(inner) => *inner as f32,
191 Self::I8(inner) => *inner as f32,
192 Self::U16(inner) => *inner as f32,
193 Self::I16(inner) => *inner as f32,
194 Self::U32(inner) => *inner as f32,
195 Self::I32(inner) => *inner as f32,
196 Self::U64(inner) => *inner as f32,
197 Self::I64(inner) => *inner as f32,
198 Self::U128(inner) => *inner as f32,
199 Self::I128(inner) => *inner as f32,
200 Self::USIZE(inner) => *inner as f32,
201 Self::ISIZE(inner) => *inner as f32,
202 }
203 }
204
205 fn as_f64(&self) -> f64 {
206 match self {
207 Self::U8(inner) => *inner as f64,
208 Self::I8(inner) => *inner as f64,
209 Self::U16(inner) => *inner as f64,
210 Self::I16(inner) => *inner as f64,
211 Self::U32(inner) => *inner as f64,
212 Self::I32(inner) => *inner as f64,
213 Self::U64(inner) => *inner as f64,
214 Self::I64(inner) => *inner as f64,
215 Self::U128(inner) => *inner as f64,
216 Self::I128(inner) => *inner as f64,
217 Self::USIZE(inner) => *inner as f64,
218 Self::ISIZE(inner) => *inner as f64,
219 }
220 }
221
222 fn as_u8(&self) -> u8 {
223 match self {
224 Self::U8(inner) => *inner,
225 Self::I8(inner) => *inner as u8,
226 Self::U16(inner) => *inner as u8,
227 Self::I16(inner) => *inner as u8,
228 Self::U32(inner) => *inner as u8,
229 Self::I32(inner) => *inner as u8,
230 Self::U64(inner) => *inner as u8,
231 Self::I64(inner) => *inner as u8,
232 Self::U128(inner) => *inner as u8,
233 Self::I128(inner) => *inner as u8,
234 Self::USIZE(inner) => *inner as u8,
235 Self::ISIZE(inner) => *inner as u8,
236 }
237 }
238
239 fn as_i8(&self) -> i8 {
240 match self {
241 Self::U8(inner) => *inner as i8,
242 Self::I8(inner) => *inner,
243 Self::U16(inner) => *inner as i8,
244 Self::I16(inner) => *inner as i8,
245 Self::U32(inner) => *inner as i8,
246 Self::I32(inner) => *inner as i8,
247 Self::U64(inner) => *inner as i8,
248 Self::I64(inner) => *inner as i8,
249 Self::U128(inner) => *inner as i8,
250 Self::I128(inner) => *inner as i8,
251 Self::USIZE(inner) => *inner as i8,
252 Self::ISIZE(inner) => *inner as i8,
253 }
254 }
255
256 fn as_u16(&self) -> u16 {
257 match self {
258 Self::U8(inner) => *inner as u16,
259 Self::I8(inner) => *inner as u16,
260 Self::U16(inner) => *inner,
261 Self::I16(inner) => *inner as u16,
262 Self::U32(inner) => *inner as u16,
263 Self::I32(inner) => *inner as u16,
264 Self::U64(inner) => *inner as u16,
265 Self::I64(inner) => *inner as u16,
266 Self::U128(inner) => *inner as u16,
267 Self::I128(inner) => *inner as u16,
268 Self::USIZE(inner) => *inner as u16,
269 Self::ISIZE(inner) => *inner as u16,
270 }
271 }
272
273 fn as_i16(&self) -> i16 {
274 match self {
275 Self::U8(inner) => *inner as i16,
276 Self::I8(inner) => *inner as i16,
277 Self::U16(inner) => *inner as i16,
278 Self::I16(inner) => *inner,
279 Self::U32(inner) => *inner as i16,
280 Self::I32(inner) => *inner as i16,
281 Self::U64(inner) => *inner as i16,
282 Self::I64(inner) => *inner as i16,
283 Self::U128(inner) => *inner as i16,
284 Self::I128(inner) => *inner as i16,
285 Self::USIZE(inner) => *inner as i16,
286 Self::ISIZE(inner) => *inner as i16,
287 }
288 }
289
290 fn as_u32(&self) -> u32 {
291 match self {
292 Self::U8(inner) => *inner as u32,
293 Self::I8(inner) => *inner as u32,
294 Self::U16(inner) => *inner as u32,
295 Self::I16(inner) => *inner as u32,
296 Self::U32(inner) => *inner,
297 Self::I32(inner) => *inner as u32,
298 Self::U64(inner) => *inner as u32,
299 Self::I64(inner) => *inner as u32,
300 Self::U128(inner) => *inner as u32,
301 Self::I128(inner) => *inner as u32,
302 Self::USIZE(inner) => *inner as u32,
303 Self::ISIZE(inner) => *inner as u32,
304 }
305 }
306
307 fn as_i32(&self) -> i32 {
308 match self {
309 Self::U8(inner) => *inner as i32,
310 Self::I8(inner) => *inner as i32,
311 Self::U16(inner) => *inner as i32,
312 Self::I16(inner) => *inner as i32,
313 Self::U32(inner) => *inner as i32,
314 Self::I32(inner) => *inner,
315 Self::U64(inner) => *inner as i32,
316 Self::I64(inner) => *inner as i32,
317 Self::U128(inner) => *inner as i32,
318 Self::I128(inner) => *inner as i32,
319 Self::USIZE(inner) => *inner as i32,
320 Self::ISIZE(inner) => *inner as i32,
321 }
322 }
323
324 fn as_u64(&self) -> u64 {
325 match self {
326 Self::U8(inner) => *inner as u64,
327 Self::I8(inner) => *inner as u64,
328 Self::U16(inner) => *inner as u64,
329 Self::I16(inner) => *inner as u64,
330 Self::U32(inner) => *inner as u64,
331 Self::I32(inner) => *inner as u64,
332 Self::U64(inner) => *inner,
333 Self::I64(inner) => *inner as u64,
334 Self::U128(inner) => *inner as u64,
335 Self::I128(inner) => *inner as u64,
336 Self::USIZE(inner) => *inner as u64,
337 Self::ISIZE(inner) => *inner as u64,
338 }
339 }
340
341 fn as_i64(&self) -> i64 {
342 match self {
343 Self::U8(inner) => *inner as i64,
344 Self::I8(inner) => *inner as i64,
345 Self::U16(inner) => *inner as i64,
346 Self::I16(inner) => *inner as i64,
347 Self::U32(inner) => *inner as i64,
348 Self::I32(inner) => *inner as i64,
349 Self::U64(inner) => *inner as i64,
350 Self::I64(inner) => *inner,
351 Self::U128(inner) => *inner as i64,
352 Self::I128(inner) => *inner as i64,
353 Self::USIZE(inner) => *inner as i64,
354 Self::ISIZE(inner) => *inner as i64,
355 }
356 }
357
358 fn as_u128(&self) -> u128 {
359 match self {
360 Self::U8(inner) => *inner as u128,
361 Self::I8(inner) => *inner as u128,
362 Self::U16(inner) => *inner as u128,
363 Self::I16(inner) => *inner as u128,
364 Self::U32(inner) => *inner as u128,
365 Self::I32(inner) => *inner as u128,
366 Self::U64(inner) => *inner as u128,
367 Self::I64(inner) => *inner as u128,
368 Self::U128(inner) => *inner,
369 Self::I128(inner) => *inner as u128,
370 Self::USIZE(inner) => *inner as u128,
371 Self::ISIZE(inner) => *inner as u128,
372 }
373 }
374
375 fn as_i128(&self) -> i128 {
376 match self {
377 Self::U8(inner) => *inner as i128,
378 Self::I8(inner) => *inner as i128,
379 Self::U16(inner) => *inner as i128,
380 Self::I16(inner) => *inner as i128,
381 Self::U32(inner) => *inner as i128,
382 Self::I32(inner) => *inner as i128,
383 Self::U64(inner) => *inner as i128,
384 Self::I64(inner) => *inner as i128,
385 Self::U128(inner) => *inner as i128,
386 Self::I128(inner) => *inner,
387 Self::USIZE(inner) => *inner as i128,
388 Self::ISIZE(inner) => *inner as i128,
389 }
390 }
391
392 fn as_usize(&self) -> usize {
393 match self {
394 Self::U8(inner) => *inner as usize,
395 Self::I8(inner) => *inner as usize,
396 Self::U16(inner) => *inner as usize,
397 Self::I16(inner) => *inner as usize,
398 Self::U32(inner) => *inner as usize,
399 Self::I32(inner) => *inner as usize,
400 Self::U64(inner) => *inner as usize,
401 Self::I64(inner) => *inner as usize,
402 Self::U128(inner) => *inner as usize,
403 Self::I128(inner) => *inner as usize,
404 Self::USIZE(inner) => *inner,
405 Self::ISIZE(inner) => *inner as usize,
406 }
407 }
408
409 fn as_isize(&self) -> isize {
410 match self {
411 Self::U8(inner) => *inner as isize,
412 Self::I8(inner) => *inner as isize,
413 Self::U16(inner) => *inner as isize,
414 Self::I16(inner) => *inner as isize,
415 Self::U32(inner) => *inner as isize,
416 Self::I32(inner) => *inner as isize,
417 Self::U64(inner) => *inner as isize,
418 Self::I64(inner) => *inner as isize,
419 Self::U128(inner) => *inner as isize,
420 Self::I128(inner) => *inner as isize,
421 Self::USIZE(inner) => *inner as isize,
422 Self::ISIZE(inner) => *inner,
423 }
424 }
425}