use toasty_core::{Schema, stmt};
pub(super) fn is_variant_tautology_or(schema: &Schema, expr: &stmt::ExprOr) -> bool {
let Some(first) = expr.operands.iter().find_map(|op| match op {
stmt::Expr::IsVariant(iv) => Some(iv),
_ => None,
}) else {
return false;
};
let anchor_expr = &first.expr;
let model_id = first.variant.model;
let num_variants = schema
.app
.model(model_id)
.as_embedded_enum_unwrap()
.variants
.len();
let mut seen = bit_set::BitSet::with_capacity(num_variants);
for operand in &expr.operands {
let stmt::Expr::IsVariant(iv) = operand else {
continue;
};
if !iv.expr.is_equivalent_to(anchor_expr) || iv.variant.model != model_id {
return false;
}
seen.insert(iv.variant.index);
}
seen.count() == num_variants
}