///|
pub(all) enum ContainerStyleCondition {
  StyleEquals(@values.VariableUse, String)
  StyleNot(ContainerStyleCondition)
  StyleAll(Array[ContainerStyleCondition])
  StyleAny(Array[ContainerStyleCondition])
} derive(Eq, Debug)

///|
pub extend ContainerStyleCondition with Eq::{equal, not_equal}

///|
pub extend ContainerStyleCondition with @debug.Debug::{to_repr}

///|
pub fn ContainerStyleCondition::variables(
  self : ContainerStyleCondition,
) -> Array[@values.VariableUse] {
  match self {
    StyleEquals(variable, _) => [variable]
    StyleNot(child) => child.variables()
    StyleAll(children) | StyleAny(children) => {
      let output = []
      for child in children {
        for variable in child.variables() {
          output.push(variable)
        }
      }
      output
    }
  }
}