Crates.io | auto_ops_det |
lib.rs | auto_ops_det |
version | 2.0.0 |
created_at | 2025-09-22 07:38:01.666819+00 |
updated_at | 2025-09-23 05:38:29.453016+00 |
description | Macros for easy operator overloading. |
homepage | |
repository | |
max_upload_size | |
id | 1849626 |
size | 65,909 |
This project is a fork of auto_ops
.
Like the upstream, auto_ops_det
provides macros for easy operator overloading, with more features.
Same as original.
The original auto_ops
is licensed under
Macros for easy operator overloading.
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).
use auto_ops::*;
#[derive(Clone, Debug, PartialEq)]
struct DonkeyKong {
pub bananas: i32,
}
impl DonkeyKong {
pub fn new(bananas: i32) -> DonkeyKong {
DonkeyKong { bananas: bananas }
}
}
impl_op_ex!(+ |a: &DonkeyKong, b: &DonkeyKong| -> DonkeyKong { DonkeyKong::new(a.bananas + b.bananas) });
impl_op_ex!(+= |a: &mut DonkeyKong, b: &DonkeyKong| { a.bananas += b.bananas });
fn main() {
assert_eq!(DonkeyKong::new(5), DonkeyKong::new(4) + DonkeyKong::new(1));
assert_eq!(DonkeyKong::new(5), DonkeyKong::new(4) + &DonkeyKong::new(1));
assert_eq!(DonkeyKong::new(5), &DonkeyKong::new(4) + DonkeyKong::new(1));
assert_eq!(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);
}
With Rust lifetime inference changes, implementations for generic (over types and lifetimes) impls are being worked on.