@@ -591,7 +591,7 @@ impl ToTokens for ast::ImportEnum {
591
591
fn to_tokens ( & self , tokens : & mut TokenStream ) {
592
592
let vis = & self . vis ;
593
593
let name = & self . name ;
594
- let name_string = & self . name . to_string ( ) ;
594
+ let expect_string = format ! ( "attempted to convert invalid JSValue into {}" , name ) ;
595
595
let variants = & self . variants ;
596
596
let variant_strings = & self . variant_values ;
597
597
@@ -625,6 +625,15 @@ impl ToTokens for ast::ImportEnum {
625
625
#( #variants = #variant_indexes_ref, ) *
626
626
}
627
627
628
+ impl #name {
629
+ fn from_js_value( obj: :: wasm_bindgen:: JsValue ) -> Option <#name> {
630
+ obj. as_string( ) . and_then( |obj_str| match obj_str. as_str( ) {
631
+ #( #variant_strings => Some ( #variant_paths_ref) , ) *
632
+ _ => None ,
633
+ } )
634
+ }
635
+ }
636
+
628
637
impl :: wasm_bindgen:: describe:: WasmDescribe for #name {
629
638
fn describe( ) {
630
639
:: wasm_bindgen:: JsValue :: describe( )
@@ -650,21 +659,7 @@ impl ToTokens for ast::ImportEnum {
650
659
js: Self :: Abi ,
651
660
extra: & mut :: wasm_bindgen:: convert:: Stack ,
652
661
) -> Self {
653
- #name:: from( :: wasm_bindgen:: JsValue :: from_abi( js, extra) )
654
- }
655
- }
656
-
657
- impl From <:: wasm_bindgen:: JsValue > for #name {
658
- fn from( obj: :: wasm_bindgen:: JsValue ) -> #name {
659
- let obj_str = match obj. as_string( ) {
660
- Some ( string_value) => string_value,
661
- None => panic!( "Can't convert a non-string into {}" , #name_string) ,
662
- } ;
663
-
664
- match obj_str. as_str( ) {
665
- #( #variant_strings => #variant_paths_ref, ) *
666
- unknown_value => panic!( "Can't convert \" {}\" into {}" , unknown_value, #name_string) ,
667
- }
662
+ #name:: from_js_value( :: wasm_bindgen:: JsValue :: from_abi( js, extra) ) . expect( #expect_string)
668
663
}
669
664
}
670
665
0 commit comments