rsiot/serde_utils/
serde_alg.rs1use serde::{Serialize, de::DeserializeOwned};
2
3use super::{Error, SerdeAlgKind};
4
5#[derive(Clone, Copy, Debug, Default, PartialEq)]
7pub struct SerdeAlg {
8 kind: SerdeAlgKind,
9}
10
11impl SerdeAlg {
12 pub fn new(kind: SerdeAlgKind) -> Self {
14 Self { kind }
15 }
16
17 pub fn serialize<TData>(
19 &self,
20 #[allow(unused_variables)] data: &TData,
21 ) -> Result<Vec<u8>, Error>
22 where
23 TData: Serialize,
24 {
25 #[allow(unreachable_patterns)]
26 match self.kind {
27 #[cfg(feature = "serde_cbor")]
28 SerdeAlgKind::Cbor => super::cbor::serialize(data),
29
30 #[cfg(feature = "serde_json")]
31 SerdeAlgKind::Json => super::json::serialize(data),
32
33 #[cfg(feature = "serde_messagepack")]
34 SerdeAlgKind::MessagePack => super::messagepack::serialize(data),
35
36 #[cfg(feature = "serde_toml")]
37 SerdeAlgKind::Toml => super::toml::serialize(data),
38
39 #[cfg(feature = "serde_postcard")]
40 SerdeAlgKind::Postcard => super::postcard::serialize(data),
41
42 SerdeAlgKind::Unspecified => Err(Error::UnknownAlg(self.kind)),
43 }
44 }
45
46 pub fn deserialize<TData>(&self, #[allow(unused_variables)] data: &[u8]) -> Result<TData, Error>
48 where
49 TData: DeserializeOwned,
50 {
51 #[allow(unreachable_patterns)]
52 match self.kind {
53 #[cfg(feature = "serde_cbor")]
54 SerdeAlgKind::Cbor => super::cbor::deserialize(data),
55
56 #[cfg(feature = "serde_json")]
57 SerdeAlgKind::Json => super::json::deserialize(data),
58
59 #[cfg(feature = "serde_messagepack")]
60 SerdeAlgKind::MessagePack => super::messagepack::deserialize(data),
61
62 #[cfg(feature = "serde_toml")]
63 SerdeAlgKind::Toml => super::toml::deserialize(data),
64
65 #[cfg(feature = "serde_postcard")]
66 SerdeAlgKind::Postcard => super::postcard::deserialize(data),
67
68 SerdeAlgKind::Unspecified => Err(Error::UnknownAlg(self.kind)),
69 }
70 }
71}