abs_data/models/typed/
period.rs1use std::fmt::{self, Display, Formatter};
2
3use serde::{Deserialize, Serialize};
4use strum_macros::EnumIter;
5
6use super::{month::Month, quarter::Quarter, semester::Semester};
7
8#[derive(
9 Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, EnumIter,
10)]
11pub enum Period {
12 Year(u16),
13 YearSemester(u16, Semester),
14 YearQuarter(u16, Quarter),
15 YearMonth(u16, Month),
16}
17
18impl Display for Period {
19 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
20 match self {
21 Self::Year(year) => write!(f, "{:04}", year),
22 Self::YearSemester(year, semester) => write!(f, "{:04}-{}", year, semester),
23 Self::YearQuarter(year, quarter) => write!(f, "{:04}-{}", year, quarter),
24 Self::YearMonth(year, month) => write!(f, "{:04}-{}", year, month),
25 }
26 }
27}