Skip to main content

codama_nodes/link_nodes/
pda_link_node.rs

1use crate::{CamelCaseString, PdaLinkNode, ProgramLinkNode};
2
3impl PdaLinkNode {
4    pub fn new<T>(name: T) -> Self
5    where
6        T: Into<CamelCaseString>,
7    {
8        Self {
9            name: name.into(),
10            program: None,
11        }
12    }
13
14    pub fn new_from_program<T>(name: T, program: ProgramLinkNode) -> Self
15    where
16        T: Into<CamelCaseString>,
17    {
18        Self {
19            name: name.into(),
20            program: Some(program),
21        }
22    }
23}
24
25impl From<String> for PdaLinkNode {
26    fn from(name: String) -> Self {
27        Self::new(name)
28    }
29}
30
31impl From<&str> for PdaLinkNode {
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 = PdaLinkNode::new("my_pda");
44        assert_eq!(node.name, CamelCaseString::new("myPda"));
45    }
46
47    #[test]
48    fn new_from_program() {
49        let node = PdaLinkNode::new_from_program("my_pda", ProgramLinkNode::new("my_program"));
50        assert_eq!(node.name, CamelCaseString::new("myPda"));
51        assert_eq!(node.program, Some(ProgramLinkNode::new("myProgram")));
52    }
53
54    #[test]
55    fn from_string() {
56        let node: PdaLinkNode = String::from("my_pda").into();
57        assert_eq!(node.name, CamelCaseString::new("myPda"));
58        assert_eq!(node.program, None);
59    }
60
61    #[test]
62    fn from_str() {
63        let node: PdaLinkNode = "my_pda".into();
64        assert_eq!(node.name, CamelCaseString::new("myPda"));
65        assert_eq!(node.program, None);
66    }
67
68    #[test]
69    fn to_json() {
70        let node = PdaLinkNode::new("myPda");
71        let json = serde_json::to_string(&node).unwrap();
72        assert_eq!(json, r#"{"kind":"pdaLinkNode","name":"myPda"}"#);
73    }
74
75    #[test]
76    fn from_json() {
77        let json = r#"{"kind":"pdaLinkNode","name":"myPda"}"#;
78        let node: PdaLinkNode = serde_json::from_str(json).unwrap();
79        assert_eq!(node, PdaLinkNode::new("myPda"));
80    }
81}