codama_nodes/pda_seed_nodes/
constant_pda_seed_node.rs

1use crate::{TypeNode, ValueNode};
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ConstantPdaSeedNode {
6    // Children.
7    pub r#type: TypeNode,
8    pub value: ValueNode,
9}
10
11impl From<ConstantPdaSeedNode> for crate::Node {
12    fn from(val: ConstantPdaSeedNode) -> Self {
13        crate::Node::PdaSeed(val.into())
14    }
15}
16
17impl ConstantPdaSeedNode {
18    pub fn new<T, U>(r#type: T, value: U) -> Self
19    where
20        T: Into<TypeNode>,
21        U: Into<ValueNode>,
22    {
23        Self {
24            r#type: r#type.into(),
25            value: value.into(),
26        }
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33    use crate::{NumberTypeNode, NumberValueNode, U64};
34
35    #[test]
36    fn new() {
37        let node = ConstantPdaSeedNode::new(NumberTypeNode::le(U64), NumberValueNode::new(42u64));
38        assert_eq!(node.r#type, TypeNode::Number(NumberTypeNode::le(U64)));
39        assert_eq!(node.value, ValueNode::Number(NumberValueNode::new(42u64)));
40    }
41
42    #[test]
43    fn to_json() {
44        let node = ConstantPdaSeedNode::new(NumberTypeNode::le(U64), NumberValueNode::new(42u64));
45        let json = serde_json::to_string(&node).unwrap();
46        assert_eq!(
47            json,
48            r#"{"kind":"constantPdaSeedNode","type":{"kind":"numberTypeNode","format":"u64","endian":"le"},"value":{"kind":"numberValueNode","number":42}}"#
49        );
50    }
51
52    #[test]
53    fn from_json() {
54        let json = r#"{"kind":"constantPdaSeedNode","type":{"kind":"numberTypeNode","format":"u64","endian":"le"},"value":{"kind":"numberValueNode","number":42}}"#;
55        let node: ConstantPdaSeedNode = serde_json::from_str(json).unwrap();
56        assert_eq!(
57            node,
58            ConstantPdaSeedNode::new(NumberTypeNode::le(U64), NumberValueNode::new(42u64))
59        );
60    }
61}