use thiserror::Error;
#[derive(Debug, Error)]
pub enum IptvError {
#[error("parse error at line {line}: {message}")]
Parse { line: usize, message: String },
#[error("XML error: {0}")]
Xml(String),
#[error("network error: {0}")]
Network(String),
#[error("auth error: {0}")]
Auth(String),
#[error("session expired: {0}")]
SessionExpired(String),
#[error("rate limited: retry after {retry_after_secs}s")]
RateLimited { retry_after_secs: u64 },
#[error("invalid URL: {0}")]
InvalidUrl(String),
#[error("unexpected response: {0}")]
UnexpectedResponse(String),
#[error("timeout after {0}ms")]
Timeout(u64),
#[error("stream unavailable: {0}")]
StreamUnavailable(String),
#[error("io error: {0}")]
Io(#[from] std::io::Error),
}