cloudevents/message/
deserializer.rs1use super::{BinarySerializer, Encoding, Error, Result, StructuredSerializer};
2use crate::event::{EventBinarySerializer, EventStructuredSerializer};
3use crate::Event;
4
5pub trait StructuredDeserializer
7where
8 Self: Sized,
9{
10 fn deserialize_structured<R: Sized, V: StructuredSerializer<R>>(
12 self,
13 serializer: V,
14 ) -> Result<R>;
15
16 fn into_event(self) -> Result<Event> {
18 self.deserialize_structured(EventStructuredSerializer {})
19 }
20}
21
22pub trait BinaryDeserializer
24where
25 Self: Sized,
26{
27 fn deserialize_binary<R: Sized, V: BinarySerializer<R>>(self, serializer: V) -> Result<R>;
29
30 fn into_event(self) -> Result<Event> {
32 self.deserialize_binary(EventBinarySerializer::new())
33 }
34}
35
36pub trait MessageDeserializer
38where
39 Self: StructuredDeserializer + BinaryDeserializer + Sized,
40{
41 fn encoding(&self) -> Encoding;
43
44 fn into_event(self) -> Result<Event> {
46 match self.encoding() {
47 Encoding::BINARY => BinaryDeserializer::into_event(self),
48 Encoding::STRUCTURED => StructuredDeserializer::into_event(self),
49 _ => Err(Error::WrongEncoding {}),
50 }
51 }
52
53 fn deserialize_to_binary<R: Sized, T: BinarySerializer<R>>(self, serializer: T) -> Result<R> {
55 if self.encoding() == Encoding::BINARY {
56 return self.deserialize_binary(serializer);
57 }
58
59 MessageDeserializer::into_event(self)?.deserialize_binary(serializer)
60 }
61
62 fn deserialize_to_structured<R: Sized, T: StructuredSerializer<R>>(
64 self,
65 serializer: T,
66 ) -> Result<R> {
67 if self.encoding() == Encoding::STRUCTURED {
68 return self.deserialize_structured(serializer);
69 }
70
71 MessageDeserializer::into_event(self)?.deserialize_structured(serializer)
72 }
73
74 fn deserialize_to<R: Sized, T: BinarySerializer<R> + StructuredSerializer<R>>(
77 self,
78 serializer: T,
79 ) -> Result<R> {
80 if self.encoding() == Encoding::STRUCTURED {
81 self.deserialize_structured(serializer)
82 } else {
83 self.deserialize_binary(serializer)
84 }
85 }
86}