codama_nodes/contextual_value_nodes/
pda_seed_value_node.rs

1use crate::{
2    AccountValueNode, ArgumentValueNode, ArrayValueNode, BooleanValueNode, BytesValueNode,
3    CamelCaseString, ConstantValueNode, EnumValueNode, HasName, 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
59impl HasName for PdaSeedValueNode {
60    fn name(&self) -> &CamelCaseString {
61        &self.name
62    }
63}
64
65#[cfg(test)]
66mod tests {
67    use crate::NumberValueNode;
68
69    use super::*;
70
71    #[test]
72    fn new() {
73        let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
74        assert_eq!(node.name, CamelCaseString::from("answer"));
75        assert_eq!(
76            node.value,
77            PdaSeedValueValueNode::Number(NumberValueNode::new(42))
78        );
79    }
80
81    #[test]
82    fn to_json() {
83        let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
84        let json = serde_json::to_string(&node).unwrap();
85        assert_eq!(
86            json,
87            r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#
88        );
89    }
90
91    #[test]
92    fn from_json() {
93        let json: &str = r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#;
94        let node: PdaSeedValueNode = serde_json::from_str(json).unwrap();
95        assert_eq!(
96            node,
97            PdaSeedValueNode::new("answer", NumberValueNode::new(42u32))
98        );
99    }
100}