ntex_grpc/server/
error.rs1use 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}