Skip to main content

codama_nodes/value_nodes/
struct_value_node.rs

1use crate::{StructFieldValueNode, StructValueNode};
2
3impl StructValueNode {
4    pub fn new(fields: Vec<StructFieldValueNode>) -> Self {
5        Self { fields }
6    }
7}
8
9impl From<Vec<StructFieldValueNode>> for StructValueNode {
10    fn from(items: Vec<StructFieldValueNode>) -> 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 = StructValueNode::new(vec![
23            StructFieldValueNode::new("name", StringValueNode::new("Alice")),
24            StructFieldValueNode::new("age", NumberValueNode::new(42)),
25        ]);
26        assert_eq!(
27            node.fields,
28            vec![
29                StructFieldValueNode::new("name", ValueNode::String(StringValueNode::new("Alice"))),
30                StructFieldValueNode::new("age", ValueNode::Number(NumberValueNode::new(42))),
31            ]
32        );
33    }
34
35    #[test]
36    fn from_vec() {
37        let node: StructValueNode = vec![
38            StructFieldValueNode::new("name", StringValueNode::new("Alice")),
39            StructFieldValueNode::new("age", NumberValueNode::new(42)),
40        ]
41        .into();
42        assert_eq!(
43            node.fields,
44            vec![
45                StructFieldValueNode::new("name", ValueNode::String(StringValueNode::new("Alice"))),
46                StructFieldValueNode::new("age", ValueNode::Number(NumberValueNode::new(42))),
47            ]
48        );
49    }
50
51    #[test]
52    fn to_json() {
53        let node = StructValueNode::new(vec![StructFieldValueNode::new(
54            "answer",
55            NumberValueNode::new(42),
56        )]);
57        let json = serde_json::to_string(&node).unwrap();
58        assert_eq!(
59            json,
60            r#"{"kind":"structValueNode","fields":[{"kind":"structFieldValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}]}"#
61        );
62    }
63
64    #[test]
65    fn from_json() {
66        let json = r#"{"kind":"structValueNode","fields":[{"kind":"structFieldValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}]}"#;
67        let node: StructValueNode = serde_json::from_str(json).unwrap();
68        assert_eq!(
69            node,
70            StructValueNode::new(vec![StructFieldValueNode::new(
71                "answer",
72                NumberValueNode::new(42u32),
73            )])
74        );
75    }
76}