summaryrefslogtreecommitdiffstats
path: root/third_party/rust/time/src/weekday.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--third_party/rust/time/src/weekday.rs148
1 files changed, 148 insertions, 0 deletions
diff --git a/third_party/rust/time/src/weekday.rs b/third_party/rust/time/src/weekday.rs
new file mode 100644
index 0000000000..f499c30eef
--- /dev/null
+++ b/third_party/rust/time/src/weekday.rs
@@ -0,0 +1,148 @@
+//! Days of the week.
+
+use core::fmt::{self, Display};
+use core::str::FromStr;
+
+use Weekday::*;
+
+use crate::error;
+
+/// Days of the week.
+///
+/// As order is dependent on context (Sunday could be either two days after or five days before
+/// Friday), this type does not implement `PartialOrd` or `Ord`.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub enum Weekday {
+ #[allow(clippy::missing_docs_in_private_items)]
+ Monday,
+ #[allow(clippy::missing_docs_in_private_items)]
+ Tuesday,
+ #[allow(clippy::missing_docs_in_private_items)]
+ Wednesday,
+ #[allow(clippy::missing_docs_in_private_items)]
+ Thursday,
+ #[allow(clippy::missing_docs_in_private_items)]
+ Friday,
+ #[allow(clippy::missing_docs_in_private_items)]
+ Saturday,
+ #[allow(clippy::missing_docs_in_private_items)]
+ Sunday,
+}
+
+impl Weekday {
+ /// Get the previous weekday.
+ ///
+ /// ```rust
+ /// # use time::Weekday;
+ /// assert_eq!(Weekday::Tuesday.previous(), Weekday::Monday);
+ /// ```
+ pub const fn previous(self) -> Self {
+ match self {
+ Monday => Sunday,
+ Tuesday => Monday,
+ Wednesday => Tuesday,
+ Thursday => Wednesday,
+ Friday => Thursday,
+ Saturday => Friday,
+ Sunday => Saturday,
+ }
+ }
+
+ /// Get the next weekday.
+ ///
+ /// ```rust
+ /// # use time::Weekday;
+ /// assert_eq!(Weekday::Monday.next(), Weekday::Tuesday);
+ /// ```
+ pub const fn next(self) -> Self {
+ match self {
+ Monday => Tuesday,
+ Tuesday => Wednesday,
+ Wednesday => Thursday,
+ Thursday => Friday,
+ Friday => Saturday,
+ Saturday => Sunday,
+ Sunday => Monday,
+ }
+ }
+
+ /// Get the one-indexed number of days from Monday.
+ ///
+ /// ```rust
+ /// # use time::Weekday;
+ /// assert_eq!(Weekday::Monday.number_from_monday(), 1);
+ /// ```
+ #[doc(alias = "iso_weekday_number")]
+ pub const fn number_from_monday(self) -> u8 {
+ self.number_days_from_monday() + 1
+ }
+
+ /// Get the one-indexed number of days from Sunday.
+ ///
+ /// ```rust
+ /// # use time::Weekday;
+ /// assert_eq!(Weekday::Monday.number_from_sunday(), 2);
+ /// ```
+ pub const fn number_from_sunday(self) -> u8 {
+ self.number_days_from_sunday() + 1
+ }
+
+ /// Get the zero-indexed number of days from Monday.
+ ///
+ /// ```rust
+ /// # use time::Weekday;
+ /// assert_eq!(Weekday::Monday.number_days_from_monday(), 0);
+ /// ```
+ pub const fn number_days_from_monday(self) -> u8 {
+ self as _
+ }
+
+ /// Get the zero-indexed number of days from Sunday.
+ ///
+ /// ```rust
+ /// # use time::Weekday;
+ /// assert_eq!(Weekday::Monday.number_days_from_sunday(), 1);
+ /// ```
+ pub const fn number_days_from_sunday(self) -> u8 {
+ match self {
+ Monday => 1,
+ Tuesday => 2,
+ Wednesday => 3,
+ Thursday => 4,
+ Friday => 5,
+ Saturday => 6,
+ Sunday => 0,
+ }
+ }
+}
+
+impl Display for Weekday {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.write_str(match self {
+ Monday => "Monday",
+ Tuesday => "Tuesday",
+ Wednesday => "Wednesday",
+ Thursday => "Thursday",
+ Friday => "Friday",
+ Saturday => "Saturday",
+ Sunday => "Sunday",
+ })
+ }
+}
+
+impl FromStr for Weekday {
+ type Err = error::InvalidVariant;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ match s {
+ "Monday" => Ok(Monday),
+ "Tuesday" => Ok(Tuesday),
+ "Wednesday" => Ok(Wednesday),
+ "Thursday" => Ok(Thursday),
+ "Friday" => Ok(Friday),
+ "Saturday" => Ok(Saturday),
+ "Sunday" => Ok(Sunday),
+ _ => Err(error::InvalidVariant),
+ }
+ }
+}