Skip to content

Commit 962f580

Browse files
authored
Fix ambiguous associated type error when enum has variant called Error (#3678)
* add test enum with Error variant * add codegen to resolve enum compilation error * add test coverage for EnumWithErrorVariant
1 parent 0b5f0ee commit 962f580

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

crates/backend/src/codegen.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1456,7 +1456,7 @@ impl ToTokens for ast::Enum {
14561456
type Error = #wasm_bindgen::JsValue;
14571457

14581458
fn try_from(value: #wasm_bindgen::JsValue)
1459-
-> #wasm_bindgen::__rt::std::result::Result<Self, Self::Error> {
1459+
-> #wasm_bindgen::__rt::std::result::Result<Self, <#enum_name as #wasm_bindgen::__rt::core::convert::TryFrom<JsValue>>::Error> {
14601460
let js = f64::try_from(&value)? as u32;
14611461

14621462
#wasm_bindgen::__rt::std::result::Result::Ok(

tests/wasm/enums.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,7 @@ exports.js_expect_enum_none = a => {
3838
exports.js_renamed_enum = b => {
3939
assert.strictEqual(wasm.JsRenamedEnum.B, b);
4040
};
41+
42+
exports.js_enum_with_error_variant = () => {
43+
assert.strictEqual(wasm.EnumWithErrorVariant.Error, 2);
44+
};

tests/wasm/enums.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ extern "C" {
1010
fn js_expect_enum(x: Color, y: Option<Color>);
1111
fn js_expect_enum_none(x: Option<Color>);
1212
fn js_renamed_enum(b: RenamedEnum);
13+
fn js_enum_with_error_variant();
1314
}
1415

1516
#[wasm_bindgen]
@@ -71,6 +72,14 @@ pub fn handle_optional_enums(x: Option<Color>) -> Option<Color> {
7172
x
7273
}
7374

75+
#[wasm_bindgen]
76+
#[derive(Copy, Clone)]
77+
pub enum EnumWithErrorVariant {
78+
OK,
79+
Warning,
80+
Error,
81+
}
82+
7483
#[wasm_bindgen_test]
7584
fn test_optional_enums() {
7685
use self::Color::*;
@@ -95,3 +104,8 @@ fn test_optional_enum_values() {
95104
fn test_renamed_enum() {
96105
js_renamed_enum(RenamedEnum::B);
97106
}
107+
108+
#[wasm_bindgen_test]
109+
fn test_enum_with_error_variant() {
110+
js_enum_with_error_variant();
111+
}

0 commit comments

Comments
 (0)