{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.MacieV2.Types.JobScheduleFrequency
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MacieV2.Types.JobScheduleFrequency where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MacieV2.Types.DailySchedule
import Amazonka.MacieV2.Types.MonthlySchedule
import Amazonka.MacieV2.Types.WeeklySchedule
import qualified Amazonka.Prelude as Prelude

-- | Specifies the recurrence pattern for running a classification job.
--
-- /See:/ 'newJobScheduleFrequency' smart constructor.
data JobScheduleFrequency = JobScheduleFrequency'
  { -- | Specifies a daily recurrence pattern for running the job.
    JobScheduleFrequency -> Maybe DailySchedule
dailySchedule :: Prelude.Maybe DailySchedule,
    -- | Specifies a monthly recurrence pattern for running the job.
    JobScheduleFrequency -> Maybe MonthlySchedule
monthlySchedule :: Prelude.Maybe MonthlySchedule,
    -- | Specifies a weekly recurrence pattern for running the job.
    JobScheduleFrequency -> Maybe WeeklySchedule
weeklySchedule :: Prelude.Maybe WeeklySchedule
  }
  deriving (JobScheduleFrequency -> JobScheduleFrequency -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JobScheduleFrequency -> JobScheduleFrequency -> Bool
$c/= :: JobScheduleFrequency -> JobScheduleFrequency -> Bool
== :: JobScheduleFrequency -> JobScheduleFrequency -> Bool
$c== :: JobScheduleFrequency -> JobScheduleFrequency -> Bool
Prelude.Eq, ReadPrec [JobScheduleFrequency]
ReadPrec JobScheduleFrequency
Int -> ReadS JobScheduleFrequency
ReadS [JobScheduleFrequency]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [JobScheduleFrequency]
$creadListPrec :: ReadPrec [JobScheduleFrequency]
readPrec :: ReadPrec JobScheduleFrequency
$creadPrec :: ReadPrec JobScheduleFrequency
readList :: ReadS [JobScheduleFrequency]
$creadList :: ReadS [JobScheduleFrequency]
readsPrec :: Int -> ReadS JobScheduleFrequency
$creadsPrec :: Int -> ReadS JobScheduleFrequency
Prelude.Read, Int -> JobScheduleFrequency -> ShowS
[JobScheduleFrequency] -> ShowS
JobScheduleFrequency -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [JobScheduleFrequency] -> ShowS
$cshowList :: [JobScheduleFrequency] -> ShowS
show :: JobScheduleFrequency -> String
$cshow :: JobScheduleFrequency -> String
showsPrec :: Int -> JobScheduleFrequency -> ShowS
$cshowsPrec :: Int -> JobScheduleFrequency -> ShowS
Prelude.Show, forall x. Rep JobScheduleFrequency x -> JobScheduleFrequency
forall x. JobScheduleFrequency -> Rep JobScheduleFrequency x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep JobScheduleFrequency x -> JobScheduleFrequency
$cfrom :: forall x. JobScheduleFrequency -> Rep JobScheduleFrequency x
Prelude.Generic)

-- |
-- Create a value of 'JobScheduleFrequency' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'dailySchedule', 'jobScheduleFrequency_dailySchedule' - Specifies a daily recurrence pattern for running the job.
--
-- 'monthlySchedule', 'jobScheduleFrequency_monthlySchedule' - Specifies a monthly recurrence pattern for running the job.
--
-- 'weeklySchedule', 'jobScheduleFrequency_weeklySchedule' - Specifies a weekly recurrence pattern for running the job.
newJobScheduleFrequency ::
  JobScheduleFrequency
newJobScheduleFrequency :: JobScheduleFrequency
newJobScheduleFrequency =
  JobScheduleFrequency'
    { $sel:dailySchedule:JobScheduleFrequency' :: Maybe DailySchedule
dailySchedule =
        forall a. Maybe a
Prelude.Nothing,
      $sel:monthlySchedule:JobScheduleFrequency' :: Maybe MonthlySchedule
monthlySchedule = forall a. Maybe a
Prelude.Nothing,
      $sel:weeklySchedule:JobScheduleFrequency' :: Maybe WeeklySchedule
weeklySchedule = forall a. Maybe a
Prelude.Nothing
    }

-- | Specifies a daily recurrence pattern for running the job.
jobScheduleFrequency_dailySchedule :: Lens.Lens' JobScheduleFrequency (Prelude.Maybe DailySchedule)
jobScheduleFrequency_dailySchedule :: Lens' JobScheduleFrequency (Maybe DailySchedule)
jobScheduleFrequency_dailySchedule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\JobScheduleFrequency' {Maybe DailySchedule
dailySchedule :: Maybe DailySchedule
$sel:dailySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe DailySchedule
dailySchedule} -> Maybe DailySchedule
dailySchedule) (\s :: JobScheduleFrequency
s@JobScheduleFrequency' {} Maybe DailySchedule
a -> JobScheduleFrequency
s {$sel:dailySchedule:JobScheduleFrequency' :: Maybe DailySchedule
dailySchedule = Maybe DailySchedule
a} :: JobScheduleFrequency)

