async-trait-static 0.1.4

async fn in trait for no_std
Documentation
#![feature(type_alias_impl_trait)]
#![feature(generic_associated_types)]

type RititReturnDeff<'_async_lifetime, S> = impl core::future::Future<Output = u8>;

trait AsyncFnTrait {
    type RititReturnRun<'_async_lifetime>: core::future::Future<Output = ()>;

    fn run<'_async_lifetime>(&'_async_lifetime self) -> Self::RititReturnRun<'_async_lifetime>;
    fn deff<'_async_lifetime>(&'_async_lifetime self) -> RititReturnDeff<'_async_lifetime, Self>
    where
        Self: Sized,
    {
        async move { 1 }
    }
}
struct AsyncStruct;

impl AsyncStruct {
    async fn hello(&self) -> u8 {
        1
    }
}

impl AsyncFnTrait for AsyncStruct {
    type RititReturnRun<'_async_lifetime> = impl core::future::Future<Output = ()>;
    fn run<'_async_lifetime>(&'_async_lifetime self) -> Self::RititReturnRun<'_async_lifetime> {
        async move {
            self.hello().await;
        }
    }
}

fn main() {
    let s = AsyncStruct;
    async {
        s.deff().await;
    };
}