Skip to main content

async_http_range_reader/
error.rs

1use std::sync::Arc;
2
3/// Error type used for [`crate::AsyncHttpRangeReader`]
4#[derive(Clone, Debug, thiserror::Error)]
5pub enum AsyncHttpRangeReaderError {
6    /// The server does not support range requests
7    #[error("range requests are not supported")]
8    HttpRangeRequestUnsupported,
9
10    /// Other HTTP error
11    #[error(transparent)]
12    HttpError(#[from] Arc<reqwest_middleware::Error>),
13
14    /// An error occurred during transport
15    #[error("an error occurred during transport: {0}")]
16    TransportError(#[source] Arc<reqwest_middleware::Error>),
17
18    /// An IO error occurred
19    #[error("io error occurred: {0}")]
20    IoError(#[source] Arc<std::io::Error>),
21
22    /// Content-Range header is missing from response
23    #[error("content-range header is missing from response")]
24    ContentRangeMissing,
25
26    /// Content-Length header is missing from response
27    #[error("content-length header is missing from response")]
28    ContentLengthMissing,
29
30    /// Memory mapping the file failed
31    #[error("memory mapping the file failed")]
32    MemoryMapError(#[source] Arc<std::io::Error>),
33
34    /// Error from `http-content-range`
35    #[error("Invalid Content-Range header: {0}")]
36    ContentRangeParser(String),
37}
38
39impl From<std::io::Error> for AsyncHttpRangeReaderError {
40    fn from(err: std::io::Error) -> Self {
41        AsyncHttpRangeReaderError::IoError(Arc::new(err))
42    }
43}
44
45impl From<reqwest_middleware::Error> for AsyncHttpRangeReaderError {
46    fn from(err: reqwest_middleware::Error) -> Self {
47        AsyncHttpRangeReaderError::TransportError(Arc::new(err))
48    }
49}
50
51impl From<reqwest::Error> for AsyncHttpRangeReaderError {
52    fn from(err: reqwest::Error) -> Self {
53        AsyncHttpRangeReaderError::TransportError(Arc::new(err.into()))
54    }
55}