1use std::collections::HashMap;
2
3#[derive(Clone, Debug)]
8pub enum Value {
9 Unit,
10 Bool(bool),
11 Numeric(Numeric),
12 String(String),
13 Collection(Collection),
14 Option(Box<Option<Value>>),
15 Tuple(Vec<Value>),
16 Struct(Struct),
17 TupleStruct(TupleStruct),
18 Variant(Variant),
19}
20
21
22#[derive(Clone, Debug)]
23pub enum Numeric {
24 I64(i64),
25 I128(i128),
26 U64(u64),
27 U128(u128),
28 F64(f64),
29}
30
31
32#[derive(Clone, Debug)]
33pub enum Collection {
34 Map(HashMap<String, Value>),
35 Vec(Vec<Value>),
36}
37
38
39#[derive(Clone, Debug)]
40pub struct Struct {
41 pub type_name: String,
42 pub data: HashMap<String, Value>,
43}
44
45#[derive(Clone, Debug)]
46pub struct TupleStruct {
47 pub type_name: String,
48 pub data: Vec<Value>,
49}
50
51#[derive(Clone, Debug)]
52pub enum Variant {
53 TupleVariant {
54 type_name: String,
55 variant_name: String,
56 data: Vec<Value>
57 },
58 StructVariant {
59 type_name: String,
60 variant_name: String,
61 data: HashMap<String, Value>
62 },
63 UnitVariant {
64 type_name: String,
65 variant_name: String,
66 }
67}
68