use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("HTTP 상태 오류: {status} ({url})")]
HttpStatus {
status: reqwest::StatusCode,
url: String,
},
#[error("전송 오류: {0}")]
Transport(#[from] reqwest::Error),
#[error("WebSocket 연결 실패: {0}")]
ConnectionFailed(String),
#[error("WebSocket 통신 오류: {0}")]
WebSocket(#[source] Box<tokio_tungstenite::tungstenite::Error>),
#[error("응답 디코딩 실패: {0}")]
Decode(String),
#[error("파싱 실패: {0}")]
Parse(String),
#[error("프로토콜 오류: {0}")]
Protocol(String),
#[error("내부 채널이 닫혔습니다: {0}")]
ChannelClosed(String),
#[error("방송이 꺼져있습니다.")]
StreamOffline,
#[error("잘못된 URL 형식: {0}")]
URLParse(#[from] url::ParseError),
#[error("아직 구현되지 않은 기능입니다.")]
NotImplemented,
#[error("이미 시작된 연결입니다.")]
AlreadyStarted,
}
pub type Result<T> = std::result::Result<T, Error>;
impl From<tokio_tungstenite::tungstenite::Error> for Error {
fn from(error: tokio_tungstenite::tungstenite::Error) -> Self {
Self::WebSocket(Box::new(error))
}
}