pub trait Measurable
where
Self: ::std::fmt::Display {}
impl Measurable for Absolute {}
impl Measurable for Relative {}
impl Measurable for Viewport {}
impl Measurable for Angle {}
impl Measurable for Time {}
impl Measurable for Frequency {}
impl Measurable for Resolution {}
#[derive(Clone)]
#[derive(PartialEq)]
pub struct Unit<T>
where
T: Measurable {
pub measurement: T,
pub n: f64
}
impl<T> From<(T, f64)> for Unit<T>
where
T: Measurable {
fn from(value: (T, f64)) -> Self {
Self {
measurement: value.0,
n: value.1
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Absolute {
Px,
Cm,
Mm,
Q,
In,
Pc,
Pt
}
impl Absolute {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Relative {
Em,
Ex,
Ch,
Rem,
Lh,
Rlh,
Percentage
}
impl Relative {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Viewport {
Vw,
Vh,
Vmin,
Vmax,
Vb,
Vi,
Svw,
Svh,
Lvw,
Lvh,
Dvw,
Dvh
}
impl Viewport {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Angle {
Grad,
Turn,
Deg,
Rad
}
impl Angle {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Time {
S,
Ms
}
impl Time {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Frequency {
Hz,
Khz
}
impl Frequency {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}
#[derive(Debug)]
#[derive(Clone)]
#[derive(PartialEq)]
#[derive(::strum_macros::EnumString)]
#[derive(::strum_macros::Display)]
#[strum(serialize_all = "lowercase")]
pub enum Resolution {
Dpi,
Dpcm,
Dppx
}
impl Resolution {
pub fn into_unit(self, n: f64) -> Unit<Self> {
Unit {
measurement: self,
n
}
}
}