export module kym; import coral; import coral.math; export namespace kym { enum class value_type { nil, boolean, integer, scalar, vector2, vector3, object, }; struct value { value_type type; union { bool boolean; coral::i64 integer; coral::f64 scalar; coral::vector2 vector2; coral::vector3 vector3; void * object; } as; coral::optional as_u16() const { if ((this->type == value_type::integer) && (this->as.integer >= 0) && (this->as.integer <= coral::u16_max)) { return static_cast(this->as.integer); } return {}; } }; value nil = { .type = value_type::nil, .as = {.object = nullptr}, }; };