codama_nodes/link_nodes/
program_link_node.rs1use crate::CamelCaseString;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ProgramLinkNode {
6 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}