summaryrefslogtreecommitdiffstats
path: root/src/indicator.rs
blob: fa9bf6306fecf52d6562d759e78364af0a9dc1d1 (plain)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#[cfg(feature = "with-filters")]
use filters::filter::Filter;

#[cfg(feature = "with-filters")]
use filters::filter::IntoFilter;

#[cfg(feature = "with-filters")]
use timetype::TimeType;

#[cfg(feature = "with-filters")]
use chrono::Datelike;

#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug)]
pub enum Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
}

impl Into<::chrono::Weekday> for Day {
    fn into(self) -> ::chrono::Weekday {
        match self {
            Day::Monday    => ::chrono::Weekday::Mon,
            Day::Tuesday   => ::chrono::Weekday::Tue,
            Day::Wednesday => ::chrono::Weekday::Wed,
            Day::Thursday  => ::chrono::Weekday::Thu,
            Day::Friday    => ::chrono::Weekday::Fri,
            Day::Saturday  => ::chrono::Weekday::Sat,
            Day::Sunday    => ::chrono::Weekday::Sun,
        }
    }
}

#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug)]
pub enum Month {
    January,
    February,
    March,
    April,
    May,
    June,
    July,
    August,
    September,
    October,
    November,
    December,
}

impl Into<u32> for Month {
    fn into(self) -> u32 {
        match self {
            Month::January   =>  1,
            Month::February  =>  2,
            Month::March     =>  3,
            Month::April     =>  4,
            Month::May       =>  5,
            Month::June      =>  6,
            Month::July      =>  7,
            Month::August    =>  8,
            Month::September =>  9,
            Month::October   => 10,
            Month::November  => 11,
            Month::December  => 12,
        }
    }
}

#[cfg(feature = "with-filters")]
pub struct DayFilter(Day);

#[cfg(feature = "with-filters")]
impl Filter<TimeType> for DayFilter {
    fn filter(&self, tt: &TimeType) -> bool {
        tt.get_moment().map(|mom| mom.weekday() == self.0.clone().into()).unwrap_or(false)
    }
}

#[cfg(feature = "with-filters")]
impl IntoFilter<TimeType> for Day {
    type IntoFilt = DayFilter;

    fn into_filter(self) -> Self::IntoFilt {
        DayFilter(self)
    }

}


#[cfg(feature = "with-filters")]
pub struct MonthFilter(Month);

#[cfg(feature = "with-filters")]
impl Filter<TimeType> for MonthFilter {
    fn filter(&self, tt: &TimeType) -> bool {
        tt.get_moment().map(|mom| mom.month() == self.0.clone().into()).unwrap_or(false)
    }
}

#[cfg(feature = "with-filters")]
impl IntoFilter<TimeType> for Month {
    type IntoFilt = MonthFilter;

    fn into_filter(self) -> Self::IntoFilt {
        MonthFilter(self)
    }

}