summaryrefslogtreecommitdiffstats
path: root/vendor/time/src/month.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/time/src/month.rs')
-rw-r--r--vendor/time/src/month.rs164
1 files changed, 164 insertions, 0 deletions
diff --git a/vendor/time/src/month.rs b/vendor/time/src/month.rs
new file mode 100644
index 000000000..0c657e982
--- /dev/null
+++ b/vendor/time/src/month.rs
@@ -0,0 +1,164 @@
+//! The `Month` enum and its associated `impl`s.
+
+use core::fmt;
+use core::num::NonZeroU8;
+use core::str::FromStr;
+
+use self::Month::*;
+use crate::error;
+
+/// Months of the year.
+#[allow(clippy::missing_docs_in_private_items)] // variants
+#[repr(u8)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub enum Month {
+ January = 1,
+ February = 2,
+ March = 3,
+ April = 4,
+ May = 5,
+ June = 6,
+ July = 7,
+ August = 8,
+ September = 9,
+ October = 10,
+ November = 11,
+ December = 12,
+}
+
+impl Month {
+ /// Create a `Month` from its numerical value.
+ pub(crate) const fn from_number(n: NonZeroU8) -> Result<Self, error::ComponentRange> {
+ match n.get() {
+ 1 => Ok(January),
+ 2 => Ok(February),
+ 3 => Ok(March),
+ 4 => Ok(April),
+ 5 => Ok(May),
+ 6 => Ok(June),
+ 7 => Ok(July),
+ 8 => Ok(August),
+ 9 => Ok(September),
+ 10 => Ok(October),
+ 11 => Ok(November),
+ 12 => Ok(December),
+ n => Err(error::ComponentRange {
+ name: "month",
+ minimum: 1,
+ maximum: 12,
+ value: n as _,
+ conditional_range: false,
+ }),
+ }
+ }
+
+ /// Get the previous month.
+ ///
+ /// ```rust
+ /// # use time::Month;
+ /// assert_eq!(Month::January.previous(), Month::December);
+ /// ```
+ pub const fn previous(self) -> Self {
+ match self {
+ January => December,
+ February => January,
+ March => February,
+ April => March,
+ May => April,
+ June => May,
+ July => June,
+ August => July,
+ September => August,
+ October => September,
+ November => October,
+ December => November,
+ }
+ }
+
+ /// Get the next month.
+ ///
+ /// ```rust
+ /// # use time::Month;
+ /// assert_eq!(Month::January.next(), Month::February);
+ /// ```
+ pub const fn next(self) -> Self {
+ match self {
+ January => February,
+ February => March,
+ March => April,
+ April => May,
+ May => June,
+ June => July,
+ July => August,
+ August => September,
+ September => October,
+ October => November,
+ November => December,
+ December => January,
+ }
+ }
+}
+
+impl fmt::Display for Month {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.write_str(match self {
+ January => "January",
+ February => "February",
+ March => "March",
+ April => "April",
+ May => "May",
+ June => "June",
+ July => "July",
+ August => "August",
+ September => "September",
+ October => "October",
+ November => "November",
+ December => "December",
+ })
+ }
+}
+
+impl FromStr for Month {
+ type Err = error::InvalidVariant;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ match s {
+ "January" => Ok(January),
+ "February" => Ok(February),
+ "March" => Ok(March),
+ "April" => Ok(April),
+ "May" => Ok(May),
+ "June" => Ok(June),
+ "July" => Ok(July),
+ "August" => Ok(August),
+ "September" => Ok(September),
+ "October" => Ok(October),
+ "November" => Ok(November),
+ "December" => Ok(December),
+ _ => Err(error::InvalidVariant),
+ }
+ }
+}
+
+impl From<Month> for u8 {
+ fn from(month: Month) -> Self {
+ month as _
+ }
+}
+
+impl TryFrom<u8> for Month {
+ type Error = error::ComponentRange;
+
+ fn try_from(value: u8) -> Result<Self, Self::Error> {
+ match NonZeroU8::new(value) {
+ Some(value) => Self::from_number(value),
+ None => Err(error::ComponentRange {
+ name: "month",
+ minimum: 1,
+ maximum: 12,
+ value: 0,
+ conditional_range: false,
+ }),
+ }
+ }
+}