use {
super::Symbol,
crate::{
parsers::{Parse, ParserContext},
CustomParseError,
},
cssparser::{ParseError, Parser, ToCss},
std::fmt,
};
#[derive(Clone, Debug)]
pub struct Negative(pub Symbol, pub Option<Symbol>);
impl ToCss for Negative {
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
self.0.to_css(dest)?;
if let Some(ref symbol) = self.1 {
dest.write_char(' ')?;
symbol.to_css(dest)?;
}
Ok(())
}
}
impl Parse for Negative {
fn parse<'i, 't>(
context: &ParserContext,
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i, CustomParseError<'i>>> {
Ok(Negative(
Symbol::parse(context, input)?,
input.r#try(|input| Symbol::parse(context, input)).ok(),
))
}
}