v_common_onto/
datatype.rs1#[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 RU = 1,
47 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}