use std::cell::RefCell;
use std::rc::Rc;
use crate::input::Input;
use self::at_rule::AtRule;
use self::comment::Comment;
use self::declaration::Declaration;
use self::document::Document;
use self::root::Root;
use self::rule::Rule;
pub mod at_rule;
pub mod comment;
pub mod declaration;
pub mod document;
pub mod root;
pub mod rule;
pub trait Props {
fn name(&self) -> String;
}
pub enum Node {
AtRule(AtRule),
Comment(Comment),
Declaration(Declaration),
Document(Document),
Root(Root),
Rule(Rule),
}
impl Node {
fn nodes(&self) -> Option<RefCell<Vec<Rc<Node>>>> {
match self {
Node::Root(root) => root.nodes,
_ => None,
}
}
}
#[derive(Debug, PartialEq, Clone)]
pub struct Position {
pub offset: usize,
pub column: usize,
pub line: usize,
}
#[derive(Debug, PartialEq, Clone)]
pub struct Source {
pub input: Input,
pub start: Option<Position>,
pub end: Option<Position>,
}
#[derive(Debug, PartialEq, Clone)]
pub struct RawValue {
pub value: String,
pub raw: String,
}