use std::sync::Arc;
#[derive(Debug, Clone, Default)]
pub enum AutoHeaderValue {
None,
#[default]
Default,
Provided(Arc<String>),
}
impl AutoHeaderValue {
#[must_use]
pub fn as_str(&self, default: &'static str) -> Option<&str> {
match self {
Self::None => Some(""),
Self::Default => Some(default),
Self::Provided(v) => Some(v.as_str()),
}
.filter(|s| !s.is_empty())
}
#[must_use]
pub fn is_none(&self) -> bool {
matches!(self, Self::None)
}
#[must_use]
pub fn is_default(&self) -> bool {
matches!(self, Self::Default)
}
}
impl<S: AsRef<str>> From<S> for AutoHeaderValue {
fn from(value: S) -> Self {
if value.as_ref().is_empty() {
Self::None
} else {
Self::Provided(Arc::new(value.as_ref().to_owned()))
}
}
}