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}