5#ifndef WASMTIME_COMPONENT_TYPES_VAL_HH
6#define WASMTIME_COMPONENT_TYPES_VAL_HH
10#ifdef WASMTIME_FEATURE_COMPONENT_MODEL
16#include <wasmtime/helpers.hh>
27 WASMTIME_CLONE_EQUAL_WRAPPER(
ListType, wasmtime_component_list_type);
37 WASMTIME_CLONE_EQUAL_WRAPPER(
RecordType, wasmtime_component_record_type);
40 size_t field_count()
const {
45 std::optional<std::pair<std::string_view, ValType>>
46 field_nth(
size_t nth)
const;
53 WASMTIME_CLONE_EQUAL_WRAPPER(
TupleType, wasmtime_component_tuple_type);
56 size_t types_count()
const {
61 std::optional<ValType> types_nth(
size_t nth)
const;
68 WASMTIME_CLONE_EQUAL_WRAPPER(
VariantType, wasmtime_component_variant_type);
71 size_t case_count()
const {
76 std::optional<std::pair<std::string_view, std::optional<ValType>>>
77 case_nth(
size_t nth)
const;
84 WASMTIME_CLONE_EQUAL_WRAPPER(
EnumType, wasmtime_component_enum_type);
87 size_t names_count()
const {
92 std::optional<std::string_view> names_nth(
size_t nth)
const {
93 const char *name_ptr =
nullptr;
97 return std::string_view(name_ptr, name_len);
107 WASMTIME_CLONE_EQUAL_WRAPPER(
OptionType, wasmtime_component_option_type);
117 WASMTIME_CLONE_EQUAL_WRAPPER(
ResultType, wasmtime_component_result_type);
120 std::optional<ValType> ok()
const;
123 std::optional<ValType> err()
const;
130 WASMTIME_CLONE_EQUAL_WRAPPER(
FlagsType, wasmtime_component_flags_type);
133 size_t names_count()
const {
138 std::optional<std::string_view> names_nth(
size_t nth)
const {
139 const char *name_ptr =
nullptr;
143 return std::string_view(name_ptr, name_len);
152 WASMTIME_CLONE_EQUAL_WRAPPER(
ResourceType, wasmtime_component_resource_type);
165 WASMTIME_CLONE_EQUAL_WRAPPER(
FutureType, wasmtime_component_future_type);
168 std::optional<ValType> ty()
const;
175 WASMTIME_CLONE_EQUAL_WRAPPER(
StreamType, wasmtime_component_stream_type);
178 std::optional<ValType> ty()
const;
185 WASMTIME_CLONE_EQUAL_WRAPPER(
MapType, wasmtime_component_map_type);
370 ty.
of.own = own.capi_release();
505 return *ListType::from_capi(&ty.
of.
list);
511 return *RecordType::from_capi(&ty.
of.
record);
517 return *TupleType::from_capi(&ty.
of.
tuple);
523 return *VariantType::from_capi(&ty.
of.
variant);
529 return *EnumType::from_capi(&ty.
of.
enum_);
535 return *OptionType::from_capi(&ty.
of.
option);
541 return *ResultType::from_capi(&ty.
of.
result);
547 return *FlagsType::from_capi(&ty.
of.
flags);
553 return *ResourceType::from_capi(&ty.
of.own);
559 return *ResourceType::from_capi(&ty.
of.
borrow);
565 return *FutureType::from_capi(&ty.
of.
future);
571 return *StreamType::from_capi(&ty.
of.
stream);
577 return *MapType::from_capi(&ty.
of.
map);
586inline ValType ListType::element()
const {
589 return ValType(std::move(type_ret));
592inline std::optional<std::pair<std::string_view, ValType>>
593RecordType::field_nth(
size_t nth)
const {
594 const char *name_ptr =
nullptr;
598 &name_len, &type_ret)) {
599 return std::make_pair(std::string_view(name_ptr, name_len),
600 ValType(std::move(type_ret)));
605inline std::optional<ValType> TupleType::types_nth(
size_t nth)
const {
608 return ValType(std::move(type_ret));
613inline std::optional<std::pair<std::string_view, std::optional<ValType>>>
614VariantType::case_nth(
size_t nth)
const {
615 const char *name_ptr =
nullptr;
617 bool has_payload =
false;
620 ptr.get(), nth, &name_ptr, &name_len, &has_payload, &payload_ret)) {
623 return std::make_pair(
624 std::string_view(name_ptr, name_len),
625 has_payload ? std::optional<ValType>(ValType(std::move(payload_ret)))
629inline ValType OptionType::ty()
const {
632 return ValType(std::move(type_ret));
635inline std::optional<ValType> ResultType::ok()
const {
638 return ValType(std::move(type_ret));
643inline std::optional<ValType> ResultType::err()
const {
646 return ValType(std::move(type_ret));
651inline std::optional<ValType> FutureType::ty()
const {
654 return ValType(std::move(type_ret));
659inline std::optional<ValType> StreamType::ty()
const {
662 return ValType(std::move(type_ret));
667inline ValType MapType::key()
const {
670 return ValType(std::move(type_ret));
673inline ValType MapType::value()
const {
676 return ValType(std::move(type_ret));
Type information about a WebAssembly value.
Definition: types/_val_class.hh:19
Represents a component enum type.
Definition: component/types/val.hh:83
Represents a component flags type.
Definition: component/types/val.hh:129
Represents a component future type.
Definition: component/types/val.hh:164
Represents a component list type.
Definition: component/types/val.hh:26
Represents a component map type.
Definition: component/types/val.hh:184
Represents a component option type.
Definition: component/types/val.hh:106
Represents a component record type.
Definition: component/types/val.hh:36
Definition: component/types/val.hh:151
ResourceType(uint32_t ty)
Creates a new host resource type with the specified ty identifier.
Definition: component/types/val.hh:157
Represents a component result type.
Definition: component/types/val.hh:116
Represents a component stream type.
Definition: component/types/val.hh:174
Represents a component tuple type.
Definition: component/types/val.hh:52
Represents a component value type.
Definition: component/types/val.hh:197
bool is_enum() const
Returns true if this is an enum type.
Definition: component/types/val.hh:461
bool is_u32() const
Returns true if this is a u32 type.
Definition: component/types/val.hh:425
bool is_char() const
Returns true if this is a char type.
Definition: component/types/val.hh:437
ValType & operator=(const ValType &other)
Copies another type into this one.
Definition: component/types/val.hh:219
const FlagsType & flags() const
Returns the flags type, asserting that this is indeed a flags.
Definition: component/types/val.hh:545
const EnumType & enum_() const
Returns the enum type, asserting that this is indeed a enum.
Definition: component/types/val.hh:527
const ResourceType & borrow() const
Returns the borrow type, asserting that this is indeed a borrow.
Definition: component/types/val.hh:557
bool is_tuple() const
Returns true if this is a tuple type.
Definition: component/types/val.hh:453
bool is_variant() const
Returns true if this is a variant type.
Definition: component/types/val.hh:456
wasmtime_component_valtype_t * capi()
Returns the underlying C API pointer.
Definition: component/types/val.hh:583
static ValType new_s8()
Creates an s8 value type.
Definition: component/types/val.hh:259
const MapType & map() const
Returns the map type, asserting that this is indeed a map.
Definition: component/types/val.hh:575
static ValType new_s16()
Creates an s16 value type.
Definition: component/types/val.hh:264
ValType(ListType list)
Creates a list value type.
Definition: component/types/val.hh:319
const FutureType & future() const
Returns the future type, asserting that this is indeed a future.
Definition: component/types/val.hh:563
bool is_borrow() const
Returns true if this is a borrow type.
Definition: component/types/val.hh:480
wasmtime_component_valtype_kind_t kind() const
Returns the kind of this value type.
Definition: component/types/val.hh:401
static ValType new_bool()
Creates a bool value type.
Definition: component/types/val.hh:254
const wasmtime_component_valtype_t * capi() const
Returns the underlying C API pointer.
Definition: component/types/val.hh:581
ValType(ValType &&other)
Moves another type into this one.
Definition: component/types/val.hh:222
static ValType new_string()
Creates a string value type.
Definition: component/types/val.hh:314
const StreamType & stream() const
Returns the stream type, asserting that this is indeed a stream.
Definition: component/types/val.hh:569
bool is_own() const
Returns true if this is an own type.
Definition: component/types/val.hh:477
bool is_error_context() const
Returns true if this is an error context type.
Definition: component/types/val.hh:495
bool is_string() const
Returns true if this is a string type.
Definition: component/types/val.hh:440
bool is_list() const
Returns true if this is a list type.
Definition: component/types/val.hh:445
static ValType new_f32()
Creates an f32 value type.
Definition: component/types/val.hh:299
ValType(const ValType &other)
Copies another type into this one.
Definition: component/types/val.hh:214
const RecordType & record() const
Returns the record type, asserting that this is indeed a record.
Definition: component/types/val.hh:509
bool is_future() const
Returns true if this is a future type.
Definition: component/types/val.hh:485
ValType(EnumType enum_)
Creates an enum value type.
Definition: component/types/val.hh:343
ValType(ResultType result)
Creates a result value type.
Definition: component/types/val.hh:355
ValType(OptionType option)
Creates an option value type.
Definition: component/types/val.hh:349
static ValType new_u16()
Creates a u16 value type.
Definition: component/types/val.hh:284
static ValType new_u64()
Creates a u64 value type.
Definition: component/types/val.hh:294
ValType(FlagsType flags)
Creates a flags value type.
Definition: component/types/val.hh:361
bool is_f32() const
Returns true if this is an f32 type.
Definition: component/types/val.hh:431
bool is_s16() const
Returns true if this is an s16 type.
Definition: component/types/val.hh:410
static ValType new_char()
Creates a char value type.
Definition: component/types/val.hh:309
static ValType new_u8()
Creates a u8 value type.
Definition: component/types/val.hh:279
const ListType & list() const
Returns the list type, asserting that this is indeed a list.
Definition: component/types/val.hh:503
ValType(FutureType future)
Creates a future value type.
Definition: component/types/val.hh:383
ValType(VariantType variant)
Creates a variant value type.
Definition: component/types/val.hh:337
bool is_u8() const
Returns true if this is a u8 type.
Definition: component/types/val.hh:419
const TupleType & tuple() const
Returns the tuple type, asserting that this is indeed a tuple.
Definition: component/types/val.hh:515
ValType(wasmtime_component_valtype_t &&ty)
Creates a component value type from the raw C API representation.
Definition: component/types/val.hh:208
ValType(MapType map)
Creates a map value type.
Definition: component/types/val.hh:395
bool is_flags() const
Returns true if this is a flags type.
Definition: component/types/val.hh:474
static ValType new_borrow(ResourceType borrow)
Creates an borrow value type.
Definition: component/types/val.hh:375
bool operator!=(const ValType &other) const
Compares two types to see if they're different.
Definition: component/types/val.hh:251
bool is_s64() const
Returns true if this is an s64 type.
Definition: component/types/val.hh:416
ValType(RecordType record)
Creates a record value type.
Definition: component/types/val.hh:325
bool is_u64() const
Returns true if this is a u64 type.
Definition: component/types/val.hh:428
static ValType new_f64()
Creates an f64 value type.
Definition: component/types/val.hh:304
static ValType new_s64()
Creates an s64 value type.
Definition: component/types/val.hh:274
ValType & operator=(ValType &&other)
Moves another type into this one.
Definition: component/types/val.hh:227
static ValType new_s32()
Creates an s32 value type.
Definition: component/types/val.hh:269
static ValType new_u32()
Creates a u32 value type.
Definition: component/types/val.hh:289
const VariantType & variant() const
Returns the variant type, asserting that this is indeed a variant.
Definition: component/types/val.hh:521
bool is_s8() const
Returns true if this is an s8 type.
Definition: component/types/val.hh:407
ValType(StreamType stream)
Creates a stream value type.
Definition: component/types/val.hh:389
bool is_s32() const
Returns true if this is an s32 type.
Definition: component/types/val.hh:413
bool is_f64() const
Returns true if this is an f64 type.
Definition: component/types/val.hh:434
static ValType new_own(ResourceType own)
Creates an own value type.
Definition: component/types/val.hh:367
bool operator==(const ValType &other) const
Compares two types to see if they're the same.
Definition: component/types/val.hh:246
bool is_result() const
Returns true if this is a result type.
Definition: component/types/val.hh:469
bool is_record() const
Returns true if this is a record type.
Definition: component/types/val.hh:448
bool is_map() const
Returns true if this is a map type.
Definition: component/types/val.hh:500
const ResultType & result() const
Returns the result type, asserting that this is indeed a result.
Definition: component/types/val.hh:539
ValType(TupleType tuple)
Creates a tuple value type.
Definition: component/types/val.hh:331
const OptionType & option() const
Returns the option type, asserting that this is indeed a option.
Definition: component/types/val.hh:533
bool is_bool() const
Returns true if this is a bool type.
Definition: component/types/val.hh:404
bool is_u16() const
Returns true if this is a u16 type.
Definition: component/types/val.hh:422
bool is_option() const
Returns true if this is an option type.
Definition: component/types/val.hh:464
bool is_stream() const
Returns true if this is a stream type.
Definition: component/types/val.hh:490
static const ValType * from_capi(const wasmtime_component_valtype_t *capi)
Definition: component/types/val.hh:240
Represents a component variant type.
Definition: component/types/val.hh:67
WASM_API_EXTERN bool wasmtime_component_result_type_err(const wasmtime_component_result_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the err type of a component result type. The returned type must be deallocated with wasmtime_...
WASM_API_EXTERN void wasmtime_component_option_type_ty(const wasmtime_component_option_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the inner type of a component option type.
#define WASMTIME_COMPONENT_VALTYPE_S16
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a s16 WIT typ...
Definition: component/types/val.h:385
#define WASMTIME_COMPONENT_VALTYPE_U64
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a u64 WIT typ...
Definition: component/types/val.h:403
WASM_API_EXTERN size_t wasmtime_component_tuple_type_types_count(const wasmtime_component_tuple_type_t *ty)
Returns the number of types in a component tuple type.
WASM_API_EXTERN size_t wasmtime_component_enum_type_names_count(const wasmtime_component_enum_type_t *ty)
Returns the number of names in a component enum type.
WASM_API_EXTERN bool wasmtime_component_tuple_type_types_nth(const wasmtime_component_tuple_type_t *ty, size_t nth, struct wasmtime_component_valtype_t *type_ret)
Returns the nth type in a component tuple type.
#define WASMTIME_COMPONENT_VALTYPE_OWN
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a resource ow...
Definition: component/types/val.h:442
WASM_API_EXTERN size_t wasmtime_component_flags_type_names_count(const wasmtime_component_flags_type_t *ty)
Returns the number of names in a component flags type.
WASM_API_EXTERN size_t wasmtime_component_variant_type_case_count(const wasmtime_component_variant_type_t *ty)
Returns the number of cases in a component variant type.
WASM_API_EXTERN bool wasmtime_component_stream_type_ty(const wasmtime_component_stream_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the inner type of a component stream type.
WASM_API_EXTERN void wasmtime_component_valtype_clone(const wasmtime_component_valtype_t *ty, wasmtime_component_valtype_t *out)
Clones a component value type.
WASM_API_EXTERN bool wasmtime_component_record_type_field_nth(const wasmtime_component_record_type_t *ty, size_t nth, const char **name_ret, size_t *name_len_ret, struct wasmtime_component_valtype_t *type_ret)
Returns the nth field in a component record type.
#define WASMTIME_COMPONENT_VALTYPE_STREAM
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a stream WIT ...
Definition: component/types/val.h:451
#define WASMTIME_COMPONENT_VALTYPE_S64
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a s64 WIT typ...
Definition: component/types/val.h:391
#define WASMTIME_COMPONENT_VALTYPE_F64
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a f64 WIT typ...
Definition: component/types/val.h:409
WASM_API_EXTERN bool wasmtime_component_result_type_ok(const wasmtime_component_result_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the ok type of a component result type. The returned type must be deallocated with wasmtime_c...
#define WASMTIME_COMPONENT_VALTYPE_S8
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a s8 WIT type...
Definition: component/types/val.h:382
#define WASMTIME_COMPONENT_VALTYPE_BORROW
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a resource bo...
Definition: component/types/val.h:445
#define WASMTIME_COMPONENT_VALTYPE_MAP
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a map WIT typ...
Definition: component/types/val.h:457
WASM_API_EXTERN bool wasmtime_component_variant_type_case_nth(const wasmtime_component_variant_type_t *ty, size_t nth, const char **name_ret, size_t *name_len_ret, bool *has_payload_ret, struct wasmtime_component_valtype_t *payload_ret)
Returns the nth case in a component variant type. The returned payload type must be deallocated with ...
#define WASMTIME_COMPONENT_VALTYPE_STRING
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a string WIT ...
Definition: component/types/val.h:415
WASM_API_EXTERN void wasmtime_component_map_type_value(const wasmtime_component_map_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the value type of a component map type.
WASM_API_EXTERN void wasmtime_component_valtype_delete(wasmtime_component_valtype_t *ptr)
Deallocates a component value type.
#define WASMTIME_COMPONENT_VALTYPE_FUTURE
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a future WIT ...
Definition: component/types/val.h:448
WASM_API_EXTERN bool wasmtime_component_future_type_ty(const wasmtime_component_future_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the inner type of a component future type.
WASM_API_EXTERN bool wasmtime_component_flags_type_names_nth(const wasmtime_component_flags_type_t *ty, size_t nth, const char **name_ret, size_t *name_len_ret)
Returns the nth name in a component flags type.
WASM_API_EXTERN bool wasmtime_component_enum_type_names_nth(const wasmtime_component_enum_type_t *ty, size_t nth, const char **name_ret, size_t *name_len_ret)
Returns the nth name in a component enum type.
#define WASMTIME_COMPONENT_VALTYPE_VARIANT
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a variant WIT...
Definition: component/types/val.h:427
#define WASMTIME_COMPONENT_VALTYPE_RECORD
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a record WIT ...
Definition: component/types/val.h:421
WASM_API_EXTERN size_t wasmtime_component_record_type_field_count(const wasmtime_component_record_type_t *ty)
Returns the number of fields in a component record type.
WASM_API_EXTERN void wasmtime_component_map_type_key(const wasmtime_component_map_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the key type of a component map type.
#define WASMTIME_COMPONENT_VALTYPE_BOOL
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a bool WIT ty...
Definition: component/types/val.h:379
uint8_t wasmtime_component_valtype_kind_t
Discriminant used in wasmtime_component_valtype_t::kind.
Definition: component/types/val.h:460
WASM_API_EXTERN bool wasmtime_component_valtype_equal(const wasmtime_component_valtype_t *a, const wasmtime_component_valtype_t *b)
Compares two component value types for equality.
#define WASMTIME_COMPONENT_VALTYPE_RESULT
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a result WIT ...
Definition: component/types/val.h:436
#define WASMTIME_COMPONENT_VALTYPE_ERROR_CONTEXT
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is an error cont...
Definition: component/types/val.h:454
WASM_API_EXTERN void wasmtime_component_list_type_element(const wasmtime_component_list_type_t *ty, struct wasmtime_component_valtype_t *type_ret)
Returns the element type of a component list type.
#define WASMTIME_COMPONENT_VALTYPE_U32
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a u32 WIT typ...
Definition: component/types/val.h:400
#define WASMTIME_COMPONENT_VALTYPE_OPTION
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a option WIT ...
Definition: component/types/val.h:433
#define WASMTIME_COMPONENT_VALTYPE_ENUM
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a enum WIT ty...
Definition: component/types/val.h:430
#define WASMTIME_COMPONENT_VALTYPE_CHAR
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a char WIT ty...
Definition: component/types/val.h:412
#define WASMTIME_COMPONENT_VALTYPE_TUPLE
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a tuple WIT t...
Definition: component/types/val.h:424
#define WASMTIME_COMPONENT_VALTYPE_U8
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a u8 WIT type...
Definition: component/types/val.h:394
#define WASMTIME_COMPONENT_VALTYPE_F32
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a f32 WIT typ...
Definition: component/types/val.h:406
#define WASMTIME_COMPONENT_VALTYPE_LIST
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a list WIT ty...
Definition: component/types/val.h:418
#define WASMTIME_COMPONENT_VALTYPE_FLAGS
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a flags WIT t...
Definition: component/types/val.h:439
#define WASMTIME_COMPONENT_VALTYPE_S32
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a s32 WIT typ...
Definition: component/types/val.h:388
#define WASMTIME_COMPONENT_VALTYPE_U16
Value of wasmtime_component_valtype_kind_t meaning that wasmtime_component_valtype_t is a u16 WIT typ...
Definition: component/types/val.h:397
Build-time defines for how the C API was built.
WASM_API_EXTERN wasmtime_component_resource_type_t * wasmtime_component_resource_type_new_host(uint32_t ty)
Creates a new resource type representing a host-defined resource.
Represents a single value type in the component model.
Definition: component/types/val.h:506
wasmtime_component_valtype_union_t of
The actual type.
Definition: component/types/val.h:510
wasmtime_component_valtype_kind_t kind
The type discriminant for the of union.
Definition: component/types/val.h:508
wasmtime_component_flags_type_t * flags
Definition: component/types/val.h:487
wasmtime_component_option_type_t * option
Definition: component/types/val.h:481
wasmtime_component_record_type_t * record
Definition: component/types/val.h:469
wasmtime_component_resource_type_t * borrow
Definition: component/types/val.h:493
wasmtime_component_list_type_t * list
Definition: component/types/val.h:466
wasmtime_component_tuple_type_t * tuple
Definition: component/types/val.h:472
wasmtime_component_future_type_t * future
Definition: component/types/val.h:496
wasmtime_component_result_type_t * result
Definition: component/types/val.h:484
wasmtime_component_map_type_t * map
Definition: component/types/val.h:502
wasmtime_component_enum_type_t * enum_
Definition: component/types/val.h:478
wasmtime_component_stream_type_t * stream
Definition: component/types/val.h:499
wasmtime_component_variant_type_t * variant
Definition: component/types/val.h:475