1 个不稳定版本
0.1.0 | 2024年7月6日 |
---|
#618 在 过程宏
12KB
91 行
fnaop
fnaop
是一个轻量级且灵活的 Rust 库,旨在将面向方面编程 (AOP
) 引入你的 Rust 函数。通过使用 fnaop
,你可以轻松地添加 pre
和 post
函数逻辑,而无需修改函数的核心功能,从而使代码更简洁、更易于维护。
1.用法
将其添加到你的 Cargo.toml
[dependencies]
fnaop = "0.1"
2.APIs
Aspect
: 一个用于将面向方面编程 (AOP
) 应用到函数的属性宏。该 Aspect
宏允许你指定在目标函数之前和之后分别调用的 before
和 after
函数。这对于封装横切关注点,如日志、度量或其他副作用非常有用。
2.1.普通函数
普通函数,适配 0 个或更多普通参数。
#[Aspect(before = "before_fn")]
pub fn say_hello(x: i64) {
println!("Hello:say_hello, {}", x);
}
#[Aspect(after = "after_fn")]
pub fn say_hello(x: i64) {
println!("Hello:say_hello, {}", x);
}
#[Aspect(before = "before_fn", after = "after_fn")]
pub fn say_hello(x: i64) {
println!("Hello:say_hello, {}", x);
}
// ----------------------------------------------------------------
#[Aspect(before = "before_fn_empty", after = "before_fn_empty")]
pub fn say_hello_empty() {
println!("Hello:say_hello_empty");
}
2.2.生命周期
具有生命周期参数的函数。
#[Aspect(before = "before::struct_before_fn_lifetime", after = "after::struct_after_fn_lifetime")]
pub fn say_hello_struct_lifetime<'a>(ctx: LifetimeHelloContext<'a>) {
println!("struct::Hello, {} {}", ctx.x, ctx.y);
}
2.3.返回值
具有返回值的函数。
#[Aspect(before = "before::struct_before_fn_lifetime", after = "after::struct_after_fn_lifetime")]
pub fn say_hello_struct_lifetime_with_return<'a>(ctx: LifetimeHelloContext<'a>) -> i64 {
println!("struct::Hello, {} {}", ctx.x, ctx.y);
*ctx.x
}
2.4.其他
…
// @see integration_tests.rs
依赖关系
~1.5MB
~35K SLoC