#![allow(dead_code)]
use regex::Regex;
use std::convert::TryFrom;
lazy_static! {
static ref IMAGE_ALIGNMENT_REGEX: Regex = Regex::new(r"(f?[<>])|=").unwrap();
}
#[derive(Serialize, Deserialize, Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum Alignment {
Left,
Right,
Center,
Justify,
}
impl<'a> TryFrom<&'a str> for Alignment {
type Error = ();
fn try_from(value: &'a str) -> Result<Self, Self::Error> {
match value {
"<" => Ok(Alignment::Left),
">" => Ok(Alignment::Right),
"=" => Ok(Alignment::Center),
"==" => Ok(Alignment::Justify),
_ => Err(()),
}
}
}
#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub struct ImageAlignment {
pub align: Alignment,
pub float: bool,
}
impl ImageAlignment {
pub fn parse(text: &str) -> Option<Self> {
let (align, float) = match text {
"=" => (Alignment::Center, false),
"<" => (Alignment::Left, false),
">" => (Alignment::Right, false),
"f<" => (Alignment::Left, true),
"f>" => (Alignment::Right, true),
_ => return None,
};
Some(ImageAlignment { align, float })
}
}