use std::fmt;
use percent_encoding::{AsciiSet, CONTROLS};
#[cfg(feature = "serde")]
use serde::Serialize;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize))]
#[cfg_attr(feature = "serde", serde(transparent))]
#[repr(transparent)]
pub struct EscapeHtml<'a>(pub &'a str);
impl fmt::Display for EscapeHtml<'_> {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for c in self.0.chars() {
match c {
'<' => write!(f, "<")?,
'>' => write!(f, ">")?,
'&' => write!(f, "&")?,
'"' => write!(f, """)?,
'\'' => write!(f, "'")?,
_ => write!(f, "{c}")?,
}
}
Ok(())
}
}
pub const FRAGMENT_SAFE: &AsciiSet = &CONTROLS
.add(b' ')
.add(b'"')
.add(b'#')
.add(b'%')
.add(b'<')
.add(b'>')
.add(b'[')
.add(b'\\')
.add(b']')
.add(b'^')
.add(b'`')
.add(b'{')
.add(b'|')
.add(b'}');