fix: do not require the runtime to use unstable features

master
dignifiedquire 5 years ago
parent 0ec027dbff
commit 52c72426c1

@ -29,9 +29,13 @@ default = [
"log", "log",
"num_cpus", "num_cpus",
"pin-project-lite", "pin-project-lite",
"smol",
] ]
docs = ["attributes", "unstable", "default"] docs = ["attributes", "unstable", "default"]
unstable = ["std"] unstable = [
"std",
"futures-timer",
]
attributes = ["async-attributes"] attributes = ["async-attributes"]
std = [ std = [
"alloc", "alloc",
@ -42,8 +46,6 @@ std = [
"once_cell", "once_cell",
"pin-utils", "pin-utils",
"slab", "slab",
"smol",
"futures-timer",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"futures-channel", "futures-channel",
] ]
@ -66,6 +68,7 @@ once_cell = { version = "1.3.1", optional = true }
pin-project-lite = { version = "0.1.4", optional = true } pin-project-lite = { version = "0.1.4", optional = true }
pin-utils = { version = "0.1.0-alpha.4", optional = true } pin-utils = { version = "0.1.0-alpha.4", optional = true }
slab = { version = "0.4.2", optional = true } slab = { version = "0.4.2", optional = true }
futures-timer = { version = "3.0.2", optional = true }
# Devdepencency, but they are not allowed to be optional :/ # Devdepencency, but they are not allowed to be optional :/
surf = { version = "1.0.3", optional = true } surf = { version = "1.0.3", optional = true }

@ -61,10 +61,10 @@ cfg_std! {
mod ready; mod ready;
} }
cfg_default! { #[cfg(any(feature = "unstable", feature = "default"))]
pub use timeout::{timeout, TimeoutError}; pub use timeout::{timeout, TimeoutError};
mod timeout; #[cfg(any(feature = "unstable", feature = "default"))]
} mod timeout;
cfg_unstable! { cfg_unstable! {
pub use into_future::IntoFuture; pub use into_future::IntoFuture;

@ -168,7 +168,9 @@ cfg_default! {
} }
cfg_unstable! { cfg_unstable! {
#[cfg(feature = "default")]
pub use spawn_local::spawn_local; pub use spawn_local::spawn_local;
#[cfg(feature = "default")]
mod spawn_local; mod spawn_local;
} }

@ -60,36 +60,38 @@ pub(crate) trait Context {
} }
#[cfg(all(not(target_os = "unknown"), feature = "default"))] #[cfg(all(not(target_os = "unknown"), feature = "default"))]
pub(crate) type Timer = smol::Timer; mod timer {
pub type Timer = smol::Timer;
}
#[cfg(all(target_arch = "wasm32", feature = "default"))] #[cfg(any(all(target_arch = "wasm32", feature = "default"), feature = "unstable"))]
#[derive(Debug)] mod timer {
pub(crate) struct Timer(futures_timer::Delay); use std::pin::Pin;
use std::task::Poll;
#[cfg(all(target_arch = "wasm32", feature = "default"))] #[derive(Debug)]
impl Timer { pub(crate) struct Timer(futures_timer::Delay);
pub(crate) fn after(dur: std::time::Duration) -> Self {
Timer(futures_timer::Delay::new(dur))
}
}
#[cfg(target_arch = "wasm32")] impl Timer {
use std::pin::Pin; pub(crate) fn after(dur: std::time::Duration) -> Self {
#[cfg(target_arch = "wasm32")] Timer(futures_timer::Delay::new(dur))
use std::task::Poll; }
}
#[cfg(target_arch = "wasm32")] impl std::future::Future for Timer {
impl std::future::Future for Timer { type Output = ();
type Output = ();
fn poll(mut self: Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> Poll<Self::Output> { fn poll(mut self: Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> Poll<Self::Output> {
match Pin::new(&mut self.0).poll(cx) { match Pin::new(&mut self.0).poll(cx) {
Poll::Pending => Poll::Pending, Poll::Pending => Poll::Pending,
Poll::Ready(_) => Poll::Ready(()), Poll::Ready(_) => Poll::Ready(()),
}
} }
} }
} }
pub(crate) use timer::*;
/// Defers evaluation of a block of code until the end of the scope. /// Defers evaluation of a block of code until the end of the scope.
#[cfg(feature = "default")] #[cfg(feature = "default")]
#[doc(hidden)] #[doc(hidden)]

Loading…
Cancel
Save