Trait alloy_sol_types::abi::token::Token

source ·
pub trait Token<'de>: Sealed + Sized {
    const DYNAMIC: bool;

    // Required methods
    fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>;
    fn head_words(&self) -> usize;
    fn tail_words(&self) -> usize;
    fn head_append(&self, enc: &mut Encoder);
    fn tail_append(&self, enc: &mut Encoder);

    // Provided method
    fn total_words(&self) -> usize { ... }
}
Expand description

Ethereum ABI tokens.

Tokens are an intermediate state between ABI-encoded blobs, and Rust types.

ABI encoding uses 5 types:

  • WordToken: Single EVM words (a 32-byte string)
  • FixedSeqToken: Sequences with a fixed length T[M]
  • DynSeqToken: Sequences with a dynamic length T[]
  • PackedSeqToken: Dynamic-length byte arrays bytes or string
  • Tuples (T, U, V, ...) (implemented for arity 0..=24)

A token with a lifetime borrows its data from elsewhere. During decoding, it borrows its data from the decoder. During encoding, it borrows its data from the Rust value being encoded.

This trait allows us to encode and decode data with minimal copying. It may also be used to enable zero-copy decoding of data, or fast transformation of encoded blobs without full decoding.

This trait is sealed and cannot be implemented for types outside of this crate. It is implemented only for the types listed above.

Required Associated Constants§

source

const DYNAMIC: bool

True if the token represents a dynamically-sized type.

Required Methods§

source

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

Decode a token from a decoder.

source

fn head_words(&self) -> usize

Calculate the number of head words.

source

fn tail_words(&self) -> usize

Calculate the number of tail words.

source

fn head_append(&self, enc: &mut Encoder)

Append head words to the encoder.

source

fn tail_append(&self, enc: &mut Encoder)

Append tail words to the encoder.

Provided Methods§

source

fn total_words(&self) -> usize

Calculate the total number of head and tail words.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'de> Token<'de> for ()

source§

const DYNAMIC: bool = false

source§

fn decode_from(_dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, _enc: &mut Encoder)

source§

fn tail_append(&self, _enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>> Token<'de> for (T1,)

source§

const DYNAMIC: bool = <T1 as Token>::DYNAMIC

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>> Token<'de> for (T1, T2)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>> Token<'de> for (T1, T2, T3)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>> Token<'de> for (T1, T2, T3, T4)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>, T19: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>, T19: Token<'de>, T20: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>, T19: Token<'de>, T20: Token<'de>, T21: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>, T19: Token<'de>, T20: Token<'de>, T21: Token<'de>, T22: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>, T19: Token<'de>, T20: Token<'de>, T21: Token<'de>, T22: Token<'de>, T23: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

source§

impl<'de, T1: Token<'de>, T2: Token<'de>, T3: Token<'de>, T4: Token<'de>, T5: Token<'de>, T6: Token<'de>, T7: Token<'de>, T8: Token<'de>, T9: Token<'de>, T10: Token<'de>, T11: Token<'de>, T12: Token<'de>, T13: Token<'de>, T14: Token<'de>, T15: Token<'de>, T16: Token<'de>, T17: Token<'de>, T18: Token<'de>, T19: Token<'de>, T20: Token<'de>, T21: Token<'de>, T22: Token<'de>, T23: Token<'de>, T24: Token<'de>> Token<'de> for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24)

source§

const DYNAMIC: bool = _

source§

fn decode_from(dec: &mut Decoder<'de>) -> Result<Self>

source§

fn head_words(&self) -> usize

source§

fn tail_words(&self) -> usize

source§

fn head_append(&self, enc: &mut Encoder)

source§

fn tail_append(&self, enc: &mut Encoder)

Implementors§

source§

impl<'a> Token<'a> for WordToken

source§

const DYNAMIC: bool = false

source§

impl<'de, T: Token<'de>> Token<'de> for DynSeqToken<T>

source§

const DYNAMIC: bool = true

source§

impl<'de, T: Token<'de>, const N: usize> Token<'de> for FixedSeqToken<T, N>

source§

const DYNAMIC: bool = T::DYNAMIC

source§

impl<'de: 'a, 'a> Token<'de> for PackedSeqToken<'a>

source§

const DYNAMIC: bool = true