diff options
Diffstat (limited to 'src/selectors/daterange.rs')
-rw-r--r-- | src/selectors/daterange.rs | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/src/selectors/daterange.rs b/src/selectors/daterange.rs deleted file mode 100644 index 047748d..0000000 --- a/src/selectors/daterange.rs +++ /dev/null @@ -1,188 +0,0 @@ -use chrono::prelude::*; -use std::cmp; -use std::str::FromStr; - -use crate::utils::dateutil; -use crate::utils::misc; - -pub struct SelectFilterFrom { - pub date: Option<Date<Local>>, - pub bucket: Option<String>, -} - -pub struct SelectFilterTo { - pub date: Option<Date<Local>>, - pub bucket: Option<String>, -} - -impl SelectFilterFrom { - pub fn includes_date(&self, cmp_date: DateTime<Local>) -> bool { - self.date.map_or(true, |date| date <= cmp_date.date()) - } - - fn from_date(date: Option<Date<Local>>) -> Self { - Self { - date, - bucket: date.map(misc::get_bucket_for_date), - } - } - - pub fn combine_with(self, other: &Self) -> Self { - let date = if self.date.is_some() { - cmp::max(self.date, other.date) - } else { - other.date - }; - Self::from_date(date) - } -} - -impl SelectFilterTo { - pub fn includes_date(&self, cmp_date: DateTime<Local>) -> bool { - self.date.map_or(true, |date| cmp_date.date() <= date) - } - - fn from_date(date: Option<Date<Local>>) -> Self { - Self { - date, - bucket: date.map(misc::get_bucket_for_date), - } - } - - pub fn combine_with(self, other: &Self) -> Self { - let date = if self.date.is_some() { - cmp::min(self.date, other.date) - } else { - other.date - }; - Self::from_date(date) - } -} - -impl FromStr for SelectFilterFrom { - type Err = String; - - fn from_str(s: &str) -> Result<SelectFilterFrom, Self::Err> { - if let Ok(date) = dateutil::date_from_str(s) { - return Ok(SelectFilterFrom::from_date(Some(date))); - } - if let Ok(weekdate) = dateutil::week_from_str_begin(s) { - return Ok(SelectFilterFrom::from_date(Some(weekdate))); - } - Err(format!("Could not parse date '{}'", s).to_string()) - } -} - -impl FromStr for SelectFilterTo { - type Err = String; - - fn from_str(s: &str) -> Result<SelectFilterTo, Self::Err> { - if let Ok(date) = dateutil::date_from_str(s) { - return Ok(SelectFilterTo::from_date(Some(date))); - } - if let Ok(weekdate) = dateutil::week_from_str_end(s) { - return Ok(SelectFilterTo::from_date(Some(weekdate))); - } - Err(format!("Could not parse date '{}'", s).to_string()) - } -} - -impl Default for SelectFilterTo { - fn default() -> SelectFilterTo { - SelectFilterTo::from_date(None) - } -} - -impl Default for SelectFilterFrom { - fn default() -> SelectFilterFrom { - SelectFilterFrom::from_date(None) - } -} - -#[cfg(test)] -mod tests { - use crate::selectors::test::test_filter_event; - use crate::testdata; - #[test] - fn test_from_ends_before() { - // DTSTART: 2007-06-28 - // DTEND: 2007-07-09 - let filtered = test_filter_event( - &testdata::TEST_EVENT_MULTIDAY, - None, - &["from", "2007-08-01"], - ); - assert_eq!(false, filtered) - } - #[test] - fn test_from_begins_after() { - let filtered = test_filter_event( - &testdata::TEST_EVENT_MULTIDAY, - None, - &["from", "2007-06-01"], - ); - assert_eq!(true, filtered); - } - #[test] - fn test_from_begins_before_ends_after() { - let filtered = test_filter_event( - &testdata::TEST_EVENT_MULTIDAY, - None, - &["from", "2007-07-01"], - ); - assert_eq!(true, filtered); - } - #[test] - fn test_from_week_before() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["from", "2007-W17"]); - assert_eq!(true, filtered); - } - #[test] - fn test_from_week_after() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["from", "2007-W30"]); - assert_eq!(false, filtered); - } - #[test] - fn test_from_redundant() { - let filtered = test_filter_event( - &testdata::TEST_EVENT_MULTIDAY, - None, - &["from", "2007-06-01", "from", "2007-08-01"], - ); - assert_eq!(false, filtered); - } - #[test] - fn test_to_ends_before() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["to", "2007-08-01"]); - assert_eq!(true, filtered); - } - #[test] - fn test_to_begins_after() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["to", "2007-06-01"]); - assert_eq!(false, filtered); - } - #[test] - fn test_to_begins_before_ends_after() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["to", "2007-07-01"]); - assert_eq!(true, filtered); - } - #[test] - fn test_to_week_before() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["to", "2007-W17"]); - assert_eq!(false, filtered); - } - #[test] - fn test_to_week_after() { - let filtered = test_filter_event(&testdata::TEST_EVENT_MULTIDAY, None, &["to", "2007-W30"]); - assert_eq!(true, filtered); - } - #[test] - fn test_to_begins_redundant() { - let filtered = test_filter_event( - &testdata::TEST_EVENT_MULTIDAY, - None, - &["to", "2007-06-01", "to", "2007-08-01"], - ); - assert_eq!(false, filtered); - } -} |