Skip to main content

ferrex_model/
numbers.rs

1/// Season number with u8 bounds
2#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4#[cfg_attr(
5    feature = "rkyv",
6    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
7)]
8#[cfg_attr(feature = "rkyv", rkyv(derive(Debug, Clone, PartialEq, Eq, Hash)))]
9pub struct SeasonNumber(u16);
10
11impl SeasonNumber {
12    pub fn new(num: u16) -> Self {
13        SeasonNumber(num)
14    }
15
16    pub fn value(&self) -> u16 {
17        self.0
18    }
19}
20
21impl std::fmt::Display for SeasonNumber {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        write!(f, "{}", self.0)
24    }
25}
26
27impl From<u16> for SeasonNumber {
28    fn from(num: u16) -> Self {
29        SeasonNumber(num)
30    }
31}
32
33impl Default for SeasonNumber {
34    fn default() -> Self {
35        SeasonNumber(1) // Season 1 is a reasonable default
36    }
37}
38
39/// Episode number with u8 bounds
40#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
41#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
42#[cfg_attr(
43    feature = "rkyv",
44    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
45)]
46#[cfg_attr(feature = "rkyv", rkyv(derive(Debug, Clone, PartialEq, Eq, Hash)))]
47pub struct EpisodeNumber(u16);
48
49impl EpisodeNumber {
50    pub fn new(num: u16) -> Self {
51        EpisodeNumber(num)
52    }
53
54    pub fn value(&self) -> u16 {
55        self.0
56    }
57}
58
59impl std::fmt::Display for EpisodeNumber {
60    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61        write!(f, "{}", self.0)
62    }
63}
64
65impl From<u16> for EpisodeNumber {
66    fn from(num: u16) -> Self {
67        EpisodeNumber(num)
68    }
69}
70
71impl Default for EpisodeNumber {
72    fn default() -> Self {
73        EpisodeNumber(1) // Episode 1 is a reasonable default
74    }
75}