#patching #monkey #unsafe #fun #anything #testing #profit

guerrilla

Guerrilla(或Monkey)Patching在Rust中用于(不安全)娱乐和盈利

6个版本

使用旧Rust 2015

0.1.4 2018年11月13日
0.1.3 2018年11月13日
0.0.0 2018年11月8日

#5 in #patching

每月38次下载

MIT/Apache

14KB
303 代码行

Guerrilla

Crates.io Travis (.com) AppVeyor License

Guerrilla(或Monkey)Patching在Rust中用于(不安全)娱乐和盈利。

提供任意Monkey Patching。请勿将此crate用于测试以外的任何目的。否则后果自负。

可以修补Rust中(几乎)任何函数(free,associated,instance,generic等)。不能修补任何来自std的内容。

用法

extern crate guerrilla;

#[inline(never)]
fn say_hi(name: &str) {
    println!("hello, {}", name);
}

fn main() {
    // Variadic generics would be wondeful so we could have a [guerrilla::patch]
    let _guard = guerrilla::patch1(say_hi, |name| {
        // So sneaky... like a sneaky sneaky snek
        println!("bye, {}", name);
    });

    // [...]
    // Thousands of lines codes further in the project
    // [...]

    say_hi("Steve");

    // Once the guard is dropped the patch reverts the function to its original
    // behavior.
    drop(_guard);

    say_hi("Bob");
}

许可证

许可如下

任选其一。

贡献

除非你明确表示,否则任何有意提交以包含在作品中的贡献,如Apache-2.0许可证中定义,应按上述方式双重许可,不附加任何额外条款或条件。

致谢

灵感(和派生)自monkey-patching-in-go

依赖

~215KB