use thiserror::Error;
#[derive(Debug, Error)]
pub enum SdkError {
#[error("invalid configuration: {0}")]
InvalidConfig(String),
#[error("network error: {0}")]
Network(String),
#[error("parse error: {0}")]
Parse(String),
#[error("not found: {0}")]
NotFound(String),
#[error("unsupported domain: {0}")]
Unsupported(String),
#[error("rate limited")]
RateLimited,
#[error("authentication failed")]
Authentication,
#[error("site error: {0}")]
Site(String),
#[error(transparent)]
Storage(#[from] std::io::Error),
#[error("unknown error: {0}")]
Other(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = SdkError::NotFound("chapter".into());
assert_eq!(err.to_string(), "not found: chapter");
}
#[test]
fn test_io_conversion() {
let io_err = std::io::Error::new(std::io::ErrorKind::Other, "disk");
let sdk_err: SdkError = io_err.into();
match sdk_err {
SdkError::Storage(_) => {
assert!(sdk_err.to_string().contains("disk"));
}
_ => panic!(
"Expected Storage variant, but failed or not the expected error type: {}",
sdk_err
),
}
}
}