nomhttp/
http_version.rs

1#[derive(Debug, Clone)]
2pub enum HttpVersion {
3    Http09,
4    Http10,
5    Http11,
6    Http2,
7    Http3,
8}
9
10impl Default for HttpVersion {
11    fn default() -> Self {
12        HttpVersion::Http11
13    }
14}
15#[derive(Debug)]
16pub struct HttpVersionParsingError;
17
18impl std::fmt::Display for HttpVersionParsingError {
19    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
20        write!(f, "Error parsing http version from HTTP message")
21    }
22}
23
24impl std::str::FromStr for HttpVersion {
25    type Err = HttpVersionParsingError;
26
27    fn from_str(s: &str) -> Result<Self, Self::Err> {
28        match s {
29            "HTTP/0.9" => Ok(HttpVersion::Http09),
30            "HTTP/1.0" => Ok(HttpVersion::Http10),
31            "HTTP/1.1" => Ok(HttpVersion::Http11),
32            "HTTP/2.0" => Ok(HttpVersion::Http2),
33            "HTTP/3.0" => Ok(HttpVersion::Http3),
34            _ => Err(HttpVersionParsingError),
35        }
36    }
37}
38
39impl std::fmt::Display for HttpVersion {
40    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
41        let s = match self {
42            HttpVersion::Http09 => "HTTP/0.9",
43            HttpVersion::Http10 => "HTTP/1.0",
44            HttpVersion::Http11 => "HTTP/1.1",
45            HttpVersion::Http2 => "HTTP/2",
46            HttpVersion::Http3 => "HTTP/3",
47        };
48        write!(f, "{}", s)
49    }
50}