use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UnicodeVersion {
Unicode9,
Unicode10,
Unicode11,
Unicode12,
Unicode13,
Unicode14,
Unicode15,
Unicode15_1,
Unicode16,
#[default]
Auto,
}
impl UnicodeVersion {
pub fn version_string(&self) -> &'static str {
match self {
UnicodeVersion::Unicode9 => "9.0",
UnicodeVersion::Unicode10 => "10.0",
UnicodeVersion::Unicode11 => "11.0",
UnicodeVersion::Unicode12 => "12.0",
UnicodeVersion::Unicode13 => "13.0",
UnicodeVersion::Unicode14 => "14.0",
UnicodeVersion::Unicode15 => "15.0",
UnicodeVersion::Unicode15_1 => "15.1",
UnicodeVersion::Unicode16 => "16.0",
UnicodeVersion::Auto => "auto",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AmbiguousWidth {
#[default]
Narrow,
Wide,
}
impl AmbiguousWidth {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum NormalizationForm {
#[serde(rename = "none")]
None,
#[default]
NFC,
NFD,
NFKC,
NFKD,
}
impl NormalizationForm {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unicode_version_serde_roundtrip() {
let versions = [
UnicodeVersion::Unicode9,
UnicodeVersion::Unicode10,
UnicodeVersion::Unicode11,
UnicodeVersion::Unicode12,
UnicodeVersion::Unicode13,
UnicodeVersion::Unicode14,
UnicodeVersion::Unicode15,
UnicodeVersion::Unicode15_1,
UnicodeVersion::Unicode16,
UnicodeVersion::Auto,
];
for v in &versions {
let yaml = serde_yaml_ng::to_string(v).unwrap();
let back: UnicodeVersion = serde_yaml_ng::from_str(&yaml).unwrap();
assert_eq!(*v, back, "roundtrip failed for {:?}", v);
}
}
#[test]
fn ambiguous_width_serde_roundtrip() {
for w in &[AmbiguousWidth::Narrow, AmbiguousWidth::Wide] {
let yaml = serde_yaml_ng::to_string(w).unwrap();
let back: AmbiguousWidth = serde_yaml_ng::from_str(&yaml).unwrap();
assert_eq!(*w, back);
}
}
#[test]
fn normalization_form_serde_roundtrip() {
let forms = [
NormalizationForm::None,
NormalizationForm::NFC,
NormalizationForm::NFD,
NormalizationForm::NFKC,
NormalizationForm::NFKD,
];
for f in &forms {
let yaml = serde_yaml_ng::to_string(f).unwrap();
let back: NormalizationForm = serde_yaml_ng::from_str(&yaml).unwrap();
assert_eq!(*f, back, "roundtrip failed for {:?}", f);
}
}
#[test]
fn unicode_version_default_is_auto() {
assert_eq!(UnicodeVersion::default(), UnicodeVersion::Auto);
}
#[test]
fn ambiguous_width_default_is_narrow() {
assert_eq!(AmbiguousWidth::default(), AmbiguousWidth::Narrow);
}
#[test]
fn normalization_form_default_is_nfc() {
assert_eq!(NormalizationForm::default(), NormalizationForm::NFC);
}
}