#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Tags {
LanguageTag,
TagSpace,
TagExclamationMark,
TagQuotationMark,
TagNumberSign,
TagDollarSign,
TagPercentSign,
TagAmpersand,
TagApostrophe,
TagLeftParenthesis,
TagRightParenthesis,
TagAsterisk,
TagPlusSign,
TagComma,
TagHyphenDashMinus,
TagFullStop,
TagSolidus,
TagDigitZero,
TagDigitOne,
TagDigitTwo,
TagDigitThree,
TagDigitFour,
TagDigitFive,
TagDigitSix,
TagDigitSeven,
TagDigitEight,
TagDigitNine,
TagColon,
TagSemicolon,
TagLessDashThanSign,
TagEqualsSign,
TagGreaterDashThanSign,
TagQuestionMark,
TagCommercialAt,
TagLatinCapitalLetterA,
TagLatinCapitalLetterB,
TagLatinCapitalLetterC,
TagLatinCapitalLetterD,
TagLatinCapitalLetterE,
TagLatinCapitalLetterF,
TagLatinCapitalLetterG,
TagLatinCapitalLetterH,
TagLatinCapitalLetterI,
TagLatinCapitalLetterJ,
TagLatinCapitalLetterK,
TagLatinCapitalLetterL,
TagLatinCapitalLetterM,
TagLatinCapitalLetterN,
TagLatinCapitalLetterO,
TagLatinCapitalLetterP,
TagLatinCapitalLetterQ,
TagLatinCapitalLetterR,
TagLatinCapitalLetterS,
TagLatinCapitalLetterT,
TagLatinCapitalLetterU,
TagLatinCapitalLetterV,
TagLatinCapitalLetterW,
TagLatinCapitalLetterX,
TagLatinCapitalLetterY,
TagLatinCapitalLetterZ,
TagLeftSquareBracket,
TagReverseSolidus,
TagRightSquareBracket,
TagCircumflexAccent,
TagLowLine,
TagGraveAccent,
TagLatinSmallLetterA,
TagLatinSmallLetterB,
TagLatinSmallLetterC,
TagLatinSmallLetterD,
TagLatinSmallLetterE,
TagLatinSmallLetterF,
TagLatinSmallLetterG,
TagLatinSmallLetterH,
TagLatinSmallLetterI,
TagLatinSmallLetterJ,
TagLatinSmallLetterK,
TagLatinSmallLetterL,
TagLatinSmallLetterM,
TagLatinSmallLetterN,
TagLatinSmallLetterO,
TagLatinSmallLetterP,
TagLatinSmallLetterQ,
TagLatinSmallLetterR,
TagLatinSmallLetterS,
TagLatinSmallLetterT,
TagLatinSmallLetterU,
TagLatinSmallLetterV,
TagLatinSmallLetterW,
TagLatinSmallLetterX,
TagLatinSmallLetterY,
TagLatinSmallLetterZ,
TagLeftCurlyBracket,
TagVerticalLine,
TagRightCurlyBracket,
TagTilde,
}
impl Into<char> for Tags {
fn into(self) -> char {
match self {
Tags::LanguageTag => '',
Tags::TagSpace => '',
Tags::TagExclamationMark => '',
Tags::TagQuotationMark => '',
Tags::TagNumberSign => '',
Tags::TagDollarSign => '',
Tags::TagPercentSign => '',
Tags::TagAmpersand => '',
Tags::TagApostrophe => '',
Tags::TagLeftParenthesis => '',
Tags::TagRightParenthesis => '',
Tags::TagAsterisk => '',
Tags::TagPlusSign => '',
Tags::TagComma => '',
Tags::TagHyphenDashMinus => '',
Tags::TagFullStop => '',
Tags::TagSolidus => '',
Tags::TagDigitZero => '',
Tags::TagDigitOne => '',
Tags::TagDigitTwo => '',
Tags::TagDigitThree => '',
Tags::TagDigitFour => '',
Tags::TagDigitFive => '',
Tags::TagDigitSix => '',
Tags::TagDigitSeven => '',
Tags::TagDigitEight => '',
Tags::TagDigitNine => '',
Tags::TagColon => '',
Tags::TagSemicolon => '',
Tags::TagLessDashThanSign => '',
Tags::TagEqualsSign => '',
Tags::TagGreaterDashThanSign => '',
Tags::TagQuestionMark => '',
Tags::TagCommercialAt => '',
Tags::TagLatinCapitalLetterA => '',
Tags::TagLatinCapitalLetterB => '',
Tags::TagLatinCapitalLetterC => '',
Tags::TagLatinCapitalLetterD => '',
Tags::TagLatinCapitalLetterE => '',
Tags::TagLatinCapitalLetterF => '',
Tags::TagLatinCapitalLetterG => '',
Tags::TagLatinCapitalLetterH => '',
Tags::TagLatinCapitalLetterI => '',
Tags::TagLatinCapitalLetterJ => '',
Tags::TagLatinCapitalLetterK => '',
Tags::TagLatinCapitalLetterL => '',
Tags::TagLatinCapitalLetterM => '',
Tags::TagLatinCapitalLetterN => '',
Tags::TagLatinCapitalLetterO => '',
Tags::TagLatinCapitalLetterP => '',
Tags::TagLatinCapitalLetterQ => '',
Tags::TagLatinCapitalLetterR => '',
Tags::TagLatinCapitalLetterS => '',
Tags::TagLatinCapitalLetterT => '',
Tags::TagLatinCapitalLetterU => '',
Tags::TagLatinCapitalLetterV => '',
Tags::TagLatinCapitalLetterW => '',
Tags::TagLatinCapitalLetterX => '',
Tags::TagLatinCapitalLetterY => '',
Tags::TagLatinCapitalLetterZ => '',
Tags::TagLeftSquareBracket => '',
Tags::TagReverseSolidus => '',
Tags::TagRightSquareBracket => '',
Tags::TagCircumflexAccent => '',
Tags::TagLowLine => '',
Tags::TagGraveAccent => '',
Tags::TagLatinSmallLetterA => '',
Tags::TagLatinSmallLetterB => '',
Tags::TagLatinSmallLetterC => '',
Tags::TagLatinSmallLetterD => '',
Tags::TagLatinSmallLetterE => '',
Tags::TagLatinSmallLetterF => '',
Tags::TagLatinSmallLetterG => '',
Tags::TagLatinSmallLetterH => '',
Tags::TagLatinSmallLetterI => '',
Tags::TagLatinSmallLetterJ => '',
Tags::TagLatinSmallLetterK => '',
Tags::TagLatinSmallLetterL => '',
Tags::TagLatinSmallLetterM => '',
Tags::TagLatinSmallLetterN => '',
Tags::TagLatinSmallLetterO => '',
Tags::TagLatinSmallLetterP => '',
Tags::TagLatinSmallLetterQ => '',
Tags::TagLatinSmallLetterR => '',
Tags::TagLatinSmallLetterS => '',
Tags::TagLatinSmallLetterT => '',
Tags::TagLatinSmallLetterU => '',
Tags::TagLatinSmallLetterV => '',
Tags::TagLatinSmallLetterW => '',
Tags::TagLatinSmallLetterX => '',
Tags::TagLatinSmallLetterY => '',
Tags::TagLatinSmallLetterZ => '',
Tags::TagLeftCurlyBracket => '',
Tags::TagVerticalLine => '',
Tags::TagRightCurlyBracket => '',
Tags::TagTilde => '',
}
}
}
impl std::convert::TryFrom<char> for Tags {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'' => Ok(Tags::LanguageTag),
'' => Ok(Tags::TagSpace),
'' => Ok(Tags::TagExclamationMark),
'' => Ok(Tags::TagQuotationMark),
'' => Ok(Tags::TagNumberSign),
'' => Ok(Tags::TagDollarSign),
'' => Ok(Tags::TagPercentSign),
'' => Ok(Tags::TagAmpersand),
'' => Ok(Tags::TagApostrophe),
'' => Ok(Tags::TagLeftParenthesis),
'' => Ok(Tags::TagRightParenthesis),
'' => Ok(Tags::TagAsterisk),
'' => Ok(Tags::TagPlusSign),
'' => Ok(Tags::TagComma),
'' => Ok(Tags::TagHyphenDashMinus),
'' => Ok(Tags::TagFullStop),
'' => Ok(Tags::TagSolidus),
'' => Ok(Tags::TagDigitZero),
'' => Ok(Tags::TagDigitOne),
'' => Ok(Tags::TagDigitTwo),
'' => Ok(Tags::TagDigitThree),
'' => Ok(Tags::TagDigitFour),
'' => Ok(Tags::TagDigitFive),
'' => Ok(Tags::TagDigitSix),
'' => Ok(Tags::TagDigitSeven),
'' => Ok(Tags::TagDigitEight),
'' => Ok(Tags::TagDigitNine),
'' => Ok(Tags::TagColon),
'' => Ok(Tags::TagSemicolon),
'' => Ok(Tags::TagLessDashThanSign),
'' => Ok(Tags::TagEqualsSign),
'' => Ok(Tags::TagGreaterDashThanSign),
'' => Ok(Tags::TagQuestionMark),
'' => Ok(Tags::TagCommercialAt),
'' => Ok(Tags::TagLatinCapitalLetterA),
'' => Ok(Tags::TagLatinCapitalLetterB),
'' => Ok(Tags::TagLatinCapitalLetterC),
'' => Ok(Tags::TagLatinCapitalLetterD),
'' => Ok(Tags::TagLatinCapitalLetterE),
'' => Ok(Tags::TagLatinCapitalLetterF),
'' => Ok(Tags::TagLatinCapitalLetterG),
'' => Ok(Tags::TagLatinCapitalLetterH),
'' => Ok(Tags::TagLatinCapitalLetterI),
'' => Ok(Tags::TagLatinCapitalLetterJ),
'' => Ok(Tags::TagLatinCapitalLetterK),
'' => Ok(Tags::TagLatinCapitalLetterL),
'' => Ok(Tags::TagLatinCapitalLetterM),
'' => Ok(Tags::TagLatinCapitalLetterN),
'' => Ok(Tags::TagLatinCapitalLetterO),
'' => Ok(Tags::TagLatinCapitalLetterP),
'' => Ok(Tags::TagLatinCapitalLetterQ),
'' => Ok(Tags::TagLatinCapitalLetterR),
'' => Ok(Tags::TagLatinCapitalLetterS),
'' => Ok(Tags::TagLatinCapitalLetterT),
'' => Ok(Tags::TagLatinCapitalLetterU),
'' => Ok(Tags::TagLatinCapitalLetterV),
'' => Ok(Tags::TagLatinCapitalLetterW),
'' => Ok(Tags::TagLatinCapitalLetterX),
'' => Ok(Tags::TagLatinCapitalLetterY),
'' => Ok(Tags::TagLatinCapitalLetterZ),
'' => Ok(Tags::TagLeftSquareBracket),
'' => Ok(Tags::TagReverseSolidus),
'' => Ok(Tags::TagRightSquareBracket),
'' => Ok(Tags::TagCircumflexAccent),
'' => Ok(Tags::TagLowLine),
'' => Ok(Tags::TagGraveAccent),
'' => Ok(Tags::TagLatinSmallLetterA),
'' => Ok(Tags::TagLatinSmallLetterB),
'' => Ok(Tags::TagLatinSmallLetterC),
'' => Ok(Tags::TagLatinSmallLetterD),
'' => Ok(Tags::TagLatinSmallLetterE),
'' => Ok(Tags::TagLatinSmallLetterF),
'' => Ok(Tags::TagLatinSmallLetterG),
'' => Ok(Tags::TagLatinSmallLetterH),
'' => Ok(Tags::TagLatinSmallLetterI),
'' => Ok(Tags::TagLatinSmallLetterJ),
'' => Ok(Tags::TagLatinSmallLetterK),
'' => Ok(Tags::TagLatinSmallLetterL),
'' => Ok(Tags::TagLatinSmallLetterM),
'' => Ok(Tags::TagLatinSmallLetterN),
'' => Ok(Tags::TagLatinSmallLetterO),
'' => Ok(Tags::TagLatinSmallLetterP),
'' => Ok(Tags::TagLatinSmallLetterQ),
'' => Ok(Tags::TagLatinSmallLetterR),
'' => Ok(Tags::TagLatinSmallLetterS),
'' => Ok(Tags::TagLatinSmallLetterT),
'' => Ok(Tags::TagLatinSmallLetterU),
'' => Ok(Tags::TagLatinSmallLetterV),
'' => Ok(Tags::TagLatinSmallLetterW),
'' => Ok(Tags::TagLatinSmallLetterX),
'' => Ok(Tags::TagLatinSmallLetterY),
'' => Ok(Tags::TagLatinSmallLetterZ),
'' => Ok(Tags::TagLeftCurlyBracket),
'' => Ok(Tags::TagVerticalLine),
'' => Ok(Tags::TagRightCurlyBracket),
'' => Ok(Tags::TagTilde),
_ => Err(()),
}
}
}
impl Into<u32> for Tags {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for Tags {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for Tags {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl Tags {
pub fn new() -> Self {
Tags::LanguageTag
}
pub fn name(&self) -> String {
let s = std::format!("Tags{:#?}", self);
string_morph::to_sentence_case(&s)
}
}