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