codama_nodes/
plugin_node.rs1use 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}