fn_mut 0.1.0

fn_mut macro generates function which takes mutable reference to self and returns mutable reference.
Documentation
#![feature(proc_macro)]
extern crate fn_mut;
use fn_mut::fn_mut;

struct Test1(u64);

impl Test1 {
    #[fn_mut(enable_attrs = "text")]
    fn test(&self, text: &str) -> Option<&u64> {
        if_mut! {
            println!("This is mut fn: {}", text);
        }
        if_const! {
            println!("This is const fn: {}", text);
        }
        Some(ptr!(self.0))
    }
}

#[test]
fn test1() {
    let mut t = Test1(1);
    assert_eq!(t.test("const"), Some(&1));
    let mut s = String::from("mut");
    assert_eq!(t.test_mut(&mut s), Some(&mut 1));
}