codama_nodes/value_nodes/
set_value_node.rs1use crate::ValueNode;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct SetValueNode {
6 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}