Crates.io | short_future |
lib.rs | short_future |
version | 0.1.1 |
source | src |
created_at | 2024-08-16 22:47:22.720207 |
updated_at | 2024-08-16 22:51:23.637002 |
description | Future with shorter lifetime for async closures |
homepage | |
repository | https://github.com/ldanilek/short_future |
max_upload_size | |
id | 1341087 |
size | 10,680 |
short_future is a library defining a utility for working with Future lifetimes:
ShortBoxFuture<'a, 'b, T>
can capture borrows with lifetimes of 'a
and 'b
at the same time.
ShortBoxFuture
works around limitations of HRTBs and explicit lifetime
bounds. This is useful when wrapping async closures, where the closure
returns a future that depends on both:
For example, you can write a helper that retries a database operation, where a new transaction is created for every retry, and the data is borrowed from the enclosing scope:
async fn run_twice<'a>(&'a self, f: F) -> anyhow::Result<()>
where F: for<'b> Fn(&'b mut Transaction) -> ShortBoxFuture<'b, 'a, anyhow::Result<()>>
{
for i in 0..2 {
let mut tx = self.begin();
f(&mut tx).0.await?;
}
Ok(())
}
async fn go(&self) {
let data = get_data();
self.run_twice(|tx| async {
tx.get(&data.id).await;
}.into()).await
}
See the tests for more examples, and for demonstrations of the issues that
necessitate ShortBoxFuture
.