use tsify::Tsify; #[tsify(into_wasm_abi, from_wasm_abi)] pub enum GenericEnum { Unit, NewType(T), Seq(T, U), Map { x: T, y: U }, } #[automatically_derived] const _: () = { extern crate serde as _serde; use tsify::Tsify; use wasm_bindgen::{ convert::{FromWasmAbi, IntoWasmAbi, OptionFromWasmAbi, OptionIntoWasmAbi}, describe::WasmDescribe, prelude::*, }; #[wasm_bindgen] extern "C" { #[wasm_bindgen(typescript_type = "GenericEnum")] pub type JsType; } impl Tsify for GenericEnum { type JsType = JsType; const DECL: &'static str = "export type GenericEnum = \"Unit\" | { NewType: T } | { Seq: [T, U] } | { Map: { x: T; y: U } };"; } #[wasm_bindgen(typescript_custom_section)] const TS_APPEND_CONTENT: &'static str = "export type GenericEnum = \"Unit\" | { NewType: T } | { Seq: [T, U] } | { Map: { x: T; y: U } };"; impl WasmDescribe for GenericEnum { #[inline] fn describe() { ::JsType::describe() } } impl IntoWasmAbi for GenericEnum where Self: _serde::Serialize, { type Abi = ::Abi; #[inline] fn into_abi(self) -> Self::Abi { self.into_js().unwrap_throw().into_abi() } } impl OptionIntoWasmAbi for GenericEnum where Self: _serde::Serialize, { #[inline] fn none() -> Self::Abi { ::none() } } impl FromWasmAbi for GenericEnum where Self: _serde::de::DeserializeOwned, { type Abi = ::Abi; #[inline] unsafe fn from_abi(js: Self::Abi) -> Self { let result = Self::from_js(&JsType::from_abi(js)); if let Err(err) = result { wasm_bindgen::throw_str(err.to_string().as_ref()); } result.unwrap_throw() } } impl OptionFromWasmAbi for GenericEnum where Self: _serde::de::DeserializeOwned, { #[inline] fn is_none(js: &Self::Abi) -> bool { ::is_none(js) } } };