serde_byte_array/
lib.rs

1#![no_std]
2
3use serde::{Deserializer, Serializer};
4
5mod bytearray;
6mod de;
7mod ser;
8
9pub use bytearray::ByteArray;
10pub use de::Deserialize;
11pub use ser::Serialize;
12
13/// Serde `serialize_with` function to serialize bytes efficiently.
14///
15/// This function can be used with either of the following Serde attributes:
16///
17/// - `#[serde(with = "serde_byte_array")]`
18/// - `#[serde(serialize_with = "serde_byte_array::serialize")]`
19///
20/// ```
21/// use serde::Serialize;
22///
23/// #[derive(Serialize)]
24/// struct Efficient<'a> {
25///     #[serde(with = "serde_byte_array")]
26///     byte_array: [u8; 314],
27
28///     #[serde(with = "serde_byte_array")]
29///     byte_array_ref: &'a [u8; 314],
30/// }
31/// ```
32pub fn serialize<T, S>(bytes: &T, serializer: S) -> Result<S::Ok, S::Error>
33where
34    T: ?Sized + Serialize,
35    S: Serializer,
36{
37    Serialize::serialize(bytes, serializer)
38}
39
40/// Serde `deserialize_with` function to deserialize bytes efficiently.
41///
42/// This function can be used with either of the following Serde attributes:
43///
44/// - `#[serde(with = "serde_byte_array")]`
45/// - `#[serde(deserialize_with = "serde_byte_array::deserialize")]`
46///
47/// ```
48/// use serde::Deserialize;
49///
50/// #[derive(Deserialize)]
51/// struct Packet {
52///     #[serde(with = "serde_byte_array")]
53///     byte_array: [u8; 314],
54/// }
55/// ```
56pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
57where
58    T: Deserialize<'de>,
59    D: Deserializer<'de>,
60{
61    Deserialize::deserialize(deserializer)
62}