short_future 0.1.1

Future with shorter lifetime for async closures
Documentation
# Futures with short lifetimes

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:

1. references in the enclosing scope with lifetime 'a.
2. references in the closure's arguments with lifetime 'b.

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:

```rust
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`.