In all fairness, in other languages this usually looks like
def getUser() : Future[User] def getUser() : Future[User]Usually it would look like this in Rust:
fn get_user(&self) -> impl Future<Output = User>;
This isn't exactly the same functionally, but for most use cases it works just fine. The difference is that this uses static dispatch instead of dynamic dispatch and therefore can't support dynamically returning two different structs that both implement Future, it has to be one type.