packages feed

saturn-0.3.1.0: source/libraries/unstable/Saturn/Unstable/Constant.hs

module Saturn.Unstable.Constant where

import qualified Data.Maybe as Maybe
import qualified Saturn.Unstable.Type.Day as Day
import qualified Saturn.Unstable.Type.Element as Element
import qualified Saturn.Unstable.Type.Field as Field
import qualified Saturn.Unstable.Type.Hour as Hour
import qualified Saturn.Unstable.Type.Minute as Minute
import qualified Saturn.Unstable.Type.Month as Month
import qualified Saturn.Unstable.Type.Number as Number
import qualified Saturn.Unstable.Type.Schedule as Schedule
import qualified Saturn.Unstable.Type.Weekday as Weekday
import qualified Saturn.Unstable.Type.Wildcard as Wildcard

-- | > "* * * * *"
everyMinute :: Schedule.Schedule
everyMinute = Maybe.fromMaybe (error "Saturn.Unstable.Constant.everyMinute") $ do
  let wildcard = Field.fromEither . Left $ Wildcard.fromUnit ()
  minute <- Minute.fromField wildcard
  hour <- Hour.fromField wildcard
  day <- Day.fromField wildcard
  month <- Month.fromField wildcard
  weekday <- Weekday.fromField wildcard
  pure
    Schedule.Schedule
      { Schedule.minute = minute,
        Schedule.hour = hour,
        Schedule.day = day,
        Schedule.month = month,
        Schedule.weekday = weekday
      }

-- | > "0 * * * *"
hourly :: Schedule.Schedule
hourly = Maybe.fromMaybe (error "Saturn.Unstable.Constant.hourly") $ do
  minute <-
    Minute.fromField
      . Field.fromEither
      . Right
      . pure
      . Element.fromEither
      . Right
      $ Number.fromWord8 0
  pure everyMinute {Schedule.minute = minute}

-- | > "0 0 * * *"
daily :: Schedule.Schedule
daily = Maybe.fromMaybe (error "Saturn.Unstable.Constant.daily") $ do
  hour <-
    Hour.fromField
      . Field.fromEither
      . Right
      . pure
      . Element.fromEither
      . Right
      $ Number.fromWord8 0
  pure hourly {Schedule.hour = hour}

-- | > "0 0 * * 0"
weekly :: Schedule.Schedule
weekly = Maybe.fromMaybe (error "Saturn.Unstable.Constant.weekly") $ do
  weekday <-
    Weekday.fromField
      . Field.fromEither
      . Right
      . pure
      . Element.fromEither
      . Right
      $ Number.fromWord8 0
  pure daily {Schedule.weekday = weekday}

-- | > "0 0 1 * *"
monthly :: Schedule.Schedule
monthly = Maybe.fromMaybe (error "Saturn.Unstable.Constant.monthly") $ do
  day <-
    Day.fromField
      . Field.fromEither
      . Right
      . pure
      . Element.fromEither
      . Right
      $ Number.fromWord8 1
  pure daily {Schedule.day = day}

-- | > "0 0 1 1 *"
yearly :: Schedule.Schedule
yearly = Maybe.fromMaybe (error "Saturn.Unstable.Constant.yearly") $ do
  month <-
    Month.fromField
      . Field.fromEither
      . Right
      . pure
      . Element.fromEither
      . Right
      $ Number.fromWord8 1
  pure monthly {Schedule.month = month}