|  | //! HTTP version | 
|  | //! | 
|  | //! This module contains a definition of the `Version` type. The `Version` | 
|  | //! type is intended to be accessed through the root of the crate | 
|  | //! (`http::Version`) rather than this module. | 
|  | //! | 
|  | //! The `Version` type contains constants that represent the various versions | 
|  | //! of the HTTP protocol. | 
|  | //! | 
|  | //! # Examples | 
|  | //! | 
|  | //! ``` | 
|  | //! use http::Version; | 
|  | //! | 
|  | //! let http11 = Version::HTTP_11; | 
|  | //! let http2 = Version::HTTP_2; | 
|  | //! assert!(http11 != http2); | 
|  | //! | 
|  | //! println!("{:?}", http2); | 
|  | //! ``` | 
|  |  | 
|  | use std::fmt; | 
|  |  | 
|  | /// Represents a version of the HTTP spec. | 
|  | #[derive(PartialEq, PartialOrd, Copy, Clone, Eq, Ord, Hash)] | 
|  | pub struct Version(Http); | 
|  |  | 
|  | impl Version { | 
|  | /// `HTTP/0.9` | 
|  | pub const HTTP_09: Version = Version(Http::Http09); | 
|  |  | 
|  | /// `HTTP/1.0` | 
|  | pub const HTTP_10: Version = Version(Http::Http10); | 
|  |  | 
|  | /// `HTTP/1.1` | 
|  | pub const HTTP_11: Version = Version(Http::Http11); | 
|  |  | 
|  | /// `HTTP/2.0` | 
|  | pub const HTTP_2: Version = Version(Http::H2); | 
|  |  | 
|  | /// `HTTP/3.0` | 
|  | pub const HTTP_3: Version = Version(Http::H3); | 
|  | } | 
|  |  | 
|  | #[derive(PartialEq, PartialOrd, Copy, Clone, Eq, Ord, Hash)] | 
|  | enum Http { | 
|  | Http09, | 
|  | Http10, | 
|  | Http11, | 
|  | H2, | 
|  | H3, | 
|  | __NonExhaustive, | 
|  | } | 
|  |  | 
|  | impl Default for Version { | 
|  | #[inline] | 
|  | fn default() -> Version { | 
|  | Version::HTTP_11 | 
|  | } | 
|  | } | 
|  |  | 
|  | impl fmt::Debug for Version { | 
|  | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | 
|  | use self::Http::*; | 
|  |  | 
|  | f.write_str(match self.0 { | 
|  | Http09 => "HTTP/0.9", | 
|  | Http10 => "HTTP/1.0", | 
|  | Http11 => "HTTP/1.1", | 
|  | H2 => "HTTP/2.0", | 
|  | H3 => "HTTP/3.0", | 
|  | __NonExhaustive => unreachable!(), | 
|  | }) | 
|  | } | 
|  | } |