codama_nodes/contextual_value_nodes/
argument_value_node.rs

1use crate::CamelCaseString;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ArgumentValueNode {
6    // Data.
7    pub name: CamelCaseString,
8}
9
10impl From<ArgumentValueNode> for crate::Node {
11    fn from(val: ArgumentValueNode) -> Self {
12        crate::Node::ContextualValue(val.into())
13    }
14}
15
16impl ArgumentValueNode {
17    pub fn new<T>(name: T) -> Self
18    where
19        T: Into<CamelCaseString>,
20    {
21        Self { name: name.into() }
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn new() {
31        let node = ArgumentValueNode::new("my_argument");
32        assert_eq!(node.name, CamelCaseString::new("myArgument"));
33    }
34
35    #[test]
36    fn to_json() {
37        let node = ArgumentValueNode::new("myArgument");
38        let json = serde_json::to_string(&node).unwrap();
39        assert_eq!(json, r#"{"kind":"argumentValueNode","name":"myArgument"}"#);
40    }
41
42    #[test]
43    fn from_json() {
44        let json = r#"{"kind":"argumentValueNode","name":"myArgument"}"#;
45        let node: ArgumentValueNode = serde_json::from_str(json).unwrap();
46        assert_eq!(node, ArgumentValueNode::new("myArgument"));
47    }
48}