3 releases
0.1.2 | Nov 19, 2024 |
---|---|
0.1.1 | Oct 10, 2024 |
0.1.0 | Jul 12, 2024 |
#209 in Asynchronous
2,359 downloads per month
Used in zcash_client_backend
17KB
72 lines
dynosaur lets you use dynamic dispatch on traits with async fn
and
methods returning impl Trait
.
#[dynosaur::dynosaur(DynNext)]
trait Next {
type Item;
async fn next(&mut self) -> Self::Item;
}
The macro above generates a type called DynNext
which can be used like this:
async fn dyn_dispatch(iter: &mut DynNext<'_, i32>) {
while let Some(item) = iter.next().await {
println!("- {item}");
}
}
let a = [1, 2, 3];
dyn_dispatch(DynNext::from_mut(&mut a.into_iter())).await;
The general rule is that anywhere you would write dyn Trait
(which would
result in a compiler error), you instead write DynTrait
.
Methods returning impl Trait
box their return types when dispatched
dynamically, but not when dispatched statically.
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~235–680KB
~16K SLoC