Gate await keyword for Rust 1.34.0

You are using features that are only available in Rust 1.39. Thus your entire crate will only be compatible with Rust 1.39 and up.

To support older versions of Rust, your code cannot use features that don't exist in those versions. For futures, that means liberal usage of the futures combinators instead of await and returning impl Future instead of async fn.

#[cfg(not(feature = "fancy"))]
use futures::FutureExt;
use std::future::Future;

fn inner() -> impl Future<Output = i32> {
    futures::future::ready(42)
}

#[cfg(not(feature = "fancy"))]
pub fn example()  -> impl Future<Output = i32> {
    inner().map(|v| v + 1)
}

#[cfg(feature = "fancy")]
pub async fn example() -> i32 {
    let v = inner().await;
    v + 1
}
% cargo +beta build --features=fancy
   Compiling aa v0.1.0 (/private/tmp/aa)
    Finished dev [unoptimized + debuginfo] target(s) in 0.11s
% cargo build
   Compiling aa v0.1.0 (/private/tmp/aa)
    Finished dev [unoptimized + debuginfo] target(s) in 0.24s

Since you have to duplicate your entire logic, it doesn't seem worth it to me. Either release a version that only supports Rust 1.39+ and use async / await internally or write the compatible code and use the uglier internals.