cloudevents/binding/nats/
deserializer.rs1use crate::{
2 message::{Result, StructuredDeserializer},
3 Event,
4};
5
6use nats_lib as nats;
7
8impl StructuredDeserializer for nats::Message {
9 fn deserialize_structured<R: Sized, V: crate::message::StructuredSerializer<R>>(
10 self,
11 serializer: V,
12 ) -> crate::message::Result<R> {
13 serializer.set_structured_event(self.data.to_vec())
14 }
15}
16
17pub trait MessageExt: private::Sealed {
21 fn to_event(&self) -> Result<Event>;
22}
23
24impl MessageExt for nats::Message {
25 fn to_event(&self) -> Result<Event> {
26 StructuredDeserializer::into_event(self.to_owned())
27 }
28}
29
30mod private {
31 use nats_lib as nats;
32
33 pub trait Sealed {}
35 impl Sealed for nats::Message {}
36}
37
38#[cfg(test)]
39mod tests {
40 use crate::test::fixtures;
41 use nats_lib as nats;
42 use serde_json::json;
43
44 use super::*;
45
46 #[test]
47 fn test_structured_deserialize_v10() {
48 let expected = fixtures::v10::full_json_data_string_extension();
49
50 let nats_message = nats::Message::new(
51 "not_relevant",
52 None,
53 json!(expected).to_string().as_bytes(),
54 None,
55 );
56
57 let actual = nats_message.to_event().unwrap();
58
59 assert_eq!(expected, actual)
60 }
61
62 #[test]
63 fn test_structured_deserialize_v03() {
64 let expected = fixtures::v03::full_json_data();
65
66 let nats_message = nats::Message::new(
67 "not_relevant",
68 None,
69 json!(expected).to_string().as_bytes(),
70 None,
71 );
72
73 let actual = nats_message.to_event().unwrap();
74
75 assert_eq!(expected, actual)
76 }
77}