mod constants {
pub const CJK_STROKE_T: char = '㇀';
pub const CJK_STROKE_WG: char = '㇁';
pub const CJK_STROKE_XG: char = '㇂';
pub const CJK_STROKE_BXG: char = '㇃';
pub const CJK_STROKE_SW: char = '㇄';
pub const CJK_STROKE_HZZ: char = '㇅';
pub const CJK_STROKE_HZG: char = '㇆';
pub const CJK_STROKE_HP: char = '㇇';
pub const CJK_STROKE_HZWG: char = '㇈';
pub const CJK_STROKE_SZWG: char = '㇉';
pub const CJK_STROKE_HZT: char = '㇊';
pub const CJK_STROKE_HZZP: char = '㇋';
pub const CJK_STROKE_HPWG: char = '㇌';
pub const CJK_STROKE_HZW: char = '㇍';
pub const CJK_STROKE_HZZZ: char = '㇎';
pub const CJK_STROKE_N: char = '㇏';
pub const CJK_STROKE_H: char = '㇐';
pub const CJK_STROKE_S: char = '㇑';
pub const CJK_STROKE_P: char = '㇒';
pub const CJK_STROKE_SP: char = '㇓';
pub const CJK_STROKE_D: char = '㇔';
pub const CJK_STROKE_HZ: char = '㇕';
pub const CJK_STROKE_HG: char = '㇖';
pub const CJK_STROKE_SZ: char = '㇗';
pub const CJK_STROKE_SWZ: char = '㇘';
pub const CJK_STROKE_ST: char = '㇙';
pub const CJK_STROKE_SG: char = '㇚';
pub const CJK_STROKE_PD: char = '㇛';
pub const CJK_STROKE_PZ: char = '㇜';
pub const CJK_STROKE_TN: char = '㇝';
pub const CJK_STROKE_SZZ: char = '㇞';
pub const CJK_STROKE_SWG: char = '㇟';
pub const CJK_STROKE_HXWG: char = '㇠';
pub const CJK_STROKE_HZZZG: char = '㇡';
pub const CJK_STROKE_PG: char = '㇢';
pub const CJK_STROKE_Q: char = '㇣';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum CJKStrokes {
CjkStrokeT,
CjkStrokeWg,
CjkStrokeXg,
CjkStrokeBxg,
CjkStrokeSw,
CjkStrokeHzz,
CjkStrokeHzg,
CjkStrokeHp,
CjkStrokeHzwg,
CjkStrokeSzwg,
CjkStrokeHzt,
CjkStrokeHzzp,
CjkStrokeHpwg,
CjkStrokeHzw,
CjkStrokeHzzz,
CjkStrokeN,
CjkStrokeH,
CjkStrokeS,
CjkStrokeP,
CjkStrokeSp,
CjkStrokeD,
CjkStrokeHz,
CjkStrokeHg,
CjkStrokeSz,
CjkStrokeSwz,
CjkStrokeSt,
CjkStrokeSg,
CjkStrokePd,
CjkStrokePz,
CjkStrokeTn,
CjkStrokeSzz,
CjkStrokeSwg,
CjkStrokeHxwg,
CjkStrokeHzzzg,
CjkStrokePg,
CjkStrokeQ,
}
impl Into<char> for CJKStrokes {
fn into(self) -> char {
use constants::*;
match self {
CJKStrokes::CjkStrokeT => CJK_STROKE_T,
CJKStrokes::CjkStrokeWg => CJK_STROKE_WG,
CJKStrokes::CjkStrokeXg => CJK_STROKE_XG,
CJKStrokes::CjkStrokeBxg => CJK_STROKE_BXG,
CJKStrokes::CjkStrokeSw => CJK_STROKE_SW,
CJKStrokes::CjkStrokeHzz => CJK_STROKE_HZZ,
CJKStrokes::CjkStrokeHzg => CJK_STROKE_HZG,
CJKStrokes::CjkStrokeHp => CJK_STROKE_HP,
CJKStrokes::CjkStrokeHzwg => CJK_STROKE_HZWG,
CJKStrokes::CjkStrokeSzwg => CJK_STROKE_SZWG,
CJKStrokes::CjkStrokeHzt => CJK_STROKE_HZT,
CJKStrokes::CjkStrokeHzzp => CJK_STROKE_HZZP,
CJKStrokes::CjkStrokeHpwg => CJK_STROKE_HPWG,
CJKStrokes::CjkStrokeHzw => CJK_STROKE_HZW,
CJKStrokes::CjkStrokeHzzz => CJK_STROKE_HZZZ,
CJKStrokes::CjkStrokeN => CJK_STROKE_N,
CJKStrokes::CjkStrokeH => CJK_STROKE_H,
CJKStrokes::CjkStrokeS => CJK_STROKE_S,
CJKStrokes::CjkStrokeP => CJK_STROKE_P,
CJKStrokes::CjkStrokeSp => CJK_STROKE_SP,
CJKStrokes::CjkStrokeD => CJK_STROKE_D,
CJKStrokes::CjkStrokeHz => CJK_STROKE_HZ,
CJKStrokes::CjkStrokeHg => CJK_STROKE_HG,
CJKStrokes::CjkStrokeSz => CJK_STROKE_SZ,
CJKStrokes::CjkStrokeSwz => CJK_STROKE_SWZ,
CJKStrokes::CjkStrokeSt => CJK_STROKE_ST,
CJKStrokes::CjkStrokeSg => CJK_STROKE_SG,
CJKStrokes::CjkStrokePd => CJK_STROKE_PD,
CJKStrokes::CjkStrokePz => CJK_STROKE_PZ,
CJKStrokes::CjkStrokeTn => CJK_STROKE_TN,
CJKStrokes::CjkStrokeSzz => CJK_STROKE_SZZ,
CJKStrokes::CjkStrokeSwg => CJK_STROKE_SWG,
CJKStrokes::CjkStrokeHxwg => CJK_STROKE_HXWG,
CJKStrokes::CjkStrokeHzzzg => CJK_STROKE_HZZZG,
CJKStrokes::CjkStrokePg => CJK_STROKE_PG,
CJKStrokes::CjkStrokeQ => CJK_STROKE_Q,
}
}
}
impl std::convert::TryFrom<char> for CJKStrokes {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
CJK_STROKE_T => Ok(CJKStrokes::CjkStrokeT),
CJK_STROKE_WG => Ok(CJKStrokes::CjkStrokeWg),
CJK_STROKE_XG => Ok(CJKStrokes::CjkStrokeXg),
CJK_STROKE_BXG => Ok(CJKStrokes::CjkStrokeBxg),
CJK_STROKE_SW => Ok(CJKStrokes::CjkStrokeSw),
CJK_STROKE_HZZ => Ok(CJKStrokes::CjkStrokeHzz),
CJK_STROKE_HZG => Ok(CJKStrokes::CjkStrokeHzg),
CJK_STROKE_HP => Ok(CJKStrokes::CjkStrokeHp),
CJK_STROKE_HZWG => Ok(CJKStrokes::CjkStrokeHzwg),
CJK_STROKE_SZWG => Ok(CJKStrokes::CjkStrokeSzwg),
CJK_STROKE_HZT => Ok(CJKStrokes::CjkStrokeHzt),
CJK_STROKE_HZZP => Ok(CJKStrokes::CjkStrokeHzzp),
CJK_STROKE_HPWG => Ok(CJKStrokes::CjkStrokeHpwg),
CJK_STROKE_HZW => Ok(CJKStrokes::CjkStrokeHzw),
CJK_STROKE_HZZZ => Ok(CJKStrokes::CjkStrokeHzzz),
CJK_STROKE_N => Ok(CJKStrokes::CjkStrokeN),
CJK_STROKE_H => Ok(CJKStrokes::CjkStrokeH),
CJK_STROKE_S => Ok(CJKStrokes::CjkStrokeS),
CJK_STROKE_P => Ok(CJKStrokes::CjkStrokeP),
CJK_STROKE_SP => Ok(CJKStrokes::CjkStrokeSp),
CJK_STROKE_D => Ok(CJKStrokes::CjkStrokeD),
CJK_STROKE_HZ => Ok(CJKStrokes::CjkStrokeHz),
CJK_STROKE_HG => Ok(CJKStrokes::CjkStrokeHg),
CJK_STROKE_SZ => Ok(CJKStrokes::CjkStrokeSz),
CJK_STROKE_SWZ => Ok(CJKStrokes::CjkStrokeSwz),
CJK_STROKE_ST => Ok(CJKStrokes::CjkStrokeSt),
CJK_STROKE_SG => Ok(CJKStrokes::CjkStrokeSg),
CJK_STROKE_PD => Ok(CJKStrokes::CjkStrokePd),
CJK_STROKE_PZ => Ok(CJKStrokes::CjkStrokePz),
CJK_STROKE_TN => Ok(CJKStrokes::CjkStrokeTn),
CJK_STROKE_SZZ => Ok(CJKStrokes::CjkStrokeSzz),
CJK_STROKE_SWG => Ok(CJKStrokes::CjkStrokeSwg),
CJK_STROKE_HXWG => Ok(CJKStrokes::CjkStrokeHxwg),
CJK_STROKE_HZZZG => Ok(CJKStrokes::CjkStrokeHzzzg),
CJK_STROKE_PG => Ok(CJKStrokes::CjkStrokePg),
CJK_STROKE_Q => Ok(CJKStrokes::CjkStrokeQ),
_ => Err(()),
}
}
}
impl Into<u32> for CJKStrokes {
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 CJKStrokes {
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 CJKStrokes {
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 CJKStrokes {
pub fn new() -> Self {
CJKStrokes::CjkStrokeT
}
pub fn name(&self) -> &str {
match self {
CJKStrokes::CjkStrokeT => "cjk stroke t",
CJKStrokes::CjkStrokeWg => "cjk stroke wg",
CJKStrokes::CjkStrokeXg => "cjk stroke xg",
CJKStrokes::CjkStrokeBxg => "cjk stroke bxg",
CJKStrokes::CjkStrokeSw => "cjk stroke sw",
CJKStrokes::CjkStrokeHzz => "cjk stroke hzz",
CJKStrokes::CjkStrokeHzg => "cjk stroke hzg",
CJKStrokes::CjkStrokeHp => "cjk stroke hp",
CJKStrokes::CjkStrokeHzwg => "cjk stroke hzwg",
CJKStrokes::CjkStrokeSzwg => "cjk stroke szwg",
CJKStrokes::CjkStrokeHzt => "cjk stroke hzt",
CJKStrokes::CjkStrokeHzzp => "cjk stroke hzzp",
CJKStrokes::CjkStrokeHpwg => "cjk stroke hpwg",
CJKStrokes::CjkStrokeHzw => "cjk stroke hzw",
CJKStrokes::CjkStrokeHzzz => "cjk stroke hzzz",
CJKStrokes::CjkStrokeN => "cjk stroke n",
CJKStrokes::CjkStrokeH => "cjk stroke h",
CJKStrokes::CjkStrokeS => "cjk stroke s",
CJKStrokes::CjkStrokeP => "cjk stroke p",
CJKStrokes::CjkStrokeSp => "cjk stroke sp",
CJKStrokes::CjkStrokeD => "cjk stroke d",
CJKStrokes::CjkStrokeHz => "cjk stroke hz",
CJKStrokes::CjkStrokeHg => "cjk stroke hg",
CJKStrokes::CjkStrokeSz => "cjk stroke sz",
CJKStrokes::CjkStrokeSwz => "cjk stroke swz",
CJKStrokes::CjkStrokeSt => "cjk stroke st",
CJKStrokes::CjkStrokeSg => "cjk stroke sg",
CJKStrokes::CjkStrokePd => "cjk stroke pd",
CJKStrokes::CjkStrokePz => "cjk stroke pz",
CJKStrokes::CjkStrokeTn => "cjk stroke tn",
CJKStrokes::CjkStrokeSzz => "cjk stroke szz",
CJKStrokes::CjkStrokeSwg => "cjk stroke swg",
CJKStrokes::CjkStrokeHxwg => "cjk stroke hxwg",
CJKStrokes::CjkStrokeHzzzg => "cjk stroke hzzzg",
CJKStrokes::CjkStrokePg => "cjk stroke pg",
CJKStrokes::CjkStrokeQ => "cjk stroke q",
}
}
}