v_individual_model/onto/
datatype.rs

1#[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}