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