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