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.payload.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 {
51 subject: "not_relevant".into(),
52 payload: json!(expected).to_string().into_bytes().into(),
53 reply: None,
54 headers: None,
55 status: None,
56 description: None,
57 length: 0,
58 };
59
60 let actual = nats_message.to_event().unwrap();
61
62 assert_eq!(expected, actual)
63 }
64
65 #[test]
66 fn test_structured_deserialize_v03() {
67 let expected = fixtures::v03::full_json_data();
68
69 let nats_message = nats::Message {
70 subject: "not_relevant".into(),
71 payload: json!(expected).to_string().into_bytes().into(),
72 reply: None,
73 headers: None,
74 status: None,
75 description: None,
76 length: 0,
77 };
78
79 let actual = nats_message.to_event().unwrap();
80
81 assert_eq!(expected, actual)
82 }
83}