use {
super::{Document, UrlMatchingFunction},
crate::{parsers::ParserContext, CustomParseError},
cssparser::{ParseError, Parser, ToCss},
std::fmt,
};
#[derive(Clone, Debug)]
pub struct DocumentCondition(pub Vec<UrlMatchingFunction>);
impl ToCss for DocumentCondition {
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
let mut iter = self.0.iter();
let first = iter.next().expect("Empty DocumentCondition, should contain at least one URL matching function");
first.to_css(dest)?;
for url_matching_function in iter {
dest.write_str(", ")?;
url_matching_function.to_css(dest)?;
}
Ok(())
}
}
impl DocumentCondition {
pub(crate) fn parse<'i, 't>(
context: &ParserContext,
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i, CustomParseError<'i>>> {
input
.parse_comma_separated(|input| {
UrlMatchingFunction::parse(context, input)
})
.map(DocumentCondition)
}
pub fn evaluate<D: Document>(&self, document: &D) -> bool {
self.0.iter().any(|url_matching_function| {
url_matching_function.evaluate(document)
})
}
}