mod ast;
mod error;
mod matcher;
mod parser;
pub use error::SelectorError;
use crate::types::{ElementData, ElementRef};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Selector {
compiled: ast::CompiledSelector,
}
impl Selector {
pub fn parse(input: &str) -> Result<Self, SelectorError> {
Ok(Self {
compiled: parser::parse(input)?,
})
}
}
impl std::str::FromStr for Selector {
type Err = SelectorError;
fn from_str(input: &str) -> Result<Self, Self::Err> {
Self::parse(input)
}
}
pub(crate) fn select<'a>(
roots: &'a [ElementData],
raw: &'a str,
trivia: &'a [core::ops::Range<usize>],
sel: &Selector,
) -> Vec<ElementRef<'a>> {
matcher::collect_matches(roots, raw, trivia, &sel.compiled)
}