ink_primitives::reflect

Struct TraitDefinitionRegistry

source
pub struct TraitDefinitionRegistry<E> { /* private fields */ }
Expand description

Type that is guaranteed by ink! to implement all ink! trait definitions.

This guarantee is used by ink! itself and can be used by ink! smart contract authors to query static information about known ink! trait definitions.

§Codegen

  • The #[ink::trait_definition] procedural macro generates an associated type called __ink_TraitInfo for each ink! trait definition.
  • Furthermore the ink! codegen implements the ink! trait definition for the TraitDefinitionRegistry with stub implementations for all methods that guarantee that they are never called.
  • For every implemented ink! trait definition an ink! trait info object type is generated that is linked to the global TraitDefinitionRegistry through the aforementioned __ink_TraitInfo associated type.
  • This trait info object type itself implements various traits each providing useful static reflection information to the rest of the codegen about the ink! trait definition.

§Usage

use ink_env::DefaultEnvironment;

#[ink::trait_definition]
pub trait TraitDefinition {
    #[ink(message)]
    fn message(&self);
}

/// Access the generated ink! trait info object type like this:
type TraitInfo =
    <TraitDefinitionRegistry<DefaultEnvironment> as TraitDefinition>::__ink_TraitInfo;

Trait Implementations§

source§

impl<E> ContractEnv for TraitDefinitionRegistry<E>
where E: Environment,

source§

type Env = E

The environment type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> JsonSchemaMaybe for T