@@ -406,7 +406,7 @@ impl CodeGenerator {
406406 #url_construction
407407
408408 let mut req = self . http_client
409- . #http_method( url )
409+ . #http_method( request_url )
410410 #request_body;
411411
412412 #query_params
@@ -444,7 +444,7 @@ impl CodeGenerator {
444444 for param in query_params {
445445 // Use snake_case for Rust variable name with keyword escaping
446446 let param_name_snake = self . sanitize_param_name ( & param. name ) ;
447- let param_name = syn :: Ident :: new ( & param_name_snake, proc_macro2 :: Span :: call_site ( ) ) ;
447+ let param_name = Self :: to_field_ident ( & param_name_snake) ;
448448
449449 // Use the original parameter name from OpenAPI spec as the query string key
450450 let param_key = & param. name ;
@@ -540,7 +540,7 @@ impl CodeGenerator {
540540 for param in & op. parameters {
541541 if param. location == "path" {
542542 let param_name_snake = self . sanitize_param_name ( & param. name ) ;
543- let param_name = syn :: Ident :: new ( & param_name_snake, proc_macro2 :: Span :: call_site ( ) ) ;
543+ let param_name = Self :: to_field_ident ( & param_name_snake) ;
544544 let param_type = self . get_param_rust_type ( param) ;
545545 params. push ( quote ! { #param_name: #param_type } ) ;
546546 }
@@ -550,7 +550,7 @@ impl CodeGenerator {
550550 for param in & op. parameters {
551551 if param. location == "query" {
552552 let param_name_snake = self . sanitize_param_name ( & param. name ) ;
553- let param_name = syn :: Ident :: new ( & param_name_snake, proc_macro2 :: Span :: call_site ( ) ) ;
553+ let param_name = Self :: to_field_ident ( & param_name_snake) ;
554554 let param_type = self . get_param_rust_type ( param) ;
555555
556556 // Query parameters should be Option unless explicitly required
@@ -714,7 +714,7 @@ impl CodeGenerator {
714714 self . generate_url_with_params ( path, op)
715715 } else {
716716 quote ! {
717- let url = format!( "{}{}" , self . base_url, #path) ;
717+ let request_url = format!( "{}{}" , self . base_url, #path) ;
718718 }
719719 }
720720 }
@@ -740,8 +740,7 @@ impl CodeGenerator {
740740
741741 // Use snake_case for the Rust variable name with keyword escaping
742742 let param_name_snake = self . sanitize_param_name ( & param. name ) ;
743- let param_ident =
744- syn:: Ident :: new ( & param_name_snake, proc_macro2:: Span :: call_site ( ) ) ;
743+ let param_ident = Self :: to_field_ident ( & param_name_snake) ;
745744
746745 // Use .as_ref() for string types to handle impl AsRef<str>
747746 if param. rust_type == "String" {
@@ -755,66 +754,24 @@ impl CodeGenerator {
755754 if format_args. is_empty ( ) {
756755 // No path parameters found, use simple format
757756 quote ! {
758- let url = format!( "{}{}" , self . base_url, #path) ;
757+ let request_url = format!( "{}{}" , self . base_url, #path) ;
759758 }
760759 } else {
761760 // Build format call with path parameters
762761 quote ! {
763- let url = format!( "{}{}" , self . base_url, format!( #format_string, #( #format_args) , * ) ) ;
762+ let request_url = format!( "{}{}" , self . base_url, format!( #format_string, #( #format_args) , * ) ) ;
764763 }
765764 }
766765 }
767766
768- /// Sanitize a parameter name by escaping Rust reserved keywords
767+ /// Sanitize a parameter name by escaping Rust reserved keywords with raw identifiers
769768 fn sanitize_param_name ( & self , name : & str ) -> String {
770769 let snake_case = name. to_snake_case ( ) ;
771- match snake_case. as_str ( ) {
772- "type" => "type_" . to_string ( ) ,
773- "match" => "match_" . to_string ( ) ,
774- "fn" => "fn_" . to_string ( ) ,
775- "impl" => "impl_" . to_string ( ) ,
776- "trait" => "trait_" . to_string ( ) ,
777- "struct" => "struct_" . to_string ( ) ,
778- "enum" => "enum_" . to_string ( ) ,
779- "mod" => "mod_" . to_string ( ) ,
780- "use" => "use_" . to_string ( ) ,
781- "pub" => "pub_" . to_string ( ) ,
782- "const" => "const_" . to_string ( ) ,
783- "static" => "static_" . to_string ( ) ,
784- "let" => "let_" . to_string ( ) ,
785- "mut" => "mut_" . to_string ( ) ,
786- "ref" => "ref_" . to_string ( ) ,
787- "move" => "move_" . to_string ( ) ,
788- "return" => "return_" . to_string ( ) ,
789- "if" => "if_" . to_string ( ) ,
790- "else" => "else_" . to_string ( ) ,
791- "while" => "while_" . to_string ( ) ,
792- "for" => "for_" . to_string ( ) ,
793- "loop" => "loop_" . to_string ( ) ,
794- "break" => "break_" . to_string ( ) ,
795- "continue" => "continue_" . to_string ( ) ,
796- "self" => "self_" . to_string ( ) ,
797- "super" => "super_" . to_string ( ) ,
798- "crate" => "crate_" . to_string ( ) ,
799- "async" => "async_" . to_string ( ) ,
800- "await" => "await_" . to_string ( ) ,
801- "override" => "override_" . to_string ( ) ,
802- "box" => "box_" . to_string ( ) ,
803- "dyn" => "dyn_" . to_string ( ) ,
804- "where" => "where_" . to_string ( ) ,
805- "in" => "in_" . to_string ( ) ,
806- "abstract" => "abstract_" . to_string ( ) ,
807- "become" => "become_" . to_string ( ) ,
808- "do" => "do_" . to_string ( ) ,
809- "final" => "final_" . to_string ( ) ,
810- "macro" => "macro_" . to_string ( ) ,
811- "priv" => "priv_" . to_string ( ) ,
812- "try" => "try_" . to_string ( ) ,
813- "typeof" => "typeof_" . to_string ( ) ,
814- "unsized" => "unsized_" . to_string ( ) ,
815- "virtual" => "virtual_" . to_string ( ) ,
816- "yield" => "yield_" . to_string ( ) ,
817- _ => snake_case,
770+ if Self :: is_rust_keyword ( & snake_case) {
771+ format ! ( "r#{snake_case}" )
772+ } else {
773+ snake_case
818774 }
819775 }
776+
820777}
0 commit comments