mod cascade;
mod defaults;
mod ir;
mod merge;
mod program;
mod scene;
mod types;
mod value;
mod wires;
pub use ir::*;
pub use program::resolve as resolve_with_theme;
use crate::syntax::ast::{File, StyleItem};
use std::collections::HashMap;
pub fn type_chain_contains(ty: &str, target: &str, file: &File) -> bool {
let defines: HashMap<&str, &str> = file
.stylesheet
.iter()
.filter_map(|it| match it {
StyleItem::Define(d) => Some((d.name.as_str(), d.base.as_str())),
_ => None,
})
.collect();
let mut name = ty.to_string();
for _ in 0..=16 {
if name == target {
return true;
}
match types::template_base(&name).or_else(|| defines.get(name.as_str()).copied()) {
Some(base) => name = base.to_string(),
None => return false,
}
}
false
}