pub trait ObligationProcessor {
    type Obligation: ForestObligation;
    type Error: Debug;
    type OUT: OutcomeTrait<Obligation = Self::Obligation, Error = Error<Self::Obligation, Self::Error>>;

    fn needs_process_obligation(&self, obligation: &Self::Obligation) -> bool;
    fn process_obligation(
        &mut self,
        obligation: &mut Self::Obligation
    ) -> ProcessResult<Self::Obligation, Self::Error>; fn process_backedge<'c, I>(
        &mut self,
        cycle: I,
        _marker: PhantomData<&'c Self::Obligation>
    ) -> Result<(), Self::Error>
    where
        I: Clone + Iterator<Item = &'c Self::Obligation>
; }

Required Associated Types§

Required Methods§

As we do the cycle check, we invoke this callback when we encounter an actual cycle. cycle is an iterator that starts at the start of the cycle in the stack and walks toward the top.

In other words, if we had O1 which required O2 which required O3 which required O1, we would give an iterator yielding O1, O2, O3 (O1 is not yielded twice).

Implementors§