auto-delegate 0.1.3

Auto delegate allows you that automatic impl of traits and delegate their handling to child members.
Documentation
use auto_delegate::{delegate, Delegate};

/// 複数のメソッド、返り値がないメソッドを持つトレイトを委譲できるようにします。
#[delegate]
trait StringRef {
    fn str_ref(&self) -> &str;

    fn str_mut(&mut self) -> &mut str;

    fn str_change(&mut self, new_val: &str) -> &str;
}

struct Child {
    str: String,
}

impl Default for Child {
    fn default() -> Self {
        Self {
            str: String::from("Hello World!"),
        }
    }
}

impl StringRef for Child {
    fn str_ref(&self) -> &str {
        self.str.as_str()
    }

    fn str_mut(&mut self) -> &mut str {
        self.str.as_mut_str()
    }

    fn str_change(&mut self, new_val: &str) -> &str {
        self.str = String::from(new_val);
        self.str_ref()
    }
}

#[derive(Delegate, Default)]
struct Parent {
    #[to(StringRef)]
    child: Child,
}

fn main() {
    let mut parent = Parent::default();

    assert_eq!(parent.str_ref(), "Hello World!");
    assert_eq!(parent.str_change("New Val"), "New Val");
    assert_eq!(parent.str_mut(), "New Val");
}