codama_nodes/value_nodes/
public_key_value_node.rs1use crate::CamelCaseString;
2use codama_nodes_derive::node;
3
4#[node]
5pub struct PublicKeyValueNode {
6 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}