Skip to main content

v_common_onto/
datatype.rs

1#[derive(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(PartialEq, Debug, Clone)]
42#[repr(u8)]
43pub enum Lang {
44    NONE = 0,
45    /// Русский
46    RU = 1,
47    /// Английский
48    EN = 2,
49}
50
51impl Lang {
52    pub fn new_from_str(l: &str) -> Lang {
53        match l {
54            "ru" => Lang::RU,
55            "en" => Lang::EN,
56            _ => Lang::NONE,
57        }
58    }
59
60    pub fn new_from_i64(l: i64) -> Lang {
61        match l {
62            1 => Lang::RU,
63            2 => Lang::EN,
64            _ => Lang::NONE,
65        }
66    }
67
68    pub fn to_string(&self) -> &str {
69        match self {
70            Lang::RU => "ru",
71            Lang::EN => "en",
72            Lang::NONE => "none",
73        }
74    }
75}
76
77pub fn exponent_to_scale(m: &i64, e: &i64) -> (i64, u32) {
78    let scale = if *e < 0 {
79        (*e * -1) as u32
80    } else {
81        0
82    };
83
84    let num = if *e > 0 {
85        *m * 10_i64.pow(*e as u32)
86    } else {
87        *m
88    };
89
90    (num, scale)
91}