use thiserror::Error;
#[derive(Debug, Error)]
pub enum SoapError {
#[error("HTTP error: {0}")]
Http(String),
#[error("failed to serialize request: {0}")]
SerializeRequest(#[source] quick_xml::se::SeError),
#[error("failed to deserialize response: {0}")]
DeserializeResponse(#[source] Box<quick_xml::de::DeError>),
#[error("Soap fault: [{code}] {message}")]
SoapFault {
code: String,
message: String,
},
#[error("operation '{name}' not found in WSDL definition")]
OperationNotFound {
name: String,
},
#[error("no endpoint URL configured for Soap client")]
NoEndpoint,
}
impl From<reqwest::Error> for SoapError {
fn from(err: reqwest::Error) -> Self {
Self::Http(err.to_string())
}
}
impl SoapError {
pub fn http(status: reqwest::StatusCode) -> Self {
Self::Http(format!(
"HTTP {}: {}",
status.as_u16(),
status.canonical_reason().unwrap_or("Unknown")
))
}
pub fn serialize_request(err: quick_xml::se::SeError) -> Self {
Self::SerializeRequest(err)
}
}