use serde::{Deserialize, Serialize};
use std::fmt;
pub use reqwest::{
header::{self, HeaderMap, HeaderName, HeaderValue},
IntoUrl, Method, StatusCode, Url,
};
#[derive(Default, Debug, Clone, Copy)]
pub enum ContentEncoding {
#[default]
IDENTITY,
GZIP,
COMPRESS,
DEFLATE,
BR,
}
impl fmt::Display for ContentEncoding {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Self::IDENTITY => "IDENTITY",
Self::GZIP => "GZIP",
Self::COMPRESS => "COMPRESS",
Self::DEFLATE => "DEFLATE",
Self::BR => "br",
}
)
}
}
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
pub enum ContentDisposition {
#[default]
INLINE,
ATTACHMENT(Option<String>),
}
impl fmt::Display for ContentDisposition {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Self::INLINE => "inline".to_owned(),
Self::ATTACHMENT(Some(filename)) => format!("attachment;filename=\"{}\"", filename),
Self::ATTACHMENT(None) => "attachment".to_owned(),
}
)
}
}
#[derive(Debug, Default, Clone, Copy)]
pub enum CacheControl {
NoCache,
NoStore,
#[default]
PUBLIC,
PRIVATE,
MaxAge(u32),
}
impl fmt::Display for CacheControl {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"{}",
match self {
CacheControl::NoCache => "no-cache".into(),
CacheControl::NoStore => "no-store".into(),
CacheControl::PUBLIC => "public".into(),
CacheControl::PRIVATE => "private".into(),
CacheControl::MaxAge(seconds) => format!("max-age=<{}>", seconds),
}
)
}
}
#[cfg(test)]
mod tests {
#[test]
fn content_disposition_1() {
let filename: Option<String> = Some("测试.txt".to_string());
let value = crate::oss::http::ContentDisposition::ATTACHMENT(filename);
assert!(value.to_string().contains("测试"))
}
}