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.

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<'a> SolEncode<'a> for &'a str

Source§

type SolType = &'a str

Source§

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

Source§

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

Source§

type SolType = &'a str

Source§

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

Source§

impl<'a> SolEncode<'a> for bool

Source§

type SolType = &'a bool

Source§

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

Source§

impl<'a> SolEncode<'a> for i8

Source§

type SolType = &'a i8

Source§

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

Source§

impl<'a> SolEncode<'a> for i16

Source§

type SolType = &'a i16

Source§

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

Source§

impl<'a> SolEncode<'a> for i32

Source§

type SolType = &'a i32

Source§

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

Source§

impl<'a> SolEncode<'a> for i64

Source§

type SolType = &'a i64

Source§

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

Source§

impl<'a> SolEncode<'a> for i128

Source§

type SolType = &'a i128

Source§

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

Source§

impl<'a> SolEncode<'a> for u8

Source§

type SolType = &'a u8

Source§

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

Source§

impl<'a> SolEncode<'a> for u16

Source§

type SolType = &'a u16

Source§

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

Source§

impl<'a> SolEncode<'a> for u32

Source§

type SolType = &'a u32

Source§

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

Source§

impl<'a> SolEncode<'a> for u64

Source§

type SolType = &'a u64

Source§

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

Source§

impl<'a> SolEncode<'a> for u128

Source§

type SolType = &'a u128

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 Box<str>

Source§

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

Source§

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

Source§

type SolType = &'a String

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<'a, T: SolEncode<'a>> SolEncode<'a> for &'a [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>> SolEncode<'a> for &'a mut [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>> SolEncode<'a> for &'a T

Source§

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

Source§

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

Source§

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

Source§

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

Source§

fn to_sol_type(&'a 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 Box<T>

Source§

type SolType = <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

Implementors§

Source§

impl SolEncode<'_> for H256

Source§

impl SolEncode<'_> for AccountId

Source§

impl SolEncode<'_> for Hash

Source§

impl<'a> SolEncode<'a> for U256

Source§

impl<'a> SolEncode<'a> for Address

Source§

impl<'a, T: SolBytesType + 'a> SolEncode<'a> for SolBytes<T>