#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum NodeKind {
Ruby,
Bouten,
TateChuYoko,
Gaiji,
Indent,
AlignEnd,
Warichu,
Keigakomi,
PageBreak,
SectionBreak,
AozoraHeading,
HeadingHint,
Sashie,
Kaeriten,
Annotation,
DoubleRuby,
Container,
ContainerOpen,
ContainerClose,
}
impl NodeKind {
pub const ALL: [Self; 19] = [
Self::Ruby,
Self::Bouten,
Self::TateChuYoko,
Self::Gaiji,
Self::Indent,
Self::AlignEnd,
Self::Warichu,
Self::Keigakomi,
Self::PageBreak,
Self::SectionBreak,
Self::AozoraHeading,
Self::HeadingHint,
Self::Sashie,
Self::Kaeriten,
Self::Annotation,
Self::DoubleRuby,
Self::Container,
Self::ContainerOpen,
Self::ContainerClose,
];
#[must_use]
pub const fn as_camel_case(self) -> &'static str {
match self {
Self::Ruby => "ruby",
Self::Bouten => "bouten",
Self::TateChuYoko => "tateChuYoko",
Self::Gaiji => "gaiji",
Self::Indent => "indent",
Self::AlignEnd => "alignEnd",
Self::Warichu => "warichu",
Self::Keigakomi => "keigakomi",
Self::PageBreak => "pageBreak",
Self::SectionBreak => "sectionBreak",
Self::AozoraHeading => "heading",
Self::HeadingHint => "headingHint",
Self::Sashie => "sashie",
Self::Kaeriten => "kaeriten",
Self::Annotation => "annotation",
Self::DoubleRuby => "doubleRuby",
Self::Container => "container",
Self::ContainerOpen => "containerOpen",
Self::ContainerClose => "containerClose",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn camel_case_strings_are_stable() {
assert_eq!(NodeKind::Ruby.as_camel_case(), "ruby");
assert_eq!(NodeKind::Bouten.as_camel_case(), "bouten");
assert_eq!(NodeKind::TateChuYoko.as_camel_case(), "tateChuYoko");
assert_eq!(NodeKind::Gaiji.as_camel_case(), "gaiji");
assert_eq!(NodeKind::Indent.as_camel_case(), "indent");
assert_eq!(NodeKind::AlignEnd.as_camel_case(), "alignEnd");
assert_eq!(NodeKind::Warichu.as_camel_case(), "warichu");
assert_eq!(NodeKind::Keigakomi.as_camel_case(), "keigakomi");
assert_eq!(NodeKind::PageBreak.as_camel_case(), "pageBreak");
assert_eq!(NodeKind::SectionBreak.as_camel_case(), "sectionBreak");
assert_eq!(NodeKind::AozoraHeading.as_camel_case(), "heading");
assert_eq!(NodeKind::HeadingHint.as_camel_case(), "headingHint");
assert_eq!(NodeKind::Sashie.as_camel_case(), "sashie");
assert_eq!(NodeKind::Kaeriten.as_camel_case(), "kaeriten");
assert_eq!(NodeKind::Annotation.as_camel_case(), "annotation");
assert_eq!(NodeKind::DoubleRuby.as_camel_case(), "doubleRuby");
assert_eq!(NodeKind::Container.as_camel_case(), "container");
assert_eq!(NodeKind::ContainerOpen.as_camel_case(), "containerOpen");
assert_eq!(NodeKind::ContainerClose.as_camel_case(), "containerClose");
}
}