auto_ops ![Build Status] ![Latest Version]

Macros for easy operator overloading.

Documentation

This library is forked from the original impl_ops by brianwp3000.

This library makes writing multiple impl std::ops::<op> blocks much faster, especially when you want operators defined for both owned and borrowed variants of the inputs.

To use, import the macros with use auto_ops::*;. Remember that you can only overload operators between one or more types defined in the current crate (respecting Rust orphan rules).

Examples

```rust use auto_ops::*;

[derive(Clone, Debug, PartialEq)]

struct DonkeyKong { pub bananas: i32, } impl DonkeyKong { pub fn new(bananas: i32) -> DonkeyKong { DonkeyKong { bananas: bananas } } }

implopex!(+ |a: &DonkeyKong, b: &DonkeyKong| -> DonkeyKong { DonkeyKong::new(a.bananas + b.bananas) }); implopex!(+= |a: &mut DonkeyKong, b: &DonkeyKong| { a.bananas += b.bananas });

fn main() { asserteq!(DonkeyKong::new(5), DonkeyKong::new(4) + DonkeyKong::new(1)); asserteq!(DonkeyKong::new(5), DonkeyKong::new(4) + &DonkeyKong::new(1)); asserteq!(DonkeyKong::new(5), &DonkeyKong::new(4) + DonkeyKong::new(1)); asserteq!(DonkeyKong::new(5), &DonkeyKong::new(4) + &DonkeyKong::new(1));

let mut dk = DonkeyKong::new(4);
dk += DonkeyKong::new(1);
dk += &DonkeyKong::new(1);
assert_eq!(DonkeyKong::new(6), dk);

} ```

Roadmap

With Rust lifetime inference changes, implementations for generic (over types and lifetimes) impls are being worked on.