codama_nodes/contextual_value_nodes/
pda_seed_value_node.rs1use 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 pub name: CamelCaseString,
13
14 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 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}