Skip to content

Commit 6b67cf1

Browse files
authored
array support for query params (#13)
1 parent f1cbf6e commit 6b67cf1

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

src/rust/client_gen.rs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
591600
fn 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

605618
fn 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

Comments
 (0)