forked from mirror/async-std
No description
145: Add Stream::poll_next r=stjepang a=stjepang Adding `poll_next` to the `Stream` trait will simplify #125. After a discussion with @yoshuawuyts and @withoutboats, we became confident that the `Stream` trait of the future will never solely rely on `async fn next()` and will always have to rely on `fn poll_next()`. This PR now makes our `Stream` trait implementable by end users. I also made a few adjustments around pinning to `all()` and `any()` combinators since they take a `&mut self`, which implies `Self: Unpin`. A rule of thumb is that if a method takes a `&mut self` and then pins `self`, we *have to* require `Self: Unpin`. Co-authored-by: Stjepan Glavina <stjepang@gmail.com> |
||
---|---|---|
benches | ||
ci | ||
docs | ||
examples | ||
src | ||
tests | ||
.gitignore | ||
.travis.yml | ||
bors.toml | ||
Cargo.toml | ||
CHANGELOG.md | ||
CODE_OF_CONDUCT.md | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
rustfmt.toml |
Async version of Rust's standard library
This crate provides an async version of std
. It provides all the interfaces you
are used to, but in an async version and ready for Rust's async
/await
syntax.
Documentation
async-std
comes with extensive API documentation and a book.
Quickstart
Add the following lines to your Cargo.toml
:
[dependencies]
async-std = "0.99"
Or use cargo add if you have it installed:
$ cargo add async-std
Hello world
use async_std::task;
fn main() {
task::block_on(async {
println!("Hello, world!");
})
}
Low-Friction Sockets with Built-In Timeouts
use std::time::Duration;
use async_std::{
prelude::*,
task,
io,
net::TcpStream,
};
async fn get() -> io::Result<Vec<u8>> {
let mut stream = TcpStream::connect("example.com:80").await?;
stream.write_all(b"GET /index.html HTTP/1.0\r\n\r\n").await?;
let mut buf = vec![];
io::timeout(Duration::from_secs(5), async {
stream.read_to_end(&mut buf).await?;
Ok(buf)
}).await
}
fn main() {
task::block_on(async {
let raw_response = get().await.expect("request");
let response = String::from_utf8(raw_response)
.expect("utf8 conversion");
println!("received: {}", response);
});
}
Take a look around
Clone the repo:
git clone git@github.com:async-rs/async-std.git && cd async-std
Generate docs:
cargo doc --features docs.rs --open
Check out the examples. To run an example:
cargo run --example hello-world
Contributing
See our contribution document.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.