abs_data/models/typed/
period.rs

1use 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}