Trait sbor::encode::Encode

source ·
pub trait Encode<X: CustomValueKind, E: Encoder<X>> {
    // Required methods
    fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>;
    fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>;
}
Expand description

A data structure that can be serialized into a byte array using SBOR.

Required Methods§

source

fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>

Encodes the SBOR value’s kind to the encoder

source

fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>

Encodes the SBOR body of the type to the encoder.

You may want to call encoder.encode_deeper_body 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 Value codec.

Each layer of the Value counts as one depth.

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

You should only call value.encode_body directly when the encoding of that type into an Value doesn’t increase the SBOR depth in the encoder, that is:

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

Implementations on Foreign Types§

source§

impl<'a, X: CustomValueKind, E: Encoder<X>, T: ?Sized + Encode<X, E>> Encode<X, E> for &T

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for bool

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for i8

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for i16

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for i32

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for i64

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for i128

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for isize

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for str

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for u8

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for u16

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for u32

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for u64

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for u128

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for ()

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for usize

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>> Encode<X, E> for (T0,)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>> Encode<X, E> for (T0, T1)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>> Encode<X, E> for (T0, T1, T2)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>, T7: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6, T7)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>, T7: Encode<X, E>, T8: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>, T7: Encode<X, E>, T8: Encode<X, E>, T9: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>, T7: Encode<X, E>, T8: Encode<X, E>, T9: Encode<X, E>, T10: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>, T7: Encode<X, E>, T8: Encode<X, E>, T9: Encode<X, E>, T10: Encode<X, E>, T11: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

source§

impl<X: CustomValueKind, E: Encoder<X>, T0: Encode<X, E>, T1: Encode<X, E>, T2: Encode<X, E>, T3: Encode<X, E>, T4: Encode<X, E>, T5: Encode<X, E>, T6: Encode<X, E>, T7: Encode<X, E>, T8: Encode<X, E>, T9: Encode<X, E>, T10: Encode<X, E>, T11: Encode<X, E>, T12: Encode<X, E>> Encode<X, E> for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

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

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E> + Categorize<X>> Encode<X, E> for [T]

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E> + Categorize<X>, const N: usize> Encode<X, E> for [T; N]

Implementors§

source§

impl<'a, X: CustomValueKind, E: Encoder<X>, B: ?Sized + 'a + ToOwned + Encode<X, E>> Encode<X, E> for Cow<'a, B>

source§

impl<C, L, E: Encoder<X>, X: CustomValueKind> Encode<X, E> for TypeKind<C, L>
where C: Encode<X, E> + Categorize<X> + CustomTypeKind<L>, L: Encode<X, E> + Categorize<X> + SchemaTypeLink,

source§

impl<E, E0: Encoder<X>, X: CustomValueKind> Encode<X, E0> for TypeValidation<E>
where E: Encode<X, E0> + Categorize<X> + CustomTypeValidation,

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for NoCustomTypeKind

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for NoCustomTypeValidation

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for DecodeError

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for EncodeError

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for SchemaValidationError

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for ChildNames

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for LocalTypeId

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for RustTypeId

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for NovelTypeMetadata

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for TypeMetadata

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for LengthValidation

source§

impl<E: Encoder<X>, X: CustomValueKind> Encode<X, E> for WellKnownTypeId

source§

impl<Ext: CustomExtension, E: Encoder<Ext::CustomValueKind>> Encode<<Ext as CustomExtension>::CustomValueKind, E> for RawPayload<'_, Ext>

source§

impl<Ext: CustomExtension, E: Encoder<Ext::CustomValueKind>> Encode<<Ext as CustomExtension>::CustomValueKind, E> for RawValue<'_, Ext>

source§

impl<S: CustomSchema, E: Encoder<X>, X: CustomValueKind> Encode<X, E> for VersionedSchema<S>

source§

impl<S: CustomSchema, E: Encoder<X>, X: CustomValueKind> Encode<X, E> for SchemaV1<S>

source§

impl<T, E: Encoder<X>, X: CustomValueKind> Encode<X, E> for NumericValidation<T>
where T: Encode<X, E> + Categorize<X>,

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for NoCustomValue

source§

impl<X: CustomValueKind, E: Encoder<X>> Encode<X, E> for String

source§

impl<X: CustomValueKind, E: Encoder<X>, K: Encode<X, E> + Categorize<X> + Ord + Hash, V: Encode<X, E> + Categorize<X>> Encode<X, E> for HashMap<K, V>

source§

impl<X: CustomValueKind, E: Encoder<X>, K: Encode<X, E> + Categorize<X> + Hash + Eq + PartialEq, V: Encode<X, E> + Categorize<X>> Encode<X, E> for IndexMap<K, V>

source§

impl<X: CustomValueKind, E: Encoder<X>, K: Encode<X, E> + Categorize<X>, V: Encode<X, E> + Categorize<X>> Encode<X, E> for BTreeMap<K, V>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E> + Categorize<X> + Ord + Hash> Encode<X, E> for HashSet<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E> + Categorize<X> + Hash> Encode<X, E> for IndexSet<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E> + Categorize<X>> Encode<X, E> for BTreeSet<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E> + Categorize<X>> Encode<X, E> for Vec<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E>> Encode<X, E> for Option<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E>> Encode<X, E> for Box<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E>> Encode<X, E> for Rc<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, T: Encode<X, E>> Encode<X, E> for RefCell<T>

source§

impl<X: CustomValueKind, E: Encoder<X>, Y: Encode<X, E> + CustomValue<X>> Encode<X, E> for Value<X, Y>

source§

impl<X: CustomValueKind, E: Encoder<X>, Y: Encode<X, E> + CustomValue<X>> Encode<X, E> for EnumVariantValue<X, Y>

source§

impl<X: CustomValueKind, E: Encoder<X>, const DISCRIMINATOR: u8, T: Encode<X, E> + SborTuple<X>> Encode<X, E> for FixedEnumVariant<DISCRIMINATOR, T>

source§

impl<X: CustomValueKind, Enc: Encoder<X>, T: Encode<X, Enc>, E: Encode<X, Enc>> Encode<X, Enc> for Result<T, E>