Skip to content

Commit 4d5f375

Browse files
committed
Handle empty requests
1 parent f3e63a5 commit 4d5f375

4 files changed

Lines changed: 37 additions & 0 deletions

File tree

src/parse.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@ use std::ops::Range;
33
use crate::{error::Error, models::partial_request::PartialHttpRequest, span::get_line_spans};
44

55
pub(crate) fn parse_request(input: &str) -> Result<PartialHttpRequest, Error> {
6+
if input.trim().is_empty() {
7+
return Ok(PartialHttpRequest::new(
8+
input,
9+
None,
10+
None,
11+
None,
12+
vec![],
13+
None,
14+
));
15+
}
16+
617
let line_spans = get_line_spans(input);
718

819
let first_empty_line_idx = line_spans.iter().position(|span| span.len() == 1);

tests/fixtures/empty.request

Whitespace-only changes.

tests/fixtures/whitespace.request

Whitespace-only changes.

tests/parse_tests.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@ use http_message::models::{request::HttpRequest, uri::Uri};
55

66
use pretty_assertions::assert_eq;
77

8+
#[test]
9+
fn parse_empty_request() {
10+
let content =
11+
fs::read_to_string("./tests/fixtures/empty.request").expect("should read test fixture");
12+
13+
let partial = PartialHttpRequest::from_str(&content).expect("should be parsable");
14+
15+
assert_eq!(
16+
PartialHttpRequest::new(&content, None, None, None, vec![], None),
17+
partial
18+
);
19+
}
20+
21+
#[test]
22+
fn parse_whitespace_request() {
23+
let content = fs::read_to_string("./tests/fixtures/whitespace.request")
24+
.expect("should read test fixture");
25+
26+
let partial = PartialHttpRequest::from_str(&content).expect("should be parsable");
27+
28+
assert_eq!(
29+
PartialHttpRequest::new(&content, None, None, None, vec![], None),
30+
partial
31+
);
32+
}
33+
834
#[test]
935
fn parse_get_request() {
1036
let content =

0 commit comments

Comments
 (0)