#[macro_export]
macro_rules! get_balance {
(@inner, $holder:expr, $type:expr, $version:expr) => {{
let system_token = internal_data!(system_token);
let (error, balance) = wevm::v1::bindings::get_balance(
system_token.0,
system_token.1,
$holder.as_ptr(),
$holder.len(),
$type,
$version,
);
error!(error);
balance
}};
(@inner, $holder:expr, $asset_id:expr, $type:expr, $version:expr) => {{
let (error, balance) = wevm::v1::bindings::get_balance(
$asset_id.as_ptr(),
$asset_id.len(),
$holder.as_ptr(),
$holder.len(),
$type,
$version,
);
error!(error);
balance
}};
(this) => {{
let system_token = internal_data!(system_token);
let this = internal_data!(this);
let (error, balance) =
wevm::v0::bindings::get_balance(system_token.0, system_token.1, this.0, this.1);
error!(error);
balance
}};
(this, asset => $asset_id:expr) => {{
let this = internal_data!(this);
let (error, balance) =
wevm::v0::bindings::get_balance($asset_id.as_ptr(), $asset_id.len(), this.0, this.1);
error!(error);
balance
}};
(address => $address:expr) => {
get_balance!(@inner, $address, 0, 1)
};
(address => $address:expr, asset => $asset_id:expr) => {
get_balance!(@inner, $address, $asset_id, 0, 1)
};
(alias => $address:expr) => {
get_balance!(@inner, $address, 0, 2)
};
(alias => $address:expr, asset => $asset_id:expr) => {
get_balance!($address, $asset_id, 0, 2)
};
(contract => $address:expr) => {
get_balance!(@inner, $address, 1, 1)
};
(contract => $address:expr, asset => $asset_id:expr) => {
get_balance!($address, $asset_id, 1, 1)
};
}
#[macro_export]
macro_rules! transfer {
(@inner, $recipient:expr, $amount:expr, $type:expr, $version:expr) => {
let system_token = internal_data!(system_token);
let error = wevm::v1::bindings::transfer(
system_token.0,
system_token.1,
$recipient.as_ptr(),
$recipient.len(),
$type,
$version,
$amount,
);
error!(error);
};
(@inner, $asset_id:expr, $recipient:expr, $amount:expr, $type:expr, $version:expr) => {
let error = wevm::v1::bindings::transfer(
$asset_id.as_ptr(),
$asset_id.len(),
$recipient.as_ptr(),
$recipient.len(),
$type,
$version,
$amount,
);
error!(error);
};
(address => $recipient:expr, $amount:expr) => {
transfer!(@inner, $recipient, $amount, 0, 1);
};
(alias => $recipient:expr, $amount:expr) => {
transfer!(@inner, $recipient, $amount, 0, 2);
};
(contract => $recipient:expr, $amount:expr) => {
transfer!(@inner, $recipient, $amount, 1, 1);
};
(asset => $asset_id:expr, address => $recipient:expr, $amount:expr) => {
transfer!(@inner, $asset_id, $recipient, $amount, 0, 1);
};
(asset => $asset_id:expr, alias => $recipient:expr, $amount:expr) => {
transfer!(@inner, $asset_id, $recipient, $amount, 0, 2);
};
(asset => $asset_id:expr, contract => $recipient:expr, $amount:expr) => {
transfer!(@inner, $asset_id, $recipient, $amount, 1, 1);
};
}
#[macro_export]
macro_rules! issue {
($name:expr, $description:expr, $quantity:expr, $decimals:expr, $is_reissuable:expr) => {{
let (error, ptr, len) = wevm::v1::bindings::issue(
$name.as_ptr(),
$name.len(),
$description.as_ptr(),
$description.len(),
$quantity,
$decimals,
$is_reissuable,
);
error!(error);
core::slice::from_raw_parts(ptr, len)
}};
}
#[macro_export]
macro_rules! burn {
($asset_id:expr, $amount:expr) => {
let error = wevm::v0::bindings::burn($asset_id.as_ptr(), $asset_id.len(), $amount);
error!(error);
};
}
#[macro_export]
macro_rules! reissue {
($asset_id:expr, $amount:expr, $is_reissuable:expr) => {
let error = wevm::v0::bindings::reissue(
$asset_id.as_ptr(),
$asset_id.len(),
$amount,
$is_reissuable,
);
error!(error);
};
}