@@ -9,9 +9,15 @@ use url::Url;
9
9
use method;
10
10
use status;
11
11
use uri;
12
- use version:: { HttpVersion , Http09 , Http10 , Http11 , Http20 } ;
13
- use { HttpResult , HttpMethodError , HttpVersionError , HttpIoError , HttpUriError } ;
14
- use { HttpHeaderError , HttpStatusError } ;
12
+ use uri:: RequestUri :: { AbsolutePath , AbsoluteUri , Authority , Star } ;
13
+ use version:: HttpVersion ;
14
+ use version:: HttpVersion :: { Http09 , Http10 , Http11 , Http20 } ;
15
+ use HttpError :: { HttpHeaderError , HttpIoError , HttpMethodError , HttpStatusError ,
16
+ HttpUriError , HttpVersionError } ;
17
+ use HttpResult ;
18
+
19
+ use self :: HttpReader :: { SizedReader , ChunkedReader , EofReader } ;
20
+ use self :: HttpWriter :: { ThroughWriter , ChunkedWriter , SizedWriter , EmptyWriter } ;
15
21
16
22
/// Readers to handle different Transfer-Encodings.
17
23
///
@@ -321,32 +327,32 @@ pub fn read_method<R: Reader>(stream: &mut R) -> HttpResult<method::Method> {
321
327
let mut buf = [ SP , ..16 ] ;
322
328
323
329
if !try!( read_until_space ( stream, & mut buf) ) {
324
- return Err ( HttpMethodError ) ;
330
+ return Err ( HttpMethodError ) ;
325
331
}
326
332
327
333
debug ! ( "method buf = {}" , buf[ ] . to_ascii( ) ) ;
328
-
334
+
329
335
let maybe_method = match buf[ 0 ..7 ] {
330
- b"GET " => Some ( method:: Get ) ,
331
- b"PUT " => Some ( method:: Put ) ,
332
- b"POST " => Some ( method:: Post ) ,
333
- b"HEAD " => Some ( method:: Head ) ,
334
- b"PATCH " => Some ( method:: Patch ) ,
335
- b"TRACE " => Some ( method:: Trace ) ,
336
- b"DELETE " => Some ( method:: Delete ) ,
337
- b"CONNECT" => Some ( method:: Connect ) ,
338
- b"OPTIONS" => Some ( method:: Options ) ,
336
+ b"GET " => Some ( method:: Method :: Get ) ,
337
+ b"PUT " => Some ( method:: Method :: Put ) ,
338
+ b"POST " => Some ( method:: Method :: Post ) ,
339
+ b"HEAD " => Some ( method:: Method :: Head ) ,
340
+ b"PATCH " => Some ( method:: Method :: Patch ) ,
341
+ b"TRACE " => Some ( method:: Method :: Trace ) ,
342
+ b"DELETE " => Some ( method:: Method :: Delete ) ,
343
+ b"CONNECT" => Some ( method:: Method :: Connect ) ,
344
+ b"OPTIONS" => Some ( method:: Method :: Options ) ,
339
345
_ => None ,
340
346
} ;
341
347
342
348
debug ! ( "maybe_method = {}" , maybe_method) ;
343
349
344
350
match ( maybe_method, buf[ ] ) {
345
351
( Some ( method) , _) => Ok ( method) ,
346
- ( None , ext) if is_valid_method ( buf) => {
352
+ ( None , ext) if is_valid_method ( & buf) => {
347
353
use std:: str:: raw;
348
354
// We already checked that the buffer is ASCII
349
- Ok ( method:: Extension ( unsafe { raw:: from_utf8 ( ext) } . trim ( ) . into_string ( ) ) )
355
+ Ok ( method:: Method :: Extension ( unsafe { raw:: from_utf8 ( ext) } . trim ( ) . into_string ( ) ) )
350
356
} ,
351
357
_ => Err ( HttpMethodError )
352
358
}
@@ -367,7 +373,7 @@ pub fn read_uri<R: Reader>(stream: &mut R) -> HttpResult<uri::RequestUri> {
367
373
let mut s = String :: new ( ) ;
368
374
if b == STAR {
369
375
try!( expect ( stream. read_byte ( ) , SP ) ) ;
370
- return Ok ( uri :: Star )
376
+ return Ok ( Star )
371
377
} else {
372
378
s. push ( b as char ) ;
373
379
loop {
@@ -386,10 +392,10 @@ pub fn read_uri<R: Reader>(stream: &mut R) -> HttpResult<uri::RequestUri> {
386
392
debug ! ( "uri buf = {}" , s) ;
387
393
388
394
if s. as_slice ( ) . starts_with ( "/" ) {
389
- Ok ( uri :: AbsolutePath ( s) )
395
+ Ok ( AbsolutePath ( s) )
390
396
} else if s. as_slice ( ) . contains ( "/" ) {
391
397
match Url :: parse ( s. as_slice ( ) ) {
392
- Ok ( u) => Ok ( uri :: AbsoluteUri ( u) ) ,
398
+ Ok ( u) => Ok ( AbsoluteUri ( u) ) ,
393
399
Err ( _e) => {
394
400
debug ! ( "URL err {}" , _e) ;
395
401
Err ( HttpUriError )
@@ -401,7 +407,7 @@ pub fn read_uri<R: Reader>(stream: &mut R) -> HttpResult<uri::RequestUri> {
401
407
match Url :: parse ( temp. as_slice ( ) ) {
402
408
Ok ( _u) => {
403
409
todo ! ( "compare vs u.authority()" ) ;
404
- Ok ( uri :: Authority ( s) )
410
+ Ok ( Authority ( s) )
405
411
}
406
412
Err ( _e) => {
407
413
debug ! ( "URL err {}" , _e) ;
@@ -608,34 +614,37 @@ fn expect(r: IoResult<u8>, expected: u8) -> HttpResult<()> {
608
614
mod tests {
609
615
use std:: io:: { mod, MemReader , MemWriter } ;
610
616
use test:: Bencher ;
611
- use uri:: { RequestUri , Star , AbsoluteUri , AbsolutePath , Authority } ;
617
+ use uri:: RequestUri ;
618
+ use uri:: RequestUri :: { Star , AbsoluteUri , AbsolutePath , Authority } ;
612
619
use method;
613
620
use status;
614
- use version:: { HttpVersion , Http10 , Http11 , Http20 } ;
615
- use { HttpResult , HttpVersionError } ;
621
+ use version:: HttpVersion ;
622
+ use version:: HttpVersion :: { Http10 , Http11 , Http20 } ;
623
+ use HttpError :: HttpVersionError ;
624
+ use HttpResult ;
616
625
use url:: Url ;
617
626
618
627
use super :: { read_method, read_uri, read_http_version, read_header, RawHeaderLine , read_status} ;
619
628
620
629
fn mem ( s : & str ) -> MemReader {
621
630
MemReader :: new ( s. as_bytes ( ) . to_vec ( ) )
622
631
}
623
-
632
+
624
633
#[ test]
625
634
fn test_read_method ( ) {
626
635
fn read ( s : & str , m : method:: Method ) {
627
636
assert_eq ! ( read_method( & mut mem( s) ) , Ok ( m) ) ;
628
637
}
629
638
630
- read ( "GET /" , method:: Get ) ;
631
- read ( "POST /" , method:: Post ) ;
632
- read ( "PUT /" , method:: Put ) ;
633
- read ( "HEAD /" , method:: Head ) ;
634
- read ( "OPTIONS /" , method:: Options ) ;
635
- read ( "CONNECT /" , method:: Connect ) ;
636
- read ( "TRACE /" , method:: Trace ) ;
637
- read ( "PATCH /" , method:: Patch ) ;
638
- read ( "FOO /" , method:: Extension ( "FOO" . to_string ( ) ) ) ;
639
+ read ( "GET /" , method:: Method :: Get ) ;
640
+ read ( "POST /" , method:: Method :: Post ) ;
641
+ read ( "PUT /" , method:: Method :: Put ) ;
642
+ read ( "HEAD /" , method:: Method :: Head ) ;
643
+ read ( "OPTIONS /" , method:: Method :: Options ) ;
644
+ read ( "CONNECT /" , method:: Method :: Connect ) ;
645
+ read ( "TRACE /" , method:: Method :: Trace ) ;
646
+ read ( "PATCH /" , method:: Method :: Patch ) ;
647
+ read ( "FOO /" , method:: Method :: Extension ( "FOO" . to_string ( ) ) ) ;
639
648
}
640
649
641
650
#[ test]
@@ -671,7 +680,7 @@ mod tests {
671
680
assert_eq ! ( read_status( & mut mem( s) ) , result) ;
672
681
}
673
682
674
- read ( "200 OK\r \n " , Ok ( status:: Ok ) ) ;
683
+ read ( "200 OK\r \n " , Ok ( status:: StatusCode :: Ok ) ) ;
675
684
}
676
685
677
686
#[ test]
@@ -687,7 +696,7 @@ mod tests {
687
696
#[ test]
688
697
fn test_write_chunked ( ) {
689
698
use std:: str:: from_utf8;
690
- let mut w = super :: ChunkedWriter ( MemWriter :: new ( ) ) ;
699
+ let mut w = super :: HttpWriter :: ChunkedWriter ( MemWriter :: new ( ) ) ;
691
700
w. write ( b"foo bar" ) . unwrap ( ) ;
692
701
w. write ( b"baz quux herp" ) . unwrap ( ) ;
693
702
let buf = w. end ( ) . unwrap ( ) . unwrap ( ) ;
@@ -698,7 +707,7 @@ mod tests {
698
707
#[ test]
699
708
fn test_write_sized ( ) {
700
709
use std:: str:: from_utf8;
701
- let mut w = super :: SizedWriter ( MemWriter :: new ( ) , 8 ) ;
710
+ let mut w = super :: HttpWriter :: SizedWriter ( MemWriter :: new ( ) , 8 ) ;
702
711
w. write ( b"foo bar" ) . unwrap ( ) ;
703
712
assert_eq ! ( w. write( b"baz" ) , Err ( io:: standard_error( io:: ShortWrite ( 1 ) ) ) ) ;
704
713
@@ -710,7 +719,7 @@ mod tests {
710
719
#[ bench]
711
720
fn bench_read_method ( b : & mut Bencher ) {
712
721
b. bytes = b"CONNECT " . len ( ) as u64 ;
713
- b. iter ( || assert_eq ! ( read_method( & mut mem( "CONNECT " ) ) , Ok ( method:: Connect ) ) ) ;
722
+ b. iter ( || assert_eq ! ( read_method( & mut mem( "CONNECT " ) ) , Ok ( method:: Method :: Connect ) ) ) ;
714
723
}
715
724
716
725
}
0 commit comments