pub struct WeekdaySet(/* private fields */);
Expand description
A collection of Weekday
s stored as a single byte.
This type is Copy
and provides efficient set-like and slice-like operations.
Many operations are const
as well.
Implemented as a bitmask where bits 1-7 correspond to Monday-Sunday.
Implementations§
Source§impl WeekdaySet
impl WeekdaySet
Sourcepub const fn from_array<const C: usize>(days: [Weekday; C]) -> Self
pub const fn from_array<const C: usize>(days: [Weekday; C]) -> Self
Sourcepub const fn single_day(self) -> Option<Weekday>
pub const fn single_day(self) -> Option<Weekday>
Returns Some(day)
if this collection contains exactly one day.
Returns None
otherwise.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).single_day(), Some(Mon));
assert_eq!(WeekdaySet::from_array([Mon, Tue]).single_day(), None);
assert_eq!(WeekdaySet::EMPTY.single_day(), None);
assert_eq!(WeekdaySet::ALL.single_day(), None);
Sourcepub fn insert(&mut self, day: Weekday) -> bool
pub fn insert(&mut self, day: Weekday) -> bool
Adds a day to the collection.
Returns true
if the day was new to the collection.
§Example
use chrono::Weekday::*;
let mut weekdays = WeekdaySet::single(Mon);
assert!(weekdays.insert(Tue));
assert!(!weekdays.insert(Tue));
Sourcepub fn remove(&mut self, day: Weekday) -> bool
pub fn remove(&mut self, day: Weekday) -> bool
Removes a day from the collection.
Returns true
if the collection did contain the day.
§Example
use chrono::Weekday::*;
let mut weekdays = WeekdaySet::single(Mon);
assert!(weekdays.remove(Mon));
assert!(!weekdays.remove(Mon));
Sourcepub const fn is_subset(self, other: Self) -> bool
pub const fn is_subset(self, other: Self) -> bool
Returns true
if other
contains all days in self
.
§Example
use chrono::Weekday::*;
assert!(WeekdaySet::single(Mon).is_subset(WeekdaySet::ALL));
assert!(!WeekdaySet::single(Mon).is_subset(WeekdaySet::EMPTY));
assert!(WeekdaySet::EMPTY.is_subset(WeekdaySet::single(Mon)));
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
Returns days that are in both self
and other
.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).intersection(WeekdaySet::single(Mon)), WeekdaySet::single(Mon));
assert_eq!(WeekdaySet::single(Mon).intersection(WeekdaySet::single(Tue)), WeekdaySet::EMPTY);
assert_eq!(WeekdaySet::ALL.intersection(WeekdaySet::single(Mon)), WeekdaySet::single(Mon));
assert_eq!(WeekdaySet::ALL.intersection(WeekdaySet::EMPTY), WeekdaySet::EMPTY);
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
Returns days that are in either self
or other
.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).union(WeekdaySet::single(Mon)), WeekdaySet::single(Mon));
assert_eq!(WeekdaySet::single(Mon).union(WeekdaySet::single(Tue)), WeekdaySet::from_array([Mon, Tue]));
assert_eq!(WeekdaySet::ALL.union(WeekdaySet::single(Mon)), WeekdaySet::ALL);
assert_eq!(WeekdaySet::ALL.union(WeekdaySet::EMPTY), WeekdaySet::ALL);
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
Returns days that are in self
or other
but not in both.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).symmetric_difference(WeekdaySet::single(Mon)), WeekdaySet::EMPTY);
assert_eq!(WeekdaySet::single(Mon).symmetric_difference(WeekdaySet::single(Tue)), WeekdaySet::from_array([Mon, Tue]));
assert_eq!(
WeekdaySet::ALL.symmetric_difference(WeekdaySet::single(Mon)),
WeekdaySet::from_array([Tue, Wed, Thu, Fri, Sat, Sun]),
);
assert_eq!(WeekdaySet::ALL.symmetric_difference(WeekdaySet::EMPTY), WeekdaySet::ALL);
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
Returns days that are in self
but not in other
.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).difference(WeekdaySet::single(Mon)), WeekdaySet::EMPTY);
assert_eq!(WeekdaySet::single(Mon).difference(WeekdaySet::single(Tue)), WeekdaySet::single(Mon));
assert_eq!(WeekdaySet::EMPTY.difference(WeekdaySet::single(Mon)), WeekdaySet::EMPTY);
Sourcepub const fn first(self) -> Option<Weekday>
pub const fn first(self) -> Option<Weekday>
Get the first day in the collection, starting from Monday.
Returns None
if the collection is empty.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).first(), Some(Mon));
assert_eq!(WeekdaySet::single(Tue).first(), Some(Tue));
assert_eq!(WeekdaySet::ALL.first(), Some(Mon));
assert_eq!(WeekdaySet::EMPTY.first(), None);
Sourcepub fn last(self) -> Option<Weekday>
pub fn last(self) -> Option<Weekday>
Get the last day in the collection, starting from Sunday.
Returns None
if the collection is empty.
§Example
use chrono::Weekday::*;
assert_eq!(WeekdaySet::single(Mon).last(), Some(Mon));
assert_eq!(WeekdaySet::single(Sun).last(), Some(Sun));
assert_eq!(WeekdaySet::from_array([Mon, Tue]).last(), Some(Tue));
assert_eq!(WeekdaySet::EMPTY.last(), None);
Sourcepub const fn iter(self, start: Weekday) -> WeekdaySetIter
pub const fn iter(self, start: Weekday) -> WeekdaySetIter
Iterate over the Weekday
s in the collection starting from a given day.
Wraps around from Sunday to Monday if necessary.
§Example
use chrono::Weekday::*;
let weekdays = WeekdaySet::from_array([Mon, Wed, Fri]);
let mut iter = weekdays.iter(Wed);
assert_eq!(iter.next(), Some(Wed));
assert_eq!(iter.next(), Some(Fri));
assert_eq!(iter.next(), Some(Mon));
assert_eq!(iter.next(), None);
Sourcepub const fn contains(self, day: Weekday) -> bool
pub const fn contains(self, day: Weekday) -> bool
Returns true
if the collection contains the given day.
§Example
use chrono::Weekday::*;
assert!(WeekdaySet::single(Mon).contains(Mon));
assert!(WeekdaySet::from_array([Mon, Tue]).contains(Tue));
assert!(!WeekdaySet::single(Mon).contains(Tue));
Trait Implementations§
Source§impl Clone for WeekdaySet
impl Clone for WeekdaySet
Source§fn clone(&self) -> WeekdaySet
fn clone(&self) -> WeekdaySet
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for WeekdaySet
Print the underlying bitmask, padded to 7 bits.
impl Debug for WeekdaySet
Print the underlying bitmask, padded to 7 bits.
§Example
use chrono::Weekday::*;
assert_eq!(format!("{:?}", WeekdaySet::single(Mon)), "WeekdaySet(0000001)");
assert_eq!(format!("{:?}", WeekdaySet::single(Tue)), "WeekdaySet(0000010)");
assert_eq!(format!("{:?}", WeekdaySet::ALL), "WeekdaySet(1111111)");
Source§impl Default for WeekdaySet
impl Default for WeekdaySet
Source§fn default() -> WeekdaySet
fn default() -> WeekdaySet
Source§impl Display for WeekdaySet
Print the collection as a slice-like list of weekdays.
impl Display for WeekdaySet
Print the collection as a slice-like list of weekdays.
§Example
use chrono::Weekday::*;
assert_eq!("[]", WeekdaySet::EMPTY.to_string());
assert_eq!("[Mon]", WeekdaySet::single(Mon).to_string());
assert_eq!("[Mon, Fri, Sun]", WeekdaySet::from_array([Mon, Fri, Sun]).to_string());