/src/h2/src/codec/error.rs
Line | Count | Source (jump to first uncovered line) |
1 | | use crate::proto::Error; |
2 | | |
3 | | use std::{error, fmt, io}; |
4 | | |
5 | | /// Errors caused by sending a message |
6 | | #[derive(Debug)] |
7 | | pub enum SendError { |
8 | | Connection(Error), |
9 | | User(UserError), |
10 | | } |
11 | | |
12 | | /// Errors caused by users of the library |
13 | | #[derive(Debug)] |
14 | | pub enum UserError { |
15 | | /// The stream ID is no longer accepting frames. |
16 | | InactiveStreamId, |
17 | | |
18 | | /// The stream is not currently expecting a frame of this type. |
19 | | UnexpectedFrameType, |
20 | | |
21 | | /// The payload size is too big |
22 | | PayloadTooBig, |
23 | | |
24 | | /// The application attempted to initiate too many streams to remote. |
25 | | Rejected, |
26 | | |
27 | | /// The released capacity is larger than claimed capacity. |
28 | | ReleaseCapacityTooBig, |
29 | | |
30 | | /// The stream ID space is overflowed. |
31 | | /// |
32 | | /// A new connection is needed. |
33 | | OverflowedStreamId, |
34 | | |
35 | | /// Illegal headers, such as connection-specific headers. |
36 | | MalformedHeaders, |
37 | | |
38 | | /// Request submitted with relative URI. |
39 | | MissingUriSchemeAndAuthority, |
40 | | |
41 | | /// Calls `SendResponse::poll_reset` after having called `send_response`. |
42 | | PollResetAfterSendResponse, |
43 | | |
44 | | /// Calls `PingPong::send_ping` before receiving a pong. |
45 | | SendPingWhilePending, |
46 | | |
47 | | /// Tries to update local SETTINGS while ACK has not been received. |
48 | | SendSettingsWhilePending, |
49 | | |
50 | | /// Tries to send push promise to peer who has disabled server push |
51 | | PeerDisabledServerPush, |
52 | | } |
53 | | |
54 | | // ===== impl SendError ===== |
55 | | |
56 | | impl error::Error for SendError {} |
57 | | |
58 | | impl fmt::Display for SendError { |
59 | 0 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { |
60 | 0 | match *self { |
61 | 0 | Self::Connection(ref e) => e.fmt(fmt), |
62 | 0 | Self::User(ref e) => e.fmt(fmt), |
63 | | } |
64 | 0 | } |
65 | | } |
66 | | |
67 | | impl From<io::Error> for SendError { |
68 | 0 | fn from(src: io::Error) -> Self { |
69 | 0 | Self::Connection(src.into()) |
70 | 0 | } |
71 | | } |
72 | | |
73 | | impl From<UserError> for SendError { |
74 | 97 | fn from(src: UserError) -> Self { |
75 | 97 | SendError::User(src) |
76 | 97 | } |
77 | | } |
78 | | |
79 | | // ===== impl UserError ===== |
80 | | |
81 | | impl error::Error for UserError {} |
82 | | |
83 | | impl fmt::Display for UserError { |
84 | 0 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { |
85 | | use self::UserError::*; |
86 | | |
87 | 0 | fmt.write_str(match *self { |
88 | 0 | InactiveStreamId => "inactive stream", |
89 | 0 | UnexpectedFrameType => "unexpected frame type", |
90 | 0 | PayloadTooBig => "payload too big", |
91 | 0 | Rejected => "rejected", |
92 | 0 | ReleaseCapacityTooBig => "release capacity too big", |
93 | 0 | OverflowedStreamId => "stream ID overflowed", |
94 | 0 | MalformedHeaders => "malformed headers", |
95 | 0 | MissingUriSchemeAndAuthority => "request URI missing scheme and authority", |
96 | 0 | PollResetAfterSendResponse => "poll_reset after send_response is illegal", |
97 | 0 | SendPingWhilePending => "send_ping before received previous pong", |
98 | 0 | SendSettingsWhilePending => "sending SETTINGS before received previous ACK", |
99 | 0 | PeerDisabledServerPush => "sending PUSH_PROMISE to peer who disabled server push", |
100 | | }) |
101 | 0 | } |
102 | | } |