Skip to main content

zinq_schema/value/
number.rs

1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5pub enum Number {
6    Int(i64),
7    Float(f64),
8}
9
10impl Number {
11    pub fn is_i64(&self) -> bool {
12        return match self {
13            Self::Int(_) => true,
14            _ => false,
15        };
16    }
17
18    pub fn is_f64(&self) -> bool {
19        return match self {
20            Self::Float(_) => true,
21            _ => false,
22        };
23    }
24
25    pub fn as_i64(&self) -> i64 {
26        return match self {
27            Self::Int(v) => *v,
28            Self::Float(v) => *v as i64,
29        };
30    }
31
32    pub fn as_f64(&self) -> f64 {
33        return match self {
34            Self::Int(v) => *v as f64,
35            Self::Float(v) => *v,
36        };
37    }
38}
39
40impl From<i64> for Number {
41    fn from(value: i64) -> Self {
42        return Self::Int(value);
43    }
44}
45
46impl From<&i64> for Number {
47    fn from(value: &i64) -> Self {
48        return Self::Int(*value);
49    }
50}
51
52impl Into<i64> for Number {
53    fn into(self) -> i64 {
54        return self.as_i64();
55    }
56}
57
58impl From<f64> for Number {
59    fn from(value: f64) -> Self {
60        return Self::Float(value);
61    }
62}
63
64impl From<&f64> for Number {
65    fn from(value: &f64) -> Self {
66        return Self::Float(*value);
67    }
68}
69
70impl Into<f64> for Number {
71    fn into(self) -> f64 {
72        return self.as_f64();
73    }
74}
75
76impl fmt::Display for Number {
77    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
78        return match self {
79            Self::Int(v) => write!(f, "{}", v),
80            Self::Float(v) => write!(f, "{}", v),
81        };
82    }
83}