-- | Specifies a monthly recurrence pattern for running the job.
jobScheduleFrequency_monthlySchedule :: Lens.Lens' JobScheduleFrequency (Prelude.Maybe MonthlySchedule)
jobScheduleFrequency_monthlySchedule :: Lens' JobScheduleFrequency (Maybe MonthlySchedule)
jobScheduleFrequency_monthlySchedule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\JobScheduleFrequency' {Maybe MonthlySchedule
monthlySchedule :: Maybe MonthlySchedule
$sel:monthlySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe MonthlySchedule
monthlySchedule} -> Maybe MonthlySchedule
monthlySchedule) (\s :: JobScheduleFrequency
s@JobScheduleFrequency' {} Maybe MonthlySchedule
a -> JobScheduleFrequency
s {$sel:monthlySchedule:JobScheduleFrequency' :: Maybe MonthlySchedule
monthlySchedule = Maybe MonthlySchedule
a} :: JobScheduleFrequency)

-- | Specifies a weekly recurrence pattern for running the job.
jobScheduleFrequency_weeklySchedule :: Lens.Lens' JobScheduleFrequency (Prelude.Maybe WeeklySchedule)
jobScheduleFrequency_weeklySchedule :: Lens' JobScheduleFrequency (Maybe WeeklySchedule)
jobScheduleFrequency_weeklySchedule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\JobScheduleFrequency' {Maybe WeeklySchedule
weeklySchedule :: Maybe WeeklySchedule
$sel:weeklySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe WeeklySchedule
weeklySchedule} -> Maybe WeeklySchedule
weeklySchedule) (\s :: JobScheduleFrequency
s@JobScheduleFrequency' {} Maybe WeeklySchedule
a -> JobScheduleFrequency
s {$sel:weeklySchedule:JobScheduleFrequency' :: Maybe WeeklySchedule
weeklySchedule = Maybe WeeklySchedule
a} :: JobScheduleFrequency)

instance Data.FromJSON JobScheduleFrequency where
  parseJSON :: Value -> Parser JobScheduleFrequency
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"JobScheduleFrequency"
      ( \Object
x ->
          Maybe DailySchedule
-> Maybe MonthlySchedule
-> Maybe WeeklySchedule
-> JobScheduleFrequency
JobScheduleFrequency'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"dailySchedule")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"monthlySchedule")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"weeklySchedule")
      )

instance Prelude.Hashable JobScheduleFrequency where
  hashWithSalt :: Int -> JobScheduleFrequency -> Int
hashWithSalt Int
_salt JobScheduleFrequency' {Maybe DailySchedule
Maybe MonthlySchedule
Maybe WeeklySchedule
weeklySchedule :: Maybe WeeklySchedule
monthlySchedule :: Maybe MonthlySchedule
dailySchedule :: Maybe DailySchedule
$sel:weeklySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe WeeklySchedule
$sel:monthlySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe MonthlySchedule
$sel:dailySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe DailySchedule
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DailySchedule
dailySchedule
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MonthlySchedule
monthlySchedule
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe WeeklySchedule
weeklySchedule

instance Prelude.NFData JobScheduleFrequency where
  rnf :: JobScheduleFrequency -> ()
rnf JobScheduleFrequency' {Maybe DailySchedule
Maybe MonthlySchedule
Maybe WeeklySchedule
weeklySchedule :: Maybe WeeklySchedule
monthlySchedule :: Maybe MonthlySchedule
dailySchedule :: Maybe DailySchedule
$sel:weeklySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe WeeklySchedule
$sel:monthlySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe MonthlySchedule
$sel:dailySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe DailySchedule
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DailySchedule
dailySchedule
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MonthlySchedule
monthlySchedule
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe WeeklySchedule
weeklySchedule

instance Data.ToJSON JobScheduleFrequency where
  toJSON :: JobScheduleFrequency -> Value
toJSON JobScheduleFrequency' {Maybe DailySchedule
Maybe MonthlySchedule
Maybe WeeklySchedule
weeklySchedule :: Maybe WeeklySchedule
monthlySchedule :: Maybe MonthlySchedule
dailySchedule :: Maybe DailySchedule
$sel:weeklySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe WeeklySchedule
$sel:monthlySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe MonthlySchedule
$sel:dailySchedule:JobScheduleFrequency' :: JobScheduleFrequency -> Maybe DailySchedule
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"dailySchedule" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DailySchedule
dailySchedule,
            (Key
"monthlySchedule" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe MonthlySchedule
monthlySchedule,
            (Key
"weeklySchedule" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe WeeklySchedule
weeklySchedule
          ]
      )