use crate::prelude::*;
#[derive(Debug, Deserialize, Display)]
#[display("{}", message)]
pub struct LimitlessContentError {
pub message: String,
#[serde(default)]
pub code: Option<String>,
}
#[derive(Debug, Error)]
pub enum LimitlessError {
#[error("Limitless API error: {0}")]
ApiError(LimitlessContentError),
#[error("Failed to emit value on channel: {underlying}")]
ChannelSendError { underlying: String },
#[error("Validation error: {0}")]
ValidationError(String),
#[error(transparent)]
ReqError(#[from] reqwest::Error),
#[error(transparent)]
InvalidHeaderError(#[from] reqwest::header::InvalidHeaderValue),
#[error(transparent)]
IoError(#[from] std::io::Error),
#[error(transparent)]
ParseFloatError(#[from] std::num::ParseFloatError),
#[error(transparent)]
UrlParserError(#[from] url::ParseError),
#[error(transparent)]
Json(#[from] serde_json::Error),
#[error(transparent)]
Tungstenite(#[from] tokio_tungstenite::tungstenite::Error),
#[error(transparent)]
TimestampError(#[from] std::time::SystemTimeError),
#[error(transparent)]
SerdeError(#[from] serde::de::value::Error),
#[error("Internal Server Error")]
InternalServerError,
#[error("Service Unavailable")]
ServiceUnavailable,
#[error("Unauthorized — check API key or token")]
Unauthorized,
#[error("Rate limited — retry with exponential backoff")]
RateLimited,
#[error("Unexpected status code: {0}")]
StatusCode(u16),
#[error("Limitless error: {0}")]
Base(String),
}
impl From<String> for LimitlessError {
fn from(err: String) -> Self {
LimitlessError::Base(err)
}
}