codama_nodes/value_nodes/
set_value_node.rs

1use crate::ValueNode;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct SetValueNode {
6    // Children.
7    pub items: Vec<ValueNode>,
8}
9
10impl From<SetValueNode> for crate::Node {
11    fn from(val: SetValueNode) -> Self {
12        crate::Node::Value(val.into())
13    }
14}
15
16impl SetValueNode {
17    pub fn new(items: Vec<ValueNode>) -> Self {
18        Self { items }
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use crate::NumberValueNode;
25
26    use super::*;
27
28    #[test]
29    fn new() {
30        let node = SetValueNode::new(vec![
31            NumberValueNode::new(1).into(),
32            NumberValueNode::new(2).into(),
33            NumberValueNode::new(3).into(),
34        ]);
35        assert_eq!(
36            node.items,
37            vec![
38                ValueNode::Number(NumberValueNode::new(1)),
39                ValueNode::Number(NumberValueNode::new(2)),
40                ValueNode::Number(NumberValueNode::new(3)),
41            ]
42        );
43    }
44
45    #[test]
46    fn to_json() {
47        let node = SetValueNode::new(vec![NumberValueNode::new(42u32).into()]);
48        let json = serde_json::to_string(&node).unwrap();
49        assert_eq!(
50            json,
51            r#"{"kind":"setValueNode","items":[{"kind":"numberValueNode","number":42}]}"#
52        );
53    }
54
55    #[test]
56    fn from_json() {
57        let json = r#"{"kind":"setValueNode","items":[{"kind":"numberValueNode","number":42}]}"#;
58        let node: SetValueNode = serde_json::from_str(json).unwrap();
59        assert_eq!(
60            node,
61            SetValueNode::new(vec![NumberValueNode::new(42u32).into()])
62        );
63    }
64}