zinq_schema/value/
number.rs1use 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}