@@ -21,10 +21,6 @@ const ENCODING_SET: &AsciiSet = &CONTROLS
21
21
. add ( b'{' )
22
22
. add ( b'}' ) ;
23
23
24
- const GRPC_STATUS_HEADER_CODE : HeaderName = HeaderName :: from_static ( "grpc-status" ) ;
25
- const GRPC_STATUS_MESSAGE_HEADER : HeaderName = HeaderName :: from_static ( "grpc-message" ) ;
26
- const GRPC_STATUS_DETAILS_HEADER : HeaderName = HeaderName :: from_static ( "grpc-status-details-bin" ) ;
27
-
28
24
/// A gRPC status describing the result of an RPC call.
29
25
///
30
26
/// Values can be created using the `new` function or one of the specialized
@@ -442,10 +438,10 @@ impl Status {
442
438
443
439
/// Extract a `Status` from a hyper `HeaderMap`.
444
440
pub fn from_header_map ( header_map : & HeaderMap ) -> Option < Status > {
445
- header_map. get ( GRPC_STATUS_HEADER_CODE ) . map ( |code| {
441
+ header_map. get ( Self :: GRPC_STATUS ) . map ( |code| {
446
442
let code = Code :: from_bytes ( code. as_ref ( ) ) ;
447
443
let error_message = header_map
448
- . get ( GRPC_STATUS_MESSAGE_HEADER )
444
+ . get ( Self :: GRPC_MESSAGE )
449
445
. map ( |header| {
450
446
percent_decode ( header. as_bytes ( ) )
451
447
. decode_utf8 ( )
@@ -454,7 +450,7 @@ impl Status {
454
450
. unwrap_or_else ( || Ok ( String :: new ( ) ) ) ;
455
451
456
452
let details = header_map
457
- . get ( GRPC_STATUS_DETAILS_HEADER )
453
+ . get ( Self :: GRPC_STATUS_DETAILS )
458
454
. map ( |h| {
459
455
crate :: util:: base64:: STANDARD
460
456
. decode ( h. as_bytes ( ) )
@@ -464,9 +460,9 @@ impl Status {
464
460
. unwrap_or_default ( ) ;
465
461
466
462
let mut other_headers = header_map. clone ( ) ;
467
- other_headers. remove ( GRPC_STATUS_HEADER_CODE ) ;
468
- other_headers. remove ( GRPC_STATUS_MESSAGE_HEADER ) ;
469
- other_headers. remove ( GRPC_STATUS_DETAILS_HEADER ) ;
463
+ other_headers. remove ( Self :: GRPC_STATUS ) ;
464
+ other_headers. remove ( Self :: GRPC_MESSAGE ) ;
465
+ other_headers. remove ( Self :: GRPC_STATUS_DETAILS ) ;
470
466
471
467
match error_message {
472
468
Ok ( message) => Status {
@@ -525,15 +521,15 @@ impl Status {
525
521
pub fn add_header ( & self , header_map : & mut HeaderMap ) -> Result < ( ) , Self > {
526
522
header_map. extend ( self . metadata . clone ( ) . into_sanitized_headers ( ) ) ;
527
523
528
- header_map. insert ( GRPC_STATUS_HEADER_CODE , self . code . to_header_value ( ) ) ;
524
+ header_map. insert ( Self :: GRPC_STATUS , self . code . to_header_value ( ) ) ;
529
525
530
526
if !self . message . is_empty ( ) {
531
527
let to_write = Bytes :: copy_from_slice (
532
528
Cow :: from ( percent_encode ( self . message ( ) . as_bytes ( ) , ENCODING_SET ) ) . as_bytes ( ) ,
533
529
) ;
534
530
535
531
header_map. insert (
536
- GRPC_STATUS_MESSAGE_HEADER ,
532
+ Self :: GRPC_MESSAGE ,
537
533
HeaderValue :: from_maybe_shared ( to_write) . map_err ( invalid_header_value_byte) ?,
538
534
) ;
539
535
}
@@ -542,7 +538,7 @@ impl Status {
542
538
let details = crate :: util:: base64:: STANDARD_NO_PAD . encode ( & self . details [ ..] ) ;
543
539
544
540
header_map. insert (
545
- GRPC_STATUS_DETAILS_HEADER ,
541
+ Self :: GRPC_STATUS_DETAILS ,
546
542
HeaderValue :: from_maybe_shared ( details) . map_err ( invalid_header_value_byte) ?,
547
543
) ;
548
544
}
@@ -591,6 +587,13 @@ impl Status {
591
587
self . add_header ( response. headers_mut ( ) ) . unwrap ( ) ;
592
588
response
593
589
}
590
+
591
+ #[ doc( hidden) ]
592
+ pub const GRPC_STATUS : HeaderName = HeaderName :: from_static ( "grpc-status" ) ;
593
+ #[ doc( hidden) ]
594
+ pub const GRPC_MESSAGE : HeaderName = HeaderName :: from_static ( "grpc-message" ) ;
595
+ #[ doc( hidden) ]
596
+ pub const GRPC_STATUS_DETAILS : HeaderName = HeaderName :: from_static ( "grpc-status-details-bin" ) ;
594
597
}
595
598
596
599
fn find_status_in_source_chain ( err : & ( dyn Error + ' static ) ) -> Option < Status > {
@@ -1005,7 +1008,7 @@ mod tests {
1005
1008
1006
1009
let b64_details = crate :: util:: base64:: STANDARD_NO_PAD . encode ( DETAILS ) ;
1007
1010
1008
- assert_eq ! ( header_map[ super :: GRPC_STATUS_DETAILS_HEADER ] , b64_details) ;
1011
+ assert_eq ! ( header_map[ Status :: GRPC_STATUS_DETAILS ] , b64_details) ;
1009
1012
1010
1013
let status = Status :: from_header_map ( & header_map) . unwrap ( ) ;
1011
1014
0 commit comments