Skip to main content

codama_nodes/contextual_value_nodes/
pda_seed_value_node.rs

1use crate::{CamelCaseString, PdaSeedValueNode, PdaSeedValueValue, ValueNode};
2
3impl PdaSeedValueNode {
4    pub fn new<T, U>(name: T, value: U) -> Self
5    where
6        T: Into<CamelCaseString>,
7        U: Into<PdaSeedValueValue>,
8    {
9        Self {
10            name: name.into(),
11            value: Box::new(value.into()),
12        }
13    }
14}
15
16/// Bridge from the broader `ValueNode` union into `PdaSeedValueValue`.
17/// `PdaSeedValueValue` is `accountValueNode | argumentValueNode | valueNode`
18/// (17 variants total) — every value-node leaf maps to its same-named
19/// `PdaSeedValueValue` variant.
20impl From<ValueNode> for PdaSeedValueValue {
21    fn from(value: ValueNode) -> Self {
22        match value {
23            ValueNode::Array(value) => Self::Array(value),
24            ValueNode::Boolean(value) => Self::Boolean(value),
25            ValueNode::Bytes(value) => Self::Bytes(value),
26            ValueNode::Constant(value) => Self::Constant(value),
27            ValueNode::Enum(value) => Self::Enum(value),
28            ValueNode::Injected(value) => Self::Injected(value),
29            ValueNode::Map(value) => Self::Map(value),
30            ValueNode::None(value) => Self::None(value),
31            ValueNode::Number(value) => Self::Number(value),
32            ValueNode::PublicKey(value) => Self::PublicKey(value),
33            ValueNode::Set(value) => Self::Set(value),
34            ValueNode::Some(value) => Self::Some(value),
35            ValueNode::String(value) => Self::String(value),
36            ValueNode::Struct(value) => Self::Struct(value),
37            ValueNode::Tuple(value) => Self::Tuple(value),
38        }
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45    use crate::NumberValueNode;
46
47    #[test]
48    fn new() {
49        let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
50        assert_eq!(node.name, CamelCaseString::from("answer"));
51        assert_eq!(
52            *node.value,
53            PdaSeedValueValue::Number(NumberValueNode::new(42))
54        );
55    }
56
57    #[test]
58    fn to_json() {
59        let node = PdaSeedValueNode::new("answer", NumberValueNode::new(42));
60        let json = serde_json::to_string(&node).unwrap();
61        assert_eq!(
62            json,
63            r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#
64        );
65    }
66
67    #[test]
68    fn from_json() {
69        let json: &str = r#"{"kind":"pdaSeedValueNode","name":"answer","value":{"kind":"numberValueNode","number":42}}"#;
70        let node: PdaSeedValueNode = serde_json::from_str(json).unwrap();
71        assert_eq!(
72            node,
73            PdaSeedValueNode::new("answer", NumberValueNode::new(42u32))
74        );
75    }
76}