Skip to content

Commit ec77942

Browse files
committed
feat: support vec in query by serde_html_form
1 parent d099dd5 commit ec77942

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

silent/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ serde = { version = "1.0.210", features = ["derive"] }
4747
serde_json = "1.0.128"
4848
uuid = "1.10.0"
4949
url = "2.5.2"
50-
serde_urlencoded = "0.7.1"
50+
serde_html_form = "0.2.6"
5151
mime = "0.3.17"
5252
futures-util = "0.3.31"
5353
chrono = { version = "0.4.38", default-features = false, features = ["clock"] }

silent/src/core/request.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ impl Request {
264264
for<'de> T: Deserialize<'de>,
265265
{
266266
let query = self.uri().query().unwrap_or("");
267-
let params = serde_urlencoded::from_str(query)?;
267+
let params = serde_html_form::from_str(query)?;
268268
Ok(params)
269269
}
270270

@@ -357,7 +357,7 @@ impl Request {
357357
match content_type.subtype() {
358358
mime::WWW_FORM_URLENCODED => {
359359
let bytes = body.collect().await.unwrap().to_bytes();
360-
serde_urlencoded::from_bytes(&bytes).map_err(SilentError::from)
360+
serde_html_form::from_bytes(&bytes).map_err(SilentError::from)
361361
}
362362
mime::JSON => {
363363
let bytes = body.collect().await.unwrap().to_bytes();
@@ -371,7 +371,7 @@ impl Request {
371371
}
372372
ReqBody::Once(bytes) => match content_type.subtype() {
373373
mime::WWW_FORM_URLENCODED => {
374-
serde_urlencoded::from_bytes(&bytes).map_err(SilentError::from)
374+
serde_html_form::from_bytes(&bytes).map_err(SilentError::from)
375375
}
376376
mime::JSON => serde_json::from_slice(&bytes).map_err(|e| e.into()),
377377
_ => Err(SilentError::JsonEmpty),
@@ -413,3 +413,30 @@ impl Request {
413413
(self, url)
414414
}
415415
}
416+
417+
#[cfg(test)]
418+
mod tests {
419+
use super::*;
420+
421+
#[derive(Deserialize, Debug, PartialEq)]
422+
struct TestStruct {
423+
a: i32,
424+
b: String,
425+
#[serde(default, alias = "c[]")]
426+
c: Vec<String>,
427+
}
428+
429+
#[test]
430+
fn test_query_parse_alias() {
431+
let mut req = Request::empty();
432+
*req.uri_mut() = Uri::from_static("http://localhost:8080/test?a=1&b=2&c[]=3&c[]=4");
433+
let _ = req.params_parse::<TestStruct>().unwrap();
434+
}
435+
436+
#[test]
437+
fn test_query_parse() {
438+
let mut req = Request::empty();
439+
*req.uri_mut() = Uri::from_static("http://localhost:8080/test?a=1&b=2&c=3&c=4");
440+
let _ = req.params_parse::<TestStruct>().unwrap();
441+
}
442+
}

0 commit comments

Comments
 (0)