Trait SolverDelegate

Source
pub trait SolverDelegate: Deref<Target = Self::Infcx> + Sized {
    type Infcx: InferCtxtLike<Interner = Self::Interner>;
    type Interner: Interner;

    // Required methods
    fn build_with_canonical<V>(
        cx: Self::Interner,
        canonical: &CanonicalQueryInput<Self::Interner, V>,
    ) -> (Self, V, CanonicalVarValues<Self::Interner>)
       where V: TypeFoldable<Self::Interner>;
    fn fresh_var_for_kind_with_span(
        &self,
        arg: <Self::Interner as Interner>::GenericArg,
        span: <Self::Interner as Interner>::Span,
    ) -> <Self::Interner as Interner>::GenericArg;
    fn leak_check(
        &self,
        max_input_universe: UniverseIndex,
    ) -> Result<(), NoSolution>;
    fn evaluate_const(
        &self,
        param_env: <Self::Interner as Interner>::ParamEnv,
        uv: UnevaluatedConst<Self::Interner>,
    ) -> Option<<Self::Interner as Interner>::Const>;
    fn well_formed_goals(
        &self,
        param_env: <Self::Interner as Interner>::ParamEnv,
        term: <Self::Interner as Interner>::Term,
    ) -> Option<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>>;
    fn make_deduplicated_outlives_constraints(
        &self,
    ) -> Vec<OutlivesPredicate<Self::Interner, <Self::Interner as Interner>::GenericArg>>;
    fn instantiate_canonical<V>(
        &self,
        canonical: Canonical<Self::Interner, V>,
        values: CanonicalVarValues<Self::Interner>,
    ) -> V
       where V: TypeFoldable<Self::Interner>;
    fn instantiate_canonical_var_with_infer(
        &self,
        cv_info: CanonicalVarInfo<Self::Interner>,
        span: <Self::Interner as Interner>::Span,
        universe_map: impl Fn(UniverseIndex) -> UniverseIndex,
    ) -> <Self::Interner as Interner>::GenericArg;
    fn add_item_bounds_for_hidden_type(
        &self,
        def_id: <Self::Interner as Interner>::DefId,
        args: <Self::Interner as Interner>::GenericArgs,
        param_env: <Self::Interner as Interner>::ParamEnv,
        hidden_ty: <Self::Interner as Interner>::Ty,
        goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>,
    );
    fn fetch_eligible_assoc_item(
        &self,
        goal_trait_ref: TraitRef<Self::Interner>,
        trait_assoc_def_id: <Self::Interner as Interner>::DefId,
        impl_def_id: <Self::Interner as Interner>::DefId,
    ) -> Result<Option<<Self::Interner as Interner>::DefId>, <Self::Interner as Interner>::ErrorGuaranteed>;
    fn is_transmutable(
        &self,
        dst: <Self::Interner as Interner>::Ty,
        src: <Self::Interner as Interner>::Ty,
        assume: <Self::Interner as Interner>::Const,
    ) -> Result<Certainty, NoSolution>;

    // Provided method
    fn cx(&self) -> Self::Interner { ... }
}

Required Associated Types§

Required Methods§

Source

fn build_with_canonical<V>( cx: Self::Interner, canonical: &CanonicalQueryInput<Self::Interner, V>, ) -> (Self, V, CanonicalVarValues<Self::Interner>)
where V: TypeFoldable<Self::Interner>,

Source

fn fresh_var_for_kind_with_span( &self, arg: <Self::Interner as Interner>::GenericArg, span: <Self::Interner as Interner>::Span, ) -> <Self::Interner as Interner>::GenericArg

Source

fn leak_check( &self, max_input_universe: UniverseIndex, ) -> Result<(), NoSolution>

Source

fn evaluate_const( &self, param_env: <Self::Interner as Interner>::ParamEnv, uv: UnevaluatedConst<Self::Interner>, ) -> Option<<Self::Interner as Interner>::Const>

Source

fn well_formed_goals( &self, param_env: <Self::Interner as Interner>::ParamEnv, term: <Self::Interner as Interner>::Term, ) -> Option<Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>>

Source

fn make_deduplicated_outlives_constraints( &self, ) -> Vec<OutlivesPredicate<Self::Interner, <Self::Interner as Interner>::GenericArg>>

Source

fn instantiate_canonical<V>( &self, canonical: Canonical<Self::Interner, V>, values: CanonicalVarValues<Self::Interner>, ) -> V
where V: TypeFoldable<Self::Interner>,

Source

fn instantiate_canonical_var_with_infer( &self, cv_info: CanonicalVarInfo<Self::Interner>, span: <Self::Interner as Interner>::Span, universe_map: impl Fn(UniverseIndex) -> UniverseIndex, ) -> <Self::Interner as Interner>::GenericArg

Source

fn add_item_bounds_for_hidden_type( &self, def_id: <Self::Interner as Interner>::DefId, args: <Self::Interner as Interner>::GenericArgs, param_env: <Self::Interner as Interner>::ParamEnv, hidden_ty: <Self::Interner as Interner>::Ty, goals: &mut Vec<Goal<Self::Interner, <Self::Interner as Interner>::Predicate>>, )

Source

fn fetch_eligible_assoc_item( &self, goal_trait_ref: TraitRef<Self::Interner>, trait_assoc_def_id: <Self::Interner as Interner>::DefId, impl_def_id: <Self::Interner as Interner>::DefId, ) -> Result<Option<<Self::Interner as Interner>::DefId>, <Self::Interner as Interner>::ErrorGuaranteed>

Source

fn is_transmutable( &self, dst: <Self::Interner as Interner>::Ty, src: <Self::Interner as Interner>::Ty, assume: <Self::Interner as Interner>::Const, ) -> Result<Certainty, NoSolution>

Provided Methods§

Source

fn cx(&self) -> Self::Interner

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§