batch_mode_batch_schema/
batch_error_details.rs

1// ---------------- [ File: src/batch_error_details.rs ]
2crate::ix!();
3
4#[derive(Debug,Serialize,Deserialize)]
5pub struct BatchErrorDetails {
6    message:    String,
7
8    #[serde(rename = "type")]
9    error_type: ErrorType,
10    param:      Option<String>,
11    code:       Option<String>,
12}
13
14impl BatchErrorDetails {
15
16    pub fn message(&self) -> &str {
17        &self.message
18    }
19
20    pub fn error_type(&self) -> &ErrorType {
21        &self.error_type
22    }
23
24    pub fn param(&self) -> Option<&str> {
25        self.param.as_ref().map(|x| x.as_str())
26    }
27
28    pub fn code(&self) -> Option<&str> {
29        self.code.as_ref().map(|x| x.as_str())
30    }
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36    use serde_json::json;
37
38    #[test]
39    fn test_error_details_full() {
40        let json_data = json!({
41            "message": "Invalid parameters",
42            "type":    "parameter_error",
43            "param":   "query",
44            "code":    "invalid_query"
45        });
46
47        let error_details: BatchErrorDetails = serde_json::from_value(json_data).unwrap();
48        assert_eq!(error_details.message(), "Invalid parameters");
49        assert_eq!(error_details.error_type(), "parameter_error");
50        assert_eq!(error_details.param(), Some("query"));
51        assert_eq!(error_details.code(), Some("invalid_query"));
52    }
53
54    #[test]
55    fn test_error_details_missing_optional_fields() {
56        let json_data = json!({
57            "message": "Server error",
58            "type": "server_error"
59            // 'param' and 'code' are missing
60        });
61
62        let error_details: BatchErrorDetails = serde_json::from_value(json_data).unwrap();
63        assert_eq!(error_details.message(), "Server error");
64        assert_eq!(error_details.error_type(), "server_error");
65        assert_eq!(error_details.param(), None);
66        assert_eq!(error_details.code(), None);
67    }
68}