Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some modules support no_std #680

Merged
merged 14 commits into from
Feb 4, 2020
19 changes: 19 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jobs:
with:
command: check
args: --features unstable --all --bins --examples --tests

- name: check bench
uses: actions-rs/cargo@v1
if: matrix.rust == 'nightly'
Expand Down Expand Up @@ -71,6 +72,24 @@ jobs:
command: test
args: --doc --features "unstable attributes"

build__with_no_std:
name: Build with no-std
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@master

- name: setup
run: |
rustup default nightly
rustup target add thumbv7m-none-eabi

- name: check no_std
uses: actions-rs/cargo@v1
with:
command: check
args: --no-default-features --features alloc --target thumbv7m-none-eabi -Z avoid-dev-deps

check_fmt_and_docs:
name: Checking fmt and docs
runs-on: ubuntu-latest
Expand Down
10 changes: 7 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,19 @@ docs = ["attributes", "unstable", "default"]
unstable = ["std", "broadcaster", "futures-timer"]
attributes = ["async-attributes"]
std = [
"alloc",
"crossbeam-utils",
"futures-core",
taiki-e marked this conversation as resolved.
Show resolved Hide resolved
"futures-core/std",
"futures-io",
"memchr",
"once_cell",
"pin-project-lite",
"pin-utils",
"slab",
]
alloc = [
"futures-core/alloc",
"pin-project-lite",
]

[dependencies]
async-attributes = { version = "1.1.1", optional = true }
Expand All @@ -55,7 +59,7 @@ broadcaster = { version = "1.0.0", optional = true }
crossbeam-channel = { version = "0.4.0", optional = true }
crossbeam-deque = { version = "0.7.2", optional = true }
crossbeam-utils = { version = "0.7.0", optional = true }
futures-core = { version = "0.3.1", optional = true }
futures-core = { version = "0.3.1", optional = true, default-features = false }
futures-io = { version = "0.3.1", optional = true }
futures-timer = { version = "2.0.2", optional = true }
kv-log-macro = { version = "1.0.4", optional = true }
Expand Down
6 changes: 3 additions & 3 deletions src/future/future/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ cfg_unstable_default! {
}

