pub trait SelectorBase { fn html(&self) -> &str; fn css(&self, css_selector: &'static str) -> Vec { let html = nipper::Document::from(self.html()); html.select(css_selector) .iter() .map(|element| Selector { text: element.html().to_string(), }) .into_iter() .collect::>() } fn content(&self) -> String { let html = nipper::Document::from(self.html()); html.select("*") .iter() .map(|element| element.text().to_string()) .last() .unwrap() } } #[derive(Debug)] pub struct Selector { text: String, } impl SelectorBase for Selector { fn html(&self) -> &str { self.text.as_str() } } impl Selector { pub fn from_html(html: &'static str) -> Self { Selector { text: html.to_string(), } } }