Skip to main content

zinq_schema/value/
mod.rs

1use std::fmt;
2
3mod array;
4mod number;
5mod object;
6
7pub use array::*;
8pub use number::*;
9pub use object::*;
10
11#[derive(Debug, Clone, PartialEq)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub enum Value {
14    Null,
15    Bool(bool),
16    Number(Number),
17    String(String),
18    Array(Array),
19    Object(Object),
20}
21
22impl fmt::Display for Value {
23    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24        return match self {
25            Self::Null => write!(f, "null"),
26            Self::Bool(v) => write!(f, "{}", v),
27            Self::Number(v) => write!(f, "{}", v),
28            Self::String(v) => write!(f, "\"{}\"", v),
29            Self::Array(v) => write!(f, "{}", v),
30            Self::Object(v) => write!(f, "{}", v),
31        };
32    }
33}
34
35impl From<Vec<Value>> for Value {
36    fn from(value: Vec<Value>) -> Self {
37        return Self::Array(Array::from(value));
38    }
39}
40
41impl From<&[Value]> for Value {
42    fn from(value: &[Value]) -> Self {
43        return Self::Array(Array::from(value));
44    }
45}
46
47impl From<bool> for Value {
48    fn from(value: bool) -> Self {
49        return Self::Bool(value);
50    }
51}
52
53impl From<&bool> for Value {
54    fn from(value: &bool) -> Self {
55        return Self::Bool(*value);
56    }
57}
58
59impl From<i64> for Value {
60    fn from(value: i64) -> Self {
61        return Self::Number(Number::from(value));
62    }
63}
64
65impl From<&i64> for Value {
66    fn from(value: &i64) -> Self {
67        return Self::Number(Number::from(*value));
68    }
69}