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