Skip to main content

MatiOS_SDK/
typed_value.rs

1use alloc::boxed::Box;
2use alloc::string::String;
3use crate::uuid::Uuid;
4
5pub struct TypedValue {
6    value_type: usize,
7    value: usize,
8}
9impl TypedValue {
10    pub fn null() -> TypedValue {
11        TypedValue {
12            value_type: 0,
13            value: 0,
14        }
15    }
16    pub fn bool(value: bool) -> TypedValue {
17        TypedValue {
18            value_type: 1,
19            value: value as usize,
20        }
21    }
22    pub fn u8(value: u8) -> TypedValue {
23        TypedValue {
24            value_type: 2,
25            value: value as usize,
26        }
27    }
28    pub fn i8(value: i8) -> TypedValue {
29        TypedValue {
30            value_type: 3,
31            value: value as usize,
32        }
33    }
34
35    pub fn u16(value: u16) -> TypedValue {
36        TypedValue {
37            value_type: 4,
38            value: value as usize,
39        }
40    }
41    pub fn i16(value: i16) -> TypedValue {
42        TypedValue {
43            value_type: 5,
44            value: value as usize,
45        }
46    }
47
48    pub fn u32(value: u32) -> TypedValue {
49        TypedValue {
50            value_type: 6,
51            value: value as usize,
52        }
53    }
54    pub fn i32(value: i32) -> TypedValue {
55        TypedValue {
56            value_type: 7,
57            value: value as usize,
58        }
59    }
60    pub fn u64(value: u64) -> TypedValue {
61        TypedValue {
62            value_type: 8,
63            value: value as usize,
64        }
65    }
66    pub fn i64(value: i64) -> TypedValue {
67        TypedValue {
68            value_type: 9,
69            value: value as usize,
70        }
71    }
72    pub fn uuid(value: Uuid) -> TypedValue {
73        TypedValue {
74            value_type: 10,
75            value: unsafe{Box::into_raw(Box::from(value)) as *const u8 as usize},
76        }
77    }
78    pub fn string(value: String) -> TypedValue {
79        TypedValue {
80            value_type: 11,
81            value: unsafe{Box::into_raw(Box::from(value)) as *const String as usize},
82        }
83    }
84    pub fn to_string_verbose(&self)->String{
85        if(self.value_type == 0){
86            return String::from("null");
87        }else if(self.value_type == 11){
88            return unsafe{(*((self.value as *const String))).clone()};
89        }
90        else{
91            return String::from("other type TODO");
92        }
93    }
94}