dada_ir_sym/check/predicates/
require_where_clause.rs1use dada_ir_ast::diagnostic::Errors;
2
3use crate::{
4 check::{env::Env, report::OrElse},
5 ir::generics::{SymWhereClause, SymWhereClauseKind},
6};
7
8use super::{
9 require_lent::require_term_is_lent, require_owned::require_term_is_owned,
10 require_shared::require_term_is_shared, require_unique::require_term_is_unique,
11};
12
13pub async fn require_where_clause<'db>(
14 env: &mut Env<'db>,
15 where_clause: SymWhereClause<'db>,
16 or_else: &dyn OrElse<'db>,
17) -> Errors<()> {
18 let db = env.db();
19 let subject = where_clause.subject(db);
20 match where_clause.kind(db) {
21 SymWhereClauseKind::Unique => require_term_is_unique(env, subject, or_else).await,
22 SymWhereClauseKind::Shared => require_term_is_shared(env, subject, or_else).await,
23 SymWhereClauseKind::Owned => require_term_is_owned(env, subject, or_else).await,
24 SymWhereClauseKind::Lent => require_term_is_lent(env, subject, or_else).await,
25 }
26}