Skip to main content

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".

Implementations on Foreign Types§

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

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

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 ChildNames

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 LengthValidation

Source§

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

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 NovelTypeMetadata

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 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 SchemaV1<S>

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 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 NumericValidation<T>
where T: Decode<X, D> + NumericValidationBound,

Source§

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

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>, 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>, 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>, 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> + Ord> Decode<X, D> for BTreeSet<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>, E: Decode<X, D>> Decode<X, D> for Result<T, E>

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

Source§

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

Source§

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