Skip to main content

codama_nodes/
plugin_node.rs

1use crate::{CamelCaseString, PluginNode};
2use serde_json::Value;
3
4impl PluginNode {
5    pub fn new<T: Into<CamelCaseString>>(name: T) -> Self {
6        Self {
7            name: name.into(),
8            payload: None,
9        }
10    }
11
12    pub fn with_payload<T: Into<CamelCaseString>>(name: T, payload: Value) -> Self {
13        Self {
14            name: name.into(),
15            payload: Some(payload),
16        }
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23    use serde_json::json;
24
25    #[test]
26    fn new() {
27        let node = PluginNode::new("anchor");
28        assert_eq!(node.name, CamelCaseString::new("anchor"));
29        assert_eq!(node.payload, None);
30    }
31
32    #[test]
33    fn with_payload() {
34        let node = PluginNode::with_payload("anchor", json!({ "version": "0.30.0" }));
35        assert_eq!(node.name, CamelCaseString::new("anchor"));
36        assert_eq!(node.payload, Some(json!({ "version": "0.30.0" })));
37    }
38
39    #[test]
40    fn to_json() {
41        let node = PluginNode::new("anchor");
42        let json = serde_json::to_string(&node).unwrap();
43        assert_eq!(json, r#"{"kind":"pluginNode","name":"anchor"}"#);
44    }
45
46    #[test]
47    fn to_json_with_payload() {
48        let node = PluginNode::with_payload("anchor", json!({ "version": "0.30.0" }));
49        let json = serde_json::to_string(&node).unwrap();
50        assert_eq!(
51            json,
52            r#"{"kind":"pluginNode","name":"anchor","payload":{"version":"0.30.0"}}"#
53        );
54    }
55
56    #[test]
57    fn from_json() {
58        let json = r#"{"kind":"pluginNode","name":"anchor"}"#;
59        let node: PluginNode = serde_json::from_str(json).unwrap();
60        assert_eq!(node, PluginNode::new("anchor"));
61    }
62
63    #[test]
64    fn from_json_with_payload() {
65        let json = r#"{"kind":"pluginNode","name":"anchor","payload":{"version":"0.30.0"}}"#;
66        let node: PluginNode = serde_json::from_str(json).unwrap();
67        assert_eq!(
68            node,
69            PluginNode::with_payload("anchor", json!({ "version": "0.30.0" }))
70        );
71    }
72}