#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Bom {
#[default]
Sniff,
Remove,
Ignore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Malformed {
Replace(char),
Omit,
Fail,
}
impl Default for Malformed {
fn default() -> Self {
Malformed::Replace(char::REPLACEMENT_CHARACTER)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Unmappable {
#[default]
Fail,
Omit,
Replace(char),
Html,
JsonEscape,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct DecodeOptions {
pub(crate) bom: Bom,
pub(crate) malformed: Malformed,
}
impl DecodeOptions {
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn bom(mut self, bom: Bom) -> Self {
self.bom = bom;
self
}
#[must_use]
pub fn malformed(mut self, malformed: Malformed) -> Self {
self.malformed = malformed;
self
}
pub fn malformed_policy(&self) -> Malformed {
self.malformed
}
pub fn bom_handling(&self) -> Bom {
self.bom
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct EncodeOptions {
pub(crate) unmappable: Unmappable,
pub(crate) transliterate: bool,
}
impl EncodeOptions {
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn unmappable(mut self, unmappable: Unmappable) -> Self {
self.unmappable = unmappable;
self
}
#[cfg(feature = "translit")]
#[must_use]
pub fn transliterate(mut self, transliterate: bool) -> Self {
self.transliterate = transliterate;
self
}
pub fn unmappable_policy(&self) -> Unmappable {
self.unmappable
}
pub fn transliterates(&self) -> bool {
self.transliterate
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Tally {
pub errors: u64,
}
impl Tally {
pub fn is_lossless(self) -> bool {
self.errors == 0
}
}