nomhttp 0.1.0

Parser HTTP for the rustyproxy project based on nom
Documentation
#[derive(Debug, Clone)]
pub enum HttpVersion {
    Http09,
    Http10,
    Http11,
    Http2,
    Http3,
}

impl Default for HttpVersion {
    fn default() -> Self {
        HttpVersion::Http11
    }
}
#[derive(Debug)]
pub struct HttpVersionParsingError;

impl std::fmt::Display for HttpVersionParsingError {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "Error parsing http version from HTTP message")
    }
}

impl std::str::FromStr for HttpVersion {
    type Err = HttpVersionParsingError;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "HTTP/0.9" => Ok(HttpVersion::Http09),
            "HTTP/1.0" => Ok(HttpVersion::Http10),
            "HTTP/1.1" => Ok(HttpVersion::Http11),
            "HTTP/2.0" => Ok(HttpVersion::Http2),
            "HTTP/3.0" => Ok(HttpVersion::Http3),
            _ => Err(HttpVersionParsingError),
        }
    }
}

impl std::fmt::Display for HttpVersion {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        let s = match self {
            HttpVersion::Http09 => "HTTP/0.9",
            HttpVersion::Http10 => "HTTP/1.0",
            HttpVersion::Http11 => "HTTP/1.1",
            HttpVersion::Http2 => "HTTP/2",
            HttpVersion::Http3 => "HTTP/3",
        };
        write!(f, "{}", s)
    }
}