recurring_event 0.1.3

Calculate dates for recurring events (daily, weekly, monthly and yearly).
Documentation
//! Various error types returned by methods in this crate.

/// A unified error type for errors returned.
#[derive (Debug, PartialEq)]
pub enum Error {
    /// An error type from the [`time`] crate indicating that a component provided to a method was out of range,
    /// causing a failure.
    ComponentRange(time::error::ComponentRange),

    /// An error indicating that an operation resulted in a date beyond 31st December 9999.
    ///
    /// # Example
    ///
    /// ```
    /// # use time::{macros::datetime};
    /// # use recurring_event::{DailyEvent, Recurrent, error::Error};
    /// let mut event = DailyEvent::new(datetime!(9999-12-31 00:00 UTC));
    /// let error = event.next_date().unwrap_err();
    /// assert_eq!(Error::DateOverflow, error);
    /// ```
    DateOverflow,

    /// An error indicating that a value has not been found.
    ///
    /// # Example
    ///
    /// ```
    /// # use time::{Month, macros::datetime};
    /// # use recurring_event::{YearlyEvent, Recurrent, error::Error};
    /// let mut event = YearlyEvent::new(datetime!(2022-12-25 00:00 UTC));
    ///
    /// // No week days for January.
    /// let error = event.weekdays(Month::January).unwrap_err();
    ///
    /// assert_eq!(Error::NotFound, error);
    /// ```
    NotFound,

    /// An error indicating that a next occurrence date cannot be determined
    /// because the event has no recurrence rules defined.
    ///
    /// # Example
    ///
    /// ```
    /// # use time::{Weekday, macros::datetime};
    /// # use recurring_event::{WeeklyEvent, Recurrent, error::Error};
    /// let mut event = WeeklyEvent::new(datetime!(2022-12-25 00:00 UTC));
    ///
    /// // No rules that indicate on which days of the week the event occur.
    /// let error = event.next_date().unwrap_err();
    ///
    /// assert_eq!(Error::NoRecurrencesDefined, error);
    /// ```
    NoRecurrencesDefined,

    /// An error indicating that a next occurrence date cannot be determined.
    ///
    /// # Example
    ///
    /// ```
    /// # use time::{Month, macros::datetime};
    /// # use recurring_event::{YearlyEvent, Recurrent, error::Error};
    /// let mut event = YearlyEvent::new(datetime!(2022-12-25 00:00 UTC));
    ///
    /// // Recurrence rules set to recur every four years on 29th of February.
    /// // But the event don't start on a leap year.
    /// event.update_frequency(4);
    /// event.insert_monthly_day_ordinal(29, Month::February);
    ///
    /// let error = event.next_date().unwrap_err();
    ///
    /// assert_eq!(Error::NoMatchingRecurrences, error);
    /// ```
    NoMatchingRecurrences,

    /// An internal error indicating a bug in the code.
    UnexpectedValue,
}

impl From<time::error::ComponentRange> for Error {
    fn from(error: time::error::ComponentRange) -> Self {
        Error::ComponentRange(error)
    }
}