bnr_xfs/callback_response/
status.rs1use std::fmt;
2
3use crate::{create_xfs_i4, impl_xfs_struct};
4
5create_xfs_i4!(
6 CallbackStatus,
7 "status",
8 r#"Represents the identification ID for a particular callback operation.
9
10This uniquely identifies the specific call that was made."#
11);
12
13create_xfs_i4!(
14 CallbackResult,
15 "result",
16 "Represents the result for a particular callback operation."
17);
18
19#[repr(C)]
21#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
22pub struct CallbackStatusResponse {
23 status: CallbackStatus,
24 result: CallbackResult,
25}
26
27impl CallbackStatusResponse {
28 pub const fn new() -> Self {
30 Self {
31 status: CallbackStatus::new(),
32 result: CallbackResult::new(),
33 }
34 }
35
36 pub const fn create(status: i32, result: i32) -> Self {
38 Self {
39 status: CallbackStatus::create(status as u32),
40 result: CallbackResult::create(result as u32),
41 }
42 }
43
44 pub const fn status(&self) -> u32 {
46 self.status.inner()
47 }
48
49 pub fn set_status(&mut self, val: i32) {
51 self.status.set_inner(val as u32);
52 }
53
54 pub fn with_status(mut self, val: i32) -> Self {
56 self.set_status(val);
57 self
58 }
59
60 pub const fn result(&self) -> u32 {
62 self.result.inner()
63 }
64
65 pub fn set_result(&mut self, val: i32) {
67 self.result.set_inner(val as u32)
68 }
69
70 pub fn with_result(mut self, val: i32) -> Self {
72 self.set_result(val);
73 self
74 }
75}
76
77impl fmt::Display for CallbackStatusResponse {
78 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
79 write!(f, "{{")?;
80 write!(f, r#""status": {}, "#, self.status())?;
81 write!(f, r#""result": {}"#, self.result())?;
82 write!(f, "}}")
83 }
84}
85
86impl_xfs_struct!(CallbackStatusResponse, "callbackResponse", [status: CallbackStatus, result: CallbackResult]);
87
88#[cfg(test)]
89mod tests {
90 use super::*;
91
92 use crate::xfs::{
93 self,
94 method_response::{XfsMethodResponse, XfsMethodResponseStruct},
95 params::XfsParam,
96 };
97 use crate::Result;
98
99 #[test]
100 fn test_callback_response_serde() -> Result<()> {
101 let exp_xml = r#"<?xml version="1.0" encoding="ISO-8859-1"?><methodResponse><params><param><value><struct><member><name>status</name><value><i4>6192</i4></value></member><member><name>result</name><value><i4>-1</i4></value></member></struct></value></param></params></methodResponse>"#;
102 let exp_res =
103 XfsMethodResponseStruct::new(XfsMethodResponse::new_params([XfsParam::create(
104 CallbackStatusResponse::create(6192, -1).into(),
105 )]));
106
107 assert_eq!(xfs::to_iso_string(&exp_res)?.as_str(), exp_xml);
108 assert_eq!(xfs::from_str::<XfsMethodResponseStruct>(exp_xml)?, exp_res);
109
110 Ok(())
111 }
112}