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