codama_nodes/value_nodes/
some_value_node.rs

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