Skip to main content

## TraitEngine

# Trait TraitEngine

Source

    pub trait TraitEngine<'tcx, E: 'tcx>: 'tcx {
        // Required methods
        fn register_predicate_obligation(
            &mut self,
            infcx: &InferCtxt<'tcx>,
            obligation: PredicateObligation<'tcx>,
        );
        fn try_evaluate_obligations(&mut self, infcx: &InferCtxt<'tcx>) -> Vec<E>;
        fn collect_remaining_errors(&mut self, infcx: &InferCtxt<'tcx>) -> Vec<E>;
        fn has_pending_obligations(&self) -> bool;
        fn pending_obligations(&self) -> PredicateObligations<'tcx>;
        fn drain_stalled_obligations_for_coroutines(
            &mut self,
            infcx: &InferCtxt<'tcx>,
        ) -> PredicateObligations<'tcx>;

        // Provided methods
        fn register_bound(
            &mut self,
            infcx: &InferCtxt<'tcx>,
            param_env: ParamEnv<'tcx>,
            ty: Ty<'tcx>,
            def_id: DefId,
            cause: ObligationCause<'tcx>,
        ) { ... }
        fn register_predicate_obligations(
            &mut self,
            infcx: &InferCtxt<'tcx>,
            obligations: PredicateObligations<'tcx>,
        ) { ... }
        fn evaluate_obligations_error_on_ambiguity(
            &mut self,
            infcx: &InferCtxt<'tcx>,
        ) -> Vec<E> { ... }
        fn pending_obligations_potentially_referencing_sub_root(
            &self,
            _infcx: &InferCtxt<'tcx>,
            _sub_root: TyVid,
        ) -> PredicateObligations<'tcx> { ... }
    }

## Required Methods§

Source

#### fn register_predicate_obligation( &mut self, infcx: &InferCtxt<'tcx>, obligation: PredicateObligation<'tcx>, )

Source

#### fn try_evaluate_obligations(&mut self, infcx: &InferCtxt<'tcx>) -> Vec<E>

Go over the list of pending obligations and try to evaluate them.

For each result: Ok: remove the obligation from the list Ambiguous: leave the obligation in the list to be evaluated later Err: remove the obligation from the list and return an error

Returns a list of errors from obligations that evaluated to Err.

Source

#### fn collect_remaining_errors(&mut self, infcx: &InferCtxt<'tcx>) -> Vec<E>

Source

#### fn has_pending_obligations(&self) -> bool

Source

#### fn pending_obligations(&self) -> PredicateObligations<'tcx>

Source

#### fn drain_stalled_obligations_for_coroutines( &mut self, infcx: &InferCtxt<'tcx>, ) -> PredicateObligations<'tcx>

Among all pending obligations, collect those are stalled on a inference variable which has changed since the last call to `try_evaluate_obligations`. Those obligations are marked as successful and returned.

## Provided Methods§

Source

#### fn register_bound( &mut self, infcx: &InferCtxt<'tcx>, param_env: ParamEnv<'tcx>, ty: Ty<'tcx>, def_id: DefId, cause: ObligationCause<'tcx>, )

Requires that `ty` must implement the trait with `def_id` in the given environment. This trait must not have any type parameters (except for `Self`).

Source

#### fn register_predicate_obligations( &mut self, infcx: &InferCtxt<'tcx>, obligations: PredicateObligations<'tcx>, )

Source

#### fn evaluate_obligations_error_on_ambiguity( &mut self, infcx: &InferCtxt<'tcx>, ) -> Vec<E>

Evaluate all pending obligations, return error if they can’t be evaluated.

For each result: Ok: remove the obligation from the list Ambiguous: remove the obligation from the list and return an error Err: remove the obligation from the list and return an error

Returns a list of errors from obligations that evaluated to Ambiguous or Err.

Source

#### fn pending_obligations_potentially_referencing_sub_root( &self, _infcx: &InferCtxt<'tcx>, _sub_root: TyVid, ) -> PredicateObligations<'tcx>

Pending obligations potentially referencing an inference variable whose sub-unification root is `_sub_root`. May be conservative: implementations can return obligations that don’t actually reference `_sub_root` (the default just returns everything).

## Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

## Implementors§