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}