diff --git a/src/ts.rs b/src/ts.rs index 1dbb58a..c05278d 100644 --- a/src/ts.rs +++ b/src/ts.rs @@ -106,6 +106,12 @@ where } } +impl From> for JsValue { + fn from(value: Ts) -> Self { + value.js_value() + } +} + impl fmt::Debug for Ts { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_tuple("Ts").finish() diff --git a/tests-e2e/reference_output/test6/test6.d.ts b/tests-e2e/reference_output/test6/test6.d.ts index 6508957..46865da 100644 --- a/tests-e2e/reference_output/test6/test6.d.ts +++ b/tests-e2e/reference_output/test6/test6.d.ts @@ -16,4 +16,10 @@ export function accept_point_vec(point: Point[]): void; export function return_point(point: Point): Point; +export function return_point_async(point: Point): Promise; + +export function return_point_option_async(point: Point): Promise; + +export function return_point_result_async(point: Point): Promise; + export function return_point_vec(): Point[]; diff --git a/tests-e2e/test6/entry_point.rs b/tests-e2e/test6/entry_point.rs index a202c16..9392a1a 100644 --- a/tests-e2e/test6/entry_point.rs +++ b/tests-e2e/test6/entry_point.rs @@ -41,6 +41,23 @@ pub fn return_point(point: &Ts) -> Ts { #[wasm_bindgen] pub async fn accept_point_ref_async(point: &Ts) {} +// Async fns return through `IntoJsResult`; the bare, `Result`, and `Option` +// shapes below each require `Ts: Into` via a distinct impl path. +#[wasm_bindgen] +pub async fn return_point_async(point: &Ts) -> Ts { + point.clone() +} + +#[wasm_bindgen] +pub async fn return_point_result_async(point: Ts) -> Result, JsError> { + Ok(point) +} + +#[wasm_bindgen] +pub async fn return_point_option_async(point: &Ts) -> Option> { + Some(point.clone()) +} + #[wasm_bindgen] pub fn accept_point_vec(point: Vec>) {}