Skip to main content

codama_nodes/value_nodes/
map_value_node.rs

1use crate::{MapEntryValueNode, MapValueNode};
2
3impl MapValueNode {
4    pub fn new(entries: Vec<MapEntryValueNode>) -> Self {
5        Self { entries }
6    }
7}
8
9impl From<Vec<MapEntryValueNode>> for MapValueNode {
10    fn from(items: Vec<MapEntryValueNode>) -> Self {
11        Self::new(items)
12    }
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18    use crate::{NumberValueNode, StringValueNode, ValueNode};
19
20    #[test]
21    fn new() {
22        let node = MapValueNode::new(vec![
23            MapEntryValueNode::new(StringValueNode::new("Alice"), NumberValueNode::new(180)),
24            MapEntryValueNode::new(StringValueNode::new("Bob"), NumberValueNode::new(125)),
25        ]);
26        assert_eq!(
27            node.entries,
28            vec![
29                MapEntryValueNode::new(
30                    ValueNode::String(StringValueNode::new("Alice")),
31                    ValueNode::Number(NumberValueNode::new(180))
32                ),
33                MapEntryValueNode::new(
34                    ValueNode::String(StringValueNode::new("Bob")),
35                    ValueNode::Number(NumberValueNode::new(125))
36                ),
37            ]
38        );
39    }
40
41    #[test]
42    fn from_vec() {
43        let node: MapValueNode = vec![MapEntryValueNode::new(
44            StringValueNode::new("answer"),
45            NumberValueNode::new(42),
46        )]
47        .into();
48        assert_eq!(
49            node.entries,
50            vec![MapEntryValueNode::new(
51                StringValueNode::new("answer"),
52                NumberValueNode::new(42),
53            )]
54        );
55    }
56
57    #[test]
58    fn to_json() {
59        let node = MapValueNode::new(vec![MapEntryValueNode::new(
60            StringValueNode::new("answer"),
61            NumberValueNode::new(42),
62        )]);
63        let json = serde_json::to_string(&node).unwrap();
64        assert_eq!(
65            json,
66            r#"{"kind":"mapValueNode","entries":[{"kind":"mapEntryValueNode","key":{"kind":"stringValueNode","string":"answer"},"value":{"kind":"numberValueNode","number":42}}]}"#
67        );
68    }
69
70    #[test]
71    fn from_json() {
72        let json = r#"{"kind":"mapValueNode","entries":[{"kind":"mapEntryValueNode","key":{"kind":"stringValueNode","string":"answer"},"value":{"kind":"numberValueNode","number":42}}]}"#;
73        let node: MapValueNode = serde_json::from_str(json).unwrap();
74        assert_eq!(
75            node,
76            MapValueNode::new(vec![MapEntryValueNode::new(
77                StringValueNode::new("answer"),
78                NumberValueNode::new(42u32),
79            )])
80        );
81    }
82}