use crate::css_parser::{source::SourceLocation, token::Token};
#[derive(Debug, Clone)]
pub struct Stylesheet<'a> {
pub rules: Vec<Rule<'a>>,
pub loc: SourceLocation,
}
#[derive(Debug, Clone)]
pub enum Rule<'a> {
Qualified(QualifiedRule<'a>),
At(AtRule<'a>),
}
#[derive(Debug, Clone)]
pub struct QualifiedRule<'a> {
pub prelude: Vec<ComponentValue<'a>>,
pub declarations: Vec<Declaration<'a>>,
pub rules: Vec<Rule<'a>>,
pub loc: SourceLocation,
}
#[derive(Debug, Clone)]
pub struct AtRule<'a> {
pub name: &'a str,
pub prelude: Vec<ComponentValue<'a>>,
pub block: Option<Block<'a>>,
pub loc: SourceLocation,
}
#[derive(Debug, Clone)]
pub enum Block<'a> {
RuleList(Vec<Rule<'a>>),
DeclarationBlock {
declarations: Vec<Declaration<'a>>,
rules: Vec<Rule<'a>>,
},
}
#[derive(Debug, Clone)]
pub struct Declaration<'a> {
pub name: &'a str,
pub value: Vec<ComponentValue<'a>>,
pub important: bool,
pub loc: SourceLocation,
}
#[derive(Debug, Clone)]
pub enum ComponentValue<'a> {
Token(Token<'a>),
Function(CssFunction<'a>),
SimpleBlock(SimpleBlock<'a>),
}
#[derive(Debug, Clone)]
pub struct CssFunction<'a> {
pub name: &'a str,
pub arguments: Vec<ComponentValue<'a>>,
pub loc: SourceLocation,
}
#[derive(Debug, Clone)]
pub struct SimpleBlock<'a> {
pub token: char,
pub value: Vec<ComponentValue<'a>>,
pub loc: SourceLocation,
}