use crate::enums::http_error::HttpError;
use core::fmt;
use std::str::FromStr;
use super::http_error::HttpErrorKind;
const CHUNKED: &str = "chunked";
const COMPRESS: &str = "compressed";
const DEFLATE: &str = "deflate";
const GZIP: &str = "gzip";
#[derive(Clone, PartialEq, Copy)]
pub enum TransferEncoding {
Chunked,
Compress,
Deflate,
Gzip,
}
impl FromStr for TransferEncoding {
type Err = HttpError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let encoding = match s.trim() {
CHUNKED => Self::Chunked,
COMPRESS => Self::Compress,
DEFLATE => Self::Deflate,
GZIP => Self::Gzip,
_ => return Err(HttpErrorKind::Parse.into()),
};
Ok(encoding)
}
}
impl fmt::Display for TransferEncoding {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let encoding = match self {
Self::Chunked => CHUNKED,
Self::Compress => COMPRESS,
Self::Deflate => DEFLATE,
Self::Gzip => GZIP,
};
write!(f, "{}", encoding)
}
}
impl fmt::Debug for TransferEncoding {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}