#mut #macro #coerce

mutify

Macro for coercing a mut var: T or var: &mut T into a &mut T

1 unstable release

0.1.0 Jan 11, 2024

#2137 in Rust patterns

MIT/Apache

7KB

Mutify

Crates.io Docs

Macro for coercing a mut var: T or var: &mut T into a &mut T.

Why

A naive apporach would be putting a &mut before the expression, however this doesn't work.

let func = |v: &mut i32| *v += 1;
let mut b = 0;
let a = &mut b;
// `a` is not mutable.
func(&mut a);

Example

fn plus_one(n: &mut i32) {
    *n += 1;
}

let mut a = 3;
plus_one(mutify!(a));
assert_eq!(a, 4);

let b = &mut a;
plus_one(mutify!(b));
assert_eq!(a, 5);

Note

A magic function called __coerce_mut is used here, don't name your functions that and you are good!


lib.rs:

Macro for coercing a mut var: T or var: &mut T into a &mut T.

Why

A naive apporach would be putting a &mut before the expression, however this doesn't work.

let func = |v: &mut i32| *v += 1;
let mut b = 0;
let a = &mut b;
// `a` is not mutable.
func(&mut a);

Example

fn plus_one(n: &mut i32) {
    *n += 1;
}

let mut a = 3;
plus_one(mutify!(a));
assert_eq!(a, 4);

let b = &mut a;
plus_one(mutify!(b));
assert_eq!(a, 5);

Note

A magic function called __coerce_mut is used here, don't name your functions that and you are good!

No runtime deps