2
0
Fork 1
mirror of https://github.com/async-rs/async-std.git synced 2025-01-16 02:39:55 +00:00
No description
Find a file
bors[bot] 33ff41df48
Merge #224
224: Re-export IO traits from futures r=stjepang a=stjepang

Sorry for the big PR!

Instead of providing our own traits `async_std::io::{Read, Write, Seek, BufRead}`, we now re-export `futures::io::{AsyncRead, AsyncWrite, AsyncSeek, AsyncRead}`. While re-exporting we rename them to strip away the "Async" prefix.

The documentation will display the contents of the original traits from the `futures` crate together with our own extension methods. There's a note in the docs saying the extenion methods become available only when `async_std::prelude::*` is imported.

Our extension traits are re-exported into the prelude, but are marked with `#[doc(hidden)]` so they're completely invisible to users.

The benefit of this is that people can now implement traits from `async_std::io` for their types and stay compatible with `futures`. This will also simplify some trait bounds in our APIs - for example, things like `where Self: futures_io::AsyncRead`.

At the same time, I cleaned up some trait bounds in our stream interfaces, but haven't otherwise fiddled with them much.

I intend to follow up with another PR doing the same change for `Stream` so that we re-export the stream trait from `futures`.

Co-authored-by: Stjepan Glavina <stjepang@gmail.com>
2019-09-22 13:50:53 +00:00
benches remove async_await feature gate 2019-08-21 00:29:35 -07:00
ci Restore Version Sort (#121) 2019-08-28 17:16:02 +02:00
docs Merge #224 2019-09-22 13:50:53 +00:00
examples Clean up the fs module and a few other places 2019-09-14 01:24:31 +02:00
src Merge #224 2019-09-22 13:50:53 +00:00
tests Make sure ownership is transferred in into_raw_fd 2019-09-06 10:36:25 +01:00
.gitignore Initial commit 2019-08-08 14:44:48 +02:00
.travis.yml Re-export IO traits from futures 2019-09-21 14:30:52 +02:00
bors.toml Add bors.toml 2019-09-04 19:32:47 +02:00
Cargo.toml prepare v0.99.6 2019-09-19 14:24:58 +02:00
CHANGELOG.md prepare v0.99.6 2019-09-19 14:24:58 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2019-08-12 20:02:31 +02:00
LICENSE-APACHE Initial commit 2019-08-08 14:44:48 +02:00
LICENSE-MIT Initial commit 2019-08-08 14:44:48 +02:00
README.md Update README.md 2019-09-18 13:57:26 +02:00
rustfmt.toml Add rustfmt config 2019-08-08 16:04:14 +02:00

Async version of the Rust standard library

Build Status License Cargo Documentation chat

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);
    });
}

Features

async-std is strongly commited to following semver. This means your code won't break unless you decide to upgrade.

However every now and then we come up with something that we think will work great for async-std, and we want to provide a sneak-peek so you can try it out. This is what we call "unstable" features. You can try out the unstable features by enabling the unstable feature in your Cargo.toml file:

[dependencies.async-std]
version = "0.99"
features = ["unstable"]

Just be careful when using these features, as they may change between versions.

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

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.