Crate async_trait_fn
source ·Expand description
async-trait-fn
This is a fork of the widely acclaimed async-trait crate. This crate adds two experimental attributes to async-trait that can be applied to asynchronous trait methods and associated functions to avoid heap memory allocation.
unboxed
An async fn without a default implementation may get transformed into a
method that returns impl Future + Send + 'async_trait when
#[macro@unboxed] is marked on both the trait and the impl blocks.
#[macro@unboxed] requires the following unstable language features:
associated_type_bounds and type_alias_impl_trait.
#![feature(associated_type_bounds, type_alias_impl_trait)]
#[async_trait]
pub trait MyFastTrait {
    /// `cnt_fast` returns an instance of a concrete `Future` type.
    #[unboxed]
    async fn cnt_fast(&self) -> usize;
    // presumably other methods
}
struct MyType(usize);
#[async_trait]
impl MyFastTrait for MyType {
    #[unboxed]
    async fn cnt_fast(&self) -> usize {
        self.0
    }
}
let value = MyType(1);
let unboxed_future = value.cnt_fast();The feature is not generally applicable due to a bug in the Rust type system.
unboxed_simple
unboxed_simple is identical to unboxed except that all the lifetime
bounds in the type and parameters are substituted with a single lifetime.