use cssparser::{BasicParseErrorKind, ParseErrorKind, Token};
use selectors::parser::SelectorParseErrorKind;
#[derive(Debug, Clone)]
pub enum SelectorErrorKind<'a> {
UnexpectedToken(Token<'a>),
EndOfLine,
InvalidAtRule(String),
InvalidAtRuleBody,
QualRuleInvalid,
ExpectedColonOnPseudoElement(Token<'a>),
ExpectedIdentityOnPseudoElement(Token<'a>),
UnexpectedSelectorParseError(SelectorParseErrorKind<'a>),
}
impl<'a> From<cssparser::ParseError<'a, SelectorParseErrorKind<'a>>> for SelectorErrorKind<'a> {
fn from(original: cssparser::ParseError<'a, SelectorParseErrorKind<'a>>) -> Self {
match original.kind {
ParseErrorKind::Basic(err) => SelectorErrorKind::from(err),
ParseErrorKind::Custom(err) => SelectorErrorKind::from(err),
}
}
}
impl<'a> From<BasicParseErrorKind<'a>> for SelectorErrorKind<'a> {
fn from(err: BasicParseErrorKind<'a>) -> Self {
match err {
BasicParseErrorKind::UnexpectedToken(token) => Self::UnexpectedToken(token),
BasicParseErrorKind::EndOfInput => Self::EndOfLine,
BasicParseErrorKind::AtRuleInvalid(rule) => Self::InvalidAtRule(rule.to_string()),
BasicParseErrorKind::AtRuleBodyInvalid => Self::InvalidAtRuleBody,
BasicParseErrorKind::QualifiedRuleInvalid => Self::QualRuleInvalid,
}
}
}
impl<'a> From<SelectorParseErrorKind<'a>> for SelectorErrorKind<'a> {
fn from(err: SelectorParseErrorKind<'a>) -> Self {
match err {
SelectorParseErrorKind::PseudoElementExpectedColon(token) => {
Self::ExpectedColonOnPseudoElement(token)
}
SelectorParseErrorKind::PseudoElementExpectedIdent(token) => {
Self::ExpectedIdentityOnPseudoElement(token)
}
other => Self::UnexpectedSelectorParseError(other),
}
}
}