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}