| An argument lifetime was elided in an async function. |
| |
| Erroneous code example: |
| |
| When a struct or a type is bound/declared with a lifetime it is important for |
| the Rust compiler to know, on usage, the lifespan of the type. When the |
| lifetime is not explicitly mentioned and the Rust Compiler cannot determine |
| the lifetime of your type, the following error occurs. |
| |
| ```compile_fail,E0726 |
| use futures::executor::block_on; |
| struct Content<'a> { |
| title: &'a str, |
| body: &'a str, |
| } |
| async fn create(content: Content) { // error: implicit elided |
| // lifetime not allowed here |
| println!("title: {}", content.title); |
| println!("body: {}", content.body); |
| } |
| let content = Content { title: "Rust", body: "is great!" }; |
| let future = create(content); |
| block_on(future); |
| ``` |
| |
| Specify desired lifetime of parameter `content` or indicate the anonymous |
| lifetime like `content: Content<'_>`. The anonymous lifetime tells the Rust |
| compiler that `content` is only needed until the `create` function is done with |
| its execution. |
| |
| The `implicit elision` meaning the omission of suggested lifetime that is |
| `pub async fn create<'a>(content: Content<'a>) {}` is not allowed here as |
| lifetime of the `content` can differ from current context: |
| |
| ```ignore (needs futures dependency) |
| async fn create(content: Content<'_>) { // ok! |
| println!("title: {}", content.title); |
| println!("body: {}", content.body); |
| } |
| ``` |
| |
| Know more about lifetime elision in this [chapter][lifetime-elision] and a |
| chapter on lifetimes can be found [here][lifetimes]. |
| |
| [lifetime-elision]: https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision |
| [lifetimes]: https://doc.rust-lang.org/rust-by-example/scope/lifetime.html |