pub use super::ser::Error as SerializeError;
use crate::helix::BodyError;
#[cfg(feature = "client")]
#[cfg_attr(nightly, doc(cfg(feature = "client")))]
#[derive(thiserror::Error, Debug)]
#[non_exhaustive]
pub enum ClientRequestError<RE: std::error::Error + Send + Sync + 'static> {
#[error("request failed")]
RequestError(#[source] RE),
#[error("body conversion failed")]
HyperError(#[from] hyper::Error),
#[error("no pagination found")]
NoPage,
#[error("could not create request")]
CreateRequestError(#[from] CreateRequestError),
#[error(transparent)]
HelixRequestGetError(#[from] HelixRequestGetError),
#[error(transparent)]
HelixRequestPutError(#[from] HelixRequestPutError),
#[error(transparent)]
HelixRequestPostError(#[from] HelixRequestPostError),
#[error(transparent)]
HelixRequestPatchError(#[from] HelixRequestPatchError),
#[error(transparent)]
HelixRequestDeleteError(#[from] HelixRequestDeleteError),
#[error("{0}")]
Custom(std::borrow::Cow<'static, str>),
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum CreateRequestError {
HttpError(#[from] http::Error),
SerializeError(#[from] BodyError),
InvalidUri(#[from] InvalidUri),
Custom(std::borrow::Cow<'static, str>),
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum InvalidUri {
UriParseError(#[from] http::uri::InvalidUri),
UrlError(#[from] url::ParseError),
QuerySerializeError(#[from] SerializeError),
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum HelixRequestGetError {
Error {
error: String,
status: http::StatusCode,
message: String,
uri: http::Uri,
},
Utf8Error(hyper::body::Bytes, #[source] std::str::Utf8Error, http::Uri),
DeserializeError(
String,
#[source] crate::DeserError,
http::Uri,
http::StatusCode,
),
InvalidResponse {
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
},
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum HelixRequestPutError {
Error {
error: String,
status: http::StatusCode,
message: String,
uri: http::Uri,
body: hyper::body::Bytes,
},
Utf8Error(hyper::body::Bytes, #[source] std::str::Utf8Error, http::Uri),
DeserializeError(
String,
#[source] crate::DeserError,
http::Uri,
http::StatusCode,
),
InvalidResponse {
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
},
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum HelixRequestPostError {
Error {
error: String,
status: http::StatusCode,
message: String,
uri: http::Uri,
body: hyper::body::Bytes,
},
Utf8Error(hyper::body::Bytes, #[source] std::str::Utf8Error, http::Uri),
DeserializeError(
String,
#[source] crate::DeserError,
http::Uri,
http::StatusCode,
),
InvalidResponse {
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
},
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum HelixRequestPatchError {
Error {
error: String,
status: http::StatusCode,
message: String,
uri: http::Uri,
body: hyper::body::Bytes,
},
Utf8Error(hyper::body::Bytes, #[source] std::str::Utf8Error, http::Uri),
DeserializeError(
String,
#[source] crate::DeserError,
http::Uri,
http::StatusCode,
),
InvalidResponse {
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
},
}
#[derive(thiserror::Error, Debug, displaydoc::Display)]
#[non_exhaustive]
pub enum HelixRequestDeleteError {
Error {
error: String,
status: http::StatusCode,
message: String,
uri: http::Uri,
body: hyper::body::Bytes,
},
Utf8Error(hyper::body::Bytes, #[source] std::str::Utf8Error, http::Uri),
InvalidResponse {
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
},
}
pub(crate) trait HelixRequestError {
fn invalid_response(
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
) -> Self;
}
pub(crate) trait HelixRequestDeserError: HelixRequestError {
fn deserialize_error(
body: String,
err: crate::DeserError,
uri: http::Uri,
status: http::StatusCode,
) -> Self;
}
macro_rules! impl_request_error {
($($t:ty),*) => {
$(impl HelixRequestError for $t {
fn invalid_response(
reason: &'static str,
response: String,
status: http::StatusCode,
uri: http::Uri,
) -> Self {
Self::InvalidResponse {
reason,
response,
status,
uri,
}
}
})*
};
}
macro_rules! impl_request_deser_error {
($($t:ty),*) => {
$(impl HelixRequestDeserError for $t {
fn deserialize_error(
body: String,
err: crate::DeserError,
uri: http::Uri,
status: http::StatusCode,
) -> Self {
Self::DeserializeError(body, err, uri, status)
}
})*
};
}
impl_request_error!(
HelixRequestGetError,
HelixRequestPatchError,
HelixRequestPostError,
HelixRequestPutError,
HelixRequestDeleteError
);
impl_request_deser_error!(
HelixRequestGetError,
HelixRequestPatchError,
HelixRequestPostError,
HelixRequestPutError
);