codama_nodes/contextual_value_nodes/
argument_value_node.rs1use crate::{CamelCaseString, HasName};
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ArgumentValueNode {
6 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
25impl HasName for ArgumentValueNode {
26 fn name(&self) -> &CamelCaseString {
27 &self.name
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn new() {
37 let node = ArgumentValueNode::new("my_argument");
38 assert_eq!(node.name, CamelCaseString::new("myArgument"));
39 }
40
41 #[test]
42 fn to_json() {
43 let node = ArgumentValueNode::new("myArgument");
44 let json = serde_json::to_string(&node).unwrap();
45 assert_eq!(json, r#"{"kind":"argumentValueNode","name":"myArgument"}"#);
46 }
47
48 #[test]
49 fn from_json() {
50 let json = r#"{"kind":"argumentValueNode","name":"myArgument"}"#;
51 let node: ArgumentValueNode = serde_json::from_str(json).unwrap();
52 assert_eq!(node, ArgumentValueNode::new("myArgument"));
53 }
54}