codama_nodes/link_nodes/
pda_link_node.rs1use 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}