Skip to main content

codama_nodes/
pda_node.rs

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","seeds":[]}"#);
70    }
71
72    #[test]
73    fn from_json() {
74        let json = r#"{"kind":"pdaNode","name":"myPda","seeds":[]}"#;
75        let node: PdaNode = serde_json::from_str(json).unwrap();
76        assert_eq!(node, PdaNode::new("myPda", vec![]));
77    }
78}