use http::Uri;
use http::response::Parts;
use crate::Error;
use crate::ErrorKind;
pub fn new_request_build_error(err: http::Error) -> Error {
Error::new(ErrorKind::Unexpected, "building http request")
.with_operation("http::Request::build")
.set_source(err)
}
pub fn new_request_credential_error(err: anyhow::Error) -> Error {
Error::new(
ErrorKind::Unexpected,
"loading credential to sign http request",
)
.set_temporary()
.with_operation("reqsign::LoadCredential")
.set_source(err)
}
pub fn new_request_sign_error(err: anyhow::Error) -> Error {
Error::new(ErrorKind::Unexpected, "signing http request")
.with_operation("reqsign::Sign")
.set_source(err)
}
pub fn with_error_response_context(mut err: Error, mut parts: Parts) -> Error {
if let Some(uri) = parts.extensions.get::<Uri>() {
err = err.with_context("uri", uri.to_string());
}
parts.headers.remove("Set-Cookie");
parts.headers.remove("WWW-Authenticate");
parts.headers.remove("Proxy-Authenticate");
err = err.with_context("response", format!("{parts:?}"));
err
}