extension_trait! {
use std::pin::Pin;
use std::ops::{Deref, DerefMut};
use core::pin::Pin;
use core::ops::{Deref, DerefMut};

use crate::task::{Context, Poll};

Expand Down Expand Up @@ -136,7 +136,7 @@ extension_trait! {

[`Future`]: ../future/trait.Future.html
"#]
pub trait FutureExt: std::future::Future {
pub trait FutureExt: core::future::Future {
/// Returns a Future that delays execution for a specified time.
///
/// # Examples
Expand Down
21 changes: 13 additions & 8 deletions src/future/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,20 @@
//! [`Future::race`]: trait.Future.html#method.race
//! [`Future::try_race`]: trait.Future.html#method.try_race

pub use future::Future;
pub use pending::pending;
pub use poll_fn::poll_fn;
pub use ready::ready;
cfg_alloc! {
pub use future::Future;
pub(crate) mod future;
}

cfg_std! {
pub use pending::pending;
pub use poll_fn::poll_fn;
pub use ready::ready;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI: to enable these utilities on no-std, use manually implemented futures instead of async functions.


pub(crate) mod future;
mod pending;
mod poll_fn;
mod ready;
mod pending;
mod poll_fn;
mod ready;
}

cfg_default! {
pub use timeout::{timeout, TimeoutError};
Expand Down
12 changes: 9 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@
//! features = ["std"]
//! ```

#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(feature = "docs", feature(doc_cfg))]
#![warn(missing_docs, missing_debug_implementations, rust_2018_idioms)]
#![allow(clippy::mutex_atomic, clippy::module_inception)]
Expand All @@ -229,6 +230,8 @@
#![doc(html_logo_url = "https://async.rs/images/logo--hero.svg")]
#![recursion_limit = "2048"]

extern crate alloc;

#[macro_use]
mod utils;

Expand All @@ -240,14 +243,17 @@ pub use async_attributes::{main, test};
#[cfg(feature = "std")]
mod macros;

cfg_std! {
cfg_alloc! {
pub mod task;
pub mod future;
pub mod stream;
}

cfg_std! {
pub mod io;
pub mod os;
pub mod prelude;
pub mod stream;
pub mod sync;
pub mod task;
}

cfg_default! {
Expand Down
4 changes: 2 additions & 2 deletions src/stream/double_ended_stream/next_back.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::pin::Pin;
use std::future::Future;
use core::pin::Pin;
use core::future::Future;

use crate::stream::DoubleEndedStream;
use crate::task::{Context, Poll};
Expand Down
6 changes: 3 additions & 3 deletions src/stream/double_ended_stream/nth_back.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};
use core::future::Future;
use core::pin::Pin;
use core::task::{Context, Poll};

use crate::stream::DoubleEndedStream;

Expand Down
6 changes: 3 additions & 3 deletions src/stream/double_ended_stream/rfind.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::task::{Context, Poll};
use std::future::Future;
use std::pin::Pin;
use core::task::{Context, Poll};
use core::future::Future;
use core::pin::Pin;

use crate::stream::DoubleEndedStream;

Expand Down
6 changes: 3 additions & 3 deletions src/stream/double_ended_stream/rfold.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};
use core::future::Future;
use core::pin::Pin;
use core::task::{Context, Poll};

use pin_project_lite::pin_project;

Expand Down
2 changes: 1 addition & 1 deletion src/stream/double_ended_stream/try_rfold.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::future::Future;
use std::pin::Pin;
use core::pin::Pin;
use crate::task::{Context, Poll};

use pin_project_lite::pin_project;
Expand Down
4 changes: 2 additions & 2 deletions src/stream/empty.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::marker::PhantomData;
use std::pin::Pin;
use core::marker::PhantomData;
use core::pin::Pin;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
4 changes: 2 additions & 2 deletions src/stream/extend.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::pin::Pin;
use core::pin::Pin;
use core::future::Future;

use crate::prelude::*;
use crate::stream::IntoStream;

/// Extends a collection with the contents of a stream.
Expand Down
2 changes: 1 addition & 1 deletion src/stream/from_fn.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::pin::Pin;
use core::pin::Pin;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
2 changes: 1 addition & 1 deletion src/stream/from_iter.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::pin::Pin;
use core::pin::Pin;

use pin_project_lite::pin_project;

Expand Down
4 changes: 2 additions & 2 deletions src/stream/from_stream.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::future::Future;
use std::pin::Pin;
use core::future::Future;
use core::pin::Pin;

use crate::stream::IntoStream;

Expand Down
4 changes: 2 additions & 2 deletions src/stream/interval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ use std::pin::Pin;
use std::task::{Context, Poll};
use std::time::{Duration, Instant};

use crate::future::Future;
use crate::stream::Stream;
use futures_timer::Delay;

use crate::prelude::*;

/// Creates a new stream that yields at a set interval.
///
/// The stream first yields after `dur`, and continues to yield every
Expand Down
2 changes: 1 addition & 1 deletion src/stream/once.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::pin::Pin;
use core::pin::Pin;

use pin_project_lite::pin_project;

Expand Down
6 changes: 3 additions & 3 deletions src/stream/pending.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::marker::PhantomData;
use std::pin::Pin;
use std::task::{Context, Poll};
use core::marker::PhantomData;
use core::pin::Pin;
use core::task::{Context, Poll};

use crate::stream::{DoubleEndedStream, ExactSizeStream, FusedStream, Stream};

Expand Down
4 changes: 2 additions & 2 deletions src/stream/product.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::pin::Pin;
use std::future::Future;
use core::pin::Pin;
use core::future::Future;

use crate::stream::Stream;

Expand Down
2 changes: 1 addition & 1 deletion src/stream/repeat.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::pin::Pin;
use core::pin::Pin;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
2 changes: 1 addition & 1 deletion src/stream/repeat_with.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::pin::Pin;
use core::pin::Pin;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
6 changes: 3 additions & 3 deletions src/stream/stream/all.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::marker::PhantomData;
use std::pin::Pin;
use std::future::Future;
use core::marker::PhantomData;
use core::pin::Pin;
use core::future::Future;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
6 changes: 3 additions & 3 deletions src/stream/stream/any.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::marker::PhantomData;
use std::pin::Pin;
use std::future::Future;
use core::marker::PhantomData;
use core::pin::Pin;
use core::future::Future;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
5 changes: 3 additions & 2 deletions src/stream/stream/chain.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
use std::pin::Pin;
use core::pin::Pin;

use pin_project_lite::pin_project;

use super::fuse::Fuse;
use crate::prelude::*;
use crate::stream::stream::StreamExt;
use crate::stream::Stream;
use crate::task::{Context, Poll};

pin_project! {
Expand Down
2 changes: 1 addition & 1 deletion src/stream/stream/cloned.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::stream::Stream;
use crate::task::{Context, Poll};
use pin_project_lite::pin_project;
use std::pin::Pin;
use core::pin::Pin;

pin_project! {
/// A stream that clones the elements of an underlying stream.
Expand Down
8 changes: 4 additions & 4 deletions src/stream/stream/cmp.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::cmp::Ordering;
use std::pin::Pin;
use std::future::Future;
use core::cmp::Ordering;
use core::future::Future;
use core::pin::Pin;

use pin_project_lite::pin_project;

use super::fuse::Fuse;
use crate::prelude::*;
use crate::stream::stream::StreamExt;
use crate::stream::Stream;
use crate::task::{Context, Poll};

Expand Down
2 changes: 1 addition & 1 deletion src/stream/stream/copied.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::stream::Stream;
use crate::task::{Context, Poll};
use pin_project_lite::pin_project;
use std::pin::Pin;
use core::pin::Pin;

pin_project! {
/// A stream that copies the elements of an underlying stream.
Expand Down
4 changes: 2 additions & 2 deletions src/stream/stream/count.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::future::Future;
use std::pin::Pin;
use core::future::Future;
use core::pin::Pin;

use pin_project_lite::pin_project;

Expand Down
4 changes: 2 additions & 2 deletions src/stream/stream/cycle.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::mem::ManuallyDrop;
use std::pin::Pin;
use core::mem::ManuallyDrop;
use core::pin::Pin;

use crate::stream::Stream;
use crate::task::{Context, Poll};
Expand Down
6 changes: 3 additions & 3 deletions src/stream/stream/delay.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::future::Future;
use std::pin::Pin;
use std::time::Duration;
use core::future::Future;
use core::pin::Pin;
use core::time::Duration;

use pin_project_lite::pin_project;

Expand Down
2 changes: 1 addition & 1 deletion src/stream/stream/enumerate.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::pin::Pin;
use core::pin::Pin;

use pin_project_lite::pin_project;

Expand Down
6 changes: 3 additions & 3 deletions src/stream/stream/eq.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use std::pin::Pin;
use std::future::Future;
use core::future::Future;
use core::pin::Pin;

use pin_project_lite::pin_project;

use super::fuse::Fuse;
use crate::prelude::*;
use crate::stream::stream::StreamExt;
use crate::stream::Stream;
use crate::task::{Context, Poll};

Expand Down
Loading