@@ -449,7 +449,13 @@ pub struct Headers<'x> {
449
449
serde( skip_serializing_if = "HashMap::is_empty" )
450
450
) ]
451
451
#[ cfg_attr( feature = "serde_support" , serde( default ) ) ]
452
- pub values : HashMap < HeaderName < ' x > , HeaderValue < ' x > > ,
452
+ pub values : HashMap < HeaderName , HeaderValue < ' x > > ,
453
+ #[ cfg_attr(
454
+ feature = "serde_support" ,
455
+ serde( skip_serializing_if = "HashMap::is_empty" )
456
+ ) ]
457
+ #[ cfg_attr( feature = "serde_support" , serde( default ) ) ]
458
+ pub other_values : HashMap < Cow < ' x , str > , HeaderValue < ' x > > ,
453
459
#[ cfg_attr(
454
460
feature = "serde_support" ,
455
461
serde( skip_serializing_if = "Vec::is_empty" )
@@ -464,7 +470,7 @@ impl<'x> Headers<'x> {
464
470
}
465
471
466
472
pub fn is_empty ( & self ) -> bool {
467
- self . values . is_empty ( ) && self . offsets . is_empty ( )
473
+ self . values . is_empty ( ) && self . other_values . is_empty ( ) && self . offsets . is_empty ( )
468
474
}
469
475
470
476
pub fn clear ( & mut self ) {
@@ -477,55 +483,62 @@ impl<'x> Headers<'x> {
477
483
#[ derive( Debug , PartialEq ) ]
478
484
#[ cfg_attr( feature = "serde_support" , derive( Serialize , Deserialize ) ) ]
479
485
pub struct HeaderOffset < ' x > {
480
- pub name : HeaderName < ' x > ,
486
+ pub name : HeaderOffsetName < ' x > ,
481
487
pub start : usize ,
482
488
pub end : usize ,
483
489
}
484
490
491
+ #[ derive( Debug , PartialEq ) ]
492
+ #[ cfg_attr( feature = "serde_support" , derive( Serialize , Deserialize ) ) ]
493
+ pub enum HeaderOffsetName < ' x > {
494
+ Rfc ( HeaderName ) ,
495
+ Other ( Cow < ' x , str > ) ,
496
+ }
497
+
485
498
/// A header field
486
- #[ derive( Debug , PartialEq , Eq , Hash , Clone ) ]
499
+ #[ repr( u8 ) ]
500
+ #[ derive( Debug , PartialEq , Eq , Hash , Clone , Copy ) ]
487
501
#[ cfg_attr( feature = "serde_support" , derive( Serialize , Deserialize ) ) ]
488
502
#[ cfg_attr( feature = "serde_support" , serde( rename_all = "snake_case" ) ) ]
489
- pub enum HeaderName < ' x > {
490
- Subject ,
491
- From ,
492
- To ,
493
- Cc ,
494
- Date ,
495
- Bcc ,
496
- ReplyTo ,
497
- Sender ,
498
- Comments ,
499
- InReplyTo ,
500
- Keywords ,
501
- Received ,
502
- MessageId ,
503
- References ,
504
- ReturnPath ,
505
- MimeVersion ,
506
- ContentDescription ,
507
- ContentId ,
508
- ContentLanguage ,
509
- ContentLocation ,
510
- ContentTransferEncoding ,
511
- ContentType ,
512
- ContentDisposition ,
513
- ResentTo ,
514
- ResentFrom ,
515
- ResentBcc ,
516
- ResentCc ,
517
- ResentSender ,
518
- ResentDate ,
519
- ResentMessageId ,
520
- ListArchive ,
521
- ListHelp ,
522
- ListId ,
523
- ListOwner ,
524
- ListPost ,
525
- ListSubscribe ,
526
- ListUnsubscribe ,
527
- Other ( Cow < ' x , str > ) ,
528
- Invalid ,
503
+ pub enum HeaderName {
504
+ Subject = 0 ,
505
+ From = 1 ,
506
+ To = 2 ,
507
+ Cc = 3 ,
508
+ Date = 4 ,
509
+ Bcc = 5 ,
510
+ ReplyTo = 6 ,
511
+ Sender = 7 ,
512
+ Comments = 8 ,
513
+ InReplyTo = 9 ,
514
+ Keywords = 10 ,
515
+ Received = 11 ,
516
+ MessageId = 12 ,
517
+ References = 13 ,
518
+ ReturnPath = 14 ,
519
+ MimeVersion = 15 ,
520
+ ContentDescription = 16 ,
521
+ ContentId = 17 ,
522
+ ContentLanguage = 18 ,
523
+ ContentLocation = 19 ,
524
+ ContentTransferEncoding = 20 ,
525
+ ContentType = 21 ,
526
+ ContentDisposition = 22 ,
527
+ ResentTo = 23 ,
528
+ ResentFrom = 24 ,
529
+ ResentBcc = 25 ,
530
+ ResentCc = 26 ,
531
+ ResentSender = 27 ,
532
+ ResentDate = 28 ,
533
+ ResentMessageId = 29 ,
534
+ ListArchive = 30 ,
535
+ ListHelp = 31 ,
536
+ ListId = 32 ,
537
+ ListOwner = 33 ,
538
+ ListPost = 34 ,
539
+ ListSubscribe = 35 ,
540
+ ListUnsubscribe = 36 ,
541
+ Other = 37 ,
529
542
}
530
543
531
544
/// A parsed header value.
@@ -907,8 +920,8 @@ impl<'x> Message<'x> {
907
920
/// Returns a non-standard header field
908
921
pub fn get_other ( & self , name : & ' x str ) -> & HeaderValue < ' x > {
909
922
self . headers
910
- . values
911
- . get ( & HeaderName :: Other ( name. into ( ) ) )
923
+ . other_values
924
+ . get ( & Cow :: from ( name) )
912
925
. unwrap_or ( & HeaderValue :: Empty )
913
926
}
914
927
0 commit comments