@@ -129,31 +129,9 @@ fn parse_request(input: &str) -> Result<PartialHttpRequest, Error> {
129129 . map ( parse_first_line)
130130 . unwrap_or ( ( None , None , None ) ) ;
131131
132- let ( header_spans, body_spans) = match first_empty_line_idx {
133- Some ( idx) => {
134- let header_spans = line_spans. clone ( ) [ 1 ..idx] . to_vec ( ) ;
135- let body_spans = Some ( line_spans. clone ( ) [ idx..] . to_vec ( ) ) ;
136-
137- ( header_spans, body_spans)
138- }
139- None => {
140- let header_spans = line_spans. clone ( ) [ 1 ..] . to_vec ( ) ;
141- let body_spans = None ;
142-
143- ( header_spans, body_spans)
144- }
145- } ;
132+ let ( header_spans, body_spans) = get_header_and_body_spans ( line_spans, first_empty_line_idx) ;
146133
147- let body_span = body_spans. and_then ( |spans| {
148- if spans. is_empty ( ) {
149- return None ;
150- }
151-
152- let first = spans. first ( ) . unwrap ( ) ;
153- let last = spans. last ( ) . unwrap ( ) ;
154-
155- Some ( first. start + 1 ..last. end )
156- } ) ;
134+ let body_span = get_span_extent_from_spans ( body_spans) ;
157135
158136 Ok ( PartialHttpRequest :: new (
159137 input,
@@ -189,3 +167,38 @@ fn parse_first_line(
189167
190168 ( method_span, uri_span, http_version_span)
191169}
170+
171+ fn get_header_and_body_spans (
172+ line_spans : Vec < Range < usize > > ,
173+ first_empty_line_idx : Option < usize > ,
174+ ) -> ( Vec < Range < usize > > , Option < Vec < Range < usize > > > ) {
175+ let ( header_spans, body_spans) = match first_empty_line_idx {
176+ Some ( idx) => {
177+ let header_spans = line_spans. clone ( ) [ 1 ..idx] . to_vec ( ) ;
178+ let body_spans = Some ( line_spans. clone ( ) [ idx..] . to_vec ( ) ) ;
179+
180+ ( header_spans, body_spans)
181+ }
182+ None => {
183+ let header_spans = line_spans. clone ( ) [ 1 ..] . to_vec ( ) ;
184+ let body_spans = None ;
185+
186+ ( header_spans, body_spans)
187+ }
188+ } ;
189+ ( header_spans, body_spans)
190+ }
191+
192+ fn get_span_extent_from_spans ( body_spans : Option < Vec < Range < usize > > > ) -> Option < Range < usize > > {
193+ let body_span = body_spans. and_then ( |spans| {
194+ if spans. is_empty ( ) {
195+ return None ;
196+ }
197+
198+ let first = spans. first ( ) . unwrap ( ) ;
199+ let last = spans. last ( ) . unwrap ( ) ;
200+
201+ Some ( first. start + 1 ..last. end )
202+ } ) ;
203+ body_span
204+ }
0 commit comments