@@ -9,9 +9,6 @@ use std::ascii::AsciiExt;
9
9
use mime:: Mime ;
10
10
use language_tags:: LanguageTag ;
11
11
12
- use parsing;
13
- use { Header , Raw } ;
14
-
15
12
/// The `Link` header, defined in
16
13
/// [RFC5988](http://tools.ietf.org/html/rfc5988#section-5)
17
14
///
@@ -387,18 +384,24 @@ impl LinkValue {
387
384
// Trait implementations
388
385
////////////////////////////////////////////////////////////////////////////////
389
386
390
- impl Header for Link {
391
- fn header_name ( ) -> & ' static str {
392
- static NAME : & ' static str = "Link" ;
393
- NAME
387
+ impl :: Header for Link {
388
+ fn name ( ) -> & ' static :: HeaderName {
389
+ & :: http:: header:: LINK
394
390
}
395
391
396
- fn parse_header ( raw : & Raw ) -> Result < Link , :: Error > {
392
+ fn decode < ' i , I > ( values : & mut I ) -> Result < Self , :: Error >
393
+ where
394
+ I : Iterator < Item = & ' i :: HeaderValue > ,
395
+ {
397
396
// If more that one `Link` headers are present in a request's
398
397
// headers they are combined in a single `Link` header containing
399
398
// all the `link-value`s present in each of those `Link` headers.
400
- raw. iter ( )
401
- . map ( parsing:: from_raw_str :: < Link > )
399
+ values
400
+ . map ( |line| {
401
+ line. to_str ( )
402
+ . map_err ( |_| :: Error :: invalid ( ) )
403
+ . and_then ( |line| Link :: from_str ( line) )
404
+ } )
402
405
. fold ( None , |p, c| {
403
406
match ( p, c) {
404
407
( None , c) => Some ( c) ,
@@ -414,14 +417,23 @@ impl Header for Link {
414
417
. unwrap_or ( Err ( :: Error :: invalid ( ) ) )
415
418
}
416
419
417
- fn fmt_header ( & self , f : & mut :: Formatter ) -> fmt :: Result {
418
- f . fmt_line ( self )
420
+ fn encode < E : Extend < :: HeaderValue > > ( & self , values : & mut E ) {
421
+ values . extend ( std :: iter :: once ( :: HeaderValue :: from_str ( & self . to_string ( ) ) . unwrap ( ) ) ) ;
419
422
}
420
423
}
421
424
422
425
impl fmt:: Display for Link {
423
426
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
424
- fmt_delimited ( f, self . values . as_slice ( ) , ", " , ( "" , "" ) )
427
+ let mut first = true ;
428
+ for value in & self . values {
429
+ if !first {
430
+ write ! ( f, ", " ) ?;
431
+ }
432
+ first = false ;
433
+
434
+ write ! ( f, "{}" , value) ?;
435
+ }
436
+ Ok ( ( ) )
425
437
}
426
438
}
427
439
0 commit comments