use tsify_next::Tsify; #[tsify(into_wasm_abi, from_wasm_abi)] pub struct GenericStruct { x: T, } #[automatically_derived] const _: () = { extern crate serde as _serde; use tsify_next::Tsify; use wasm_bindgen::{ convert::{ FromWasmAbi, VectorFromWasmAbi, IntoWasmAbi, VectorIntoWasmAbi, OptionFromWasmAbi, OptionIntoWasmAbi, RefFromWasmAbi, }, describe::WasmDescribe, describe::WasmDescribeVector, prelude::*, }; #[wasm_bindgen] extern "C" { #[wasm_bindgen(typescript_type = "GenericStruct")] pub type JsType; } impl Tsify for GenericStruct { type JsType = JsType; const DECL: &'static str = "export interface GenericStruct {\n x: T;\n}"; const SERIALIZATION_CONFIG: tsify_next::SerializationConfig = tsify_next::SerializationConfig { missing_as_null: false, hashmap_as_object: false, large_number_types_as_bigints: false, }; } #[wasm_bindgen(typescript_custom_section)] const TS_APPEND_CONTENT: &'static str = "export interface GenericStruct {\n x: T;\n}"; impl WasmDescribe for GenericStruct { #[inline] fn describe() { ::JsType::describe() } } impl WasmDescribeVector for GenericStruct { #[inline] fn describe_vector() { ::JsType::describe_vector() } } impl IntoWasmAbi for GenericStruct where GenericStruct: _serde::Serialize, { type Abi = ::Abi; #[inline] fn into_abi(self) -> Self::Abi { match self.into_js() { Ok(js) => js.into_abi(), Err(err) => { let loc = core::panic::Location::caller(); let msg = { let res = ::alloc::fmt::format( format_args!( "(Converting type failed) {0} ({1}:{2}:{3})", err, loc .file(), loc.line(), loc.column(), ), ); res }; { #[cold] #[track_caller] #[inline(never)] #[rustc_const_panic_str] #[rustc_do_not_const_check] const fn panic_cold_display( arg: &T, ) -> ! { ::core::panicking::panic_display(arg) } panic_cold_display(&msg); }; } } } } impl OptionIntoWasmAbi for GenericStruct where GenericStruct: _serde::Serialize, { #[inline] fn none() -> Self::Abi { ::none() } } impl From> for JsValue where GenericStruct: _serde::Serialize, { #[inline] fn from(value: GenericStruct) -> Self { match value.into_js() { Ok(js) => js.into(), Err(err) => { let loc = core::panic::Location::caller(); let msg = { let res = ::alloc::fmt::format( format_args!( "(Converting type failed) {0} ({1}:{2}:{3})", err, loc .file(), loc.line(), loc.column(), ), ); res }; { #[cold] #[track_caller] #[inline(never)] #[rustc_const_panic_str] #[rustc_do_not_const_check] const fn panic_cold_display( arg: &T, ) -> ! { ::core::panicking::panic_display(arg) } panic_cold_display(&msg); }; } } } } impl VectorIntoWasmAbi for GenericStruct where GenericStruct: _serde::Serialize, { type Abi = ::Abi; #[inline] fn vector_into_abi(vector: Box<[Self]>) -> Self::Abi { let values = vector .iter() .map(|value| match value.into_js() { Ok(js) => js.into(), Err(err) => { let loc = core::panic::Location::caller(); let msg = { let res = ::alloc::fmt::format( format_args!( "(Converting type failed) {0} ({1}:{2}:{3})", err, loc .file(), loc.line(), loc.column(), ), ); res }; { #[cold] #[track_caller] #[inline(never)] #[rustc_const_panic_str] #[rustc_do_not_const_check] const fn panic_cold_display( arg: &T, ) -> ! { ::core::panicking::panic_display(arg) } panic_cold_display(&msg); }; } }) .collect(); JsValue::vector_into_abi(values) } } impl FromWasmAbi for GenericStruct 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 GenericStruct where Self: _serde::de::DeserializeOwned, { #[inline] fn is_none(js: &Self::Abi) -> bool { ::is_none(js) } } pub struct SelfOwner(T); impl ::core::ops::Deref for SelfOwner { type Target = T; fn deref(&self) -> &Self::Target { &self.0 } } impl RefFromWasmAbi for GenericStruct where Self: _serde::de::DeserializeOwned, { type Abi = ::Abi; type Anchor = SelfOwner; unsafe fn ref_from_abi(js: Self::Abi) -> Self::Anchor { let result = Self::from_js(&*JsType::ref_from_abi(js)); if let Err(err) = result { wasm_bindgen::throw_str(err.to_string().as_ref()); } SelfOwner(result.unwrap_throw()) } } impl VectorFromWasmAbi for GenericStruct where Self: _serde::de::DeserializeOwned, { type Abi = ::Abi; #[inline] unsafe fn vector_from_abi(js: Self::Abi) -> Box<[Self]> { JsValue::vector_from_abi(js) .into_iter() .map(|value| { let result = Self::from_js(value); if let Err(err) = result { wasm_bindgen::throw_str(err.to_string().as_ref()); } result.unwrap_throw() }) .collect() } } }; #[tsify(into_wasm_abi, from_wasm_abi)] pub struct GenericNewtype(T); #[automatically_derived] const _: () = { extern crate serde as _serde; use tsify_next::Tsify; use wasm_bindgen::{ convert::{ FromWasmAbi, VectorFromWasmAbi, IntoWasmAbi, VectorIntoWasmAbi, OptionFromWasmAbi, OptionIntoWasmAbi, RefFromWasmAbi, }, describe::WasmDescribe, describe::WasmDescribeVector, prelude::*, }; #[wasm_bindgen] extern "C" { #[wasm_bindgen(typescript_type = "GenericNewtype")] pub type JsType; } impl Tsify for GenericNewtype { type JsType = JsType; const DECL: &'static str = "export type GenericNewtype = T;"; const SERIALIZATION_CONFIG: tsify_next::SerializationConfig = tsify_next::SerializationConfig { missing_as_null: false, hashmap_as_object: false, large_number_types_as_bigints: false, }; } #[wasm_bindgen(typescript_custom_section)] const TS_APPEND_CONTENT: &'static str = "export type GenericNewtype = T;"; impl WasmDescribe for GenericNewtype { #[inline] fn describe() { ::JsType::describe() } } impl WasmDescribeVector for GenericNewtype { #[inline] fn describe_vector() { ::JsType::describe_vector() } } impl IntoWasmAbi for GenericNewtype where GenericNewtype: _serde::Serialize, { type Abi = ::Abi; #[inline] fn into_abi(self) -> Self::Abi { match self.into_js() { Ok(js) => js.into_abi(), Err(err) => { let loc = core::panic::Location::caller(); let msg = { let res = ::alloc::fmt::format( format_args!( "(Converting type failed) {0} ({1}:{2}:{3})", err, loc .file(), loc.line(), loc.column(), ), ); res }; { #[cold] #[track_caller] #[inline(never)] #[rustc_const_panic_str] #[rustc_do_not_const_check] const fn panic_cold_display( arg: &T, ) -> ! { ::core::panicking::panic_display(arg) } panic_cold_display(&msg); }; } } } } impl OptionIntoWasmAbi for GenericNewtype where GenericNewtype: _serde::Serialize, { #[inline] fn none() -> Self::Abi { ::none() } } impl From> for JsValue where GenericNewtype: _serde::Serialize, { #[inline] fn from(value: GenericNewtype) -> Self { match value.into_js() { Ok(js) => js.into(), Err(err) => { let loc = core::panic::Location::caller(); let msg = { let res = ::alloc::fmt::format( format_args!( "(Converting type failed) {0} ({1}:{2}:{3})", err, loc .file(), loc.line(), loc.column(), ), ); res }; { #[cold] #[track_caller] #[inline(never)] #[rustc_const_panic_str] #[rustc_do_not_const_check] const fn panic_cold_display( arg: &T, ) -> ! { ::core::panicking::panic_display(arg) } panic_cold_display(&msg); }; } } } } impl VectorIntoWasmAbi for GenericNewtype where GenericNewtype: _serde::Serialize, { type Abi = ::Abi; #[inline] fn vector_into_abi(vector: Box<[Self]>) -> Self::Abi { let values = vector .iter() .map(|value| match value.into_js() { Ok(js) => js.into(), Err(err) => { let loc = core::panic::Location::caller(); let msg = { let res = ::alloc::fmt::format( format_args!( "(Converting type failed) {0} ({1}:{2}:{3})", err, loc .file(), loc.line(), loc.column(), ), ); res }; { #[cold] #[track_caller] #[inline(never)] #[rustc_const_panic_str] #[rustc_do_not_const_check] const fn panic_cold_display( arg: &T, ) -> ! { ::core::panicking::panic_display(arg) } panic_cold_display(&msg); }; } }) .collect(); JsValue::vector_into_abi(values) } } impl FromWasmAbi for GenericNewtype 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 GenericNewtype where Self: _serde::de::DeserializeOwned, { #[inline] fn is_none(js: &Self::Abi) -> bool { ::is_none(js) } } pub struct SelfOwner(T); impl ::core::ops::Deref for SelfOwner { type Target = T; fn deref(&self) -> &Self::Target { &self.0 } } impl RefFromWasmAbi for GenericNewtype where Self: _serde::de::DeserializeOwned, { type Abi = ::Abi; type Anchor = SelfOwner; unsafe fn ref_from_abi(js: Self::Abi) -> Self::Anchor { let result = Self::from_js(&*JsType::ref_from_abi(js)); if let Err(err) = result { wasm_bindgen::throw_str(err.to_string().as_ref()); } SelfOwner(result.unwrap_throw()) } } impl VectorFromWasmAbi for GenericNewtype where Self: _serde::de::DeserializeOwned, { type Abi = ::Abi; #[inline] unsafe fn vector_from_abi(js: Self::Abi) -> Box<[Self]> { JsValue::vector_from_abi(js) .into_iter() .map(|value| { let result = Self::from_js(value); if let Err(err) = result { wasm_bindgen::throw_str(err.to_string().as_ref()); } result.unwrap_throw() }) .collect() } } };