codama_nodes/value_nodes/
public_key_value_node.rs

1use crate::CamelCaseString;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct PublicKeyValueNode {
6    // Data.
7    pub public_key: String,
8    #[serde(skip_serializing_if = "crate::is_default")]
9    pub identifier: Option<CamelCaseString>,
10}
11
12impl From<PublicKeyValueNode> for crate::Node {
13    fn from(val: PublicKeyValueNode) -> Self {
14        crate::Node::Value(val.into())
15    }
16}
17
18impl PublicKeyValueNode {
19    pub fn new<T>(public_key: T) -> Self
20    where
21        T: Into<String>,
22    {
23        Self {
24            public_key: public_key.into(),
25            identifier: None,
26        }
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn new() {
36        let node = PublicKeyValueNode::new("6QTRDBBuSgBomH6h5VoKqrw6XZ1ESd7x2dj7ixHc3LWm");
37        assert_eq!(
38            node.public_key,
39            "6QTRDBBuSgBomH6h5VoKqrw6XZ1ESd7x2dj7ixHc3LWm".to_string()
40        );
41        assert_eq!(node.identifier, None);
42    }
43
44    #[test]
45    fn direct_instantiation() {
46        let node = PublicKeyValueNode {
47            public_key: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".into(),
48            identifier: Some("spl_token".into()),
49        };
50        assert_eq!(
51            node.public_key,
52            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA".to_string()
53        );
54        assert_eq!(node.identifier, Some(CamelCaseString::new("splToken")));
55    }
56
57    #[test]
58    fn to_json() {
59        let node = PublicKeyValueNode::new("6QTRDBBuSgBomH6h5VoKqrw6XZ1ESd7x2dj7ixHc3LWm");
60        let json = serde_json::to_string(&node).unwrap();
61        assert_eq!(
62            json,
63            r#"{"kind":"publicKeyValueNode","publicKey":"6QTRDBBuSgBomH6h5VoKqrw6XZ1ESd7x2dj7ixHc3LWm"}"#
64        );
65    }
66
67    #[test]
68    fn from_json() {
69        let json = r#"{"kind":"publicKeyValueNode","publicKey":"6QTRDBBuSgBomH6h5VoKqrw6XZ1ESd7x2dj7ixHc3LWm"}"#;
70        let node: PublicKeyValueNode = serde_json::from_str(json).unwrap();
71        assert_eq!(
72            node,
73            PublicKeyValueNode::new("6QTRDBBuSgBomH6h5VoKqrw6XZ1ESd7x2dj7ixHc3LWm")
74        );
75    }
76}