Trait dharitri_codec::TopDecode
source · pub trait TopDecode: Sized {
// Required method
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>;
// Provided method
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>(
input: I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Self { ... }
}Expand description
Trait that allows zero-copy read of values from an underlying API in big endian format.
‘Top’ stands for the fact that values are deserialized on their own, so we have the benefit of knowing their length. This is useful in many scnearios, such as not having to encode Vec length and others.
The opther optimization that can be done when deserializing top-level objects is using special functions from the underlying API that do some of the work for the deserializer. These include getting values directly as i64/u64 or wrapping them directly into an owned Box<u8>.
BigInt/BigUint handling is not included here, because these are API-dependent and would overly complicate the trait.
Required Methods§
sourcefn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
Attempt to deserialize the value from input.
Provided Methods§
sourcefn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>(
input: I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Self
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
Version of top_decode that exits quickly in case of error.
Its purpose is to create smaller implementations
in cases where the application is supposed to exit directly on decode error.
Object Safety§
Implementations on Foreign Types§
source§impl TopDecode for bool
impl TopDecode for bool
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for i8
impl TopDecode for i8
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for i16
impl TopDecode for i16
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for i32
impl TopDecode for i32
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for i64
impl TopDecode for i64
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for isize
impl TopDecode for isize
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for u8
impl TopDecode for u8
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for u16
impl TopDecode for u16
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for u32
impl TopDecode for u32
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for u64
impl TopDecode for u64
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for ()
impl TopDecode for ()
fn top_decode<I: TopDecodeInput>(_: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( _: I, _: ExitCtx, _: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for usize
impl TopDecode for usize
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for Box<str>
impl TopDecode for Box<str>
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for String
impl TopDecode for String
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl TopDecode for NonZeroUsize
impl TopDecode for NonZeroUsize
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0> TopDecode for (T0,)where
T0: NestedDecode,
impl<T0> TopDecode for (T0,)where
T0: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1> TopDecode for (T0, T1)where
T0: NestedDecode,
T1: NestedDecode,
impl<T0, T1> TopDecode for (T0, T1)where
T0: NestedDecode,
T1: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2> TopDecode for (T0, T1, T2)
impl<T0, T1, T2> TopDecode for (T0, T1, T2)
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3> TopDecode for (T0, T1, T2, T3)
impl<T0, T1, T2, T3> TopDecode for (T0, T1, T2, T3)
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4> TopDecode for (T0, T1, T2, T3, T4)
impl<T0, T1, T2, T3, T4> TopDecode for (T0, T1, T2, T3, T4)
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5> TopDecode for (T0, T1, T2, T3, T4, T5)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
impl<T0, T1, T2, T3, T4, T5> TopDecode for (T0, T1, T2, T3, T4, T5)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6> TopDecode for (T0, T1, T2, T3, T4, T5, T6)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6> TopDecode for (T0, T1, T2, T3, T4, T5, T6)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
T13: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
T13: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
T13: NestedDecode,
T14: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
T13: NestedDecode,
T14: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
T13: NestedDecode,
T14: NestedDecode,
T15: NestedDecode,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> TopDecode for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)where
T0: NestedDecode,
T1: NestedDecode,
T2: NestedDecode,
T3: NestedDecode,
T4: NestedDecode,
T5: NestedDecode,
T6: NestedDecode,
T7: NestedDecode,
T8: NestedDecode,
T9: NestedDecode,
T10: NestedDecode,
T11: NestedDecode,
T12: NestedDecode,
T13: NestedDecode,
T14: NestedDecode,
T15: NestedDecode,
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T: NestedDecode> TopDecode for Option<T>
impl<T: NestedDecode> TopDecode for Option<T>
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
source§impl<T: NestedDecode> TopDecode for Box<[T]>
impl<T: NestedDecode> TopDecode for Box<[T]>
source§fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>(
input: I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Self
fn top_decode_or_exit<I: TopDecodeInput, ExitCtx: Clone>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
Quick exit for any of the contained types