pub(crate) fn rule_body<'a>(css: &'a str, selector: &str) -> &'a str {
let open = format!("{selector} {{");
let at = css
.find(&open)
.unwrap_or_else(|| panic!("no rule for {selector}"));
let rest = &css[at + open.len()..];
&rest[..rest
.find('}')
.unwrap_or_else(|| panic!("the rule for {selector} does not close"))]
}
pub(crate) fn assert_every_class_has_rule(css: &str, names: &[&str]) {
for name in names {
assert!(css.contains(&format!(".{name}")), "{name} has no rule");
}
}
#[cfg(feature = "build")]
pub(crate) fn scratch(name: &str) -> std::path::PathBuf {
let dir = std::env::temp_dir().join(format!("makeover-webview-{}-{name}", std::process::id()));
let _ = std::fs::remove_dir_all(&dir);
std::fs::create_dir_all(&dir).expect("create scratch");
dir
}