@@ -41,7 +41,6 @@ fn generate_parent_span_impl(enum_name: &Ident, variant_names: &[&Ident]) -> Tok
41
41
42
42
fn generate_channels_impl (
43
43
mut args : NamedTypeArgs ,
44
- service_name : & Ident ,
45
44
request_type : & Type ,
46
45
attr_span : Span ,
47
46
) -> syn:: Result < TokenStream2 > {
@@ -54,7 +53,7 @@ fn generate_channels_impl(
54
53
let tx = args. get ( TX_ATTR , attr_span) ?;
55
54
56
55
let res = quote ! {
57
- impl :: irpc:: Channels <#service_name> for #request_type {
56
+ impl :: irpc:: Channels for #request_type {
58
57
type Tx = #tx;
59
58
type Rx = #rx;
60
59
}
@@ -94,15 +93,14 @@ fn generate_case_from_impls(
94
93
fn generate_message_enum_from_impls (
95
94
message_enum_name : & Ident ,
96
95
variants_with_attr : & [ ( Ident , Type ) ] ,
97
- service_name : & Ident ,
98
96
) -> TokenStream2 {
99
97
let mut impls = quote ! { } ;
100
98
101
99
// Generate From<WithChannels<T, Service>> implementations for each case with an rpc attribute
102
100
for ( variant_name, inner_type) in variants_with_attr {
103
101
let impl_tokens = quote ! {
104
- impl From <:: irpc:: WithChannels <#inner_type, #service_name >> for #message_enum_name {
105
- fn from( value: :: irpc:: WithChannels <#inner_type, #service_name >) -> Self {
102
+ impl From <:: irpc:: WithChannels <#inner_type>> for #message_enum_name {
103
+ fn from( value: :: irpc:: WithChannels <#inner_type>) -> Self {
106
104
#message_enum_name:: #variant_name( value)
107
105
}
108
106
}
@@ -118,11 +116,7 @@ fn generate_message_enum_from_impls(
118
116
}
119
117
120
118
/// Generate type aliases for WithChannels<T, Service>
121
- fn generate_type_aliases (
122
- variants : & [ ( Ident , Type ) ] ,
123
- service_name : & Ident ,
124
- suffix : & str ,
125
- ) -> TokenStream2 {
119
+ fn generate_type_aliases ( variants : & [ ( Ident , Type ) ] , suffix : & str ) -> TokenStream2 {
126
120
let mut aliases = quote ! { } ;
127
121
128
122
for ( variant_name, inner_type) in variants {
@@ -132,8 +126,8 @@ fn generate_type_aliases(
132
126
let type_ident = Ident :: new ( & type_name, variant_name. span ( ) ) ;
133
127
134
128
let alias = quote ! {
135
- /// Type alias for WithChannels<#inner_type, #service_name >
136
- pub type #type_ident = :: irpc:: WithChannels <#inner_type, #service_name >;
129
+ /// Type alias for WithChannels<#inner_type>
130
+ pub type #type_ident = :: irpc:: WithChannels <#inner_type>;
137
131
} ;
138
132
139
133
aliases = quote ! {
@@ -169,7 +163,7 @@ fn generate_type_aliases(
169
163
///
170
164
/// Basic usage:
171
165
/// ```
172
- /// #[rpc_requests(ComputeService) ]
166
+ /// #[rpc_requests]
173
167
/// enum ComputeProtocol {
174
168
/// #[rpc(tx=oneshot::Sender<u128>)]
175
169
/// Sqr(Sqr),
@@ -180,7 +174,7 @@ fn generate_type_aliases(
180
174
///
181
175
/// With a message enum:
182
176
/// ```
183
- /// #[rpc_requests(ComputeService, message = ComputeMessage)]
177
+ /// #[rpc_requests(message = ComputeMessage)]
184
178
/// enum ComputeProtocol {
185
179
/// #[rpc(tx=oneshot::Sender<u128>)]
186
180
/// Sqr(Sqr),
@@ -191,7 +185,7 @@ fn generate_type_aliases(
191
185
///
192
186
/// With type aliases:
193
187
/// ```
194
- /// #[rpc_requests(ComputeService, alias = "Msg")]
188
+ /// #[rpc_requests(alias = "Msg")]
195
189
/// enum ComputeProtocol {
196
190
/// #[rpc(tx=oneshot::Sender<u128>)]
197
191
/// Sqr(Sqr), // Generates type SqrMsg = WithChannels<Sqr, ComputeService>
@@ -204,7 +198,6 @@ pub fn rpc_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
204
198
let mut input = parse_macro_input ! ( item as DeriveInput ) ;
205
199
let args = parse_macro_input ! ( attr as MacroArgs ) ;
206
200
207
- let service_name = args. service_name ;
208
201
let message_enum_name = args. message_enum_name ;
209
202
let alias_suffix = args. alias_suffix ;
210
203
@@ -277,7 +270,7 @@ pub fn rpc_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
277
270
Err ( e) => return e. to_compile_error ( ) . into ( ) ,
278
271
} ;
279
272
280
- match generate_channels_impl ( args, & service_name , request_type, attr. span ( ) ) {
273
+ match generate_channels_impl ( args, request_type, attr. span ( ) ) {
281
274
Ok ( impls) => channel_impls. push ( impls) ,
282
275
Err ( e) => return e. to_compile_error ( ) . into ( ) ,
283
276
}
@@ -290,7 +283,7 @@ pub fn rpc_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
290
283
// Generate type aliases if requested
291
284
let type_aliases = if let Some ( suffix) = alias_suffix {
292
285
// Use all variants for type aliases, not just those with rpc attributes
293
- generate_type_aliases ( & all_variants, & service_name , & suffix)
286
+ generate_type_aliases ( & all_variants, & suffix)
294
287
} else {
295
288
quote ! { }
296
289
} ;
@@ -302,7 +295,7 @@ pub fn rpc_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
302
295
. map ( |( variant_name, inner_type) | {
303
296
quote ! {
304
297
#[ allow( missing_docs) ]
305
- #variant_name( :: irpc:: WithChannels <#inner_type, #service_name >)
298
+ #variant_name( :: irpc:: WithChannels <#inner_type>)
306
299
}
307
300
} )
308
301
. collect :: < Vec < _ > > ( ) ;
@@ -323,11 +316,8 @@ pub fn rpc_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
323
316
let parent_span_impl = generate_parent_span_impl ( & message_enum_name, & variant_names) ;
324
317
325
318
// Generate From implementations for the message enum (only for variants with rpc attributes)
326
- let message_from_impls = generate_message_enum_from_impls (
327
- & message_enum_name,
328
- & variants_with_attr,
329
- & service_name,
330
- ) ;
319
+ let message_from_impls =
320
+ generate_message_enum_from_impls ( & message_enum_name, & variants_with_attr) ;
331
321
332
322
quote ! {
333
323
#message_enum
@@ -361,23 +351,16 @@ pub fn rpc_requests(attr: TokenStream, item: TokenStream) -> TokenStream {
361
351
362
352
// Parse arguments for the macro
363
353
struct MacroArgs {
364
- service_name : Ident ,
365
354
message_enum_name : Option < Ident > ,
366
355
alias_suffix : Option < String > ,
367
356
}
368
357
369
358
impl Parse for MacroArgs {
370
359
fn parse ( input : ParseStream ) -> syn:: Result < Self > {
371
- // First argument must be the service name (positional)
372
- let service_name: Ident = input. parse ( ) ?;
373
-
374
- // Initialize optional parameters
375
360
let mut message_enum_name = None ;
376
361
let mut alias_suffix = None ;
377
362
378
- // Parse any additional named parameters
379
- while input. peek ( Token ! [ , ] ) {
380
- input. parse :: < Token ! [ , ] > ( ) ?;
363
+ while !input. is_empty ( ) {
381
364
let param_name: Ident = input. parse ( ) ?;
382
365
input. parse :: < Token ! [ =] > ( ) ?;
383
366
@@ -392,14 +375,17 @@ impl Parse for MacroArgs {
392
375
_ => {
393
376
return Err ( syn:: Error :: new (
394
377
param_name. span ( ) ,
395
- format ! ( "Unknown parameter: {param_name}" ) ,
378
+ format ! ( "Unknown parameter: {}" , param_name ) ,
396
379
) ) ;
397
380
}
398
381
}
382
+
383
+ if !input. is_empty ( ) {
384
+ input. parse :: < Token ! [ , ] > ( ) ?;
385
+ }
399
386
}
400
387
401
388
Ok ( MacroArgs {
402
- service_name,
403
389
message_enum_name,
404
390
alias_suffix,
405
391
} )
0 commit comments