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, ValueNode,
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
37impl HasName for PdaSeedValueNode {
38 fn name(&self) -> &CamelCaseString {
39 &self.name
40 }
41}
42
43#[node_union]
44pub enum PdaSeedValueValueNode {
45 Account(AccountValueNode),
46 Argument(ArgumentValueNode),
47
48 Array(ArrayValueNode),
50 Boolean(BooleanValueNode),
51 Bytes(BytesValueNode),
52 Constant(ConstantValueNode),
53 Enum(EnumValueNode),
54 Map(MapValueNode),
55 None(NoneValueNode),
56 Number(NumberValueNode),
57 PublicKey(PublicKeyValueNode),
58 Set(SetValueNode),
59 Some(SomeValueNode),
60 String(StringValueNode),
61 Struct(StructValueNode),
62 Tuple(TupleValueNode),
63}
64
65impl From<ValueNode> for PdaSeedValueValueNode {
66 fn from(value: ValueNode) -> Self {
67 match value {
68 ValueNode::Array(value) => Self::Array(value),
69 ValueNode::Boolean(value) => Self::Boolean(value),
70 ValueNode::Bytes(value) => Self::Bytes(value),
71 ValueNode::Constant(value) => Self::Constant(value),
72 ValueNode::Enum(value) => Self::Enum(value),
73 ValueNode::Map(value) => Self::Map(value),
74 ValueNode::None(value) => Self::None(value),
75 ValueNode::Number(value) => Self::Number(value),
76 ValueNode::PublicKey(value) => Self::PublicKey(value),
77 ValueNode::Set(value) => Self::Set(value),
78 ValueNode::Some(value) => Self::Some(value),
79 ValueNode::String(value) => Self::String(value),
80 ValueNode::Struct(value) => Self::Struct(value),
81 ValueNode::Tuple(value) => Self::Tuple(value),
82 }
83 }
84}
85
86#[cfg(test)]
87mod tests {
88 use crate::NumberValueNode;
89
90 use super::*;
91
92 #[test]
93 fn new() {
94 let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
95 assert_eq!(node.name, CamelCaseString::from("answer"));
96 assert_eq!(
97 node.value,
98 PdaSeedValueValueNode::Number(NumberValueNode::new(42))
99 );
100 }
101
102 #[test]
103 fn to_json() {
104 let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
105 let json = serde_json::to_string(&node).unwrap();
106 assert_eq!(
107 json,
108 r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#
109 );
110 }
111
112 #[test]
113 fn from_json() {
114 let json: &str = r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#;
115 let node: PdaSeedValueNode = serde_json::from_str(json).unwrap();
116 assert_eq!(
117 node,
118 PdaSeedValueNode::new("answer", NumberValueNode::new(42u32))
119 );
120 }
121}