1use std::fmt;
6use std::str::FromStr;
7
8use error::Error;
9use self::HttpVersion::{Http09, Http10, Http11, Http20};
10
11#[derive(PartialEq, PartialOrd, Copy, Clone, Eq, Ord, Hash, Debug)]
13pub enum HttpVersion {
14 Http09,
16 Http10,
18 Http11,
20 Http20,
22}
23
24impl fmt::Display for HttpVersion {
25 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
26 fmt.write_str(self.as_ref())
27 }
28}
29
30impl AsRef<str> for HttpVersion {
31 fn as_ref(&self) -> &str {
32 match *self {
33 Http09 => "HTTP/0.9",
34 Http10 => "HTTP/1.0",
35 Http11 => "HTTP/1.1",
36 Http20 => "HTTP/2.0",
37 }
38 }
39}
40
41impl FromStr for HttpVersion {
42 type Err = Error;
43
44 fn from_str(s: &str) -> Result<Self, Self::Err> {
45 match s {
46 "HTTP/0.9" => Ok(Http09),
47 "HTTP/1.0" => Ok(Http10),
48 "HTTP/1.1" => Ok(Http11),
49 "HTTP/2.0" => Ok(Http20),
50 _ => Err(Error::Version),
51 }
52 }
53}