Trait SolEncode

Source
pub trait SolEncode<'a> {
    type SolType: SolTypeEncode;

    const SOL_NAME: &'static str = <<Self::SolType as SolTypeEncode>::AlloyType as AlloySolType>::SOL_NAME;

    // Required method
    fn to_sol_type(&'a self) -> Self::SolType;

    // Provided method
    fn encode(&'a self) -> Vec<u8>  { ... }
}
Expand description

Maps an arbitrary Rust/ink! type to a Solidity ABI type equivalent for Solidity ABI encoding.

§Note

Implementing this trait entails:

  • Declaring the equivalent Solidity ABI type via the SolType associated type. See the docs for sealed SolTypeEncode trait for a table of Rust/ink! primitive types mapped to their equivalent Solidity ABI type.
  • Implementing the to_sol_type method which defines how to convert (preferably via a borrow) from &self to &Self::SolType (i.e. the Solidity ABI representation).

§Example

use ink_primitives::SolEncode;

// Example arbitrary type.
struct MyType {
    size: u8,
    status: bool,
}

// `SolEncode` implementation/mapping.
impl<'a> SolEncode<'a> for MyType {
    // NOTE: Prefer reference based representation for better performance.
    type SolType = (&'a u8, &'a bool);

    fn to_sol_type(&'a self) -> Self::SolType {
        (&self.size, &self.status)
    }
}

Provided Associated Constants§

Source

const SOL_NAME: &'static str = <<Self::SolType as SolTypeEncode>::AlloyType as AlloySolType>::SOL_NAME

Name of equivalent Solidity ABI type.

Required Associated Types§

Source

type SolType: SolTypeEncode

Equivalent Solidity ABI type representation.

§Note

Prefer reference based representation for better performance.

Required Methods§

Source

fn to_sol_type(&'a self) -> Self::SolType

Converts from Self to Self::SolType via either a borrow (if possible), or a possibly expensive conversion otherwise.

Provided Methods§

Source

fn encode(&'a self) -> Vec<u8>

Solidity ABI encode the value.

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 SolEncode<'_> for bool

Source§

impl SolEncode<'_> for i8

Source§

impl SolEncode<'_> for i16

Source§

impl SolEncode<'_> for i32

Source§

impl SolEncode<'_> for i64

Source§

impl SolEncode<'_> for i128

Source§

impl SolEncode<'_> for u8

Source§

impl SolEncode<'_> for u16

Source§

impl SolEncode<'_> for u32

Source§

impl SolEncode<'_> for u64

Source§

impl SolEncode<'_> for u128

Source§

impl<'a> SolEncode<'a> for &str

Source§

type SolType = &'a str

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a> SolEncode<'a> for &mut str

Source§

type SolType = &'a str

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a> SolEncode<'a> for ()

Source§

type SolType = ()

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a> SolEncode<'a> for Box<str>

Source§

type SolType = &'a str

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a> SolEncode<'a> for String

Source§

type SolType = &'a str

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for &[T]
where T: SolEncode<'a>,

Source§

type SolType = Vec<<T as SolEncode<'a>>::SolType>

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for &mut [T]
where T: SolEncode<'a>,

Source§

type SolType = Vec<<T as SolEncode<'a>>::SolType>

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for Cow<'_, T>
where T: SolEncode<'a> + Clone,

Source§

type SolType = <T as SolEncode<'a>>::SolType

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for Option<T>
where T: SolEncode<'a>,

Source§

type SolType = Option<<T as SolEncode<'a>>::SolType>

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for &T
where T: SolEncode<'a>,

Source§

type SolType = <T as SolEncode<'a>>::SolType

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for &mut T
where T: SolEncode<'a>,

Source§

type SolType = <T as SolEncode<'a>>::SolType

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T> SolEncode<'a> for Box<T>
where T: SolEncode<'a>,

Source§

type SolType = <T as SolEncode<'a>>::SolType

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T, E> SolEncode<'a> for Result<T, E>
where T: SolEncode<'a>, E: SolErrorEncode,

Source§

type SolType = <T as SolEncode<'a>>::SolType

Source§

fn encode(&'a self) -> Vec<u8>

Source§

fn to_sol_type(&self) -> Self::SolType

Source§

impl<'a, T: SolEncode<'a>> SolEncode<'a> for Box<[T]>

Source§

type SolType = Box<[<T as SolEncode<'a>>::SolType]>

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T: SolEncode<'a>> SolEncode<'a> for Vec<T>

Source§

type SolType = Vec<<T as SolEncode<'a>>::SolType>

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, T: SolEncode<'a>, const N: usize> SolEncode<'a> for [T; N]

Source§

type SolType = [<T as SolEncode<'a>>::SolType; N]

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>> SolEncode<'a> for (TupleElement0,)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType,)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>, TupleElement6: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType, <TupleElement6 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>, TupleElement6: SolEncode<'a>, TupleElement7: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType, <TupleElement6 as SolEncode<'a>>::SolType, <TupleElement7 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>, TupleElement6: SolEncode<'a>, TupleElement7: SolEncode<'a>, TupleElement8: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType, <TupleElement6 as SolEncode<'a>>::SolType, <TupleElement7 as SolEncode<'a>>::SolType, <TupleElement8 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>, TupleElement6: SolEncode<'a>, TupleElement7: SolEncode<'a>, TupleElement8: SolEncode<'a>, TupleElement9: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType, <TupleElement6 as SolEncode<'a>>::SolType, <TupleElement7 as SolEncode<'a>>::SolType, <TupleElement8 as SolEncode<'a>>::SolType, <TupleElement9 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>, TupleElement6: SolEncode<'a>, TupleElement7: SolEncode<'a>, TupleElement8: SolEncode<'a>, TupleElement9: SolEncode<'a>, TupleElement10: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType, <TupleElement6 as SolEncode<'a>>::SolType, <TupleElement7 as SolEncode<'a>>::SolType, <TupleElement8 as SolEncode<'a>>::SolType, <TupleElement9 as SolEncode<'a>>::SolType, <TupleElement10 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<'a, TupleElement0: SolEncode<'a>, TupleElement1: SolEncode<'a>, TupleElement2: SolEncode<'a>, TupleElement3: SolEncode<'a>, TupleElement4: SolEncode<'a>, TupleElement5: SolEncode<'a>, TupleElement6: SolEncode<'a>, TupleElement7: SolEncode<'a>, TupleElement8: SolEncode<'a>, TupleElement9: SolEncode<'a>, TupleElement10: SolEncode<'a>, TupleElement11: SolEncode<'a>> SolEncode<'a> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11)

Source§

type SolType = (<TupleElement0 as SolEncode<'a>>::SolType, <TupleElement1 as SolEncode<'a>>::SolType, <TupleElement2 as SolEncode<'a>>::SolType, <TupleElement3 as SolEncode<'a>>::SolType, <TupleElement4 as SolEncode<'a>>::SolType, <TupleElement5 as SolEncode<'a>>::SolType, <TupleElement6 as SolEncode<'a>>::SolType, <TupleElement7 as SolEncode<'a>>::SolType, <TupleElement8 as SolEncode<'a>>::SolType, <TupleElement9 as SolEncode<'a>>::SolType, <TupleElement10 as SolEncode<'a>>::SolType, <TupleElement11 as SolEncode<'a>>::SolType)

Source§

fn to_sol_type(&'a self) -> Self::SolType

Source§

impl<T> SolEncode<'_> for PhantomData<T>

Implementors§

Source§

impl SolEncode<'_> for H256

Source§

impl SolEncode<'_> for U256

Source§

impl SolEncode<'_> for Weight

Source§

impl SolEncode<'_> for AccountId

Source§

impl SolEncode<'_> for Hash

Source§

impl SolEncode<'_> for Address

Source§

impl<'a> SolEncode<'a> for DynBytes

Source§

impl<'a, const N: usize> SolEncode<'a> for FixedBytes<N>
where ByteCount<N>: SupportedFixedBytes,