use hyper::http;
use snafu::Snafu;
#[derive(Debug, Snafu)]
#[snafu(visibility = "pub(crate)")]
pub enum Error {
#[snafu(display("base64 decoding error: {}", source))]
B64DecodingError { source: base64::DecodeError },
#[snafu(display("certificate parse error: {}", source))]
CertificateParseError { source: native_tls::Error },
#[snafu(display("crypto error: {}", source))]
CryptoError { source: openssl::error::ErrorStack },
#[snafu(display("http client error: {}", source))]
HttpClientError { source: hyper::Error },
#[snafu(display("http client request builder error: {}", source))]
HttpClientRequestBuilderError { source: http::Error },
#[snafu(display("http client response error: status = {}", status))]
HttpClientResponseError { status: u16 },
#[snafu(display("http client timeout error: {}", source))]
HttpClientTimeoutError { source: tokio::time::Elapsed },
#[snafu(display("http uri error: {}", source))]
HttpUriError { source: http::uri::InvalidUri },
#[snafu(display("io error: {}", source))]
IoError { source: std::io::Error },
#[snafu(display("json deserialization error: {}", source))]
JsonDeserializationError { source: serde_json::Error },
#[snafu(display("json serialization error: {}", source))]
JsonSerializationError { source: serde_json::Error },
#[snafu(display("malformed response"))]
MalformedResponseError {},
}