2
0
Fork 1
mirror of https://github.com/async-rs/async-std.git synced 2025-02-25 13:49:40 +00:00
Commit graph

336 commits

Author SHA1 Message Date
Yoshua Wuyts
5b05846fb0
init path submodule as unstable
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-06 13:42:55 +02:00
k-nasa
1c9d7895df doc: Add FromStream document 2019-10-06 13:08:35 +09:00
Sunjay Varma
f968c9a540 rustfmt 2019-10-04 10:09:06 -04:00
Sunjay Varma
2cf3f3f566 FromStream for Arc<[T]> and Rc<[T]> 2019-10-04 10:09:06 -04:00
Sunjay Varma
63c6b1cb63 impl FromStream for Box<[T]> 2019-10-04 10:09:06 -04:00
Sunjay Varma
8e12798038 impl FromStream for Cow<[T]> 2019-10-04 10:09:06 -04:00
Sunjay Varma
b2174576b2 Added FromStream + Extend for LinkedList 2019-10-04 10:09:06 -04:00
Sunjay Varma
bd0808eedd Added FromStream + Extend for BinaryHeap 2019-10-04 10:09:06 -04:00
Sunjay Varma
3160dc8189 Added FromStream + Extend for BTreeSet 2019-10-04 10:09:06 -04:00
Sunjay Varma
6c2ffd7181 Added FromStream + Extend for HashSet 2019-10-04 10:09:06 -04:00
Sunjay Varma
333f35338e Added FromStream and Extend impls for HashMap 2019-10-04 10:09:06 -04:00
Sunjay Varma
de2bc1e83b Added FromStream + Extend for BTreeMap 2019-10-04 10:09:06 -04:00
Sunjay Varma
244c5159df Simplifying + optimizing Extend impl for Vec 2019-10-04 10:09:06 -04:00
Sunjay Varma
ae146afffc FromStream + Extend for VecDeque 2019-10-04 10:09:06 -04:00
Sunjay Varma
6bc3cd0ab2 FromStream for () 2019-10-04 10:08:07 -04:00
bors[bot]
6ab154be7c
Merge #266
266: Changes Extend trait in order to allow streams that yield references r=yoshuawuyts a=sunjay

This is not ready to merge yet. I am mainly opening it so we can discuss a change I had to make to the `Extend` trait. cc @yoshuawuyts @stjepang (and anyone else interested)

## Before this can be merged

- [x] Discuss/Approve changes to `Extend` trait
- [x] Change to using `for_each` after #264 is merged
- [ ] (optional) Wait until a `copied()` method is added to `StreamExt` so that the `&char` impl can be finished.
    - We can also just comment out or remove the impl that uses `copied` until that is added

## Changes To The Extend Trait

While writing the impls of the `Extend` trait for the `String` type, I noticed that certain impls weren't possible because there is no bound on `Extend` that guarantees that the type `A` being yielded from the stream actually lives long enough. We probably didn't run into this earlier because this usually isn't a problem for owned values since the compiler doesn't have to worry about whether they will out live the stream that they come from. I ran into this because of the `Extend` impls that consume streams of references.

The difference between the async `Extend` and the standard library `Extend` is that the async `Extend` returns a value that still references the input stream. That means that if `A` is any reference type, the compiler needs to be able to guarantee that `A` will be around as long as the `Future` returned from the trait method is around.

To fix this, I had to add the bound shown below:

```patch
 pub trait Extend<A> {
     /// Extends a collection with the contents of a stream.
     fn stream_extend<'a, T: IntoStream<Item = A> + 'a>(
         &'a mut self,
         stream: T,
-    ) -> Pin<Box<dyn Future<Output = ()> + 'a>>;
+    ) -> Pin<Box<dyn Future<Output = ()> + 'a>> where A: 'a;
 }
```

