1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use crate::prelude::*; #[derive(Debug, PartialEq, Eq, Hash, smart_default::SmartDefault, Clone, Copy)] pub enum Margin { #[default] None, Auto, Initial, Inherit, Unset, Some(Unit), } #[rustfmt::skip] impl std::fmt::Display for Margin { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::None => "0".fmt(f), Self::Auto => "auto".fmt(f), Self::Initial => "initial".fmt(f), Self::Inherit => "inherit".fmt(f), Self::Unset => "unset".fmt(f), Self::Some(unit) => unit.fmt(f), } } } #[rustfmt::skip] #[macro_export] #[doc(hidden)] macro_rules! __margin { ($side:ident, 0) => {$crate::paste::item!{ $crate::Property::[<Margin $side>]($crate::Margin::None) }}; ($side:ident, auto) => {$crate::paste::item!{ $crate::Property::[<Margin $side>]($crate::Margin::Auto) }}; ($side:ident, initial) => {$crate::paste::item!{ $crate::Property::[<Margin $side>]($crate::Margin::Initial) }}; ($side:ident, inherit) => {$crate::paste::item!{ $crate::Property::[<Margin $side>]($crate::Margin::Inherit) }}; ($side:ident, unset) => {$crate::paste::item!{ $crate::Property::[<Margin $side>]($crate::Margin::Unset) }}; ($side:ident, $($val:tt)+) => {$crate::paste::item!{ $crate::Property::[<Margin $side>]($crate::Margin::Some($crate::unit!($($val)+))) }}; } #[macro_export] macro_rules! margin_left { ($($tt:tt)+) => { $crate::__margin!(Left, $($tt)+)} } #[macro_export] macro_rules! margin_right { ($($tt:tt)+) => { $crate::__margin!(Right, $($tt)+)} } #[macro_export] macro_rules! margin_top { ($($tt:tt)+) => { $crate::__margin!(Top, $($tt)+)} } #[macro_export] macro_rules! margin_bottom { ($($tt:tt)+) => { $crate::__margin!(Bottom, $($tt)+)} }