pub trait TopDecode: Sized {
    // Provided methods
    fn top_decode<I>(input: I) -> Result<Self, DecodeError>
       where I: TopDecodeInput { ... }
    fn top_decode_or_handle_err<I, H>(
        input: I,
        h: H
    ) -> Result<Self, H::HandledErr>
       where I: TopDecodeInput,
             H: DecodeErrorHandler { ... }
}
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.

Provided Methods§

source

fn top_decode<I>(input: I) -> Result<Self, DecodeError>where I: TopDecodeInput,

Attempt to deserialize the value from input.

source

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

Version of top_decode that can handle errors as soon as they occur. For instance it can exit immediately and make sure that if it returns, it is a success. By not deferring error handling, this can lead to somewhat smaller bytecode.

Implementations on Foreign Types§

source§

impl TopDecode for isize

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for NonZeroUsize

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T0, T1, T2> TopDecode for (T0, T1, T2)where T0: NestedDecode, T1: NestedDecode, T2: NestedDecode,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for i8

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for u16

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for i32

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for u64

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T0, T1, T2, T3> TopDecode for (T0, T1, T2, T3)where T0: NestedDecode, T1: NestedDecode, T2: NestedDecode, T3: NestedDecode,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for usize

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for bool

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for u32

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for i16

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T0, T1, T2, T3, T4> TopDecode for (T0, T1, T2, T3, T4)where T0: NestedDecode, T1: NestedDecode, T2: NestedDecode, T3: NestedDecode, T4: NestedDecode,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T: NestedDecode, const CAP: usize> TopDecode for ArrayVec<T, CAP>

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for i64

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for u8

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T: TopDecode> TopDecode for Box<T>

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for Box<str>

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl TopDecode for String

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T: NestedDecode> TopDecode for Box<[T]>

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T0> TopDecode for (T0,)where T0: NestedDecode,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T: NestedDecode, const N: usize> TopDecode for [T; N]

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T> TopDecode for PhantomData<T>

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T: NestedDecode> TopDecode for Option<T>

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

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,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

source§

impl<T0, T1> TopDecode for (T0, T1)where T0: NestedDecode, T1: NestedDecode,

source§

fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where I: TopDecodeInput, H: DecodeErrorHandler,

Implementors§