pub struct WeekdaySet(u8);Expand description
A collection of Weekdays 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.
Tuple Fields§
§0: u8Implementations§
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);Sourceconst fn split_at(self, weekday: Weekday) -> (Self, Self)
const fn split_at(self, weekday: Weekday) -> (Self, Self)
Split the collection in two at the given day.
Returns a tuple (before, after). before contains all days starting from Monday
up to but not including weekday. after contains all days starting from weekday
up to and including Sunday.
Sourcepub const fn iter(self, start: Weekday) -> WeekdaySetIter ⓘ
pub const fn iter(self, start: Weekday) -> WeekdaySetIter ⓘ
Iterate over the Weekdays 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());