summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hello-async/src/main.rs30
1 files changed, 29 insertions, 1 deletions
diff --git a/hello-async/src/main.rs b/hello-async/src/main.rs
index e7a11a9..772bc7b 100644
--- a/hello-async/src/main.rs
+++ b/hello-async/src/main.rs
@@ -1,3 +1,31 @@
+use trpl::{Either, Html};
+
fn main() {
- println!("Hello, world!");
+ let args: Vec<String> = std::env::args().collect();
+
+ trpl::block_on(async {
+ let title_fut_1 = page_title(&args[1]);
+ let title_fut_2 = page_title(&args[2]);
+
+ let (url, maybe_title) =
+ match trpl::select(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 was: '{title}'"),
+ None => println!("It had no title"),
+ }
+ })
}
+
+async fn page_title(url: &str) -> (&str, Option<String>) {
+ let response_text = trpl::get(url).await.text().await;
+ let title = Html::parse(&response_text)
+ .select_first("title")
+ .map(|title| title.inner_html());
+ (url, title)
+}
+