use rustc_span::Span; use rustc_type_ir::elaborate::Elaboratable; use crate::ty::{self, TyCtxt}; impl<'tcx> Elaboratable> for ty::Clause<'tcx> { fn predicate(&self) -> ty::Predicate<'tcx> { self.as_predicate() } fn child(&self, clause: ty::Clause<'tcx>) -> Self { clause } fn child_with_derived_cause( &self, clause: ty::Clause<'tcx>, _span: Span, _parent_trait_pred: ty::PolyTraitPredicate<'tcx>, _index: usize, ) -> Self { clause } } impl<'tcx> Elaboratable> for ty::Predicate<'tcx> { fn predicate(&self) -> ty::Predicate<'tcx> { *self } fn child(&self, clause: ty::Clause<'tcx>) -> Self { clause.as_predicate() } fn child_with_derived_cause( &self, clause: ty::Clause<'tcx>, _span: Span, _parent_trait_pred: ty::PolyTraitPredicate<'tcx>, _index: usize, ) -> Self { clause.as_predicate() } } impl<'tcx> Elaboratable> for (ty::Predicate<'tcx>, Span) { fn predicate(&self) -> ty::Predicate<'tcx> { self.0 } fn child(&self, clause: ty::Clause<'tcx>) -> Self { (clause.as_predicate(), self.1) } fn child_with_derived_cause( &self, clause: ty::Clause<'tcx>, _span: Span, _parent_trait_pred: ty::PolyTraitPredicate<'tcx>, _index: usize, ) -> Self { (clause.as_predicate(), self.1) } } impl<'tcx> Elaboratable> for (ty::Clause<'tcx>, Span) { fn predicate(&self) -> ty::Predicate<'tcx> { self.0.as_predicate() } fn child(&self, clause: ty::Clause<'tcx>) -> Self { (clause, self.1) } fn child_with_derived_cause( &self, clause: ty::Clause<'tcx>, _span: Span, _parent_trait_pred: ty::PolyTraitPredicate<'tcx>, _index: usize, ) -> Self { (clause, self.1) } }