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());
Source§impl FromIterator<Weekday> for WeekdaySet
impl FromIterator<Weekday> for WeekdaySet
Source§impl Hash for WeekdaySet
impl Hash for WeekdaySet
Source§impl Ord for WeekdaySet
impl Ord for WeekdaySet
Source§fn cmp(&self, other: &WeekdaySet) -> Ordering
fn cmp(&self, other: &WeekdaySet) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for WeekdaySet
impl PartialEq for WeekdaySet
Source§impl PartialOrd for WeekdaySet
impl PartialOrd for WeekdaySet
impl Copy for WeekdaySet
impl Eq for WeekdaySet
impl StructuralPartialEq for WeekdaySet
Auto Trait Implementations§
impl Freeze for WeekdaySet
impl RefUnwindSafe for WeekdaySet
impl Send for WeekdaySet
impl Sync for WeekdaySet
impl Unpin for WeekdaySet
impl UnwindSafe for WeekdaySet
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte