diff --git a/src/api.rs b/src/api.rs index 0c75077..ccac0ed 100644 --- a/src/api.rs +++ b/src/api.rs @@ -2,7 +2,7 @@ use std::borrow::Cow; use std::future::Future; use std::sync::{Arc, OnceLock}; -use futures_util::stream::{BoxStream, Stream, StreamExt as _}; +use futures_util::stream::{Stream, StreamExt as _}; use reqwest::StatusCode; use serde::{Deserialize, Serialize}; use url::Url; @@ -213,7 +213,11 @@ impl Client { } } - pub fn shorten<'a, S>(&self, urls: S, ordering: Ordering) -> BoxStream<'a, Result> + pub fn shorten<'a, S>( + &self, + urls: S, + ordering: Ordering, + ) -> impl Stream> + 'a where S: Stream + Send + 'a, { @@ -221,12 +225,15 @@ impl Client { let max_concurrent = client.cfg.max_concurrent; match ordering { - Ordering::Ordered => client.shorten_all(urls).buffered(max_concurrent).boxed(), + Ordering::Ordered => client + .shorten_all(urls) + .buffered(max_concurrent) + .left_stream(), Ordering::Unordered => client .shorten_all(urls) .buffer_unordered(max_concurrent) - .boxed(), + .right_stream(), } } } diff --git a/src/main.rs b/src/main.rs index 5891a2b..9efe6d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +use std::pin::pin; + use clap::Parser as _; use futures_util::stream::{self, StreamExt as _}; @@ -42,12 +44,12 @@ async fn main() { let Some(urls) = io::read_input::() else { return; }; - urls.map(|url| crash_if_err!(url)).boxed() + urls.map(|url| crash_if_err!(url)).left_stream() } else { - stream::iter(args.urls).boxed() + stream::iter(args.urls).right_stream() }; - let mut results = client.shorten(urls, args.ordering); + let mut results = pin!(client.shorten(urls, args.ordering)); match args.ordering { Ordering::Ordered => {