musli_core/de/variant_decoder.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
use crate::Context;
use super::Decoder;
/// Trait governing how to decode a variant.
pub trait VariantDecoder<'de> {
/// Context associated with the decoder.
type Cx: ?Sized + Context;
/// The decoder to use for the variant tag.
type DecodeTag<'this>: Decoder<
'de,
Cx = Self::Cx,
Error = <Self::Cx as Context>::Error,
Mode = <Self::Cx as Context>::Mode,
>
where
Self: 'this;
/// The decoder to use for the variant value.
type DecodeValue<'this>: Decoder<
'de,
Cx = Self::Cx,
Error = <Self::Cx as Context>::Error,
Mode = <Self::Cx as Context>::Mode,
>
where
Self: 'this;
/// Return the decoder for the first value in the pair.
///
/// If this is a map the first value would be the key of the map, if this is
/// a struct the first value would be the field of the struct.
#[must_use = "Decoders must be consumed"]
fn decode_tag(&mut self) -> Result<Self::DecodeTag<'_>, <Self::Cx as Context>::Error>;
/// Decode the second value in the pair..
#[must_use = "Decoders must be consumed"]
fn decode_value(&mut self) -> Result<Self::DecodeValue<'_>, <Self::Cx as Context>::Error>;
}