1use core::convert::Infallible;
2
3pub use http_grpc_rs::{error::GrpcError, status::GrpcStatus};
4
5use crate::{
6 body::ResponseBody,
7 context::WebContext,
8 http::{WebResponse, const_header_value::GRPC, header::CONTENT_TYPE},
9 service::Service,
10};
11
12use super::Error;
13
14impl<'r, C, B> Service<WebContext<'r, C, B>> for GrpcError {
15 type Response = WebResponse;
16 type Error = Infallible;
17
18 async fn call(&self, ctx: WebContext<'r, C, B>) -> Result<Self::Response, Self::Error> {
19 let mut res = ctx.into_response(ResponseBody::empty());
22 res.headers_mut().insert(CONTENT_TYPE, GRPC);
23 res.headers_mut().extend(self.trailers());
24 Ok(res)
25 }
26}
27
28impl From<GrpcError> for Error {
29 fn from(e: GrpcError) -> Self {
30 Self::from_service(e)
31 }
32}