pub struct WeekdaySet(/* private fields */);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.
Implementations§
Source§impl WeekdaySet
impl WeekdaySet
Sourcepub const EMPTY: WeekdaySet
pub const EMPTY: WeekdaySet
An empty WeekdaySet.
Sourcepub const ALL: WeekdaySet
pub const ALL: WeekdaySet
A WeekdaySet containing all seven Weekdays.
Sourcepub const fn from_array<const C: usize>(days: [Weekday; C]) -> WeekdaySet
pub const fn from_array<const C: usize>(days: [Weekday; C]) -> WeekdaySet
Sourcepub const fn single(weekday: Weekday) -> WeekdaySet
pub const fn single(weekday: Weekday) -> WeekdaySet
Create a WeekdaySet from a single Weekday.
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: WeekdaySet) -> bool
pub const fn is_subset(self, other: WeekdaySet) -> 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: WeekdaySet) -> WeekdaySet
pub const fn intersection(self, other: WeekdaySet) -> WeekdaySet
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: WeekdaySet) -> WeekdaySet
pub const fn union(self, other: WeekdaySet) -> WeekdaySet
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: WeekdaySet) -> WeekdaySet
pub const fn symmetric_difference(self, other: WeekdaySet) -> WeekdaySet
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: WeekdaySet) -> WeekdaySet
pub const fn difference(self, other: WeekdaySet) -> WeekdaySet
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 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());Source§impl FromIterator<Weekday> for WeekdaySet
impl FromIterator<Weekday> for WeekdaySet
Source§fn from_iter<T>(iter: T) -> WeekdaySetwhere
T: IntoIterator<Item = Weekday>,
fn from_iter<T>(iter: T) -> WeekdaySetwhere
T: IntoIterator<Item = Weekday>,
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,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().