1use crate::proto::grpc_status::GrpcStatus;
2use crate::Metadata;
3use httpbis::BytesDeque;
4use httpbis::Header;
5use httpbis::Headers;
6
7pub(crate) static HEADER_GRPC_STATUS: &'static str = "grpc-status";
8pub(crate) static HEADER_GRPC_MESSAGE: &'static str = "grpc-message";
9
10pub(crate) fn headers_500(grpc_status: GrpcStatus, message: String) -> Headers {
11 Headers::from_vec(vec![
12 Header::new(":status", "500"),
13 Header::new("content-type", "application/grpc"),
14 Header::new(HEADER_GRPC_STATUS, format!("{}", grpc_status as i32)),
15 Header::new(HEADER_GRPC_MESSAGE, message),
16 ])
17}
18
19pub(crate) fn headers_200(metadata: Metadata) -> Headers {
20 let mut headers = Headers::from_vec(vec![
21 Header::new(":status", "200"),
23 Header::new("content-type", "application/grpc"),
24 Header::new(HEADER_GRPC_STATUS, "0"),
25 ]);
26 headers.extend(metadata.into_headers());
27 headers
28}
29
30pub(crate) fn grpc_error_message(message: &str) -> httpbis::SimpleHttpMessage {
32 let headers = Headers::from_vec(vec![
33 Header::new(":status", "200"),
34 Header::new(
36 HEADER_GRPC_STATUS,
37 format!("{}", GrpcStatus::Internal.code()),
38 ),
39 Header::new(HEADER_GRPC_MESSAGE, message.to_owned()),
40 ]);
41 httpbis::SimpleHttpMessage {
42 headers,
43 body: BytesDeque::new(),
44 }
45}
46
47pub(crate) fn trailers(
49 grpc_status: GrpcStatus,
50 message: Option<String>,
51 metadata: Metadata,
52) -> Headers {
53 let mut headers = Headers::from_vec(vec![Header::new(
54 HEADER_GRPC_STATUS,
55 format!("{}", grpc_status as i32),
56 )]);
57 if let Some(message) = message {
58 headers.add_header(Header::new(HEADER_GRPC_MESSAGE, message));
59 }
60 headers.extend(metadata.into_headers());
61 headers
62}