use crate::resolve::ResolvedValue;
const WALK: &[&str] = &[
"rose", "teal", "orange", "sky", "amber", "purple", "green", "blue", "lime", "gray",
];
pub fn hue(i: usize) -> &'static str {
WALK[i % WALK.len()]
}
pub fn deepen(color: &ResolvedValue) -> ResolvedValue {
if let ResolvedValue::LiveVar { name, raw } = color {
let base = match name.rsplit_once('-') {
Some((b, "wash" | "soft" | "deep" | "ink")) => b,
_ => name.as_str(),
};
return ResolvedValue::LiveVar {
name: format!("{base}-deep"),
raw: *raw,
};
}
color.clone()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn walk_skips_red_and_wraps() {
assert_eq!(hue(0), "rose");
assert_eq!(hue(1), "teal");
assert!(!WALK.contains(&"red"), "red is reserved for danger");
assert_eq!(hue(WALK.len()), hue(0), "the walk wraps when exhausted");
}
}