The backbone of Rust's asynchronous programming story is the futures crate. This crate provides a construct called a future. This is essentially a placeholder for the result of an operation. As you would expect, the result of an operation can be in one of two states—either the operation is still in progress and the result is not available yet, or the operation has finished and the result is available. Note that in the second case, there might have been an error, making the result immaterial.
The library provides a trait called Future (among other things),which any type can implement to be able to act like a future. This is how the trait looks:
trait Future { type Item; type Error; fn poll(&mut self) -> Poll<Self::Item, ...