1#![forbid(unsafe_code, future_incompatible)]
2#![forbid(rust_2018_idioms, rust_2018_compatibility)]
3#![deny(missing_debug_implementations, bad_style)]
4#![deny(missing_docs)]
5#![cfg_attr(test, deny(warnings))]
6
7mod error;
22
23use derive_is_enum_variant::is_enum_variant;
24use http::header::{ACCEPT_ENCODING, HeaderMap};
25use failure::{ResultExt};
26pub use crate::error::{Error, Result, ErrorKind};
27
28#[derive(Debug, Clone, is_enum_variant)]
30pub enum Encoding {
31 Gzip,
33 Deflate,
35 Brotli,
37 None,
39}
40
41pub fn parse(headers: &HeaderMap) -> Result<Encoding> {
43 let header = match headers.get(ACCEPT_ENCODING) {
44 Some(header) => header,
45 None => return Ok(Encoding::None),
46 };
47
48 let string = header.to_str().context(ErrorKind::InvalidEncoding)?;
49
50 if string.contains("br") {
51 Ok(Encoding::Brotli)
52 } else if string.contains("deflate") {
53 Ok(Encoding::Deflate)
54 } else if string.contains("gzip") {
55 Ok(Encoding::Gzip)
56 } else {
57 Err(ErrorKind::UnknownEncoding)?
58 }
59}