Trait sbor::decode::Decode

source ·
pub trait Decode<X: CustomValueKind, D: Decoder<X>>: Sized {
    // Required method
    fn decode_body_with_value_kind(
        decoder: &mut D,
        value_kind: ValueKind<X>
    ) -> Result<Self, DecodeError>;
}
Expand description

A data structure that can be decoded from a byte array using SBOR.

Required Methods§

source

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

Decodes the type from the decoder, which should match a preloaded value kind.

You may want to call decoder.decode_deeper_body_with_value_kind instead of this method. See the below section for details.

§Direct calls and SBOR Depth

In order to avoid SBOR depth differentials and disagreement about whether a payload is valid, typed codec implementations should ensure that the SBOR depth as measured during the encoding/decoding process agrees with the SBOR Value codec.

Each layer of the SBOR Value counts as one depth.

If the decoder you’re writing is embedding a child type (and is represented as such in the SBOR Value type), then you should call decoder.decode_body_with_value_kind to increment the SBOR depth tracker.

You should only call T::decode_body_with_value_kind directly when the decoding of that type into an SBOR Value doesn’t increase the SBOR depth in the decoder, that is:

  • When the wrapping type is invisible to the SBOR Value, ie:
    • Smart pointers
    • Transparent wrappers
  • Where the use of the inner type is invisible to SBOR Value, ie:
    • Where the use of T::decode_body_with_value_kind is coincidental / code re-use

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for bool

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for i8

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for i16

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for i32

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for i64

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for i128

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for isize

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for u8

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for u16

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for u32

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for u64

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for u128

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for ()

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for usize

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>> Decode<X, D> for (T0,)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>> Decode<X, D> for (T0, T1)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>> Decode<X, D> for (T0, T1, T2)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>, T14: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>, T14: Decode<X, D>, T15: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>, T14: Decode<X, D>, T15: Decode<X, D>, T16: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>, T14: Decode<X, D>, T15: Decode<X, D>, T16: Decode<X, D>, T17: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>, T14: Decode<X, D>, T15: Decode<X, D>, T16: Decode<X, D>, T17: Decode<X, D>, T18: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T0: Decode<X, D>, T1: Decode<X, D>, T2: Decode<X, D>, T3: Decode<X, D>, T4: Decode<X, D>, T5: Decode<X, D>, T6: Decode<X, D>, T7: Decode<X, D>, T8: Decode<X, D>, T9: Decode<X, D>, T10: Decode<X, D>, T11: Decode<X, D>, T12: Decode<X, D>, T13: Decode<X, D>, T14: Decode<X, D>, T15: Decode<X, D>, T16: Decode<X, D>, T17: Decode<X, D>, T18: Decode<X, D>, T19: Decode<X, D>> Decode<X, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19)

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D> + Categorize<X>, const N: usize> Decode<X, D> for [T; N]

source§

fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<X> ) -> Result<Self, DecodeError>

Implementors§

source§

impl<'a, X: CustomValueKind, D: Decoder<X>, B: ?Sized + 'a + ToOwned<Owned = O>, O: Decode<X, D>> Decode<X, D> for Cow<'a, B>

source§

impl<C, L, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for TypeKind<C, L>
where C: Decode<X, D> + Categorize<X> + CustomTypeKind<L>, L: Decode<X, D> + Categorize<X> + SchemaTypeLink,

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for NoCustomTypeKind

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for NoCustomTypeValidation

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for DecodeError

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for EncodeError

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for SchemaValidationError

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for ChildNames

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for LocalTypeId

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for RustTypeId

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for NovelTypeMetadata

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for TypeMetadata

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for LengthValidation

source§

impl<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for WellKnownTypeId

source§

impl<E, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for TypeValidation<E>
where E: Decode<X, D> + Categorize<X> + CustomTypeValidation,

source§

impl<Ext: CustomExtension, D: Decoder<Ext::CustomValueKind>> Decode<<Ext as CustomExtension>::CustomValueKind, D> for RawValue<'_, Ext>

source§

impl<S: CustomSchema, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for VersionedSchema<S>

source§

impl<S: CustomSchema, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for SchemaV1<S>

source§

impl<T, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for NumericValidation<T>
where T: Decode<X, D> + Categorize<X>,

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for NoCustomValue

source§

impl<X: CustomValueKind, D: Decoder<X>> Decode<X, D> for String

source§

impl<X: CustomValueKind, D: Decoder<X>, K: Decode<X, D> + Categorize<X> + Ord, V: Decode<X, D> + Categorize<X>> Decode<X, D> for BTreeMap<K, V>

source§

impl<X: CustomValueKind, D: Decoder<X>, K: Decode<X, D> + Categorize<X> + Hash + Eq, V: Decode<X, D> + Categorize<X>> Decode<X, D> for HashMap<K, V>

source§

impl<X: CustomValueKind, D: Decoder<X>, K: Decode<X, D> + Categorize<X> + Hash + Eq, V: Decode<X, D> + Categorize<X>> Decode<X, D> for IndexMap<K, V>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D> + Categorize<X> + Ord> Decode<X, D> for BTreeSet<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D> + Categorize<X> + Hash + Eq> Decode<X, D> for HashSet<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D> + Categorize<X> + Hash + Eq> Decode<X, D> for IndexSet<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D> + Categorize<X>> Decode<X, D> for Vec<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D>> Decode<X, D> for Option<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D>> Decode<X, D> for Box<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D>> Decode<X, D> for Rc<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D>> Decode<X, D> for RefCell<T>

source§

impl<X: CustomValueKind, D: Decoder<X>, T: Decode<X, D>, E: Decode<X, D>> Decode<X, D> for Result<T, E>

source§

impl<X: CustomValueKind, D: Decoder<X>, Y: Decode<X, D> + CustomValue<X>> Decode<X, D> for Value<X, Y>

source§

impl<X: CustomValueKind, D: Decoder<X>, Y: Decode<X, D> + CustomValue<X>> Decode<X, D> for EnumVariantValue<X, Y>

source§

impl<X: CustomValueKind, D: Decoder<X>, const DISCRIMINATOR: u8, T: Decode<X, D> + SborTuple<X>> Decode<X, D> for FixedEnumVariant<DISCRIMINATOR, T>