Skip to main content

codama_nodes/link_nodes/
program_link_node.rs

1use 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}