use crate::http2::{Http2Error, misc::protocol_err};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Http2ErrorCode {
NoError,
ProtocolError,
InternalError,
FlowControlError,
SettingsTimeout,
StreamClosed,
FrameSizeError,
RefusedStream,
Cancel,
CompressionError,
ConnectError,
EnhanceYourCalm,
InadequateSecurity,
Http11Requires,
}
impl TryFrom<u32> for Http2ErrorCode {
type Error = crate::Error;
#[inline]
fn try_from(value: u32) -> Result<Self, Self::Error> {
Ok(match value {
0 => Http2ErrorCode::NoError,
1 => Http2ErrorCode::ProtocolError,
2 => Http2ErrorCode::InternalError,
3 => Http2ErrorCode::FlowControlError,
4 => Http2ErrorCode::SettingsTimeout,
5 => Http2ErrorCode::StreamClosed,
6 => Http2ErrorCode::FrameSizeError,
7 => Http2ErrorCode::RefusedStream,
8 => Http2ErrorCode::Cancel,
9 => Http2ErrorCode::CompressionError,
10 => Http2ErrorCode::ConnectError,
11 => Http2ErrorCode::EnhanceYourCalm,
12 => Http2ErrorCode::InadequateSecurity,
13 => Http2ErrorCode::Http11Requires,
_ => return Err(protocol_err(Http2Error::InvalidErrorCode)),
})
}
}
impl From<Http2ErrorCode> for u32 {
#[inline]
fn from(value: Http2ErrorCode) -> Self {
match value {
Http2ErrorCode::NoError => 0,
Http2ErrorCode::ProtocolError => 1,
Http2ErrorCode::InternalError => 2,
Http2ErrorCode::FlowControlError => 3,
Http2ErrorCode::SettingsTimeout => 4,
Http2ErrorCode::StreamClosed => 5,
Http2ErrorCode::FrameSizeError => 6,
Http2ErrorCode::RefusedStream => 7,
Http2ErrorCode::Cancel => 8,
Http2ErrorCode::CompressionError => 9,
Http2ErrorCode::ConnectError => 10,
Http2ErrorCode::EnhanceYourCalm => 11,
Http2ErrorCode::InadequateSecurity => 12,
Http2ErrorCode::Http11Requires => 13,
}
}
}