mon_core/
serialization.rs1use crate::ast::{Member, MonValue, MonValueKind};
2use serde::Serialize;
3use std::collections::BTreeMap;
4
5#[derive(Debug, Clone, PartialEq, Serialize)]
6#[serde(untagged)]
7pub enum Value {
8 String(String),
9 Number(f64),
10 Boolean(bool),
11 Null,
12 Array(Vec<Value>),
13 Object(BTreeMap<String, Value>),
14}
15
16pub(crate) fn to_value(mon_value: &MonValue) -> Value {
17 match &mon_value.kind {
18 MonValueKind::String(s) => Value::String(s.clone()),
19 MonValueKind::Number(n) => Value::Number(*n),
20 MonValueKind::Boolean(b) => Value::Boolean(*b),
21 MonValueKind::Array(arr) => Value::Array(arr.iter().map(to_value).collect()),
22 MonValueKind::Object(obj) => {
23 let mut map = BTreeMap::new();
24 for member in obj {
25 if let Member::Pair(pair) = member {
26 map.insert(pair.key.clone(), to_value(&pair.value));
29 }
30 }
31 Value::Object(map)
32 }
33 MonValueKind::Null
36 | MonValueKind::Alias(_)
37 | MonValueKind::EnumValue { .. }
38 | MonValueKind::ArraySpread(_) => Value::Null, }
40}