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次下载
14KB
303 代码行
Guerrilla
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 License,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确表示,否则任何有意提交以包含在作品中的贡献,如Apache-2.0许可证中定义,应按上述方式双重许可,不附加任何额外条款或条件。
致谢
灵感(和派生)自monkey-patching-in-go。
依赖
~215KB