@@ -588,24 +588,47 @@ fn unwrap_optional_param(name: &str, setter: RustPrinter) -> RustPrinter {
588588 line ( "}" )
589589}
590590
591+ #[ rustfmt:: skip]
592+ fn for_param ( name : & str , setter : RustPrinter ) -> RustPrinter {
593+ line ( unit ( ) + "for " + name + " in " + name + " {" ) +
594+ indented (
595+ setter
596+ ) +
597+ line ( "}" )
598+ }
599+
591600fn param_to_str ( param : & Param ) -> RustResult {
592- match & param. tpe {
593- DataType :: String => Ok ( unit ( ) + & param. name ) ,
594- DataType :: Uuid => Ok ( unit ( ) + & param. name + ".to_string()" ) ,
595- DataType :: Int ( _) => Ok ( unit ( ) + & param. name + ".to_string()" ) ,
596- DataType :: Boolean => Ok ( unit ( ) + & param. name + ".to_string()" ) ,
597- DataType :: Model ( _) => Ok ( unit ( ) + & param. name + ".to_string()" ) ,
601+ param_tpe_to_str ( & param. original_name , & param. name , & param. tpe )
602+ }
603+
604+ fn param_tpe_to_str ( original_name : & str , name : & str , tpe : & DataType ) -> RustResult {
605+ match tpe {
606+ DataType :: String => Ok ( unit ( ) + name) ,
607+ DataType :: Uuid => Ok ( unit ( ) + name + ".to_string()" ) ,
608+ DataType :: Int ( _) => Ok ( unit ( ) + name + ".to_string()" ) ,
609+ DataType :: Boolean => Ok ( unit ( ) + name + ".to_string()" ) ,
610+ DataType :: Model ( _) => Ok ( unit ( ) + name + ".to_string()" ) ,
598611 _ => Err ( Error :: unexpected ( format ! (
599612 "Unexpected query param type {}: {:?}" ,
600- param . original_name, param . tpe
613+ original_name, tpe
601614 ) ) ) ,
602615 }
603616}
604617
605618fn query_setter ( param : & Param ) -> RustResult {
606- #[ rustfmt:: skip]
607- let code =
608- line ( unit ( ) + r#"url.query_pairs_mut().append_pair(""# + & param. original_name + r#"", &"# + param_to_str ( param) ? + ");" ) ;
619+ let code = match & param. tpe {
620+ DataType :: Array ( tpe) => {
621+ #[ rustfmt:: skip] let setter =
622+ line ( unit ( ) + r#"url.query_pairs_mut().append_pair(""# + & param. original_name + r#"", &"# + param_tpe_to_str ( & param. original_name , & param. name , tpe) ? + ");" ) ;
623+
624+ for_param ( & param. name , setter)
625+ }
626+ _ => {
627+ #[ rustfmt:: skip] let setter =
628+ line ( unit ( ) + r#"url.query_pairs_mut().append_pair(""# + & param. original_name + r#"", &"# + param_to_str ( param) ? + ");" ) ;
629+ setter
630+ }
631+ } ;
609632
610633 let code = if param. required {
611634 code
0 commit comments