pub struct ObligationCtxt<'a, 'tcx> {
    pub infcx: &'a InferCtxt<'tcx>,
    engine: RefCell<Box<dyn TraitEngine<'tcx>>>,
}
Expand description

Used if you want to have pleasant experience when dealing with obligations outside of hir or mir typeck.

Fields§

§infcx: &'a InferCtxt<'tcx>§engine: RefCell<Box<dyn TraitEngine<'tcx>>>

Implementations§

source§

impl<'a, 'tcx> ObligationCtxt<'a, 'tcx>

source

pub fn new(infcx: &'a InferCtxt<'tcx>) -> Self

source

pub fn register_obligation(&self, obligation: PredicateObligation<'tcx>)

source

pub fn register_obligations( &self, obligations: impl IntoIterator<Item = PredicateObligation<'tcx>> )

source

pub fn register_infer_ok_obligations<T>(&self, infer_ok: InferOk<'tcx, T>) -> T

source

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

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

pub fn normalize<T: TypeFoldable<TyCtxt<'tcx>>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, value: T ) -> T

source

pub fn eq_exp<T>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, a_is_expected: bool, a: T, b: T ) -> Result<(), TypeError<'tcx>>where T: ToTrace<'tcx>,

Makes expected <: actual.

source

pub fn eq<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T ) -> Result<(), TypeError<'tcx>>

source

pub fn sub<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T ) -> Result<(), TypeError<'tcx>>

Checks whether expected is a subtype of actual: expected <: actual.

source

pub fn relate<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, variance: Variance, expected: T, actual: T ) -> Result<(), TypeError<'tcx>>

source

pub fn sup<T: ToTrace<'tcx>>( &self, cause: &ObligationCause<'tcx>, param_env: ParamEnv<'tcx>, expected: T, actual: T ) -> Result<(), TypeError<'tcx>>

Checks whether expected is a supertype of actual: expected :> actual.

source

pub fn select_where_possible(&self) -> Vec<FulfillmentError<'tcx>>

source

pub fn select_all_or_error(&self) -> Vec<FulfillmentError<'tcx>>

source

pub fn resolve_regions_and_report_errors( self, generic_param_scope: LocalDefId, outlives_env: &OutlivesEnvironment<'tcx> ) -> Result<(), ErrorGuaranteed>

Resolves regions and reports errors.

Takes ownership of the context as doing trait solving afterwards will result in region constraints getting ignored.

source

pub fn assumed_wf_types_and_report_errors( &self, param_env: ParamEnv<'tcx>, def_id: LocalDefId ) -> Result<FxIndexSet<Ty<'tcx>>, ErrorGuaranteed>

source

pub fn assumed_wf_types( &self, param_env: ParamEnv<'tcx>, def_id: LocalDefId ) -> Result<FxIndexSet<Ty<'tcx>>, Vec<FulfillmentError<'tcx>>>

source

pub fn make_canonicalized_query_response<T>( &self, inference_vars: CanonicalVarValues<'tcx>, answer: T ) -> Result<CanonicalQueryResponse<'tcx, T>, NoSolution>where T: Debug + TypeFoldable<TyCtxt<'tcx>>, Canonical<'tcx, QueryResponse<'tcx, T>>: ArenaAllocatable<'tcx>,

Auto Trait Implementations§

§

impl<'a, 'tcx> !RefUnwindSafe for ObligationCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !Send for ObligationCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !Sync for ObligationCtxt<'a, 'tcx>

§

impl<'a, 'tcx> Unpin for ObligationCtxt<'a, 'tcx>

§

impl<'a, 'tcx> !UnwindSafe for ObligationCtxt<'a, 'tcx>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 32 bytes