musli_core/de/
decode.rs

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