pub trait ObligationEmittingRelation<'tcx>: TypeRelation<'tcx> {
    // Required methods
    fn register_obligations(
        &mut self,
        obligations: Vec<Obligation<'tcx, Predicate<'tcx>>, Global>
    );
    fn register_predicates(
        &mut self,
        obligations: impl IntoIterator>
    )
       where <impl IntoIterator as IntoIterator>::Item: ToPredicate<'tcx, Predicate<'tcx>>;
    fn alias_relate_direction(&self) -> AliasRelationDirection;

    // Provided method
    fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) { ... }
}

Required Methods§

source

fn register_obligations( &mut self, obligations: Vec<Obligation<'tcx, Predicate<'tcx>>, Global> )

Register obligations that must hold in order for this relation to hold

source

fn register_predicates( &mut self, obligations: impl IntoIterator> )where <impl IntoIterator as IntoIterator>::Item: ToPredicate<'tcx, Predicate<'tcx>>,

Register predicates that must hold in order for this relation to hold. Uses a default obligation cause, ObligationEmittingRelation::register_obligations should be used if control over the obligation causes is required.

source

fn alias_relate_direction(&self) -> AliasRelationDirection

Relation direction emitted for AliasRelate predicates, corresponding to the direction of the relation.

Provided Methods§

source

fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>)

Register an obligation that both types must be related to each other according to the ty::AliasRelationDirection given by ObligationEmittingRelation::alias_relate_direction

Implementors§