use core::fmt;
use crate::to_css::{write_number, ToCss};
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum Angle {
Deg(f32),
Rad(f32),
Turn(f32),
}
impl Angle {
pub const ZERO: Self = Self::Deg(0.0);
}
impl ToCss for Angle {
fn to_css(&self, dest: &mut dyn fmt::Write) -> fmt::Result {
let (v, unit) = match *self {
Angle::Deg(v) => (v, "deg"),
Angle::Rad(v) => (v, "rad"),
Angle::Turn(v) => (v, "turn"),
};
write_number(dest, v)?;
dest.write_str(unit)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn each_unit_serializes() {
assert_eq!(Angle::Deg(45.0).to_css_string(), "45deg");
assert_eq!(Angle::Rad(1.25).to_css_string(), "1.25rad");
assert_eq!(Angle::Turn(0.25).to_css_string(), "0.25turn");
}
#[test]
fn zero_constant() {
assert_eq!(Angle::ZERO.to_css_string(), "0deg");
}
#[test]
fn negative_angles() {
assert_eq!(Angle::Deg(-90.0).to_css_string(), "-90deg");
}
}