ink_codegen/generator/
env.rs1use crate::GenerateCode;
16use derive_more::From;
17use proc_macro2::TokenStream as TokenStream2;
18use quote::quote;
19
20#[derive(From)]
22pub struct Env<'a> {
23 contract: &'a ir::Contract,
24}
25
26impl GenerateCode for Env<'_> {
27 fn generate_code(&self) -> TokenStream2 {
28 let env = self.contract.config().env();
29 let storage_ident = self.contract.module().storage().ident();
30 quote! {
31 impl ::ink::env::ContractEnv for #storage_ident {
32 type Env = #env;
33 }
34
35 type Environment = <#storage_ident as ::ink::env::ContractEnv>::Env;
36
37 type AccountId = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::AccountId;
38 type Balance = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::Balance;
39 type Hash = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::Hash;
40 type Timestamp = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::Timestamp;
41 type BlockNumber = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::BlockNumber;
42 type ChainExtension = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::ChainExtension;
43 const MAX_EVENT_TOPICS: usize = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::MAX_EVENT_TOPICS;
44 type EventRecord = <<#storage_ident as ::ink::env::ContractEnv>::Env as ::ink::env::Environment>::EventRecord;
45
46 type Address = ::ink::primitives::Address;
47 }
48 }
49}