async_http_range_reader/
error.rs1use std::sync::Arc;
2
3#[derive(Clone, Debug, thiserror::Error)]
5#[non_exhaustive]
6pub enum AsyncHttpRangeReaderError {
7 #[error("range requests are not supported")]
9 HttpRangeRequestUnsupported,
10
11 #[error(transparent)]
13 HttpError(#[from] Arc<reqwest_middleware::Error>),
14
15 #[error("an error occurred during transport: {0}")]
17 TransportError(#[source] Arc<reqwest_middleware::Error>),
18
19 #[error("io error occurred: {0}")]
21 IoError(#[source] Arc<std::io::Error>),
22
23 #[error("content-range header is missing from response")]
25 ContentRangeMissing,
26
27 #[error("content-length header is missing from response")]
29 ContentLengthMissing,
30
31 #[error(
35 "file of {} bytes exceeds the platform limit of {} bytes",
36 _0,
37 usize::MAX
38 )]
39 FileTooLarge(u64),
40
41 #[error("range cache lock poisoned")]
43 LockPoisoned,
44
45 #[error("invalid Content-Range header: {0}")]
47 ContentRangeParser(String),
48
49 #[error(
51 "request and response range mismatch, \
52 expected {expected_start}-{expected_end_inclusive}/{expected_complete_length}, \
53 got {actual_start}-{actual_end_inclusive}/{actual_complete_length}"
54 )]
55 RangeMismatch {
56 expected_start: u64,
57 expected_end_inclusive: u64,
58 expected_complete_length: usize,
59 actual_start: u64,
60 actual_end_inclusive: u64,
61 actual_complete_length: u64,
62 },
63
64 #[error("range response returned more than the expected {expected} bytes")]
66 ResponseTooLong { expected: u64 },
67
68 #[error("expected {expected} bytes from range response, got {actual}")]
70 ResponseTooShort { expected: u64, actual: u64 },
71
72 #[error("range download task stopped before completing the requested range")]
74 DownloadTaskStopped,
75}
76
77impl From<std::io::Error> for AsyncHttpRangeReaderError {
78 fn from(err: std::io::Error) -> Self {
79 AsyncHttpRangeReaderError::IoError(Arc::new(err))
80 }
81}
82
83impl From<reqwest_middleware::Error> for AsyncHttpRangeReaderError {
84 fn from(err: reqwest_middleware::Error) -> Self {
85 AsyncHttpRangeReaderError::TransportError(Arc::new(err))
86 }
87}
88
89impl From<reqwest::Error> for AsyncHttpRangeReaderError {
90 fn from(err: reqwest::Error) -> Self {
91 AsyncHttpRangeReaderError::TransportError(Arc::new(err.into()))
92 }
93}