2
0
Fork 1
mirror of https://github.com/async-rs/async-std.git synced 2025-01-31 09:45:36 +00:00
Commit graph

208 commits

Author SHA1 Message Date
k-nasa
410d16eaf6 Add docs + To unstable feature 2019-10-18 13:20:44 +09:00
k-nasa
1c1e2230f3 Merge branch 'master' into add_stream_flatten 2019-10-18 12:47:48 +09:00
k-nasa
176359afae Add Stream::flatten 2019-10-18 12:20:28 +09:00
k-nasa
8138afbfad feat: Add Stream trait for Flatten 2019-10-18 12:20:02 +09:00
k-nasa
cd862083a5 Add Flatten struct 2019-10-18 12:19:38 +09:00
k-nasa
2187a2a31d feat: Add Stream::flat_map 2019-10-18 10:43:36 +09:00
k-nasa
2dee289750 Add FlatMap struct 2019-10-18 10:43:21 +09:00
k-nasa
bb1416420d feat: Add Stream trait for FlattenCompat 2019-10-18 10:34:53 +09:00
Stjepan Glavina
ec23632f3e
Cleanup: replace cfg-if with our macros (#361)
* Cleanup: replace cfg-if with our macros

* Prefix macros with cfg_

* Remove #[macro_export] from internal macros
2019-10-17 19:17:49 +02:00
k-nasa
ec98b41c85 feat: Add FlattenCompat struct 2019-10-17 23:56:01 +09:00
k-nasa
b58bd8d725 Merge branch 'add_stream_timeout' of https://github.com/k-nasa/async-std into add_stream_timeout 2019-10-16 23:08:23 +09:00
k-nasa
0a4073449b doc: Add Stream::Timeout doc 2019-10-16 22:56:48 +09:00
k-nasa
c3f6f969c5 fix: Rename TimeoutStream to Timeout 2019-10-16 22:56:17 +09:00
nasa
f1ed034600
Update src/stream/stream/mod.rs
Co-Authored-By: Yoshua Wuyts <yoshuawuyts+github@gmail.com>
2019-10-16 22:21:32 +09:00
Yoshua Wuyts
822e4bc220
Merge branch 'master' into fs-stream-repeat-with 2019-10-16 14:26:20 +02:00
Yoshua Wuyts
6e0905d3ca correctly mark stream::Merge as unstable (#352)
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-16 14:13:35 +02:00
k-nasa
10f32ca817 Fix TimeoutError 2019-10-16 20:21:45 +09:00
Johannes Weissmann
aaa1b6ca39 add Stream::last (#347)
* add stream::LastFuture (not compiling)

Struggling with the associated type, pinning and how to move/copy
LastFuture.last.

* fix type signature -> still cannot assign

still problems assigning the new value to self.last

* remove unused bound

* add doctest

* unpin LastFuture.last

* RustFmt

* add static lifetime

* remove redundant lifetime
2019-10-16 13:14:54 +02:00
Yoshua Wuyts
faff1f7370 task docs (#346)
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-16 10:28:14 +02:00
k-nasa
7a87dea085 feat: Add Stream::timeout 2019-10-16 15:31:40 +09:00
k-nasa
f00d32ee7d Add TimeoutStream struct 2019-10-16 15:31:40 +09:00
Wouter Geraedts
6b00e5e66c Implemented StreamExt::try_fold (#344) 2019-10-16 02:32:27 +02:00
assemblaj
4b96ea1273 Adds Stream::cmp (#273)
* Adds cmp

* Fixes formatting

* cleans up examples

* attempts to fix rustdoc issue

* formats with cargo fmt

* Adds proper trait bounds for cmp
2019-10-16 02:23:41 +02:00
assemblaj
a7041be6f2 Adds Stream:ge (#285)
* Adds partial_cmp.rs file and partial_cmp signature to mod.rs

* adds tests that compare streams of same length

* Adds Stream::ge

* cargo fmt

* fixes rustdoc error
2019-10-16 01:24:27 +02:00
assemblaj
5f7238eec6 [Draft PR] Adds Stream::gt (#304)
* [Draft PR] Adds Stream::gt

* Applies cargo format and fixes incorrect comment

* cargo fmt

* fixes rustdoc related issues
2019-10-16 01:11:48 +02:00
assemblaj
f0f279ec04 Adds Stream::le (#336) 2019-10-16 00:46:06 +02:00
assemblaj
a8dc2c6f9b Adds Stream::lt (#337) 2019-10-16 00:32:54 +02:00
Yoshua Wuyts
24cdb2d489 add stream::{Sum,Product} (#343)
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-16 00:31:49 +02:00
Yoshua Wuyts
49faea2023 init FutureExt (#308)
* init FutureExt

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* prelude

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* Refactor extension_trait

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* Fix rustdoc

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-15 16:27:06 +02:00
Fedor Sakharov
23beab4125 Adds a from_fn stream implementation (#277)
* Adds a from_fn stream implementation

* Update src/stream/from_fn.rs

Co-Authored-By: Yoshua Wuyts <yoshuawuyts+github@gmail.com>

* Fix review nits

* Use async_std Mutex
2019-10-15 15:50:17 +02:00
Yoshua Wuyts
e938527f66 add stream::interval (#298)
* add stream::interval

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* fix tests

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* cargo fmt

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* cross-docs

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>

* update deps

Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-15 15:30:24 +02:00
Yoshua Wuyts
1819408b46 add stream::ExactSizeStream as unstable (#330)
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-15 09:51:53 +02:00
Johannes Weissmann
6be8467cdc impl Stream::take_while adapter (#332)
* impl take_while stream adapter

* fmt

* add comment

* unindent where clauses
2019-10-15 09:50:03 +02:00
assemblaj
80bee9a215 Adds Stream::partial_cmp 2019-10-14 11:43:00 -04:00
Yoshua Wuyts
3ac4575d94
add stream::FusedStream
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-14 02:21:27 +02:00
Yoshua Wuyts
04342c7b5d
docs
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-13 22:05:11 +02:00
Yoshua Wuyts
b601bcfcb8
polish
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-13 21:55:19 +02:00
Yoshua Wuyts
84a148ddae
rename stream::join to Stream::merge
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-13 21:48:53 +02:00
Yoshua Wuyts
a2baa1d8e0
rename stream::join to stream::merge
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-10-13 21:12:05 +02:00
k-nasa
9d9543c46b refactor: Remove needless main fn 2019-10-13 16:33:02 +09:00
Yoshua Wuyts
5f708f3c4f
Merge pull request #270 from k-nasa/fix_clippy_warn
Fix clippy warning
2019-10-07 15:43:20 +02:00
Fedor Sakharov
49d123c7f9
Fix review nits 2019-10-06 08:32:44 +03:00
Fedor Sakharov
2384df11ed
Apply suggestions from code review
Co-Authored-By: Yoshua Wuyts <yoshuawuyts+github@gmail.com>
2019-10-06 08:27:44 +03:00
k-nasa
1c9d7895df doc: Add FromStream document 2019-10-06 13:08:35 +09:00
Fedor Sakharov
735d604cd1
Adds stream::repeat_with 2019-10-05 22:17:21 +03: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
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
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
k-nasa
cc21bdf068 $cargo fmt 2019-10-01 18:08:24 +09:00
k-nasa
87b272f83d refacotr: Refactor match expression 2019-10-01 18:08:24 +09:00
Fedor Sakharov
66d38f7856
Adds try_for_each combinator 2019-10-01 10:39:43 +03: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
Stjepan Glavina
414fadd6e6 cargo fmt 2019-09-26 23:13:02 -04: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
Stjepan Glavina
79eab9eb9a Simplify extension traits using a macro 2019-09-26 07:46:29 -04: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
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
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
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
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
Yoshua Wuyts
c533d5f906
implement feedback & fix tests
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-18 21:25:58 +02:00
Yoshua Wuyts
9a07196402
Update src/stream/double_ended_stream.rs
Co-Authored-By: Stjepan Glavina <stjepang@gmail.com>
2019-09-18 12:43:14 +02:00
Yoshua Wuyts
f7ec3f4e2d
Update src/stream/stream/mod.rs
Co-Authored-By: Stjepan Glavina <stjepang@gmail.com>
2019-09-18 12:43:06 +02:00
Yoshua Wuyts
bfb16790c3
Update src/stream/from_stream.rs
Co-Authored-By: Stjepan Glavina <stjepang@gmail.com>
2019-09-18 12:42:58 +02:00
Yoshua Wuyts
b670600555
Update src/stream/into_stream.rs
Co-Authored-By: Stjepan Glavina <stjepang@gmail.com>
2019-09-18 12:42:46 +02:00
Yoshua Wuyts
488c90c0c4
add feature guards for unstable features
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-18 01:26:04 +02:00
bors[bot]
c8475ca95e
Merge #207
207: Added the ability to collect a stream of results r=yoshuawuyts a=sunjay

As requested here: https://twitter.com/yoshuawuyts/status/1174026374316773377

The standard library has a very useful implementation of `FromIterator` that takes an iterator of `Result<T, E>` values and is able to produce a value of type `Result<Vec<T>, E>`. I asked for this in `async-std` and @yoshuawuyts recommended that I contribute the impl. It turns out that the implementation in the standard library is even more general than I initially thought. It allows any collection that implements `FromIterator` to be collected from an iterator of `Result<T, E>` values. That means that you can collect into `Result<Vec<T>, E>`, `Result<HashSet<T>, E>`, etc.

I wanted to add a similarly generic impl for this crate so we can also support collecting into any collection that implements `FromStream`. 

The implementation for this is based heavily on [what exists in `std`](9150f844e2/src/libcore/result.rs (L1379-L1429)). I made a new `result` module since that's where this impl is in `std`. I still wanted to maintain the conventions of this repo, so I copied the `vec` module that @yoshuawuyts created in #125. Much like in that PR, the new `result` module is private.

There is a doctest in the documentation for `collect` that both teaches that this feature exists and tests that it works in some simple cases.

## Documentation Screenshot

![image](https://user-images.githubusercontent.com/530939/65075935-de89ae00-d965-11e9-9cd6-8b19b694ed3e.png)


Co-authored-by: Sunjay Varma <varma.sunjay@gmail.com>
2019-09-17 22:35:00 +00:00
Yoshua Wuyts
aa94d450d6
update stream::fuse
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-18 00:00:30 +02:00
Tyler Neely
7b4bb26c5c
Remove redundant Sized bound
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-17 23:52:26 +02:00
Tyler Neely
44b3d3dadd
Remove irrelevant example
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-17 23:50:22 +02:00
Tyler Neely
78c49f92b6
Add initial Fuse implementation for Stream
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
2019-09-17 23:48:14 +02:00
Sunjay Varma
ad0510110c Added the ability to collect a stream of results 2019-09-17 16:25:26 -04:00