connect_rpc/
lib.rs

1use response::error::ConnectError;
2
3pub(crate) mod common;
4pub mod metadata;
5pub mod request;
6pub mod response;
7pub mod stream;
8
9#[cfg(feature = "reqwest")]
10pub mod reqwest;
11
12pub(crate) type BoxError = Box<dyn std::error::Error + Send + Sync>;
13
14#[non_exhaustive]
15#[derive(Debug, thiserror::Error)]
16pub enum Error {
17    #[error("base64 decode error: {0}")]
18    Base64DecodeError(#[from] base64::DecodeError),
19    #[error("body error: {0}")]
20    BodyError(#[source] BoxError),
21    #[error("{0}")]
22    ConnectError(ConnectError),
23    #[error("invalid request: {0}")]
24    InvalidRequest(String),
25    #[error("invalid response: {0}")]
26    InvalidResponse(String),
27    #[error("invalid metadata: {0}")]
28    InvalidMetadata(&'static str),
29    #[error("invalid header name: {0}")]
30    InvalidHeaderName(#[from] http::header::InvalidHeaderName),
31    #[error("invalid header value: {0}")]
32    InvalidHeaderValue(#[from] http::header::InvalidHeaderValue),
33    #[error("invalid URI: {0}")]
34    InvalidUri(#[from] http::uri::InvalidUri),
35    #[error("invalid URI: {0}")]
36    InvalidUriParts(#[from] http::uri::InvalidUriParts),
37    #[error("unacceptable encoding {0:?}")]
38    UnacceptableEncoding(String),
39    #[error("unexpected message codec {0:?}")]
40    UnexpectedMessageCodec(String),
41
42    #[cfg(feature = "reqwest")]
43    #[error("reqwest error: {0}")]
44    ReqwestError(#[source] ::reqwest::Error),
45}
46
47impl Error {
48    pub(crate) fn body(err: impl Into<BoxError>) -> Self {
49        Self::BodyError(err.into())
50    }
51
52    pub(crate) fn invalid_request(msg: impl std::fmt::Display) -> Self {
53        Self::InvalidRequest(msg.to_string())
54    }
55}