codama_nodes/
error_node.rs

1use crate::{CamelCaseString, Docs};
2use codama_nodes_derive::node;
3
4#[node]
5pub struct ErrorNode {
6    // Data.
7    pub name: CamelCaseString,
8    pub code: usize,
9    pub message: String,
10    #[serde(default)]
11    #[serde(skip_serializing_if = "Docs::is_empty")]
12    pub docs: Docs,
13}
14
15impl ErrorNode {
16    pub fn new<T, U>(name: T, code: usize, message: U) -> Self
17    where
18        T: Into<CamelCaseString>,
19        U: Into<String>,
20    {
21        Self {
22            name: name.into(),
23            code,
24            message: message.into(),
25            docs: Docs::default(),
26        }
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn new() {
36        let node = ErrorNode::new("myError", 42, "Something went wrong");
37        assert_eq!(node.name, CamelCaseString::new("myError"));
38        assert_eq!(node.code, 42);
39        assert_eq!(node.message, "Something went wrong".to_string());
40        assert_eq!(node.docs, Docs::default());
41    }
42
43    #[test]
44    fn direct_instantiation() {
45        let node = ErrorNode {
46            name: "myError".into(),
47            code: 42,
48            message: "Something went wrong".into(),
49            docs: Docs::default(),
50        };
51        assert_eq!(node.name, CamelCaseString::new("myError"));
52        assert_eq!(node.code, 42);
53        assert_eq!(node.message, "Something went wrong".to_string());
54        assert_eq!(node.docs, Docs::default());
55    }
56
57    #[test]
58    fn to_json() {
59        let node = ErrorNode::new("myError", 42, "Something went wrong");
60        let json = serde_json::to_string(&node).unwrap();
61        assert_eq!(
62            json,
63            r#"{"kind":"errorNode","name":"myError","code":42,"message":"Something went wrong"}"#
64        );
65    }
66
67    #[test]
68    fn from_json() {
69        let json =
70            r#"{"kind":"errorNode","name":"myError","code":42,"message":"Something went wrong"}"#;
71        let node: ErrorNode = serde_json::from_str(json).unwrap();
72        assert_eq!(node, ErrorNode::new("myError", 42, "Something went wrong"));
73    }
74}