Skip to main content

ntex_grpc/server/
error.rs

1use ntex_http::{HeaderMap, HeaderValue};
2
3use crate::{DecodeError, GrpcStatus};
4
5#[derive(thiserror::Error, Clone, Debug)]
6#[error("{status:?}: {message:?}")]
7pub struct ServerError {
8    pub(crate) status: GrpcStatus,
9    pub(crate) message: HeaderValue,
10    pub(crate) headers: HeaderMap,
11}
12
13impl ServerError {
14    pub fn new(status: GrpcStatus, message: HeaderValue, headers: Option<HeaderMap>) -> Self {
15        Self {
16            status,
17            message,
18            headers: headers.unwrap_or_default(),
19        }
20    }
21}
22
23impl From<DecodeError> for ServerError {
24    fn from(_: DecodeError) -> Self {
25        Self::new(
26            GrpcStatus::InvalidArgument,
27            HeaderValue::from_static("Cannot decode grpc message"),
28            None,
29        )
30    }
31}
32
33pub trait MethodResult<T> {
34    fn into(self) -> T;
35}
36
37impl<T> MethodResult<T> for T {
38    #[inline]
39    fn into(self) -> T {
40        self
41    }
42}
43
44impl<T, E: Into<T>> MethodResult<T> for Result<T, E> {
45    #[inline]
46    fn into(self) -> T {
47        match self {
48            Ok(res) => res,
49            Err(e) => e.into(),
50        }
51    }
52}