#traits #impl #dispatch #decorator #macro

dizpacho

简化实现特质的样板代码

1 个不稳定版本

0.1.0 2022年6月15日

#12 in #decorator

MIT/Apache

11KB
176

编写将函数连接到特质的样板代码让我感到厌烦,所以我创建了一个辅助工具

使用 #[dizpacho] 装饰 impl 块,然后您可以使用 dizpacho 属性在方法和关联函数上连接到您喜欢的任何特质!

struct TooLazyToType(String);
struct OtherThing;

#[dizpacho::dizpacho]
impl TooLazyToType {
    /// Just call my new() function for default!
    #[dizpacho(Default::default)]
    fn new() -> Self {
        Self("howdy!".to_string())
    }
}
assert_eq!(&TooLazyToType::default().0, "howdy!");
struct TooLazyToType(String);
struct OtherThing;

#[dizpacho::dizpacho]
impl TooLazyToType {
    #[dizpacho(std::ops::Deref<Target = str>::deref)]
    fn as_str(&self) -> &str {
        &self.0
    }
}
#[dizpacho::dizpacho]
impl OtherThing {

    /// You can even do generics!
    #[dizpacho(From<Self>::from for TooLazyToType)]
    fn from_other(thing: OtherThing) -> TooLazyToType {
        TooLazyToType("I came from the other thing!".to_string())
    }
}

assert!(TooLazyToType::from(OtherThing).0.ends_with("thing!"))

依赖项

~1.5MB
~35K SLoC