pub struct CompactCalendar { /* private fields */ }Expand description
A compact representation of included days in a range of years, using u32-based bit arrays.
Implementations§
Source§impl CompactCalendar
impl CompactCalendar
Sourcepub fn year_for(&self, date: NaiveDate) -> Option<&CompactYear>
pub fn year_for(&self, date: NaiveDate) -> Option<&CompactYear>
Get a reference to the year containing give date.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let day1 = NaiveDate::from_ymd_opt(2013, 11, 3).unwrap();
let day2 = NaiveDate::from_ymd_opt(2055, 3, 5).unwrap();
let mut cal = CompactCalendar::default();
cal.insert(day1);
assert!(cal.year_for(day1).unwrap().contains(11, 3));
assert!(cal.year_for(day2).is_none());Sourcepub fn year_for_mut(&mut self, date: NaiveDate) -> Option<&mut CompactYear>
pub fn year_for_mut(&mut self, date: NaiveDate) -> Option<&mut CompactYear>
Get a mutable reference to the year containing give date.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let day1 = NaiveDate::from_ymd_opt(2013, 11, 3).unwrap();
let day2 = NaiveDate::from_ymd_opt(2022, 3, 5).unwrap();
let day3 = NaiveDate::from_ymd_opt(2055, 7, 5).unwrap();
let mut cal = CompactCalendar::default();
assert!(cal.year_for_mut(day3).is_none());
cal.insert(day1);
assert!(cal.year_for_mut(day1).unwrap().contains(11, 3));Sourcepub fn insert(&mut self, date: NaiveDate) -> bool
pub fn insert(&mut self, date: NaiveDate) -> bool
Include a day in this calendar. Return false if the day already
belonged to the calendar.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let day1 = NaiveDate::from_ymd_opt(2013, 11, 3).unwrap();
let day2 = NaiveDate::from_ymd_opt(2022, 3, 5).unwrap();
let day3 = NaiveDate::from_ymd_opt(2055, 9, 7).unwrap();
let mut cal = CompactCalendar::default();
assert!(cal.insert(day1));
assert!(cal.insert(day2));
assert!(cal.insert(day3));
assert!(!cal.insert(day1));
assert_eq!(cal.count(), 3);Sourcepub fn contains(&self, date: NaiveDate) -> bool
pub fn contains(&self, date: NaiveDate) -> bool
Check if this calendar includes the given day.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let day1 = NaiveDate::from_ymd_opt(2013, 11, 3).unwrap();
let day2 = NaiveDate::from_ymd_opt(2022, 3, 5).unwrap();
let day3 = NaiveDate::from_ymd_opt(2022, 8, 12).unwrap();
let mut cal = CompactCalendar::default();
cal.insert(day1);
cal.insert(day2);
assert!(cal.contains(day1));
assert!(cal.contains(day2));
assert!(!cal.contains(day3));Sourcepub fn iter(&self) -> impl Iterator<Item = NaiveDate> + Send + Sync + '_
pub fn iter(&self) -> impl Iterator<Item = NaiveDate> + Send + Sync + '_
Iterate over the days included in this calendar.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let day1 = NaiveDate::from_ymd_opt(2013, 11, 3).unwrap();
let day2 = NaiveDate::from_ymd_opt(2022, 3, 5).unwrap();
let day3 = NaiveDate::from_ymd_opt(2022, 8, 12).unwrap();
let mut cal = CompactCalendar::default();
cal.insert(day3);
cal.insert(day1);
cal.insert(day2);
let days: Vec<_> = cal.iter().collect();
assert_eq!(days, [day1, day2, day3])Sourcepub fn first_after(&self, date: NaiveDate) -> Option<NaiveDate>
pub fn first_after(&self, date: NaiveDate) -> Option<NaiveDate>
Get the first day included in this calendar that follows the input day, if such a day exists.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let day0 = NaiveDate::from_ymd_opt(2010, 1, 1).unwrap();
let day1 = NaiveDate::from_ymd_opt(2013, 11, 3).unwrap();
let day2 = NaiveDate::from_ymd_opt(2022, 3, 5).unwrap();
let day3 = NaiveDate::from_ymd_opt(2022, 8, 12).unwrap();
let mut cal = CompactCalendar::default();
cal.insert(day1);
cal.insert(day2);
cal.insert(day3);
assert_eq!(cal.first_after(day0), Some(day1));
assert_eq!(cal.first_after(day2), Some(day3));
assert_eq!(cal.first_after(day3), None);Sourcepub fn count(&self) -> u32
pub fn count(&self) -> u32
Count number of days included for this calendar.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let mut cal = CompactCalendar::default();
cal.insert(NaiveDate::from_ymd_opt(2022, 8, 12).unwrap());
cal.insert(NaiveDate::from_ymd_opt(2022, 3, 5).unwrap());
assert_eq!(cal.count(), 2);Sourcepub fn serialize(&self, writer: impl Write) -> Result<()>
pub fn serialize(&self, writer: impl Write) -> Result<()>
Serialize this calendar into a writer.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let mut cal = CompactCalendar::default();
let mut buf1 = Vec::new();
cal.insert(NaiveDate::from_ymd_opt(2022, 8, 12).unwrap());
cal.serialize(&mut buf1).unwrap();
let mut buf2 = Vec::new();
cal.insert(NaiveDate::from_ymd_opt(2022, 3, 5).unwrap());
cal.serialize(&mut buf2).unwrap();
assert_ne!(buf1, buf2);Sourcepub fn deserialize(reader: impl Read) -> Result<Self>
pub fn deserialize(reader: impl Read) -> Result<Self>
Deserialize a calendar from a reader.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let mut cal1 = CompactCalendar::default();
cal1.insert(NaiveDate::from_ymd_opt(2022, 8, 12).unwrap());
cal1.insert(NaiveDate::from_ymd_opt(2022, 3, 5).unwrap());
let mut buf = Vec::new();
cal1.serialize(&mut buf).unwrap();
let cal2 = CompactCalendar::deserialize(buf.as_slice()).unwrap();
assert_eq!(cal1, cal2);Trait Implementations§
Source§impl Clone for CompactCalendar
impl Clone for CompactCalendar
Source§fn clone(&self) -> CompactCalendar
fn clone(&self) -> CompactCalendar
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for CompactCalendar
impl Debug for CompactCalendar
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let mut cal = CompactCalendar::default();
cal.insert(NaiveDate::from_ymd_opt(2022, 8, 12).unwrap());
cal.insert(NaiveDate::from_ymd_opt(2022, 3, 5).unwrap());
assert_eq!(format!("{cal:?}"), "CompactCalendar({2022-03-05, 2022-08-12})");Source§impl Default for CompactCalendar
impl Default for CompactCalendar
Source§impl FromIterator<NaiveDate> for CompactCalendar
impl FromIterator<NaiveDate> for CompactCalendar
Source§fn from_iter<T: IntoIterator<Item = NaiveDate>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = NaiveDate>>(iter: T) -> Self
Create a calendar from a list of dates.
use compact_calendar::CompactCalendar;
use chrono::NaiveDate;
let dates = [
NaiveDate::from_ymd_opt(2013, 11, 3).unwrap(),
NaiveDate::from_ymd_opt(2022, 3, 5).unwrap(),
NaiveDate::from_ymd_opt(2055, 7, 5).unwrap(),
NaiveDate::from_ymd_opt(2013, 11, 3).unwrap(),
];
let cal: CompactCalendar = dates.iter().copied().collect();
assert_eq!(cal.count(), 3);
assert!(cal.contains(dates[0]));Source§impl Hash for CompactCalendar
impl Hash for CompactCalendar
Source§impl Ord for CompactCalendar
impl Ord for CompactCalendar
Source§fn cmp(&self, other: &CompactCalendar) -> Ordering
fn cmp(&self, other: &CompactCalendar) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialEq for CompactCalendar
impl PartialEq for CompactCalendar
Source§impl PartialOrd for CompactCalendar
impl PartialOrd for CompactCalendar
impl Eq for CompactCalendar
impl StructuralPartialEq for CompactCalendar
Auto Trait Implementations§
impl Freeze for CompactCalendar
impl RefUnwindSafe for CompactCalendar
impl Send for CompactCalendar
impl Sync for CompactCalendar
impl Unpin for CompactCalendar
impl UnwindSafe for CompactCalendar
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more