stream_transfer_limit/
error.rs1use thiserror::Error;
2
3#[derive(Debug, Error)]
5pub enum TransferLimitError<E, C = usize> {
6 #[error("transfer size limit exceeded: observed {actual} bytes with a {limit} byte limit")]
8 LimitExceeded {
9 limit: C,
11 actual: C,
13 },
14 #[error(
16 "transfer counter overflowed after {bytes_seen} bytes while adding a {chunk_len} byte chunk"
17 )]
18 CounterOverflow {
19 bytes_seen: C,
21 chunk_len: usize,
23 },
24 #[error("inner stream returned an error")]
26 Inner {
27 #[source]
29 source: E,
30 },
31}
32
33impl<E, C> TransferLimitError<E, C> {
34 pub fn is_limit_exceeded(&self) -> bool {
36 matches!(self, Self::LimitExceeded { .. })
37 }
38
39 pub fn is_counter_overflow(&self) -> bool {
42 matches!(self, Self::CounterOverflow { .. })
43 }
44
45 pub fn into_inner(self) -> Option<E> {
47 match self {
48 Self::Inner { source } => Some(source),
49 Self::LimitExceeded { .. } | Self::CounterOverflow { .. } => None,
50 }
51 }
52
53 pub(crate) fn inner(source: E) -> Self {
54 Self::Inner { source }
55 }
56}
57
58impl<E, C> From<E> for TransferLimitError<E, C> {
59 fn from(source: E) -> Self {
60 Self::inner(source)
61 }
62}