diff --git a/hello-async/src/main.rs b/hello-async/src/main.rs index a42a94e..cea7df2 100644 --- a/hello-async/src/main.rs +++ b/hello-async/src/main.rs @@ -1,20 +1,30 @@ -use trpl::Html; +use trpl::{Either, Html}; fn main() { let args: Vec<String> = std::env::args().collect(); trpl::run(async { - let url = &args[1]; - match page_title(url).await { - Some(title) => println!("The title for {url} was {title}"), - None => println!("{url} had no title"), + let title_fut_1 = page_title(&args[1]); + let title_fut_2 = page_title(&args[2]); + + let (url, maybe_title) = + match trpl::race(title_fut_1, title_fut_2).await { + Either::Left(left) => left, + Either::Right(right) => right, + }; + + println!("{url} returned first"); + match maybe_title { + Some(title) => println!("Its page title is: '{title}'"), + None => println!("Its title could not be parsed."), } }) } -async fn page_title(url: &str) -> Option<String> { - let response_text = trpl::get(url).await.text().await; - Html::parse(&response_text) +async fn page_title(url: &str) -> (&str, Option<String>) { + let text = trpl::get(url).await.text().await; + let title = Html::parse(&text) .select_first("title") - .map(|title_element| title_element.inner_html()) -} + .map(|title| title.inner_html()); + (url, title) +} \ No newline at end of file