31 lines
769 B
Rust
31 lines
769 B
Rust
|
//! Miscellaneous parsing utilities.
|
||
|
|
||
|
use std::str::FromStr;
|
||
|
|
||
|
use {
|
||
|
regex::Match,
|
||
|
scraper::{ElementRef, Selector},
|
||
|
};
|
||
|
|
||
|
/// Shorthand to parse a [`regex::Match`] with [`std::str::FromStr`].
|
||
|
pub fn parse_regex_match<T: FromStr>(regex_match: Option<Match>) -> Option<T> {
|
||
|
regex_match.and_then(|regex_match| regex_match.as_str().parse::<T>().ok())
|
||
|
}
|
||
|
|
||
|
/// Returns the text of the first found element inside the given `parent`
|
||
|
/// element.
|
||
|
pub fn select_first_element_text(
|
||
|
parent: ElementRef,
|
||
|
selector: &Selector,
|
||
|
) -> Option<String> {
|
||
|
parent
|
||
|
.select(selector)
|
||
|
.next()
|
||
|
.map(|element| element.text().collect())
|
||
|
}
|
||
|
|
||
|
/// Shorthand for creating a [`scraper::Selector`].
|
||
|
pub fn selector(selector: &str) -> Selector {
|
||
|
Selector::parse(selector).unwrap()
|
||
|
}
|