use std::num::TryFromIntError;
use crate::rejection::MissingContentTypeReason;
use aws_smithy_runtime_api::http::HttpError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ResponseRejection {
#[error("invalid bound HTTP status code; status codes must be inside the 100-999 range: {0}")]
InvalidHttpStatusCode(TryFromIntError),
#[error("error serializing CBOR-encoded body: {0}")]
Serialization(#[from] aws_smithy_types::error::operation::SerializationError),
#[error("error building HTTP response: {0}")]
HttpBuild(#[from] http::Error),
}
#[derive(Debug, Error)]
pub enum RequestRejection {
#[error("error converting non-streaming body to bytes: {0}")]
BufferHttpBodyBytes(crate::Error),
#[error("request contains invalid value for `Accept` header")]
NotAcceptable,
#[error("expected `Content-Type` header not found: {0}")]
MissingContentType(#[from] MissingContentTypeReason),
#[error("error deserializing request HTTP body as CBOR: {0}")]
CborDeserialize(#[from] aws_smithy_cbor::decode::DeserializeError),
#[error("request does not adhere to modeled constraints")]
ConstraintViolation(Vec<u8>),
#[error("failed to convert request: {0}")]
HttpConversion(#[from] HttpError),
}
impl From<std::convert::Infallible> for RequestRejection {
fn from(_err: std::convert::Infallible) -> Self {
match _err {}
}
}
impl From<crate::Error> for RequestRejection {
fn from(err: crate::Error) -> Self {
Self::BufferHttpBodyBytes(err)
}
}
convert_to_request_rejection!(hyper::Error, BufferHttpBodyBytes);
convert_to_request_rejection!(Box<dyn std::error::Error + Send + Sync + 'static>, BufferHttpBodyBytes);