1use crate::{CamelCaseString, Docs, PdaNode, PdaSeedNode};
2
3impl PdaNode {
4 pub fn new<T>(name: T, seeds: Vec<PdaSeedNode>) -> Self
5 where
6 T: Into<CamelCaseString>,
7 {
8 Self {
9 name: name.into(),
10 docs: Docs::default(),
11 program_id: None,
12 seeds,
13 }
14 }
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20 use crate::{
21 ConstantPdaSeedNode, NumberTypeNode, NumberValueNode, PublicKeyTypeNode,
22 VariablePdaSeedNode, U8,
23 };
24
25 #[test]
26 fn new() {
27 let node = PdaNode::new(
28 "associatedToken",
29 vec![
30 VariablePdaSeedNode::new("owner", PublicKeyTypeNode::new()).into(),
31 ConstantPdaSeedNode::new(NumberTypeNode::le(U8), NumberValueNode::new(42u8)).into(),
32 VariablePdaSeedNode::new("mint", PublicKeyTypeNode::new()).into(),
33 ],
34 );
35 assert_eq!(node.name, CamelCaseString::new("associatedToken"));
36 assert_eq!(node.docs, Docs::default());
37 assert_eq!(node.program_id, None);
38 assert_eq!(
39 node.seeds,
40 vec![
41 PdaSeedNode::Variable(VariablePdaSeedNode::new("owner", PublicKeyTypeNode::new())),
42 PdaSeedNode::Constant(ConstantPdaSeedNode::new(
43 NumberTypeNode::le(U8),
44 NumberValueNode::new(42u8)
45 )),
46 PdaSeedNode::Variable(VariablePdaSeedNode::new("mint", PublicKeyTypeNode::new())),
47 ]
48 );
49 }
50
51 #[test]
52 fn direct_instantiation() {
53 let node = PdaNode {
54 name: "myPda".into(),
55 docs: Docs::default(),
56 program_id: Some("1234..5678".into()),
57 seeds: vec![],
58 };
59 assert_eq!(node.name, CamelCaseString::new("myPda"));
60 assert_eq!(node.docs, Docs::default());
61 assert_eq!(node.program_id, Some("1234..5678".into()));
62 assert_eq!(node.seeds, vec![]);
63 }
64
65 #[test]
66 fn to_json() {
67 let node = PdaNode::new("myPda", vec![]);
68 let json = serde_json::to_string(&node).unwrap();
69 assert_eq!(json, r#"{"kind":"pdaNode","name":"myPda"}"#);
71 }
72
73 #[test]
74 fn from_json() {
75 let json = r#"{"kind":"pdaNode","name":"myPda"}"#;
77 let node: PdaNode = serde_json::from_str(json).unwrap();
78 assert_eq!(node, PdaNode::new("myPda", vec![]));
79 }
80}