#function #aop #programming #logic #flexible #add #pre

fnaop

fnaop 是一个轻量级且灵活的 Rust 库,旨在将面向方面编程(AOP)引入你的 Rust 函数。通过使用 fnaop,你可以轻松地添加函数的前置和后置逻辑,而无需修改函数的核心功能,从而使代码更简洁、更易于维护。

1 个不稳定版本

0.1.0 2024年7月6日

#618过程宏

Apache-2.0

12KB
91

fnaop

fnaop 是一个轻量级且灵活的 Rust 库,旨在将面向方面编程 (AOP) 引入你的 Rust 函数。通过使用 fnaop,你可以轻松地添加 prepost 函数逻辑,而无需修改函数的核心功能,从而使代码更简洁、更易于维护。

API文档

变更日志

1.用法

将其添加到你的 Cargo.toml

[dependencies]
fnaop = "0.1"

2.APIs

Aspect: 一个用于将面向方面编程 (AOP) 应用到函数的属性宏。该 Aspect 宏允许你指定在目标函数之前和之后分别调用的 beforeafter 函数。这对于封装横切关注点,如日志、度量或其他副作用非常有用。

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