mirror of https://github.com/KaiserY/trpl-zh-cn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
959 B
35 lines
959 B
10 months ago
|
extern crate trpl; // required for mdbook test
|
||
|
|
||
|
// ANCHOR: all
|
||
|
use trpl::{Either, Html};
|
||
|
|
||
|
fn main() {
|
||
|
let args: Vec<String> = std::env::args().collect();
|
||
|
|
||
|
trpl::run(async {
|
||
|
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) -> (&str, Option<String>) {
|
||
|
let text = trpl::get(url).await.text().await;
|
||
|
let title = Html::parse(&text)
|
||
|
.select_first("title")
|
||
|
.map(|title| title.inner_html());
|
||
|
(url, title)
|
||
|
}
|
||
|
// ANCHOR_END: all
|