@@ -62,13 +62,10 @@ pub fn generate_command(attrs: Vec<NestedMeta>, function: ItemFn) -> TokenStream
6262 // If function doesn't take the webview manager, wrapper just takes webview manager generically and ignores it
6363 // Otherwise the wrapper uses the specific type from the original function declaration
6464 let mut manager_arg_type = quote ! ( :: tauri:: WebviewManager <A >) ;
65- let mut application_ext_generic = quote ! ( <A : :: tauri:: ApplicationExt >) ;
6665 let manager_arg_maybe = match types. first ( ) {
6766 Some ( first_type) if uses_manager => {
6867 // Give wrapper specific type
6968 manager_arg_type = quote ! ( #first_type) ;
70- // Generic is no longer needed
71- application_ext_generic = quote ! ( ) ;
7269 // Remove webview manager arg from list so it isn't expected as arg from JS
7370 types. drain ( 0 ..1 ) ;
7471 names. drain ( 0 ..1 ) ;
@@ -91,24 +88,28 @@ pub fn generate_command(attrs: Vec<NestedMeta>, function: ItemFn) -> TokenStream
9188 let return_value = if returns_result {
9289 quote ! {
9390 match #fn_name( #manager_arg_maybe #( parsed_args. #names) , * ) #await_maybe {
94- Ok ( value) => :: core:: result:: Result :: Ok ( value. into ( ) ) ,
95- Err ( e) => :: core:: result:: Result :: Err ( tauri :: Error :: Command ( :: serde_json :: to_value ( e ) ? ) ) ,
91+ Ok ( value) => :: core:: result:: Result :: Ok ( value) ,
92+ Err ( e) => :: core:: result:: Result :: Err ( e ) ,
9693 }
9794 }
9895 } else {
99- quote ! { :: core:: result:: Result :: Ok ( #fn_name( #manager_arg_maybe #( parsed_args. #names) , * ) #await_maybe. into ( ) ) }
96+ quote ! { :: core:: result:: Result :: <_ , ( ) > :: Ok ( #fn_name( #manager_arg_maybe #( parsed_args. #names) , * ) #await_maybe) }
10097 } ;
10198
10299 quote ! {
103100 #function
104- pub async fn #fn_wrapper #application_ext_generic ( _manager: #manager_arg_type, arg : :: serde_json :: Value ) -> :: tauri:: Result < :: tauri :: InvokeResponse > {
101+ pub fn #fn_wrapper< A : :: tauri :: ApplicationExt + ' static > ( _manager: #manager_arg_type, message : :: tauri:: InvokeMessage < A > ) {
105102 #[ derive( :: serde:: Deserialize ) ]
106103 #[ serde( rename_all = "camelCase" ) ]
107104 struct ParsedArgs {
108105 #( #names: #types) , *
109106 }
110- let parsed_args: ParsedArgs = :: serde_json:: from_value( arg) . map_err( |e| :: tauri:: Error :: InvalidArgs ( #fn_name_str, e) ) ?;
111- #return_value
107+ match :: serde_json:: from_value:: <ParsedArgs >( message. payload( ) ) {
108+ Ok ( parsed_args) => message. respond_async( async move {
109+ #return_value
110+ } ) ,
111+ Err ( e) => message. reject( :: core:: result:: Result :: <( ) , String >:: Err ( :: tauri:: Error :: InvalidArgs ( #fn_name_str, e) . to_string( ) ) ) ,
112+ }
112113 }
113114 }
114115}
@@ -133,10 +134,10 @@ pub fn generate_handler(item: proc_macro::TokenStream) -> TokenStream {
133134 } ) ;
134135
135136 quote ! {
136- |webview_manager, command , arg| async move {
137- match command . as_str ( ) {
138- #( stringify!( #fn_names) => #fn_wrappers( webview_manager, arg ) . await , ) *
139- _ => Err ( tauri :: Error :: UnknownApi ( None ) ) ,
137+ move |webview_manager, message| {
138+ match message . command ( ) {
139+ #( stringify!( #fn_names) => #fn_wrappers( webview_manager, message ) , ) *
140+ _ => { } ,
140141 }
141142 }
142143 }
0 commit comments