openpathresolver/types/
value.rs1use crate::types::TemplateAttributes;
2
3macro_rules! impl_from {
4 ($($e:ty: $t:ty => $v:ident),+ $(,)?) => {
5 $(impl From<$t> for $e {
6 fn from(value: $t) -> Self {
7 Self::$v(value.into())
8 }
9 })+
10 };
11}
12
13#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
15pub enum PathValue {
16 Integer(u16),
18 String(String),
20}
21
22impl_from!(
23 PathValue: &str => String,
24 PathValue: String => String,
25 PathValue: u8 => Integer,
26 PathValue: u16 => Integer,
27);
28
29#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
33pub enum TemplateValue {
34 None,
36 Bool(bool),
38 Integer(i64),
40 Float(f64),
42 String(String),
44 Array(Vec<TemplateValue>),
46 Object(TemplateAttributes),
48}
49
50impl_from!(
51 TemplateValue: bool => Bool,
52 TemplateValue: u8 => Integer,
53 TemplateValue: i8 => Integer,
54 TemplateValue: u16 => Integer,
55 TemplateValue: i16 => Integer,
56 TemplateValue: u32 => Integer,
57 TemplateValue: i32 => Integer,
58 TemplateValue: i64 => Integer,
59 TemplateValue: f32 => Float,
60 TemplateValue: f64 => Float,
61 TemplateValue: &str => String,
62 TemplateValue: String => String,
63 TemplateValue: Vec<TemplateValue> => Array,
64 TemplateValue: TemplateAttributes => Object,
65);
66
67impl TryFrom<u64> for TemplateValue {
68 type Error = crate::Error;
69
70 fn try_from(value: u64) -> Result<Self, Self::Error> {
71 Ok(Self::Integer(value.try_into()?))
72 }
73}
74
75#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
79pub enum MetadataValue {
80 None,
82 Bool(bool),
84 Integer(i64),
86 Float(f64),
88 String(String),
90 Array(Vec<MetadataValue>),
92 Object(std::collections::HashMap<String, MetadataValue>),
94}
95
96impl_from!(
97 MetadataValue: bool => Bool,
98 MetadataValue: u8 => Integer,
99 MetadataValue: i8 => Integer,
100 MetadataValue: u16 => Integer,
101 MetadataValue: i16 => Integer,
102 MetadataValue: u32 => Integer,
103 MetadataValue: i32 => Integer,
104 MetadataValue: i64 => Integer,
105 MetadataValue: f32 => Float,
106 MetadataValue: f64 => Float,
107 MetadataValue: &str => String,
108 MetadataValue: String => String,
109 MetadataValue: Vec<MetadataValue> => Array,
110 MetadataValue: std::collections::HashMap<String, MetadataValue> => Object,
111);
112
113impl TryFrom<u64> for MetadataValue {
114 type Error = crate::Error;
115
116 fn try_from(value: u64) -> Result<Self, Self::Error> {
117 Ok(Self::Integer(value.try_into()?))
118 }
119}