codama_nodes/value_nodes/
some_value_node.rs1use crate::ValueNode;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct SomeValueNode {
6 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}