diff --git a/tests/component/test_func.py b/tests/component/test_func.py index 51cb23fa..9bce8b8e 100644 --- a/tests/component/test_func.py +++ b/tests/component/test_func.py @@ -432,6 +432,12 @@ def test_result(self): self.roundtrip_simple('(result)', 'i32', [Variant('ok'), Variant('err')]) + def test_variant_add_classes(self): + from wasmtime.component._types import VariantType, OptionType, ResultType, VariantLikeType + for cls in [VariantType, OptionType, ResultType]: + self.assertTrue(issubclass(cls, VariantLikeType)) + self.assertEqual(cls.add_classes, VariantLikeType.add_classes) + # TODO: roundtrip future # TODO: roundtrip stream # TODO: roundtrip error-context diff --git a/wasmtime/component/_types.py b/wasmtime/component/_types.py index f50dff5d..8bd5e74b 100644 --- a/wasmtime/component/_types.py +++ b/wasmtime/component/_types.py @@ -701,7 +701,7 @@ class Variant: case_test_cache: Set[type] = set() -class VariantLikeType: +class VariantLikeType(ValType): @abstractmethod def _cases(self) -> List[Tuple[str, Optional['ValType']]]: pass @@ -776,7 +776,7 @@ def _lift(self, tag: str, ptr: 'ctypes._Pointer[ffi.wasmtime_component_val_t]') raise ValueError(f"tag {tag} not found in variant cases") -class VariantType(Managed["ctypes._Pointer[ffi.wasmtime_component_variant_type_t]"], ValType, VariantLikeType): +class VariantType(Managed["ctypes._Pointer[ffi.wasmtime_component_variant_type_t]"], VariantLikeType): def _delete(self, ptr: "ctypes._Pointer[ffi.wasmtime_component_variant_type_t]") -> None: ffi.wasmtime_component_variant_type_delete(ptr) @@ -903,7 +903,7 @@ def convert_from_c(self, c: 'ffi.wasmtime_component_val_t') -> Any: return ret -class OptionType(Managed["ctypes._Pointer[ffi.wasmtime_component_option_type_t]"], ValType, VariantLikeType): +class OptionType(Managed["ctypes._Pointer[ffi.wasmtime_component_option_type_t]"], VariantLikeType): def _delete(self, ptr: "ctypes._Pointer[ffi.wasmtime_component_option_type_t]") -> None: ffi.wasmtime_component_option_type_delete(ptr) @@ -947,7 +947,7 @@ def convert_from_c(self, c: 'ffi.wasmtime_component_val_t') -> Any: -class ResultType(Managed["ctypes._Pointer[ffi.wasmtime_component_result_type_t]"], ValType, VariantLikeType): +class ResultType(Managed["ctypes._Pointer[ffi.wasmtime_component_result_type_t]"], VariantLikeType): def _delete(self, ptr: "ctypes._Pointer[ffi.wasmtime_component_result_type_t]") -> None: ffi.wasmtime_component_result_type_delete(ptr)