#[derive(Debug, Clone)]
pub struct CssRules(pub Vec<CssRule>);
impl ToCss for CssRules
{
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result
{
for cssRule in self.0.iter()
{
cssRule.to_css(dest)?;
}
Ok(())
}
}
impl CssRules
{
pub fn is_empty(&self) -> bool
{
self.0.is_empty()
}
fn only_ns_or_import(&self) -> bool
{
use self::CssRule::*;
self.0.iter().all(|r|
{
match *r
{
Namespace(..) | Import(..) => true,
_ => false
}
})
}
pub fn remove_rule(&mut self, index: usize) -> Result<(), RulesMutateError>
{
use self::CssRule::Namespace;
use self::RulesMutateError::*;
if index >= self.0.len()
{
return Err(IndexSize);
}
{
let ref rule = self.0[index];
if let Namespace(..) = *rule
{
if !self.only_ns_or_import()
{
return Err(InvalidState);
}
}
}
self.0.remove(index);
Ok(())
}
}