In JavaScript, async code is written with Promises and async/await syntax similar to that of Rust. It is generally considered redundant (and therefore discouraged) to return and await a Promise when it can simply be returned (i.e., when an async function is executed as the last thing in another function):
async function myFn() { /* ... */ }
async function myFn2() {
  // do setup work
  return await myFn()
  // ^ this is not necessary when we can just return the Promise
}
I am wondering whether a similar pattern applies in Rust. Should I prefer this:
pub async fn my_function(
    &mut self,
) -> Result<()> {
    // do synchronous setup work
    self.exec_command(
        /* ... */
    )
    .await
}
Or this:
pub fn my_function(
    &mut self,
) -> impl Future<Output = Result<()>> {
    // do synchronous setup work
    self.exec_command(
        /* ... */
    )
}
The former feels more ergonomic to me, but I suspect that the latter might be more performant. Is this the case?
 
     
     
    