auto-delegate 0.1.3

Auto delegate allows you that automatic impl of traits and delegate their handling to child members.
Documentation
use std::{marker::PhantomData, ops::Add};

use auto_delegate::{delegate, Delegate};

#[delegate]
trait Addr<X, Y: Add<Output=X>>
    where
        X: Add<Y, Output=X>,
{
    fn add(&mut self, x: X, y: Y) -> X;
}

struct Child<X, Y: Add<Output=X>>
    where
        X: Add<Y, Output=X>,
{
    _maker: PhantomData<X>,
    _maker2: PhantomData<Y>,
}

impl<X, Y: Add<Output=X>> Addr<X, Y> for Child<X, Y>
    where
        X: Add<Y, Output=X>,
{
    fn add(&mut self, x: X, y: Y) -> X {
        x + y
    }
}

#[derive(Delegate)]
struct Parent<X, Y: Add<Output=X>>
    where
        X: Add<Y, Output=X>,
{
    #[to(Addr)]
    child: Child<X, Y>,
}

fn main() {
    let mut parent = Parent {
        child: Child {
            _maker: PhantomData,
            _maker2: PhantomData,
        },
    };

    assert_eq!(parent.add(2, 3), 5);
}