@@ -397,7 +397,7 @@ macro_rules! standard_headers {
397397 ) +
398398 ) => {
399399 #[ allow( clippy:: enum_variant_names) ]
400- #[ derive( Debug , Clone , Copy , Eq , PartialEq , Hash , Serialize , Deserialize ) ]
400+ #[ derive( Debug , Clone , Copy , Eq , PartialEq , Hash ) ]
401401 enum StandardHeader {
402402 $(
403403 $variant,
@@ -481,7 +481,7 @@ standard_headers! {
481481 ( NatsExpectedStream , NATS_EXPECTED_STREAM , b"Nats-Expected-Stream" ) ;
482482}
483483
484- #[ derive( Debug , Hash , PartialEq , Eq , Clone , Serialize , Deserialize ) ]
484+ #[ derive( Debug , Hash , PartialEq , Eq , Clone ) ]
485485struct CustomHeader {
486486 bytes : Bytes ,
487487}
@@ -518,7 +518,7 @@ impl<'a> From<&'a str> for CustomHeader {
518518 }
519519}
520520
521- #[ derive( Debug , Hash , PartialEq , Eq , Clone , Serialize , Deserialize ) ]
521+ #[ derive( Debug , Hash , PartialEq , Eq , Clone ) ]
522522enum HeaderRepr {
523523 Standard ( StandardHeader ) ,
524524 Custom ( CustomHeader ) ,
@@ -533,7 +533,7 @@ enum HeaderRepr {
533533///
534534/// `HeaderName` represents standard header names using an `enum`, as such they
535535/// will not require an allocation for storage.
536- #[ derive( Clone , PartialEq , Eq , Hash , Debug , Serialize , Deserialize ) ]
536+ #[ derive( Clone , PartialEq , Eq , Hash , Debug ) ]
537537pub struct HeaderName {
538538 inner : HeaderRepr ,
539539}
@@ -600,6 +600,26 @@ impl AsRef<str> for HeaderName {
600600 }
601601}
602602
603+ impl Serialize for HeaderName {
604+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
605+ where
606+ S : serde:: Serializer ,
607+ {
608+ serializer. serialize_str ( self . as_str ( ) )
609+ }
610+ }
611+
612+ impl < ' de > Deserialize < ' de > for HeaderName {
613+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
614+ where
615+ D : serde:: Deserializer < ' de > ,
616+ {
617+ String :: deserialize ( deserializer) ?
618+ . parse ( )
619+ . map_err ( |e| serde:: de:: Error :: custom ( e) )
620+ }
621+ }
622+
603623#[ derive( Debug , Clone ) ]
604624pub struct ParseHeaderNameError ;
605625
@@ -760,4 +780,15 @@ mod tests {
760780
761781 assert_eq ! ( a, b) ;
762782 }
783+
784+ #[ test]
785+ fn header_name_serde ( ) {
786+ let raw = "Nats-Stream" ;
787+ let raw_json = "\" Nats-Stream\" " ;
788+ let header = HeaderName :: from_static ( raw) ;
789+
790+ // ser/de of HeaderName should be the same as raw string
791+ assert_eq ! ( serde_json:: to_string( & header) . unwrap( ) , raw_json) ;
792+ assert_eq ! ( serde_json:: from_str:: <HeaderName >( raw_json) . unwrap( ) , header) ;
793+ }
763794}
0 commit comments