Enum Requirement

Source
pub enum Requirement {
    HasField {
        target_type: Loc<TypeVarID>,
        field: Loc<Identifier>,
        expr: Loc<TypeVarID>,
    },
    HasMethod {
        call_kind: CallKind,
        expr_id: Loc<ExprID>,
        target_type: Loc<TypeVarID>,
        trait_list: Option<TraitList>,
        method: Loc<Identifier>,
        expr: Loc<TypeVarID>,
        args: Loc<ArgumentList<Expression>>,
        turbofish: Option<Loc<ArgumentList<TypeExpression>>>,
        prev_generic_list: GenericListToken,
    },
    FitsIntLiteral {
        value: ConstantInt,
        target_type: Loc<TypeVarID>,
    },
    ValidPipelineOffset {
        definition_depth: Loc<TypeVarID>,
        current_stage: Loc<TypeVarID>,
        reference_offset: Loc<TypeVarID>,
    },
    PositivePipelineDepth {
        depth: Loc<TypeVarID>,
    },
    RangeIndexEndAfterStart {
        expr: Loc<()>,
        start: Loc<TypeVarID>,
        end: Loc<TypeVarID>,
    },
    RangeIndexInArray {
        index: Loc<TypeVarID>,
        size: Loc<TypeVarID>,
    },
    ArrayIndexeeIsNonZero {
        index: Loc<()>,
        array: Loc<TypeVarID>,
        array_size: Loc<TypeVarID>,
    },
    SharedBase(Vec<Loc<TypeVarID>>),
}

Variants§

§

HasField

Fields

§target_type: Loc<TypeVarID>

The type which should have the associated field

§field: Loc<Identifier>

The field which is required to exist on the struct

§expr: Loc<TypeVarID>

The expression from which this requirement arises

§

HasMethod

Fields

§call_kind: CallKind
§expr_id: Loc<ExprID>

The ID of the expression which causes this requirement

§target_type: Loc<TypeVarID>

The type which should have the associated method

§trait_list: Option<TraitList>

For method call on monomorphised generic with trait bounds The traits which should be searched for the method

§method: Loc<Identifier>

The method which should exist on the type

§expr: Loc<TypeVarID>

The expression from which this requirement arises

§args: Loc<ArgumentList<Expression>>

The argument list passed to the method. This should include the self expression as the appropriate argument (first positional or a non-shorthand self otherwise)

§turbofish: Option<Loc<ArgumentList<TypeExpression>>>

The turbofish specified on the method.

§prev_generic_list: GenericListToken

The generic list of the context where this is instantiated

§

FitsIntLiteral

The type should be an integer large enough to fit the specified value

Fields

§target_type: Loc<TypeVarID>
§

ValidPipelineOffset

Fields

§definition_depth: Loc<TypeVarID>
§current_stage: Loc<TypeVarID>
§reference_offset: Loc<TypeVarID>
§

PositivePipelineDepth

Fields

§depth: Loc<TypeVarID>
§

RangeIndexEndAfterStart

Fields

§expr: Loc<()>
§start: Loc<TypeVarID>
§end: Loc<TypeVarID>
§

RangeIndexInArray

Fields

§index: Loc<TypeVarID>
§size: Loc<TypeVarID>
§

ArrayIndexeeIsNonZero

Fields

§index: Loc<()>
§array: Loc<TypeVarID>
§array_size: Loc<TypeVarID>
§

SharedBase(Vec<Loc<TypeVarID>>)

The provided TypeVarID should all share a base type

Implementations§

Source§

impl Requirement

Source

pub fn check( &self, type_state: &mut TypeState, ctx: &Context<'_>, ) -> Result<RequirementResult>

Check if there are updates that allow us to resolve the requirement.

  • If target_type is still Unknown, we don’t know how to resolve the requirement
  • Otherwise it will either be unsatisfiable. i.e. the new type does not fulfill the requirement, in which case an error is returned
  • Or the requirement is now satisfied, in which case new unification tasks which are applied due to the result are returned. After this, the constraint is no longer needed and can be dropped
Source

pub fn check_or_add( self, type_state: &mut TypeState, ctx: &Context<'_>, ) -> Result<()>

Check if this requirement is satisfied. If so, apply the resulting replacements to the type state, otherwise add the requirement to the type state requirement list

Trait Implementations§

Source§

impl Clone for Requirement

Source§

fn clone(&self) -> Requirement

Returns a duplicate of the value. Read more
1.0.0 · Source§

const fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Requirement

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

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

Source§

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 T
where U: TryFrom<T>,

Source§

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more