Decode

Trait 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

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so 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<D: Decoder<X>, X: CustomValueKind> Decode<X, D> for NoCustomTypeKind

Source§

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

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 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 SchemaValidationError

Source§

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

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 WellKnownTypeId

Source§

impl<E, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for TypeValidation<E>
where E: Decode<X, D> + 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 SchemaVersions<S>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<T, D: Decoder<X>, X: CustomValueKind> Decode<X, D> for TypeKindLabel<T>
where T: Decode<X, D> + CustomTypeKindLabel,

Source§

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

Source§

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

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 Arc<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>, Y: Decode<X, D> + CustomValue<X>> Decode<X, D> for TupleValue<X, Y>

Source§

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