@@ -26,29 +26,35 @@ fn parse_uri_template(uri_template: &str) -> (String, Vec<String>) {
2626 // Convert "timedate://current-time/{timezone}" to "/current-time/{timezone}"
2727 let path = if let Some ( scheme_end) = uri_template. find ( "://" ) {
2828 let after_scheme = & uri_template[ scheme_end + 3 ..] ;
29-
29+
3030 // For custom URI schemes like "timedate://current-time/{timezone}",
3131 // treat everything after :// as the path since there's no host part
3232 // Add leading slash to make it a proper matchit path
33- return ( format ! ( "/{}" , after_scheme) , extract_uri_parameters ( after_scheme) ) ;
33+ return (
34+ format ! ( "/{}" , after_scheme) ,
35+ extract_uri_parameters ( after_scheme) ,
36+ ) ;
3437 } else {
3538 // No scheme, assume it's already a path
3639 if uri_template. starts_with ( '/' ) {
3740 uri_template
3841 } else {
3942 // Add leading slash
40- return ( format ! ( "/{}" , uri_template) , extract_uri_parameters ( uri_template) ) ;
43+ return (
44+ format ! ( "/{}" , uri_template) ,
45+ extract_uri_parameters ( uri_template) ,
46+ ) ;
4147 }
4248 } ;
43-
49+
4450 ( path. to_string ( ) , extract_uri_parameters ( path) )
4551}
4652
4753/// Extract parameter names from URI template path
4854fn extract_uri_parameters ( path : & str ) -> Vec < String > {
4955 let mut params = Vec :: new ( ) ;
5056 let mut chars = path. chars ( ) . peekable ( ) ;
51-
57+
5258 while let Some ( ch) = chars. next ( ) {
5359 if ch == '{' {
5460 let mut param_name = String :: new ( ) ;
@@ -63,7 +69,7 @@ fn extract_uri_parameters(path: &str) -> Vec<String> {
6369 }
6470 }
6571 }
66-
72+
6773 params
6874}
6975
@@ -229,11 +235,16 @@ fn generate_matchit_resource_impl(
229235 . map ( |( i, info) | {
230236 let variant_name = format_ident ! ( "Resource{}" , i) ;
231237 let method_name = & info. method_name ;
232- let await_token = if info. is_async { quote ! ( . await ) } else { quote ! ( ) } ;
233-
238+ let await_token = if info. is_async {
239+ quote ! ( . await )
240+ } else {
241+ quote ! ( )
242+ } ;
243+
234244 if info. has_params {
235245 // Generate parameter extraction for parameterized resources
236- let param_extractions: Vec < _ > = info. param_names
246+ let param_extractions: Vec < _ > = info
247+ . param_names
237248 . iter ( )
238249 . enumerate ( )
239250 . map ( |( param_idx, param_name) | {
@@ -248,8 +259,9 @@ fn generate_matchit_resource_impl(
248259 }
249260 } )
250261 . collect ( ) ;
251-
252- let method_call_params: Vec < _ > = info. method_param_names
262+
263+ let method_call_params: Vec < _ > = info
264+ . method_param_names
253265 . iter ( )
254266 . map ( |param| quote ! { #param } )
255267 . collect ( ) ;
@@ -422,7 +434,7 @@ pub fn mcp_tools_impl(_attr: TokenStream, item: TokenStream) -> syn::Result<Toke
422434 let mut tool_definitions = Vec :: new ( ) ;
423435 let mut tool_dispatch_cases = Vec :: new ( ) ;
424436 let mut resource_definitions = Vec :: new ( ) ;
425-
437+
426438 // Collect resource information for matchit router generation
427439 let mut resource_infos = Vec :: new ( ) ;
428440
@@ -454,7 +466,7 @@ pub fn mcp_tools_impl(_attr: TokenStream, item: TokenStream) -> syn::Result<Toke
454466 // Parse URI template to get matchit path pattern
455467 let ( path_pattern, template_param_names) = parse_uri_template ( & uri_template) ;
456468
457- // Extract method parameter names
469+ // Extract method parameter names
458470 let mut method_param_names = Vec :: new ( ) ;
459471 for input in & method. sig . inputs {
460472 match input {
@@ -478,7 +490,7 @@ pub fn mcp_tools_impl(_attr: TokenStream, item: TokenStream) -> syn::Result<Toke
478490 is_async : method. sig . asyncness . is_some ( ) ,
479491 has_params : method. sig . inputs . len ( ) > 1 ,
480492 } ;
481-
493+
482494 resource_infos. push ( resource_info) ;
483495
484496 // Create resource definition for list_resources
@@ -492,7 +504,6 @@ pub fn mcp_tools_impl(_attr: TokenStream, item: TokenStream) -> syn::Result<Toke
492504 raw: None ,
493505 }
494506 } ) ;
495-
496507 } else {
497508 // Handle as tool (existing logic)
498509 let tool_name = method. sig . ident . to_string ( ) ;
0 commit comments