This guarantees that each value of type `A` will last at least as long as our boxed future does. The bound had to be in a where clause on the method (and not on the declaration of `A` because the lifetime `'a` isn't in scope at the trait level. I don't think there are any negative consequences of using a where clause like this, but that's why I wanted to bring it up for discussion.

In addition to this, I had to ensure that when writing the `Extend` impls for `String` I appropriately bounded the lifetime of the references from the stream. You can see this in the code below with `where 'b: 'a`.

```rust
impl<'b> Extend<&'b str> for String {
    fn stream_extend<'a, S: IntoStream<Item = &'b str> + 'a>(
        &'a mut self,
        stream: S,
    ) -> Pin<Box<dyn Future<Output = ()> + 'a>> where 'b: 'a {
        //TODO: This can just be: stream.into_stream().for_each(move |s| self.push_str(s))
        Box::pin(stream.into_stream().fold((), move |(), s| self.push_str(s)))
    }
}
```

I should note that initially I tried to make it work with just the impl shown above, without modifying the `Extend` trait. This doesn't work because it would be a stricter bound than what is found in the trait itself. Rust does not allow stricter bounds like that because it could potentially cause unsoundness when dealing with generics.

Of course, I am totally open to being completely wrong in my understanding of how to resolve this issue. I tried to solve the problem with as minimal of a change as possible. Please let me know if you have some better ideas or other suggestions.

## `FromStream` impls for String

The purpose of adding these `Extend` impls is to continue my work from #129 in adding the rest of the `FromStream` impls. The `Extend` impls are used directly to add all of the `FromStream` impls for `String`. Just like with #207 and #265, this adds a new `string` module that is unstable just like the other modules added for `FromStream`.

Co-authored-by: Sunjay Varma <varma.sunjay@gmail.com>
2019-10-04 13:55:33 +00:00
Yoshua Wuyts
5bd6acde46
Merge pull request #263 from montekki/fs-stream-map
Adds stream map combinator
2019-10-03 00:45:27 +02:00
Yoshua Wuyts
50b6d0b15f
Merge pull request #269 from montekki/fs-stream-try-for-each
Adds try_for_each combinator
2019-10-02 19:36:04 +02:00
Sunjay Varma
09a15ef116 Implementing Extend for String in terms of for_each now that that's been added 2019-10-01 22:39:57 -04:00
Sunjay Varma
d6f16b6a17 rustfmt 2019-10-01 22:31:29 -04:00
Sunjay Varma
b878855bc3 **CHANGES** extend trait in order to allow FromStream impls for String 2019-10-01 22:31:29 -04:00
bors[bot]
98c79f4ff9
Merge #255
255: Update futures-preview to 0.3.0-alpha.19 r=skade a=taiki-e

Depends on https://github.com/rustasync/surf/pull/74

Refs:
* https://github.com/rust-lang-nursery/futures-rs/issues/1761
* https://github.com/rust-lang-nursery/futures-rs/pull/1845


cc @skade @stjepang @yoshuawuyts 

Co-authored-by: Taiki Endo <te316e89@gmail.com>
2019-10-01 21:15:00 +00:00
Fedor Sakharov
35ab65fe8e
Fix docs 2019-10-01 20:07:56 +03:00
Fedor Sakharov
f4e2302e7e
Don't use Try trait, use Result instead 2019-10-01 18:08:39 +03:00
Yoshua Wuyts
a97a1fffff
Merge pull request #264 from montekki/fs-stream-for-each
Adds for_each stream combinator
2019-10-01 15:32:36 +02:00
k-nasa
cc21bdf068 $cargo fmt 2019-10-01 18:08:24 +09:00
k-nasa
c31861aa65 rafactor if expression 2019-10-01 18:08:24 +09:00
k-nasa
f08fcd0bbb refactor 2019-10-01 18:08:24 +09:00
k-nasa
87b272f83d refacotr: Refactor match expression 2019-10-01 18:08:24 +09:00
k-nasa
2460f35768 fix: Remove unnecessary Borrowed
Each implements a Copy trait
2019-10-01 18:08:24 +09:00
k-nasa
468cb6348f fix: Remove unnecessary &mut 2019-10-01 18:08:24 +09:00
k-nasa
6253e97717 feat: Add Default trait 2019-10-01 18:08:24 +09:00
Fedor Sakharov
66d38f7856
Adds try_for_each combinator 2019-10-01 10:39:43 +03:00
Sunjay Varma
a05b564486 rustfmt 2019-09-30 20:14:16 -04:00
Sunjay Varma
fb7582bd7a Using Box::pin(...) instead of Pin::from(Box::new(...)) 2019-09-30 19:42:30 -04:00
Sunjay Varma
ab7129cd45 FromStream for Vec<T> in terms of Extend 2019-09-30 19:42:30 -04:00
Sunjay Varma
76b10c4784 FromStream for Option<T> 2019-09-30 19:42:30 -04:00
Fedor Sakharov
6da7efc5ac
Adds for_each stream combinator 2019-09-30 23:45:00 +03:00
Fedor Sakharov
658a16bebe
Adds stream map combinator 2019-09-30 23:17:25 +03:00
Yoshua Wuyts
06862d47c3
update Barrier example to match std::sync::Barrier 1:1
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-29 04:21:48 +02:00
Taiki Endo
f0bf66d0df Update futures-preview to 0.3.0-alpha.19 2019-09-29 00:38:49 +09:00
dignifiedquire
064b44f695 apply cr 2019-09-27 18:49:23 -06:00
Yoshua Wuyts
958d3a9e27
add an unstable task::spawn_blocking function
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-28 01:37:17 +02:00
dignifiedquire
a1aa3f823d finish BufRead 2019-09-27 18:59:30 +02:00
dignifiedquire
dc6c8fb131 feat(io): add stub for BufRead for Take 2019-09-27 16:36:55 +02:00
dignifiedquire
d9aec105a1 feat(io): implement Read::chain 2019-09-27 16:30:38 +02:00
dignifiedquire
e681e297ef feat(io): implement Read::bytes 2019-09-27 15:14:24 +02:00
dignifiedquire
f751ebb8c4 feat(io): implement Read::by_ref 2019-09-27 15:10:40 +02:00
dignifiedquire
75dc819b2f feat(io): implement Read::take 2019-09-27 15:07:05 +02:00
bors[bot]
f6a2393fb5
Merge #241
241: Simplify extension traits using a macro r=yoshuawuyts a=stjepang

This PR would fix #235 

Async methods in our extension traits are now written in the simpler `-> impl Future<Output = T> [ConcreteFuture<Self>]` style. At the same time, doc tests are used even when the `docs` feature is not enabled.

Co-authored-by: Stjepan Glavina <stjepang@gmail.com>
2019-09-27 11:36:32 +00:00
Stjepan Glavina
414fadd6e6 cargo fmt 2019-09-26 23:13:02 -04:00
Yoshua Wuyts
70069e0014
future docs
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-27 01:07:55 +02:00
Stjepan Glavina
8e32fd09f3 Fix a doc test 2019-09-26 14:31:02 -04:00
Stjepan Glavina
ff028bb540 Improve compile times and add comments 2019-09-26 14:21:27 -04:00
Yoshua Wuyts
0b39306b74
fix barrier tests
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-26 17:24:24 +02:00
Yoshua Wuyts
c23cc769ee
mark sync::Barrier as unstable
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-26 16:34:44 +02:00
Stjepan Glavina
79eab9eb9a Simplify extension traits using a macro 2019-09-26 07:46:29 -04:00
dignifiedquire
b77b72d333 feat: implement sync::Barrier
Based on the implementation in https://github.com/tokio-rs/tokio/pull/1571
2019-09-25 21:10:06 +02:00
Yoshua Wuyts
785371cbc4
Merge pull request #187 from async-rs/join-macros
add future::{join,try_join,select,try_select} macros
2019-09-24 22:18:26 +02:00
Yoshua Wuyts
553e48057f
Merge pull request #133 from yoshuawuyts/ready_macro
expose `task::ready!`
2019-09-24 22:16:20 +02:00
Kirill Mironov
63154f5b7a cargo fmt 2019-09-24 16:33:02 +03:00
Kirill Mironov
d23af83189 removed LineWriter and implemented requested changes
Signed-off-by: Kirill Mironov <k.mironov@albato.ru>
2019-09-24 15:59:46 +03:00
Kirill Mironov
9509a056bd Merge branch 'master' into buf-writer 2019-09-24 15:03:55 +03:00
Stjepan Glavina
293d992de1 Fix stream_extend compilation failures 2019-09-24 05:13:02 +02:00
Yoshua Wuyts
a1bc097ffd
Merge pull request #211 from tirr-c/stream-extend
Add stream::Extend
2019-09-23 00:14:29 +02:00
Stjepan Glavina
c62b7a0ba9 Fix warnings 2019-09-22 17:06:00 +02:00
Stjepan Glavina
73d7fea937 Re-export Stream from futures 2019-09-22 16:51:18 +02:00
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
Stjepan Glavina
17534cfffc Fuse next() future 2019-09-22 15:19:54 +02:00
Fedor Sakharov
2a2a473889
adds stream::chain combinator 2019-09-22 15:48:12 +03:00
Stjepan Glavina
d55cfb1da8 impl FusedStream for Fuse 2019-09-22 12:44:46 +02:00
Stjepan Glavina
797a6b2d90 Add a missing assert in a doc example 2019-09-22 12:16:35 +02:00
Stjepan Glavina
bfab20da03 Don't re-export ext traits in async_std::io 2019-09-22 12:08:08 +02:00
Fedor Sakharov
89fd473da0
fixes merge artifacts in stream docs 2019-09-22 09:51:54 +03:00
bors[bot]
a8e48b1542
Merge #226
226: adds stream::step_by combinator r=stjepang a=montekki

Ref: #129 
Stdlib: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.step_by

Co-authored-by: Fedor Sakharov <fedor.sakharov@gmail.com>
2019-09-21 16:46:50 +00:00
Fedor Sakharov
376049b51d
Merge branch 'master' into fs-stream-step-by 2019-09-21 19:07:27 +03:00
Fedor Sakharov
bf7121d2d4
adds stream::inspect combinator 2019-09-21 18:19:47 +03:00
Fedor Sakharov
e74c0cec1f
adds stream::step_by combinator 2019-09-21 17:44:57 +03:00
Fedor Sakharov
ea080e7305
Merge branch 'master' into fs-stream-skip-while 2019-09-21 17:42:44 +03:00
bors[bot]
99724497b3
Merge #221
221: adds stream::filter combinator r=stjepang a=montekki

Ref: #129 
Stdlib: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.filter

Co-authored-by: Fedor Sakharov <fedor.sakharov@gmail.com>
2019-09-21 14:22:58 +00:00
bors[bot]
47ce009e10
Merge #222
222: adds stream::skip combinator r=stjepang a=montekki

Ref: #129 
Stdlib: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.skip

Co-authored-by: Fedor Sakharov <fedor.sakharov@gmail.com>
2019-09-21 13:46:11 +00:00
Fedor Sakharov
fdd81e1b2a
Actually export Skip 2019-09-21 16:40:58 +03:00
Fedor Sakharov
e430851bc4
export Filter type 2019-09-21 16:40:01 +03:00
Fedor Sakharov
75da138696
export Skip type 2019-09-21 16:37:30 +03:00
Fedor Sakharov
93463e8df3
export SkipWhile type 2019-09-21 16:34:51 +03:00
Stjepan Glavina
53ce30ae66
Fix async_std imports in metadata.rs 2019-09-21 15:17:49 +02:00
Stjepan Glavina
1fa196812a Fix compilation errors around Stream 2019-09-21 15:05:57 +02:00
Stjepan Glavina
edfa2358a4 Re-export IO traits from futures 2019-09-21 14:30:52 +02:00
Fedor Sakharov
f9f97c43c4
adds stream::skip_while combinator 2019-09-21 15:12:41 +03:00
Fedor Sakharov
570329b176
adds stream::skip combinator 2019-09-21 14:40:25 +03:00
Fedor Sakharov
e7ae10ebee
adds stream::filter combinator 2019-09-21 14:03:17 +03:00
Yoshua Wuyts
fa31c6347e
expose sync::{Arc,Weak}
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-19 18:28:17 +02:00
Yoshua Wuyts
42fac26761
fix unstable display for pin docs
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-19 16:02:28 +02:00
Yoshua Wuyts
7fe6c8a42c
add stream::join
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-19 13:53:36 +02:00
Wonwoo Choi
9c00d0b903 Rename: extend_with_stream => stream_extend 2019-09-19 18:34:31 +09:00
Wonwoo Choi
a5a6dc24c4 Add stream::Extend 2019-09-19 18:33:25 +09:00
bors[bot]
91f002d12b
Merge #209
209: add feature guards for unstable features r=yoshuawuyts a=yoshuawuyts

Makes sure unstable features aren't accidentally usable without their corresponding flags. Thanks!

Co-authored-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
Co-authored-by: Yoshua Wuyts <yoshuawuyts+github@gmail.com>
2019-09-18 21:53:20 +00:00
Yoshua Wuyts
c533d5f906
implement feedback & fix tests
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-18 21:25:58 +02:00
Stjepan Glavina
bfd7af8775 Rename local.rs -> task_local.rs 2019-09-18 13:59:32 +02:00
Yoshua Wuyts
2964e72b00
Update src/future/timeout.rs
Co-Authored-By: Stjepan Glavina <stjepang@gmail.com>
2019-09-18 12:43:34 +02:00