codama_nodes/contextual_value_nodes/
pda_seed_value_node.rs1use 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 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
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}