use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Error, Debug)]
pub enum Error {
#[error("API key not found. Please set the XIAOMI_API_KEY environment variable.")]
MissingApiKey,
#[error("HTTP request failed: {0}")]
HttpError(#[from] reqwest::Error),
#[error("JSON error: {0}")]
JsonError(#[from] serde_json::Error),
#[error("API error: {message} (status: {status})")]
ApiError {
status: u16,
message: String,
},
#[error("Stream parsing error: {0}")]
StreamError(String),
#[error("Invalid parameter: {0}")]
InvalidParameter(String),
#[error("Invalid response: {0}")]
InvalidResponse(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("Base64 decode error: {0}")]
Base64DecodeError(#[from] base64::DecodeError),
}
impl Error {
pub fn api_error(status: u16, message: impl Into<String>) -> Self {
Error::ApiError {
status,
message: message.into(),
}
}
}