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