Skip to content

Commit f3e63a5

Browse files
committed
Refactor
1 parent 02dc2be commit f3e63a5

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

src/parse.rs

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
use std::ops::Range;
22

3-
use crate::{models::partial_request::PartialHttpRequest, span::get_line_spans};
3+
use crate::{error::Error, models::partial_request::PartialHttpRequest, span::get_line_spans};
44

5-
pub(crate) fn parse_request(input: &str) -> PartialHttpRequest {
5+
pub(crate) fn parse_request(input: &str) -> Result<PartialHttpRequest, Error> {
66
let line_spans = get_line_spans(input);
77

8-
let first_empty_line = line_spans.iter().position(|span| span.len() == 1);
8+
let first_empty_line_idx = line_spans.iter().position(|span| span.len() == 1);
99

10-
let (method, uri, http_version) = line_spans
11-
.first()
12-
.map(|span| parse_first_line(&input[span.clone()]))
10+
let first_line = line_spans.first();
11+
12+
let (method, uri, http_version) = first_line
13+
.map(|span| &input[span.clone()])
14+
.map(parse_first_line)
1315
.unwrap_or((None, None, None));
1416

15-
let (header_spans, body_spans) = match first_empty_line {
16-
Some(first_empty_line_idx) => {
17-
let header_spans = line_spans.clone()[1..first_empty_line_idx].to_vec();
17+
let (header_spans, body_spans) = match first_empty_line_idx {
18+
Some(idx) => {
19+
let header_spans = line_spans.clone()[1..idx].to_vec();
20+
let body_spans = Some(line_spans.clone()[idx..].to_vec());
1821

19-
(
20-
header_spans,
21-
Some(line_spans.clone()[first_empty_line_idx..].to_vec()),
22-
)
22+
(header_spans, body_spans)
2323
}
2424
None => {
2525
let header_spans = line_spans.clone()[1..].to_vec();
26+
let body_spans = None;
2627

27-
(header_spans, None)
28+
(header_spans, body_spans)
2829
}
2930
};
3031

@@ -39,7 +40,14 @@ pub(crate) fn parse_request(input: &str) -> PartialHttpRequest {
3940
Some(first.start + 1..last.end)
4041
});
4142

42-
PartialHttpRequest::new(input, uri, method, http_version, header_spans, body_span)
43+
Ok(PartialHttpRequest::new(
44+
input,
45+
uri,
46+
method,
47+
http_version,
48+
header_spans,
49+
body_span,
50+
))
4351
}
4452

4553
/// Parse the first line of an HTTP request message

0 commit comments

Comments
 (0)