Skip to main content

codama_nodes/display_nodes/
instruction_display_node.rs

1use crate::InstructionDisplayNode;
2
3impl InstructionDisplayNode {
4    pub fn new<T>(intent: T) -> Self
5    where
6        T: Into<String>,
7    {
8        Self {
9            intent: Some(intent.into()),
10            ..Default::default()
11        }
12    }
13
14    pub fn interpolated<T>(interpolated_intent: T) -> Self
15    where
16        T: Into<String>,
17    {
18        Self {
19            interpolated_intent: Some(interpolated_intent.into()),
20            ..Default::default()
21        }
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn new() {
31        let node = InstructionDisplayNode::new("Transfer");
32        assert_eq!(node.intent.as_deref(), Some("Transfer"));
33        assert_eq!(node.interpolated_intent, None);
34    }
35
36    #[test]
37    fn interpolated() {
38        let node = InstructionDisplayNode::interpolated("Send {amount} to {to}");
39        assert_eq!(node.intent, None);
40        assert_eq!(
41            node.interpolated_intent.as_deref(),
42            Some("Send {amount} to {to}")
43        );
44    }
45
46    #[test]
47    fn to_json() {
48        let node = InstructionDisplayNode {
49            intent: Some("Transfer".to_string()),
50            interpolated_intent: Some("Send {amount} to {to}".to_string()),
51        };
52        let json = serde_json::to_string(&node).unwrap();
53        assert_eq!(
54            json,
55            r#"{"kind":"instructionDisplayNode","intent":"Transfer","interpolatedIntent":"Send {amount} to {to}"}"#
56        );
57    }
58
59    #[test]
60    fn from_json() {
61        let json = r#"{"kind":"instructionDisplayNode","intent":"Transfer"}"#;
62        let node: InstructionDisplayNode = serde_json::from_str(json).unwrap();
63        assert_eq!(node, InstructionDisplayNode::new("Transfer"));
64    }
65}