pub enum ValType {
I32,
I64,
F32,
F64,
V128,
Ref(RefType),
}
Expand description
A list of all possible value types in WebAssembly.
§Subtyping and Equality
ValType
does not implement Eq
, because reference types have a subtyping
relationship, and so 99.99% of the time you actually want to check whether
one type matches (i.e. is a subtype of) another type. You can use the
ValType::matches
and Val::matches_ty
methods
to perform these types of checks. If, however, you are in that 0.01%
scenario where you need to check precise equality between types, you can use
the ValType::eq
method.
Variants§
I32
Signed 32 bit integer.
I64
Signed 64 bit integer.
F32
Floating point 32 bit integer.
F64
Floating point 64 bit integer.
V128
A 128 bit number.
Ref(RefType)
An opaque reference to some type on the heap.
Implementations§
Source§impl ValType
impl ValType
Sourcepub const NULLEXTERNREF: ValType
pub const NULLEXTERNREF: ValType
The nullexternref
type, aka (ref null noextern)
.
Sourcepub const NULLFUNCREF: ValType
pub const NULLFUNCREF: ValType
The nullfuncref
type, aka (ref null nofunc)
.
Sourcepub const NULLCONTREF: ValType
pub const NULLCONTREF: ValType
The nullcontref
type, aka. (ref null nocont)
.
Sourcepub const NULLEXNREF: ValType
pub const NULLEXNREF: ValType
The nullexnref
type, aka (ref null noexn)
.
Sourcepub fn is_num(&self) -> bool
pub fn is_num(&self) -> bool
Returns true if ValType
matches any of the numeric types. (e.g. I32
,
I64
, F32
, F64
).
Sourcepub fn is_funcref(&self) -> bool
pub fn is_funcref(&self) -> bool
Is this the funcref
(aka (ref null func)
) type?
Sourcepub fn is_externref(&self) -> bool
pub fn is_externref(&self) -> bool
Is this the externref
(aka (ref null extern)
) type?
Sourcepub fn is_contref(&self) -> bool
pub fn is_contref(&self) -> bool
Is this the contref
(aka (ref null cont)
) type?
Sourcepub fn as_ref(&self) -> Option<&RefType>
pub fn as_ref(&self) -> Option<&RefType>
Get the underlying reference type, if this value type is a reference type.
Sourcepub fn unwrap_ref(&self) -> &RefType
pub fn unwrap_ref(&self) -> &RefType
Get the underlying reference type, panicking if this value type is not a reference type.
Sourcepub fn matches(&self, other: &ValType) -> bool
pub fn matches(&self, other: &ValType) -> bool
Does this value type match the other type?
That is, is this value type a subtype of the other?
§Panics
Panics if either type is associated with a different engine from the other.
Sourcepub fn eq(a: &ValType, b: &ValType) -> bool
pub fn eq(a: &ValType, b: &ValType) -> bool
Is value type a
precisely equal to value type b
?
Returns false
even if a
is a subtype of b
or vice versa, if they
are not exactly the same value type.
§Panics
Panics if either type is associated with a different engine.
Sourcepub fn default_value(&self) -> Option<Val>
pub fn default_value(&self) -> Option<Val>
Construct a default value. Returns None for non-nullable Ref types, which have no default.
Trait Implementations§
Source§impl From<ValType> for StorageType
impl From<ValType> for StorageType
Source§fn from(v: ValType) -> StorageType
fn from(v: ValType) -> StorageType
Source§impl WasmType for ValType
impl WasmType for ValType
Source§fn kind(&self) -> WasmTypeKind
fn kind(&self) -> WasmTypeKind
WasmTypeKind
of this type.Source§fn tuple_element_types(&self) -> Box<dyn Iterator<Item = ValType> + '_>
fn tuple_element_types(&self) -> Box<dyn Iterator<Item = ValType> + '_>
self
is not a tuple type. Read more§fn list_element_type(&self) -> Option<Self>
fn list_element_type(&self) -> Option<Self>
§fn record_fields(&self) -> Box<dyn Iterator<Item = (Cow<'_, str>, Self)> + '_>
fn record_fields(&self) -> Box<dyn Iterator<Item = (Cow<'_, str>, Self)> + '_>
self
is not a record type. Read more§fn variant_cases(
&self,
) -> Box<dyn Iterator<Item = (Cow<'_, str>, Option<Self>)> + '_>
fn variant_cases( &self, ) -> Box<dyn Iterator<Item = (Cow<'_, str>, Option<Self>)> + '_>
self
is not a tuple type. Read more§fn enum_cases(&self) -> Box<dyn Iterator<Item = Cow<'_, str>> + '_>
fn enum_cases(&self) -> Box<dyn Iterator<Item = Cow<'_, str>> + '_>
self
is not an enum type. Read more§fn option_some_type(&self) -> Option<Self>
fn option_some_type(&self) -> Option<Self>
§fn result_types(&self) -> Option<(Option<Self>, Option<Self>)>
fn result_types(&self) -> Option<(Option<Self>, Option<Self>)>
Auto Trait Implementations§
impl Freeze for ValType
impl !RefUnwindSafe for ValType
impl Send for ValType
impl Sync for ValType
impl Unpin for ValType
impl !UnwindSafe for ValType
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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