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_impl::{delegate, Delegate};

#[delegate]
trait Calc {
    fn calc(&self, lhs: usize, rhs: usize) -> usize;
}

#[delegate]
trait Increment {
    fn increment(&mut self) -> usize;
}

#[derive(Default)]
struct Child(usize);

impl Calc for Child {
    fn calc(&self, lhs: usize, rhs: usize) -> usize {
        lhs + rhs
    }
}

impl Increment for Child {
    fn increment(&mut self) -> usize {
        self.0 += 1;
        self.0
    }
}

#[delegate]
trait Hello {
    fn hello(&mut self);
}

#[delegate]
trait Number {
    fn num(&self) -> usize;
}

#[derive(Default)]
struct HelloChild;

impl Hello for HelloChild {
    fn hello(&mut self) {}
}

impl Number for HelloChild {
    fn num(&self) -> usize {
        3
    }
}

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

    #[to(Hello, Number)]
    child2: HelloChild,
}

fn main() {
    let mut parent = Parent::default();
    assert_eq!(parent.calc(2, 3), 5);
    assert_eq!(parent.increment(), 1);
    parent.hello();
    assert_eq!(parent.num(), 3);
}