use headers_core::Error;
use http::HeaderValue;
use serde::{Deserialize, Serialize};
const INNER_HTML: HeaderValue = HeaderValue::from_static("innerHTML");
const OUTER_HTML: HeaderValue = HeaderValue::from_static("outerHTML");
const TEXT_CONTENT: HeaderValue = HeaderValue::from_static("textContent");
const BEFORE_BEGIN: HeaderValue = HeaderValue::from_static("beforebegin");
const AFTER_BEGIN: HeaderValue = HeaderValue::from_static("afterbegin");
const BEFORE_END: HeaderValue = HeaderValue::from_static("beforeend");
const AFTER_END: HeaderValue = HeaderValue::from_static("afterend");
const DELETE: HeaderValue = HeaderValue::from_static("delete");
const NONE: HeaderValue = HeaderValue::from_static("none");
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum SwapOption {
#[default]
#[serde(rename = "innerHTML")]
InnerHtml,
#[serde(rename = "outerHTML")]
OuterHtml,
#[serde(rename = "textContent")]
TextContent,
#[serde(rename = "beforebegin")]
BeforeBegin,
#[serde(rename = "afterbegin")]
AfterBegin,
#[serde(rename = "beforeend")]
BeforeEnd,
#[serde(rename = "afterend")]
AfterEnd,
#[serde(rename = "delete")]
Delete,
#[serde(rename = "none")]
None,
}
impl SwapOption {
pub(crate) fn to_header_value(self) -> HeaderValue {
match self {
Self::InnerHtml => INNER_HTML.clone(),
Self::OuterHtml => OUTER_HTML.clone(),
Self::TextContent => TEXT_CONTENT.clone(),
Self::BeforeBegin => BEFORE_BEGIN.clone(),
Self::AfterBegin => AFTER_BEGIN.clone(),
Self::BeforeEnd => BEFORE_END.clone(),
Self::AfterEnd => AFTER_END.clone(),
Self::Delete => DELETE.clone(),
Self::None => NONE.clone(),
}
}
pub(crate) fn from_header_value(header_value: &HeaderValue) -> Result<Self, Error> {
match header_value {
v if v == INNER_HTML => Ok(Self::InnerHtml),
v if v == OUTER_HTML => Ok(Self::OuterHtml),
v if v == TEXT_CONTENT => Ok(Self::TextContent),
v if v == BEFORE_BEGIN => Ok(Self::BeforeBegin),
v if v == AFTER_BEGIN => Ok(Self::AfterBegin),
v if v == BEFORE_END => Ok(Self::BeforeEnd),
v if v == AFTER_END => Ok(Self::AfterEnd),
v if v == DELETE => Ok(Self::Delete),
v if v == NONE => Ok(Self::None),
_ => Err(Error::invalid()),
}
}
}