client.rs

 1use std::time::Instant;
 2
 3use futures::AsyncReadExt as _;
 4use futures::stream::FuturesUnordered;
 5use http_client::AsyncBody;
 6use http_client::HttpClient;
 7use reqwest_client::ReqwestClient;
 8use smol::stream::StreamExt;
 9
10fn main() {
11    let app = gpui::Application::new();
12    app.run(|cx| {
13        cx.spawn(async move |cx| {
14            let client = ReqwestClient::new();
15            let start = Instant::now();
16            let requests = [
17                client.get("https://www.google.com/", AsyncBody::empty(), true),
18                client.get("https://zed.dev/", AsyncBody::empty(), true),
19                client.get("https://docs.rs/", AsyncBody::empty(), true),
20            ];
21            let mut requests = requests.into_iter().collect::<FuturesUnordered<_>>();
22            while let Some(response) = requests.next().await {
23                let mut body = String::new();
24                response
25                    .unwrap()
26                    .into_body()
27                    .read_to_string(&mut body)
28                    .await
29                    .unwrap();
30                println!("{}", &body.len());
31            }
32            println!("{:?}", start.elapsed());
33
34            cx.update(|cx| {
35                cx.quit();
36            })
37            .ok();
38        })
39        .detach();
40    })
41}