pub enum ClassKind {
    Type(Type),
    Struct(StructRef),
    StructValue(StructRef),
    Tuple(TupleRef),
    TupleValue(TupleRef),
    Function(FunctionClassRef),
}
Expand description

An enum over every type that exists in debris. Either a simple Type or a complex type with additional data.

Most complex types come in two variants: As a pattern and as a value. A pattern could be e.g. a struct which may be required in a function definition as parameter. The value would then be the struct object that can actually be passed to that function.

Variants§

§

Type(Type)

§

Struct(StructRef)

§

StructValue(StructRef)

§

Tuple(TupleRef)

§

TupleValue(TupleRef)

§

Function(FunctionClassRef)

Implementations§

source§

impl ClassKind

source

pub fn as_value(&self) -> Option<ClassKind>

Changes all types to their respective objects, e.g. Struct => StructObject. This can be used to figure out the ClassKind that matches on this kind

Returns None if this is already an object variant

source

pub fn matches(&self, other: &ClassKind) -> bool

Returns whether the other class kind matches this class kind if this is interpreted as a pattern. For example, a struct object can match on a struct, if the underlying struct is equal.

source

pub fn diverges(&self) -> bool

Returns whether this value diverges, aka is impossible to construct. A diverging class can match on any pattern.

This is also used for some optimizations

source

pub fn typ(&self) -> Type

Returns the simple Type of this ClassKind

source

pub fn runtime_encodable(&self) -> bool

Returns whether this type can be fully encoded at runtime.

source

pub fn comptime_encodable(&self) -> bool

Returns whether this type can be fully encoded at compile time.

Trait Implementations§

source§

impl Debug for ClassKind

source§

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

Formats the value using the given formatter. Read more
source§

impl Display for ClassKind

source§

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

Formats the value using the given formatter. Read more
source§

impl From<Type> for ClassKind

source§

fn from(value: Type) -> Self

Converts to this type from the input type.
source§

impl PartialEq for ClassKind

source§

fn eq(&self, other: &ClassKind) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for ClassKind

source§

impl StructuralEq for ClassKind

source§

impl StructuralPartialEq for ClassKind

Auto Trait Implementations§

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
§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
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.