use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Version {
Http10,
Http11,
Http2,
Http3,
}
impl Version {
pub fn parse(token: &str) -> Option<Version> {
match token {
"HTTP/1.0" => Some(Version::Http10),
"HTTP/1.1" => Some(Version::Http11),
_ => None,
}
}
pub fn as_str(self) -> &'static str {
match self {
Version::Http10 => "HTTP/1.0",
Version::Http11 => "HTTP/1.1",
Version::Http2 => "HTTP/2",
Version::Http3 => "HTTP/3",
}
}
pub fn default_keep_alive(self) -> bool {
matches!(self, Version::Http11 | Version::Http2 | Version::Http3)
}
}
impl fmt::Display for Version {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}