use std::convert::TryFrom;
#[derive(Serialize, Deserialize, Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum HeadingLevel {
One = 1,
Two = 2,
Three = 3,
Four = 4,
Five = 5,
Six = 6,
}
impl HeadingLevel {
pub fn value(self) -> u8 {
match self {
HeadingLevel::One => 1,
HeadingLevel::Two => 2,
HeadingLevel::Three => 3,
HeadingLevel::Four => 4,
HeadingLevel::Five => 5,
HeadingLevel::Six => 6,
}
}
#[inline]
pub fn html_tag(self) -> &'static str {
match self {
HeadingLevel::One => "h1",
HeadingLevel::Two => "h2",
HeadingLevel::Three => "h3",
HeadingLevel::Four => "h4",
HeadingLevel::Five => "h5",
HeadingLevel::Six => "h6",
}
}
}
impl TryFrom<usize> for HeadingLevel {
type Error = ();
fn try_from(value: usize) -> Result<Self, Self::Error> {
match value {
1 => Ok(HeadingLevel::One),
2 => Ok(HeadingLevel::Two),
3 => Ok(HeadingLevel::Three),
4 => Ok(HeadingLevel::Four),
5 => Ok(HeadingLevel::Five),
6 => Ok(HeadingLevel::Six),
_ => Err(()),
}
}
}
impl TryFrom<u8> for HeadingLevel {
type Error = ();
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
1 => Ok(HeadingLevel::One),
2 => Ok(HeadingLevel::Two),
3 => Ok(HeadingLevel::Three),
4 => Ok(HeadingLevel::Four),
5 => Ok(HeadingLevel::Five),
6 => Ok(HeadingLevel::Six),
_ => Err(()),
}
}
}