use crate::MalformedAction;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct CharsetDecodePolicy {
malformed_action: MalformedAction,
replacement: char,
}
impl CharsetDecodePolicy {
pub const DEFAULT_REPLACEMENT: char = '\u{fffd}';
#[must_use]
#[inline(always)]
pub const fn new(
malformed_action: MalformedAction,
replacement: char,
) -> Self {
Self {
malformed_action,
replacement,
}
}
#[must_use]
#[inline(always)]
pub const fn replace(replacement: char) -> Self {
Self::new(MalformedAction::Replace, replacement)
}
#[must_use]
#[inline(always)]
pub const fn ignore() -> Self {
Self::ignore_with_replacement(Self::DEFAULT_REPLACEMENT)
}
#[must_use]
#[inline(always)]
pub const fn ignore_with_replacement(replacement: char) -> Self {
Self::new(MalformedAction::Ignore, replacement)
}
#[must_use]
#[inline(always)]
pub const fn report() -> Self {
Self::new(MalformedAction::Report, Self::DEFAULT_REPLACEMENT)
}
#[must_use]
#[inline(always)]
pub const fn malformed_action(self) -> MalformedAction {
self.malformed_action
}
#[must_use]
#[inline(always)]
pub const fn replacement(self) -> char {
self.replacement
}
}
impl Default for CharsetDecodePolicy {
#[inline(always)]
fn default() -> Self {
Self::replace(Self::DEFAULT_REPLACEMENT)
}
}