v_individual_model/onto/
datatype.rs1#[derive(Eq, PartialEq, Debug, Clone)]
2#[repr(u8)]
3pub enum DataType {
4 Uri = 1,
5 String = 2,
6 Integer = 4,
7 Datetime = 8,
8 Decimal = 32,
9 Boolean = 64,
10 Binary = 128,
11}
12
13impl DataType {
14 pub fn new_from_str(l: &str) -> Option<DataType> {
15 match l {
16 "Uri" => Some(DataType::Uri),
17 "String" => Some(DataType::String),
18 "Integer" => Some(DataType::Integer),
19 "Datetime" => Some(DataType::Datetime),
20 "Decimal" => Some(DataType::Decimal),
21 "Boolean" => Some(DataType::Boolean),
22 "Binary" => Some(DataType::Binary),
23 _ => None,
24 }
25 }
26
27 pub fn new_from_u64(l: u64) -> Option<DataType> {
28 match l {
29 1 => Some(DataType::Uri),
30 2 => Some(DataType::String),
31 4 => Some(DataType::Integer),
32 8 => Some(DataType::Datetime),
33 32 => Some(DataType::Decimal),
34 64 => Some(DataType::Boolean),
35 128 => Some(DataType::Binary),
36 _ => None,
37 }
38 }
39}
40
41#[derive(Eq, PartialEq, Debug, Clone)]
42pub struct Lang {
43 data: Option<String>,
44}
45
46impl Lang {
47 pub fn none() -> Lang {
48 Lang {
49 data: None,
50 }
51 }
52
53 pub fn is_some(&self) -> bool {
54 self.data.is_some()
55 }
56
57 pub fn new_from_str(l: &str) -> Lang {
58 let lu = l.to_uppercase();
59
60 if lu == "NONE" || lu == "UNDEFINED" {
61 Lang::none()
62 } else {
63 Lang {
64 data: Some(lu),
65 }
66 }
67 }
68
69 pub fn new_from_i64(l: i64) -> Lang {
70 match l {
71 1 => Lang {
72 data: Some("RU".to_owned()),
73 },
74 2 => Lang {
75 data: Some("EN".to_owned()),
76 },
77 _ => Lang::none(),
78 }
79 }
80
81 pub fn to_string(&self) -> &str {
82 if let Some(v) = &self.data {
83 v
84 } else {
85 "NONE"
86 }
87 }
88}
89
90pub fn exponent_to_scale(m: &i64, e: &i64) -> (i64, u32) {
91 let scale = if *e < 0 {
92 (*e * -1) as u32
93 } else {
94 0
95 };
96
97 let num = if *e > 0 {
98 *m * 10_i64.pow(*e as u32)
99 } else {
100 *m
101 };
102
103 (num, scale)
104}