Skip to content

Commit 3ee4281

Browse files
committed
fix: accept wildcard
based on http-rs#355 by @Tpt
2 parents b5bd4e3 + 767c94e commit 3ee4281

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

Cargo.toml

+11-5
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,18 @@ rustdoc-args = ["--cfg", "feature=\"docs\""]
2828
default = ["fs", "cookie-secure", "serde"]
2929
docs = ["unstable"]
3030
unstable = []
31-
hyperium_http = ["http"]
31+
hyperium_http = ["dep:http"]
3232
async_std = ["fs"]
33-
cookies = ["cookie"]
33+
cookies = ["dep:cookie"]
3434
cookie-secure = ["cookies", "cookie/secure"]
35-
fs = ["async-std"]
36-
serde = ["serde_qs", "dep:serde", "serde_json", "serde_urlencoded", "url/serde"]
35+
fs = ["dep:async-std"]
36+
serde = [
37+
"dep:serde_qs",
38+
"dep:serde",
39+
"dep:serde_json",
40+
"dep:serde_urlencoded",
41+
"url/serde",
42+
]
3743

3844
[dependencies]
3945
fastrand = "2.0"
@@ -60,7 +66,7 @@ serde = { version = "1.0", features = [
6066
"derive",
6167
], optional = true, package = "serde" }
6268
serde_urlencoded = { version = "0.7", optional = true }
63-
serde_qs = { version = "0.12", optional = true }
69+
serde_qs = { version = "0.13", optional = true }
6470

6571

6672
[dev-dependencies]

src/content/accept.rs

+27-3
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ impl Accept {
7979
// Handle empty strings, and wildcard directives.
8080
if part.is_empty() {
8181
continue;
82-
} else if part == "*" {
82+
} else if part == "*/*" {
8383
wildcard = true;
8484
continue;
8585
}
@@ -175,8 +175,8 @@ impl Header for Accept {
175175

176176
if self.wildcard {
177177
match output.len() {
178-
0 => write!(output, "*").unwrap(),
179-
_ => write!(output, ", *").unwrap(),
178+
0 => write!(output, "*/*").unwrap(),
179+
_ => write!(output, ", */*").unwrap(),
180180
}
181181
}
182182

@@ -433,4 +433,28 @@ mod test {
433433
assert!(content_type.is_ok(), "server is expected to return HTML content");
434434
Ok(())
435435
}
436+
437+
#[test]
438+
fn parse() -> crate::Result<()> {
439+
let mut headers = Headers::new();
440+
headers.insert("Accept", "application/json; q=0.8,*/*")?;
441+
let accept = Accept::from_headers(headers)?.unwrap();
442+
443+
assert!(accept.wildcard());
444+
assert_eq!(
445+
accept.into_iter().collect::<Vec<_>>(),
446+
vec![MediaTypeProposal::new(mime::JSON, Some(0.8))?]
447+
);
448+
Ok(())
449+
}
450+
451+
#[test]
452+
fn serialize() -> crate::Result<()> {
453+
let mut accept = Accept::new();
454+
accept.push(MediaTypeProposal::new(mime::JSON, Some(0.8))?);
455+
accept.set_wildcard(true);
456+
457+
assert_eq!(accept.header_value().as_str(), "application/json;q=0.800, */*");
458+
Ok(())
459+
}
436460
}

src/response.rs

-1
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,6 @@ impl Clone for Response {
577577
}
578578

579579
impl AsyncRead for Response {
580-
#[allow(rustdoc::missing_doc_code_examples)]
581580
fn poll_read(mut self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut [u8]) -> Poll<io::Result<usize>> {
582581
Pin::new(&mut self.body).poll_read(cx, buf)
583582
}

0 commit comments

Comments
 (0)