mod bank;
mod ensemble;
mod env;
mod querier;
mod storage;
mod block;
mod response;
#[cfg(feature = "ensemble-staking")]
mod staking;
mod state;
mod execution_state;
mod error;
mod event;
#[cfg(test)]
mod tests;
pub use ensemble::*;
pub use env::*;
pub use querier::*;
pub use block::Block;
pub use response::*;
pub use error::*;
pub use anyhow;
#[macro_export]
macro_rules! contract_harness {
(@init $init:path) => {
fn instantiate(
&self,
deps: $crate::cosmwasm_std::DepsMut,
env: $crate::cosmwasm_std::Env,
info: $crate::cosmwasm_std::MessageInfo,
msg: $crate::cosmwasm_std::Binary
) -> $crate::ensemble::AnyResult<$crate::cosmwasm_std::Response> {
let result = $init(
deps,
env,
info,
$crate::cosmwasm_std::from_binary(&msg)?
)?;
Ok(result)
}
};
(@execute $execute:path) => {
fn execute(
&self,
deps: $crate::cosmwasm_std::DepsMut,
env: $crate::cosmwasm_std::Env,
info: $crate::cosmwasm_std::MessageInfo,
msg: $crate::cosmwasm_std::Binary
) -> $crate::ensemble::AnyResult<$crate::cosmwasm_std::Response> {
let result = $execute(
deps,
env,
info,
$crate::cosmwasm_std::from_binary(&msg)?
)?;
Ok(result)
}
};
(@query $query:path) => {
fn query(
&self,
deps: $crate::cosmwasm_std::Deps,
env: $crate::cosmwasm_std::Env,
msg: $crate::cosmwasm_std::Binary
) -> $crate::ensemble::AnyResult<$crate::cosmwasm_std::Binary> {
let result = $query(
deps,
env,
$crate::cosmwasm_std::from_binary(&msg)?
)?;
Ok(result)
}
};
(@reply $reply:path) => {
fn reply(
&self,
deps: $crate::cosmwasm_std::DepsMut,
env: $crate::cosmwasm_std::Env,
reply: $crate::cosmwasm_std::Reply
) -> $crate::ensemble::AnyResult<$crate::cosmwasm_std::Response> {
let result = $reply(
deps,
env,
reply
)?;
Ok(result)
}
};
(@trait_impl $visibility:vis $name:ident, $($contents:tt)*) => {
$visibility struct $name;
impl $crate::ensemble::ContractHarness for $name {
$($contents)*
}
};
(
$visibility:vis $name:ident,
init: $init:path,
execute: $execute:path,
query: $query:path,
reply: $reply:path
) => {
$crate::contract_harness! {
@trait_impl
$visibility $name,
$crate::contract_harness!(@init $init);
$crate::contract_harness!(@execute $execute);
$crate::contract_harness!(@query $query);
$crate::contract_harness!(@reply $reply);
}
};
(
$visibility:vis $name:ident,
init: $init:path,
execute: $execute:path,
query: $query:path
) => {
$crate::contract_harness! {
@trait_impl
$visibility $name,
$crate::contract_harness!(@init $init);
$crate::contract_harness!(@execute $execute);
$crate::contract_harness!(@query $query);
}
};
}