reqwest_eventsource/
error.rs1use core::fmt;
2use eventsource_stream::EventStreamError;
3use nom::error::Error as NomError;
4use reqwest::header::HeaderValue;
5use reqwest::Error as ReqwestError;
6use reqwest::Response;
7use reqwest::StatusCode;
8use std::string::FromUtf8Error;
9
10#[cfg(doc)]
11use reqwest::RequestBuilder;
12
13#[derive(Debug, Clone, Copy)]
16pub struct CannotCloneRequestError;
17
18impl fmt::Display for CannotCloneRequestError {
19 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20 f.write_str("expected a cloneable request")
21 }
22}
23
24impl std::error::Error for CannotCloneRequestError {}
25
26#[derive(Debug, Error)]
28pub enum Error {
29 #[error(transparent)]
31 Utf8(FromUtf8Error),
32 #[error(transparent)]
34 Parser(NomError<String>),
35 #[error(transparent)]
37 Transport(ReqwestError),
38 #[error("Invalid header value: {0:?}")]
40 InvalidContentType(HeaderValue, Response),
41 #[error("Invalid status code: {0}")]
43 InvalidStatusCode(StatusCode, Response),
44 #[error("Invalid `Last-Event-ID`: {0}")]
46 InvalidLastEventId(String),
47 #[error("Stream ended")]
49 StreamEnded,
50}
51
52impl From<EventStreamError<ReqwestError>> for Error {
53 fn from(err: EventStreamError<ReqwestError>) -> Self {
54 match err {
55 EventStreamError::Utf8(err) => Self::Utf8(err),
56 EventStreamError::Parser(err) => Self::Parser(err),
57 EventStreamError::Transport(err) => Self::Transport(err),
58 }
59 }
60}