extern crate ambassador;
use ambassador::{delegatable_trait, delegate_to_methods};
use std::ops::DerefMut;
#[delegatable_trait]
trait MyTrait {
fn get(&self) -> u32;
fn into_u32(self) -> u32;
}
impl MyTrait for u32 {
fn get(&self) -> u32 {
*self
}
fn into_u32(self) -> u32 {
self
}
}
struct Wrap<X>(X);
#[delegate_to_methods]
#[delegate(MyTrait, target_owned = "inner", target_ref = "inner_ref")]
#[delegate(MyTrait, target_owned = "inner_ref", target_ref = "inner_ref")]
#[delegate(MyTrait, target_owned = "inner", target_ref = "fail1")]
#[delegate(MyTrait)] impl<X> Wrap<X>
where
X: DerefMut + Into<u32>,
X::Target: Sized,
{
fn inner(self) -> u32 {
self.0.into()
}
fn inner_ref(&self) -> &X::Target {
self.0.deref()
}
fn inner_mut(&mut self) -> &mut X::Target {
self.0.deref_mut()
}
fn fail1() -> u32 {
5
}
fn fail2() -> u32 {
5
}
}
fn main() {}