| use core::fmt; |
| use std::string::FromUtf8Error; |
|
|
| use forge_eventsource_stream::EventStreamError; |
| use nom::error::Error as NomError; |
| #[cfg(doc)] |
| use reqwest::RequestBuilder; |
| use reqwest::header::HeaderValue; |
| use reqwest::{Error as ReqwestError, Response, StatusCode}; |
|
|
| |
| |
| #[derive(Debug, Clone, Copy)] |
| pub struct CannotCloneRequestError; |
|
|
| impl fmt::Display for CannotCloneRequestError { |
| fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| f.write_str("expected a cloneable request") |
| } |
| } |
|
|
| impl std::error::Error for CannotCloneRequestError {} |
|
|
| |
| #[derive(Debug, Error)] |
| pub enum Error { |
| |
| #[error(transparent)] |
| Utf8(FromUtf8Error), |
| |
| #[error(transparent)] |
| Parser(NomError<String>), |
| |
| #[error(transparent)] |
| Transport(ReqwestError), |
| |
| #[error("Invalid header value: {0:?}")] |
| InvalidContentType(HeaderValue, Box<Response>), |
| |
| #[error("Invalid status code: {0}")] |
| InvalidStatusCode(StatusCode, Box<Response>), |
| |
| |
| #[error("Invalid `Last-Event-ID`: {0}")] |
| InvalidLastEventId(String), |
| |
| #[error("Stream ended")] |
| StreamEnded, |
| } |
|
|
| impl From<EventStreamError<ReqwestError>> for Error { |
| fn from(err: EventStreamError<ReqwestError>) -> Self { |
| match err { |
| EventStreamError::Utf8(err) => Self::Utf8(err), |
| EventStreamError::Parser(err) => Self::Parser(err), |
| EventStreamError::Transport(err) => Self::Transport(err), |
| } |
| } |
| } |
|
|