code: func (rule *Rule) String() string {
  	result := ""
  
  	if rule.Kind == QualifiedRule {
  		for i, sel := range rule.Selectors {
  			if i != 0 {
  				result += ", "
  			}
  			result += sel
  		}
  	} else {
  		// AtRule
  		result += fmt.Sprintf("%s", rule.Name)
  
  		if rule.Prelude != "" {
  			if result != "" {
  				result += " "
  			}
  			result += fmt.Sprintf("%s", rule.Prelude)
  		}
  	}
  
  	if (len(rule.Declarations) == 0) && (len(rule.Rules) == 0) {
  		result += ";"
  	} else {
  		result += " {\n"
  
  		if rule.EmbedsRules() {
  			for _, subRule := range rule.Rules {
  				result += fmt.Sprintf("%s%s\n", rule.indent(), subRule.String())
  			}
  		} else {
  			for _, decl := range rule.Declarations {
  				result += fmt.Sprintf("%s%s\n", rule.indent(), decl.String())
  			}
  		}
  
  		result += fmt.Sprintf("%s}", rule.indentEndBlock())
  	}
  
  	return result
  }
docs: // Returns the string representation of a rule