http_types/content/
encoding.rs1use crate::headers::HeaderValue;
2use std::fmt::{self, Display};
3
4#[non_exhaustive]
6#[derive(Debug, Clone, Copy, Eq, PartialEq)]
7pub enum Encoding {
8 Gzip,
10 Deflate,
12 Brotli,
14 Zstd,
16 Identity,
18}
19
20impl Encoding {
21 pub(crate) fn from_str(s: &str) -> Option<Encoding> {
23 let s = s.trim();
24
25 if s.is_empty() {
27 return None;
28 }
29
30 match s {
31 "gzip" => Some(Encoding::Gzip),
32 "deflate" => Some(Encoding::Deflate),
33 "br" => Some(Encoding::Brotli),
34 "zstd" => Some(Encoding::Zstd),
35 "identity" => Some(Encoding::Identity),
36 _ => None,
37 }
38 }
39}
40
41impl Display for Encoding {
42 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43 match self {
44 Encoding::Gzip => write!(f, "gzip"),
45 Encoding::Deflate => write!(f, "deflate"),
46 Encoding::Brotli => write!(f, "br"),
47 Encoding::Zstd => write!(f, "zstd"),
48 Encoding::Identity => write!(f, "identity"),
49 }
50 }
51}
52
53impl From<Encoding> for HeaderValue {
54 fn from(directive: Encoding) -> Self {
55 let s = directive.to_string();
56 unsafe { HeaderValue::from_bytes_unchecked(s.into_bytes()) }
57 }
58}