#[macro_export]
macro_rules! create_entry_points {
(@migration; $contract:ident, true) => {
#[no_mangle]
extern "C" fn migrate(env_ptr: u32, msg_ptr: u32) -> u32 {
do_migrate(
&$contract::migrate::<ExternalStorage, ExternalApi, ExternalQuerier>,
env_ptr,
msg_ptr,
)
}
};
(@migration; $contract:ident, false) => {};
(@inner; $contract:ident, migration = $migration:tt) => {
mod wasm {
use super::$contract;
use cosmwasm_std::{
do_handle, do_init, do_migrate, do_query, ExternalApi, ExternalQuerier,
ExternalStorage,
};
#[no_mangle]
extern "C" fn init(env_ptr: u32, msg_ptr: u32) -> u32 {
do_init(
&$contract::init::<ExternalStorage, ExternalApi, ExternalQuerier>,
env_ptr,
msg_ptr,
)
}
#[no_mangle]
extern "C" fn handle(env_ptr: u32, msg_ptr: u32) -> u32 {
do_handle(
&$contract::handle::<ExternalStorage, ExternalApi, ExternalQuerier>,
env_ptr,
msg_ptr,
)
}
#[no_mangle]
extern "C" fn query(msg_ptr: u32) -> u32 {
do_query(
&$contract::query::<ExternalStorage, ExternalApi, ExternalQuerier>,
msg_ptr,
)
}
$crate::create_entry_points!(@migration; $contract, $migration);
}
};
($contract:ident) => {
$crate::create_entry_points!(@inner; $contract, migration = false);
};
}
#[macro_export]
macro_rules! create_entry_points_with_migration {
($contract:ident) => {
$crate::create_entry_points!(@inner; $contract, migration = true);
};
}