headers_ext/common/
sec_websocket_version.rs1#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
3pub struct SecWebsocketVersion(u8);
4
5impl SecWebsocketVersion {
6 pub const V13: SecWebsocketVersion = SecWebsocketVersion(13);
8}
9
10impl ::Header for SecWebsocketVersion {
11 const NAME: &'static ::HeaderName = &::http::header::SEC_WEBSOCKET_VERSION;
12
13 fn decode<'i, I: Iterator<Item = &'i ::HeaderValue>>(values: &mut I) -> Result<Self, ::Error> {
14 values
15 .next()
16 .and_then(|value| {
17 if value == "13" {
18 Some(SecWebsocketVersion::V13)
19 } else {
20 None
21 }
22 })
23 .ok_or_else(::Error::invalid)
24 }
25
26 fn encode<E: Extend<::HeaderValue>>(&self, values: &mut E) {
27 debug_assert_eq!(self.0, 13);
28
29 values.extend(::std::iter::once(::HeaderValue::from_static("13")));
30 }
31}
32
33#[cfg(test)]
34mod tests {
35 use super::SecWebsocketVersion;
36 use super::super::{test_decode, test_encode};
37
38 #[test]
39 fn decode_v13() {
40 assert_eq!(
41 test_decode::<SecWebsocketVersion>(&["13"]),
42 Some(SecWebsocketVersion::V13),
43 );
44 }
45
46 #[test]
47 fn decode_fail() {
48 assert_eq!(
49 test_decode::<SecWebsocketVersion>(&["1"]),
50 None,
51 );
52 }
53
54 #[test]
55 fn encode_v13() {
56 let headers = test_encode(SecWebsocketVersion::V13);
57 assert_eq!(headers["sec-websocket-version"], "13");
58 }
59}