1use crate::Exchange;
2use crate::body::Body;
3use crate::error::CamelError;
4
5pub trait DataFormat: Send + Sync + 'static {
6 fn name(&self) -> &str;
7
8 fn marshal(&self, body: Body) -> Result<Body, CamelError>;
9
10 fn unmarshal(&self, body: Body) -> Result<Body, CamelError>;
11
12 fn marshal_in_exchange(&self, exchange: &mut Exchange, body: Body) -> Result<Body, CamelError> {
16 let _ = exchange;
17 self.marshal(body)
18 }
19
20 fn unmarshal_in_exchange(
24 &self,
25 exchange: &mut Exchange,
26 body: Body,
27 ) -> Result<Body, CamelError> {
28 let _ = exchange;
29 self.unmarshal(body)
30 }
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36 use crate::exchange::Exchange;
37
38 struct DummyFormat;
39
40 impl DataFormat for DummyFormat {
41 fn name(&self) -> &str {
42 "dummy"
43 }
44 fn marshal(&self, _body: Body) -> Result<Body, CamelError> {
45 Ok(Body::Text("marshaled".into()))
46 }
47 fn unmarshal(&self, _body: Body) -> Result<Body, CamelError> {
48 Ok(Body::Text("unmarshaled".into()))
49 }
50 }
51
52 #[test]
53 fn test_default_marshal_in_exchange_delegates() {
54 let mut ex = Exchange::default();
55 let df = DummyFormat;
56 let result = df.marshal_in_exchange(&mut ex, Body::Empty);
57 assert_eq!(result.unwrap(), Body::Text("marshaled".into()));
58 }
59
60 #[test]
61 fn test_default_unmarshal_in_exchange_delegates() {
62 let mut ex = Exchange::default();
63 let df = DummyFormat;
64 let result = df.unmarshal_in_exchange(&mut ex, Body::Empty);
65 assert_eq!(result.unwrap(), Body::Text("unmarshaled".into()));
66 }
67}