pub trait Elaboratable<'tcx> {
    // Required methods
    fn predicate(&self) -> Predicate<'tcx>;
    fn child(&self, clause: Clause<'tcx>) -> Self;
    fn child_with_derived_cause(
        &self,
        clause: Clause<'tcx>,
        span: Span,
        parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>,
        index: usize
    ) -> Self;
}
Expand description

Describes how to elaborate an obligation into a sub-obligation.

For Obligation, a sub-obligation is combined with the current obligation’s param-env and cause code. For ty::Predicate, none of this is needed, since there is no param-env or cause code to copy over.

Required Methods§

source

fn predicate(&self) -> Predicate<'tcx>

source

fn child(&self, clause: Clause<'tcx>) -> Self

source

fn child_with_derived_cause( &self, clause: Clause<'tcx>, span: Span, parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, index: usize ) -> Self

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'tcx> Elaboratable<'tcx> for (Clause<'tcx>, Span)

source§

fn predicate(&self) -> Predicate<'tcx>

source§

fn child(&self, clause: Clause<'tcx>) -> (Clause<'tcx>, Span)

source§

fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> (Clause<'tcx>, Span)

source§

impl<'tcx> Elaboratable<'tcx> for (Predicate<'tcx>, Span)

source§

fn predicate(&self) -> Predicate<'tcx>

source§

fn child(&self, clause: Clause<'tcx>) -> (Predicate<'tcx>, Span)

source§

fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> (Predicate<'tcx>, Span)

source§

impl<'tcx> Elaboratable<'tcx> for Clause<'tcx>

source§

fn predicate(&self) -> Predicate<'tcx>

source§

fn child(&self, clause: Clause<'tcx>) -> Clause<'tcx>

source§

fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> Clause<'tcx>

source§

impl<'tcx> Elaboratable<'tcx> for Predicate<'tcx>

source§

fn predicate(&self) -> Predicate<'tcx>

source§

fn child(&self, clause: Clause<'tcx>) -> Predicate<'tcx>

source§

fn child_with_derived_cause( &self, clause: Clause<'tcx>, _span: Span, _parent_trait_pred: Binder<'tcx, TraitPredicate<'tcx>>, _index: usize ) -> Predicate<'tcx>

Implementors§

source§

impl<'tcx> Elaboratable<'tcx> for Obligation<'tcx, Predicate<'tcx>>