Skip to main content

crispy_iptv_types/
error.rs

1//! Structured error types for IPTV operations.
2
3use thiserror::Error;
4
5/// Top-level error enum for all IPTV crate operations.
6#[derive(Debug, Error)]
7pub enum IptvError {
8    /// M3U/playlist parsing failure.
9    #[error("parse error at line {line}: {message}")]
10    Parse { line: usize, message: String },
11
12    /// XMLTV/EPG parsing failure.
13    #[error("XML error: {0}")]
14    Xml(String),
15
16    /// HTTP / network error.
17    #[error("network error: {0}")]
18    Network(String),
19
20    /// Authentication failure (Xtream, Stalker).
21    #[error("auth error: {0}")]
22    Auth(String),
23
24    /// Session expired (Stalker token, Xtream account).
25    #[error("session expired: {0}")]
26    SessionExpired(String),
27
28    /// Rate limited by server.
29    #[error("rate limited: retry after {retry_after_secs}s")]
30    RateLimited { retry_after_secs: u64 },
31
32    /// Invalid URL or endpoint.
33    #[error("invalid URL: {0}")]
34    InvalidUrl(String),
35
36    /// Server returned unexpected data format.
37    #[error("unexpected response: {0}")]
38    UnexpectedResponse(String),
39
40    /// Timeout waiting for server response.
41    #[error("timeout after {0}ms")]
42    Timeout(u64),
43
44    /// Stream unavailable or dead.
45    #[error("stream unavailable: {0}")]
46    StreamUnavailable(String),
47
48    /// Generic I/O error.
49    #[error("io error: {0}")]
50    Io(#[from] std::io::Error),
51}