codama_nodes/value_nodes/
map_value_node.rs1use 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}