drasi_core/evaluation/variable_value/
ser.rs1use super::VariableValue;
16use serde::ser::{Serialize, Serializer};
17
18impl Serialize for VariableValue {
19 #[inline]
20 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
21 where
22 S: Serializer,
23 {
24 match self {
25 VariableValue::Null => serializer.serialize_unit(),
26 VariableValue::Bool(v) => serializer.serialize_bool(*v),
27 VariableValue::Integer(v) => serializer.serialize_i64(match v.as_i64() {
28 Some(v) => v,
29 None => return Err(serde::ser::Error::custom("Integer overflow")),
30 }),
31 VariableValue::Float(v) => serializer.serialize_f64(match v.as_f64() {
32 Some(v) => v,
33 None => return Err(serde::ser::Error::custom("Float overflow")),
34 }),
35 VariableValue::String(s) => serializer.serialize_str(s),
36 VariableValue::List(v) => v.serialize(serializer),
37 VariableValue::Object(m) => {
38 use serde::ser::SerializeMap;
39 let mut map = serializer.serialize_map(Some(m.len()))?;
40 for (k, v) in m {
41 let _ = map.serialize_entry(k, v);
42 }
43 map.end()
44 }
45 VariableValue::Date(v) => v.serialize(serializer),
46 VariableValue::LocalTime(v) => v.serialize(serializer),
47 VariableValue::ZonedTime(_v) => todo!(),
48 VariableValue::LocalDateTime(v) => v.serialize(serializer),
49 VariableValue::ZonedDateTime(v) => v.serialize(serializer),
50 VariableValue::Duration(_v) => todo!(),
51 VariableValue::Expression(_v) => todo!(),
52 VariableValue::ListRange(_v) => todo!(),
53 VariableValue::Element(_) => todo!(),
54 VariableValue::ElementMetadata(_m) => todo!(),
55 VariableValue::ElementReference(_) => todo!(),
56 VariableValue::Awaiting => todo!(),
57 }
58 }
59}