use sim_kernel::{
Cx, LibId, OpKey, Result, Symbol,
standard::{publish_organ_claims, publish_organ_claims_for_lib},
};
pub fn pattern_organ_symbol() -> Symbol {
Symbol::qualified("organ", "pattern")
}
pub fn pattern_adt_op_key() -> OpKey {
pattern_op_key("adt")
}
pub fn pattern_tag_op_key() -> OpKey {
pattern_op_key("tag")
}
pub fn pattern_match_op_key() -> OpKey {
pattern_op_key("match")
}
pub fn pattern_destructure_op_key() -> OpKey {
pattern_op_key("destructure")
}
pub fn pattern_exhaustive_op_key() -> OpKey {
pattern_op_key("exhaustive")
}
pub fn pattern_op_keys() -> Vec<OpKey> {
[
pattern_adt_op_key(),
pattern_tag_op_key(),
pattern_match_op_key(),
pattern_destructure_op_key(),
pattern_exhaustive_op_key(),
]
.into()
}
pub fn publish_pattern_organ_claims(cx: &mut Cx) -> Result<()> {
publish_organ_claims(cx, pattern_organ_symbol(), pattern_op_keys())
}
pub fn publish_pattern_organ_claims_for_lib(cx: &mut Cx, lib_id: LibId) -> Result<()> {
publish_organ_claims_for_lib(cx, lib_id, pattern_organ_symbol(), pattern_op_keys())
}
fn pattern_op_key(name: &str) -> OpKey {
OpKey::new(Symbol::new("pattern"), Symbol::new(name), 1)
}