use crate::classes::ClassBuilder;
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum GridColumnStart {
Start1,
Start2,
Start3,
Start4,
Start5,
Start6,
Start7,
Start8,
Start9,
Start10,
Start11,
Start12,
Start13,
Auto,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum GridColumnEnd {
End1,
End2,
End3,
End4,
End5,
End6,
End7,
End8,
End9,
End10,
End11,
End12,
End13,
Auto,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum GridRowStart {
Start1,
Start2,
Start3,
Start4,
Start5,
Start6,
Start7,
Auto,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum GridRowEnd {
End1,
End2,
End3,
End4,
End5,
End6,
End7,
Auto,
}
impl fmt::Display for GridColumnStart {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
GridColumnStart::Start1 => write!(f, "col-start-1"),
GridColumnStart::Start2 => write!(f, "col-start-2"),
GridColumnStart::Start3 => write!(f, "col-start-3"),
GridColumnStart::Start4 => write!(f, "col-start-4"),
GridColumnStart::Start5 => write!(f, "col-start-5"),
GridColumnStart::Start6 => write!(f, "col-start-6"),
GridColumnStart::Start7 => write!(f, "col-start-7"),
GridColumnStart::Start8 => write!(f, "col-start-8"),
GridColumnStart::Start9 => write!(f, "col-start-9"),
GridColumnStart::Start10 => write!(f, "col-start-10"),
GridColumnStart::Start11 => write!(f, "col-start-11"),
GridColumnStart::Start12 => write!(f, "col-start-12"),
GridColumnStart::Start13 => write!(f, "col-start-13"),
GridColumnStart::Auto => write!(f, "col-start-auto"),
}
}
}
impl fmt::Display for GridColumnEnd {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
GridColumnEnd::End1 => write!(f, "col-end-1"),
GridColumnEnd::End2 => write!(f, "col-end-2"),
GridColumnEnd::End3 => write!(f, "col-end-3"),
GridColumnEnd::End4 => write!(f, "col-end-4"),
GridColumnEnd::End5 => write!(f, "col-end-5"),
GridColumnEnd::End6 => write!(f, "col-end-6"),
GridColumnEnd::End7 => write!(f, "col-end-7"),
GridColumnEnd::End8 => write!(f, "col-end-8"),
GridColumnEnd::End9 => write!(f, "col-end-9"),
GridColumnEnd::End10 => write!(f, "col-end-10"),
GridColumnEnd::End11 => write!(f, "col-end-11"),
GridColumnEnd::End12 => write!(f, "col-end-12"),
GridColumnEnd::End13 => write!(f, "col-end-13"),
GridColumnEnd::Auto => write!(f, "col-end-auto"),
}
}
}
impl fmt::Display for GridRowStart {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
GridRowStart::Start1 => write!(f, "row-start-1"),
GridRowStart::Start2 => write!(f, "row-start-2"),
GridRowStart::Start3 => write!(f, "row-start-3"),
GridRowStart::Start4 => write!(f, "row-start-4"),
GridRowStart::Start5 => write!(f, "row-start-5"),
GridRowStart::Start6 => write!(f, "row-start-6"),
GridRowStart::Start7 => write!(f, "row-start-7"),
GridRowStart::Auto => write!(f, "row-start-auto"),
}
}
}
impl fmt::Display for GridRowEnd {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
GridRowEnd::End1 => write!(f, "row-end-1"),
GridRowEnd::End2 => write!(f, "row-end-2"),
GridRowEnd::End3 => write!(f, "row-end-3"),
GridRowEnd::End4 => write!(f, "row-end-4"),
GridRowEnd::End5 => write!(f, "row-end-5"),
GridRowEnd::End6 => write!(f, "row-end-6"),
GridRowEnd::End7 => write!(f, "row-end-7"),
GridRowEnd::Auto => write!(f, "row-end-auto"),
}
}
}
pub trait GridPlacementUtilities {
fn grid_column_start(self, start: GridColumnStart) -> Self;
fn grid_column_end(self, end: GridColumnEnd) -> Self;
fn grid_row_start(self, start: GridRowStart) -> Self;
fn grid_row_end(self, end: GridRowEnd) -> Self;
}
impl GridPlacementUtilities for ClassBuilder {
fn grid_column_start(self, start: GridColumnStart) -> Self {
self.class(start.to_string())
}
fn grid_column_end(self, end: GridColumnEnd) -> Self {
self.class(end.to_string())
}
fn grid_row_start(self, start: GridRowStart) -> Self {
self.class(start.to_string())
}
fn grid_row_end(self, end: GridRowEnd) -> Self {
self.class(end.to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_grid_placement_display() {
assert_eq!(GridColumnStart::Start1.to_string(), "col-start-1");
assert_eq!(GridColumnEnd::End1.to_string(), "col-end-1");
assert_eq!(GridRowStart::Start1.to_string(), "row-start-1");
assert_eq!(GridRowEnd::End1.to_string(), "row-end-1");
}
#[test]
fn test_grid_placement_utilities() {
let classes = ClassBuilder::new()
.grid_column_start(GridColumnStart::Start1)
.grid_column_end(GridColumnEnd::End3)
.grid_row_start(GridRowStart::Start1)
.grid_row_end(GridRowEnd::End2)
.build();
let css_classes = classes.to_css_classes();
assert!(css_classes.contains("col-start-1"));
assert!(css_classes.contains("col-end-3"));
assert!(css_classes.contains("row-start-1"));
assert!(css_classes.contains("row-end-2"));
}
}