Skip to content
☢ Guerrilla (or Monkey) Patching in Rust for (unsafe) fun and profit.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples reliable patching requires #[inline(never)] Nov 9, 2018
src Fix rel jump for 32-bit and adjust tiny test for 32-bit Nov 13, 2018
.gitignore Initial commit. Nov 9, 2018
.travis.yml Set test threads to 1 in CI Nov 10, 2018
Cargo.toml (cargo-release) start next development iteration 0.1.5-alpha.0 Nov 13, 2018
LICENSE-APACHE Add licenses and README Nov 9, 2018
LICENSE-MIT Add licenses and README Nov 9, 2018
README.md reliable patching requires #[inline(never)] Nov 9, 2018
appveyor.yml

README.md

Guerrilla

Crates.io Travis (.com) AppVeyor License

Guerrilla (or Monkey) Patching in Rust for (unsafe) fun and profit.

Provides aribtrary monkey patching in Rust. Please do not use this crate for anything outside of testing. It will not end well.

Can patch (almost) any function in Rust (free, associated, instance, generic, etc.). Can not patch anything from std.

Usage

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");
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Credits

Inspired (and derived) from monkey-patching-in-go.

You can’t perform that action at this time.