codama_nodes/contextual_value_nodes/
pda_seed_value_node.rs

1use crate::{
2    AccountValueNode, ArgumentValueNode, ArrayValueNode, BooleanValueNode, BytesValueNode,
3    CamelCaseString, ConstantValueNode, EnumValueNode, MapValueNode, NoneValueNode,
4    NumberValueNode, PublicKeyValueNode, SetValueNode, SomeValueNode, StringValueNode,
5    StructValueNode, TupleValueNode,
6};
7use codama_nodes_derive::{node, node_union};
8
9#[node]
10pub struct PdaSeedValueNode {
11    // Data.
12    pub name: CamelCaseString,
13
14    // Children.
15    pub value: PdaSeedValueValueNode,
16}
17
18impl From<PdaSeedValueNode> for crate::Node {
19    fn from(val: PdaSeedValueNode) -> Self {
20        crate::Node::ContextualValue(val.into())
21    }
22}
23
24impl PdaSeedValueNode {
25    pub fn new<T, U>(name: T, value: U) -> Self
26    where
27        T: Into<CamelCaseString>,
28        U: Into<PdaSeedValueValueNode>,
29    {
30        Self {
31            name: name.into(),
32            value: value.into(),
33        }
34    }
35}
36
37#[node_union]
38pub enum PdaSeedValueValueNode {
39    Account(AccountValueNode),
40    Argument(ArgumentValueNode),
41
42    // ValueNodes.
43    Array(ArrayValueNode),
44    Boolean(BooleanValueNode),
45    Bytes(BytesValueNode),
46    Constant(ConstantValueNode),
47    Enum(EnumValueNode),
48    Map(MapValueNode),
49    None(NoneValueNode),
50    Number(NumberValueNode),
51    PublicKey(PublicKeyValueNode),
52    Set(SetValueNode),
53    Some(SomeValueNode),
54    String(StringValueNode),
55    Struct(StructValueNode),
56    Tuple(TupleValueNode),
57}
58
59#[cfg(test)]
60mod tests {
61    use crate::NumberValueNode;
62
63    use super::*;
64
65    #[test]
66    fn new() {
67        let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
68        assert_eq!(node.name, CamelCaseString::from("answer"));
69        assert_eq!(
70            node.value,
71            PdaSeedValueValueNode::Number(NumberValueNode::new(42))
72        );
73    }
74
75    #[test]
76    fn to_json() {
77        let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
78        let json = serde_json::to_string(&node).unwrap();
79        assert_eq!(
80            json,
81            r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#
82        );
83    }
84
85    #[test]
86    fn from_json() {
87        let json: &str = r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#;
88        let node: PdaSeedValueNode = serde_json::from_str(json).unwrap();
89        assert_eq!(
90            node,
91            PdaSeedValueNode::new("answer", NumberValueNode::new(42u32))
92        );
93    }
94}