headers/common/
sec_websocket_version.rs
1#[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 fn name() -> &'static ::HeaderName {
12 &::http::header::SEC_WEBSOCKET_VERSION
13 }
14
15 fn decode<'i, I: Iterator<Item = &'i ::HeaderValue>>(values: &mut I) -> Result<Self, ::Error> {
16 values
17 .next()
18 .and_then(|value| {
19 if value == "13" {
20 Some(SecWebsocketVersion::V13)
21 } else {
22 None
23 }
24 })
25 .ok_or_else(::Error::invalid)
26 }
27
28 fn encode<E: Extend<::HeaderValue>>(&self, values: &mut E) {
29 debug_assert_eq!(self.0, 13);
30
31 values.extend(::std::iter::once(::HeaderValue::from_static("13")));
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::super::{test_decode, test_encode};
38 use super::SecWebsocketVersion;
39
40 #[test]
41 fn decode_v13() {
42 assert_eq!(
43 test_decode::<SecWebsocketVersion>(&["13"]),
44 Some(SecWebsocketVersion::V13),
45 );
46 }
47
48 #[test]
49 fn decode_fail() {
50 assert_eq!(test_decode::<SecWebsocketVersion>(&["1"]), None,);
51 }
52
53 #[test]
54 fn encode_v13() {
55 let headers = test_encode(SecWebsocketVersion::V13);
56 assert_eq!(headers["sec-websocket-version"], "13");
57 }
58}