codama_nodes/link_nodes/
program_link_node.rs

1use crate::CamelCaseString;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ProgramLinkNode {
6    // Data.
7    pub name: CamelCaseString,
8}
9
10impl From<ProgramLinkNode> for crate::Node {
11    fn from(val: ProgramLinkNode) -> Self {
12        crate::Node::Link(val.into())
13    }
14}
15
16impl ProgramLinkNode {
17    pub fn new<T>(name: T) -> Self
18    where
19        T: Into<CamelCaseString>,
20    {
21        Self { name: name.into() }
22    }
23}
24
25impl From<String> for ProgramLinkNode {
26    fn from(name: String) -> Self {
27        Self::new(name)
28    }
29}
30
31impl From<&str> for ProgramLinkNode {
32    fn from(name: &str) -> Self {
33        Self::new(name)
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn new() {
43        let node = ProgramLinkNode::new("my_program");
44        assert_eq!(node.name, CamelCaseString::new("myProgram"));
45    }
46
47    #[test]
48    fn from_string() {
49        let node: ProgramLinkNode = String::from("my_program").into();
50        assert_eq!(node.name, CamelCaseString::new("myProgram"));
51    }
52
53    #[test]
54    fn from_str() {
55        let node: ProgramLinkNode = "my_program".into();
56        assert_eq!(node.name, CamelCaseString::new("myProgram"));
57    }
58
59    #[test]
60    fn to_json() {
61        let node = ProgramLinkNode::new("myProgram");
62        let json = serde_json::to_string(&node).unwrap();
63        assert_eq!(json, r#"{"kind":"programLinkNode","name":"myProgram"}"#);
64    }
65
66    #[test]
67    fn from_json() {
68        let json = r#"{"kind":"programLinkNode","name":"myProgram"}"#;
69        let node: ProgramLinkNode = serde_json::from_str(json).unwrap();
70        assert_eq!(node, ProgramLinkNode::new("myProgram"));
71    }
72}