musli_core/de/
decode_bytes.rs

1use super::Decoder;
2
3/// Trait governing how types are decoded as bytes.
4///
5/// This is typically used automatically through the `#[musli(bytes)]` attribute
6/// through the [`Decode` derive].
7///
8/// [`Decode` derive]: https://docs.rs/musli/latest/musli/help/derives/
9///
10/// # Examples
11///
12/// ```
13/// use musli::Decode;
14///
15/// #[derive(Decode)]
16/// struct MyType {
17///     #[musli(bytes)]
18///     data: [u8; 128],
19/// }
20/// ```
21///
22/// Implementing manually:
23///
24/// ```
25/// use musli::{Decode, Decoder};
26/// use musli::de::DecodeBytes;
27///
28/// struct MyType {
29///     data: [u8; 128],
30/// }
31///
32/// impl<'de, M> Decode<'de, M> for MyType {
33///     fn decode<D>(cx: &D::Cx, decoder: D) -> Result<Self, D::Error>
34///     where
35///         D: Decoder<'de>,
36///     {
37///         Ok(Self {
38///             data: DecodeBytes::decode_bytes(cx, decoder)?,
39///         })
40///     }
41/// }
42/// ```
43pub trait DecodeBytes<'de, M>: Sized {
44    /// Decode the given input as bytes.
45    fn decode_bytes<D>(cx: &D::Cx, decoder: D) -> Result<Self, D::Error>
46    where
47        D: Decoder<'de, Mode = M>;
48}