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