Skip to main content

codama_nodes/link_nodes/
account_link_node.rs

1use crate::{AccountLinkNode, CamelCaseString, ProgramLinkNode};
2
3impl AccountLinkNode {
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 AccountLinkNode {
26    fn from(name: String) -> Self {
27        Self::new(name)
28    }
29}
30
31impl From<&str> for AccountLinkNode {
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 = AccountLinkNode::new("my_account");
44        assert_eq!(node.name, CamelCaseString::new("myAccount"));
45    }
46
47    #[test]
48    fn new_from_program() {
49        let node =
50            AccountLinkNode::new_from_program("my_account", ProgramLinkNode::new("my_program"));
51        assert_eq!(node.name, CamelCaseString::new("myAccount"));
52        assert_eq!(node.program, Some(ProgramLinkNode::new("myProgram")));
53    }
54
55    #[test]
56    fn from_string() {
57        let node: AccountLinkNode = String::from("my_account").into();
58        assert_eq!(node.name, CamelCaseString::new("myAccount"));
59        assert_eq!(node.program, None);
60    }
61
62    #[test]
63    fn from_str() {
64        let node: AccountLinkNode = "my_account".into();
65        assert_eq!(node.name, CamelCaseString::new("myAccount"));
66        assert_eq!(node.program, None);
67    }
68
69    #[test]
70    fn to_json() {
71        let node = AccountLinkNode::new("myAccount");
72        let json = serde_json::to_string(&node).unwrap();
73        assert_eq!(json, r#"{"kind":"accountLinkNode","name":"myAccount"}"#);
74    }
75
76    #[test]
77    fn from_json() {
78        let json = r#"{"kind":"accountLinkNode","name":"myAccount"}"#;
79        let node: AccountLinkNode = serde_json::from_str(json).unwrap();
80        assert_eq!(node, AccountLinkNode::new("myAccount"));
81    }
82}