auto_impl_trait

Crates.ioauto_impl_trait
lib.rsauto_impl_trait
version0.7.1
sourcesrc
created_at2022-10-18 06:57:04.351696
updated_at2022-10-22 11:16:21.361713
descriptionauto impl trait by provide trait file
homepage
repositoryhttps://github.com/cgqaq/auto_impl_trait
max_upload_size
id690683
size492,846
Jason (CGQAQ)

documentation

README

auto_impl_trait

#[auto_impl_trait("./src/rect_trait.rs", Rect, "runtime")]
#[doc = "Test this will keep after expand"]
#[derive(Debug)]
struct Square {
    side: i32,
}

Will expand to

mod item;
mod area;
mod perimeter;
mod scale;
mod ____CGQAQ__SUPER_TRAIT____ {
    pub mod runtime {
        use std::ops::{Add, Sub, Mul, Div};

        pub trait Rect {
            type Item: Add + Sub + Mul + Div;
            fn area(&self) -> Self::Item;
            fn perimeter(&self) -> Self::Item;
            fn scale(&mut self, scale: Self::Item);
        }
    }

    pub use runtime::Rect;
}
pub mod __Rect_area__ {
    pub type Item = super::item::Item;

    #[tonic::async_trait]
    pub trait __Rect_area__ { fn area(&self) -> Item; }
}
pub mod __Rect_perimeter__ {
    pub type Item = super::item::Item;

    #[tonic::async_trait]
    pub trait __Rect_perimeter__ { fn perimeter(&self) -> Item; }
}
pub mod __Rect_scale__ {
    pub type Item = super::item::Item;

    #[tonic::async_trait]
    pub trait __Rect_scale__ { fn scale(&mut self, scale: Item); }
}
use ____CGQAQ__SUPER_TRAIT____::Rect;
#[doc = "Test this will keep after expand"]
#[derive(Debug)]
struct Square {
    side: i32,
}
#[tonic::async_trait]
impl Rect for Square {
    type Item = super::item::Item;
    fn area(&self) -> Self::Item { <dyn __Rect_area__::__Rect_area__>::area(self) }
    fn perimeter(&self) -> Self::Item { <dyn __Rect_perimeter__::__Rect_perimeter__>::perimeter(self) }
    fn scale(&mut self, scale: Self::Item) { <dyn __Rect_scale__::__Rect_scale__>::scale(self, scale) }
}
Commit count: 31

cargo fmt