-#[derive(Clone, PartialEq, Eq, Hash, Lift)]
-pub struct ObligationCause<'tcx> {
- /// `None` for `ObligationCause::dummy`, `Some` otherwise.
- data: Option<Lrc<ObligationCauseData<'tcx>>>,
-}
-
-const DUMMY_OBLIGATION_CAUSE_DATA: ObligationCauseData<'static> =
- ObligationCauseData { span: DUMMY_SP, body_id: hir::CRATE_HIR_ID, code: MiscObligation };
-
-// Correctly format `ObligationCause::dummy`.
-impl<'tcx> fmt::Debug for ObligationCause<'tcx> {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- ObligationCauseData::fmt(self, f)
- }
-}
-
-impl<'tcx> Deref for ObligationCause<'tcx> {
- type Target = ObligationCauseData<'tcx>;
-
- #[inline(always)]
- fn deref(&self) -> &Self::Target {
- self.data.as_deref().unwrap_or(&DUMMY_OBLIGATION_CAUSE_DATA)
- }
-}
-