4 releases
0.1.4 | May 14, 2023 |
---|---|
0.1.3 | Jan 28, 2023 |
0.1.2 | Jan 27, 2023 |
0.1.1 |
|
0.1.0 | Jan 27, 2023 |
#19 in #utility-macro
Used in spl
12KB
172 lines
Multicall
This library provides the multicall!
macro, which allows you to apply multiple operations
to one object without writing the name of the object again and again.
Syntax:
let mut test_variable = 1;
multicall! {
expr:
operation;
set test_variable = operation;
exec normal_operation(#);
operation;
...
{
subexpr:
operation;
set test_variable += operation;
exec normal_operation(#);
operation;
...
}; // this semicolon is mandatory.
}
Evaluates to:
let mut test_variable = 1;
{
let __multicall_item__ = expr;
__multicall_item__.operation;
test_variable = __multicall_item__.operation;
normal_operation(__multicall_item__);
__multicall_item__.operation;
...
{
let __multicall_item__ = __multicall_item__.subexpr;
__multicall_item__.operation;
test_variable += __multicall_item__.operation;
normal_operation(__multicall_item__);
__multicall_item__.operation;
...
};
}
Example:
use multicall::multicall;
use std::ops::AddAssign;
#[derive(Debug)]
struct Test { a: u32, b: i32 }
fn main() {
let mut test = Test { a: 0, b: 0 };
let b_plus_five;
multicall! {
&mut test:
a = 5;
b = 6;
{
b:
add_assign(500);
};
{
a:
add_assign(58);
};
a.add_assign(100 - 58);
set b_plus_five = b + 5;
exec println!("{}, {}", #.a, #.b);
}
println!("{test:?}");
}
More in examples/.
Roadmap
- Basic multicall syntax
-
set
external variables -
exec
normal code - If statements
- ... maybe more