If timeout is Some, returns a Timeout
that resolves to the value of future if the future completes within timeout,
or a [TimeoutError] if it does not.
If timeout is None, returns a new future which maps the specified future’s
output type to a Result::Ok.