@@ -62,13 +62,10 @@ pub fn generate_command(attrs: Vec<NestedMeta>, function: ItemFn) -> TokenStream
62
62
// If function doesn't take the webview manager, wrapper just takes webview manager generically and ignores it
63
63
// Otherwise the wrapper uses the specific type from the original function declaration
64
64
let mut manager_arg_type = quote ! ( :: tauri:: WebviewManager <A >) ;
65
- let mut application_ext_generic = quote ! ( <A : :: tauri:: ApplicationExt >) ;
66
65
let manager_arg_maybe = match types. first ( ) {
67
66
Some ( first_type) if uses_manager => {
68
67
// Give wrapper specific type
69
68
manager_arg_type = quote ! ( #first_type) ;
70
- // Generic is no longer needed
71
- application_ext_generic = quote ! ( ) ;
72
69
// Remove webview manager arg from list so it isn't expected as arg from JS
73
70
types. drain ( 0 ..1 ) ;
74
71
names. drain ( 0 ..1 ) ;
@@ -91,24 +88,28 @@ pub fn generate_command(attrs: Vec<NestedMeta>, function: ItemFn) -> TokenStream
91
88
let return_value = if returns_result {
92
89
quote ! {
93
90
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 ) ,
96
93
}
97
94
}
98
95
} 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) }
100
97
} ;
101
98
102
99
quote ! {
103
100
#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 > ) {
105
102
#[ derive( :: serde:: Deserialize ) ]
106
103
#[ serde( rename_all = "camelCase" ) ]
107
104
struct ParsedArgs {
108
105
#( #names: #types) , *
109
106
}
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
+ }
112
113
}
113
114
}
114
115
}
@@ -133,10 +134,10 @@ pub fn generate_handler(item: proc_macro::TokenStream) -> TokenStream {
133
134
} ) ;
134
135
135
136
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
+ _ => { } ,
140
141
}
141
142
}
142
143
}
0 commit comments