{-# 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.Redshift.Types.ScheduledActionType
-- 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.Redshift.Types.ScheduledActionType where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.Redshift.Internal
import Amazonka.Redshift.Types.PauseClusterMessage
import Amazonka.Redshift.Types.ResizeClusterMessage
import Amazonka.Redshift.Types.ResumeClusterMessage

-- | The action type that specifies an Amazon Redshift API operation that is
-- supported by the Amazon Redshift scheduler.
--
-- /See:/ 'newScheduledActionType' smart constructor.
data ScheduledActionType = ScheduledActionType'
  { -- | An action that runs a @PauseCluster@ API operation.
    ScheduledActionType -> Maybe PauseClusterMessage
pauseCluster :: Prelude.Maybe PauseClusterMessage,
    -- | An action that runs a @ResizeCluster@ API operation.
    ScheduledActionType -> Maybe ResizeClusterMessage
resizeCluster :: Prelude.Maybe ResizeClusterMessage,
    -- | An action that runs a @ResumeCluster@ API operation.
    ScheduledActionType -> Maybe ResumeClusterMessage
resumeCluster :: Prelude.Maybe ResumeClusterMessage
  }
  deriving (ScheduledActionType -> ScheduledActionType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ScheduledActionType -> ScheduledActionType -> Bool
$c/= :: ScheduledActionType -> ScheduledActionType -> Bool
== :: ScheduledActionType -> ScheduledActionType -> Bool
$c== :: ScheduledActionType -> ScheduledActionType -> Bool
Prelude.Eq, ReadPrec [ScheduledActionType]
ReadPrec ScheduledActionType
Int -> ReadS ScheduledActionType
ReadS [ScheduledActionType]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ScheduledActionType]
$creadListPrec :: ReadPrec [ScheduledActionType]
readPrec :: ReadPrec ScheduledActionType
$creadPrec :: ReadPrec ScheduledActionType
readList :: ReadS [ScheduledActionType]
$creadList :: ReadS [ScheduledActionType]
readsPrec :: Int -> ReadS ScheduledActionType
$creadsPrec :: Int -> ReadS ScheduledActionType
Prelude.Read, Int -> ScheduledActionType -> ShowS
[ScheduledActionType] -> ShowS
ScheduledActionType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ScheduledActionType] -> ShowS
$cshowList :: [ScheduledActionType] -> ShowS
show :: ScheduledActionType -> String
$cshow :: ScheduledActionType -> String
showsPrec :: Int -> ScheduledActionType -> ShowS
$cshowsPrec :: Int -> ScheduledActionType -> ShowS
Prelude.Show, forall x. Rep ScheduledActionType x -> ScheduledActionType
forall x. ScheduledActionType -> Rep ScheduledActionType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ScheduledActionType x -> ScheduledActionType
$cfrom :: forall x. ScheduledActionType -> Rep ScheduledActionType x
Prelude.Generic)

-- |
-- Create a value of 'ScheduledActionType' 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:
--
-- 'pauseCluster', 'scheduledActionType_pauseCluster' - An action that runs a @PauseCluster@ API operation.
--
-- 'resizeCluster', 'scheduledActionType_resizeCluster' - An action that runs a @ResizeCluster@ API operation.
--
-- 'resumeCluster', 'scheduledActionType_resumeCluster' - An action that runs a @ResumeCluster@ API operation.
newScheduledActionType ::
  ScheduledActionType
newScheduledActionType :: ScheduledActionType
newScheduledActionType =
  ScheduledActionType'
    { $sel:pauseCluster:ScheduledActionType' :: Maybe PauseClusterMessage
pauseCluster =
        forall a. Maybe a
Prelude.Nothing,
      $sel:resizeCluster:ScheduledActionType' :: Maybe ResizeClusterMessage
resizeCluster = forall a. Maybe a
Prelude.Nothing,
      $sel:resumeCluster:ScheduledActionType' :: Maybe ResumeClusterMessage
resumeCluster = forall a. Maybe a
Prelude.Nothing
    }

-- | An action that runs a @PauseCluster@ API operation.
scheduledActionType_pauseCluster :: Lens.Lens' ScheduledActionType (Prelude.Maybe PauseClusterMessage)
scheduledActionType_pauseCluster :: Lens' ScheduledActionType (Maybe PauseClusterMessage)
scheduledActionType_pauseCluster = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ScheduledActionType' {Maybe PauseClusterMessage
pauseCluster :: Maybe PauseClusterMessage
$sel:pauseCluster:ScheduledActionType' :: ScheduledActionType -> Maybe PauseClusterMessage
pauseCluster} -> Maybe PauseClusterMessage
pauseCluster) (\s :: ScheduledActionType
s@ScheduledActionType' {} Maybe PauseClusterMessage
a -> ScheduledActionType
s {$sel:pauseCluster:ScheduledActionType' :: Maybe PauseClusterMessage
pauseCluster = Maybe PauseClusterMessage
a} :: ScheduledActionType)

-- | An action that runs a @ResizeCluster@ API operation.
scheduledActionType_resizeCluster :: Lens.Lens' ScheduledActionType (Prelude.Maybe ResizeClusterMessage)
scheduledActionType_resizeCluster :: Lens' ScheduledActionType (Maybe ResizeClusterMessage)
scheduledActionType_resizeCluster = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ScheduledActionType' {Maybe ResizeClusterMessage
resizeCluster :: Maybe ResizeClusterMessage
$sel:resizeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResizeClusterMessage
resizeCluster} -> Maybe ResizeClusterMessage
resizeCluster) (\s :: ScheduledActionType
s@ScheduledActionType' {} Maybe ResizeClusterMessage
a -> ScheduledActionType
s {$sel:resizeCluster:ScheduledActionType' :: Maybe ResizeClusterMessage
resizeCluster = Maybe ResizeClusterMessage
a} :: ScheduledActionType)

-- | An action that runs a @ResumeCluster@ API operation.
scheduledActionType_resumeCluster :: Lens.Lens' ScheduledActionType (Prelude.Maybe ResumeClusterMessage)
scheduledActionType_resumeCluster :: Lens' ScheduledActionType (Maybe ResumeClusterMessage)
scheduledActionType_resumeCluster = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ScheduledActionType' {Maybe ResumeClusterMessage
resumeCluster :: Maybe ResumeClusterMessage
$sel:resumeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResumeClusterMessage
resumeCluster} -> Maybe ResumeClusterMessage
resumeCluster) (\s :: ScheduledActionType
s@ScheduledActionType' {} Maybe ResumeClusterMessage
a -> ScheduledActionType
s {$sel:resumeCluster:ScheduledActionType' :: Maybe ResumeClusterMessage
resumeCluster = Maybe ResumeClusterMessage
a} :: ScheduledActionType)

instance Data.FromXML ScheduledActionType where
  parseXML :: [Node] -> Either String ScheduledActionType
parseXML [Node]
x =
    Maybe PauseClusterMessage
-> Maybe ResizeClusterMessage
-> Maybe ResumeClusterMessage
-> ScheduledActionType
ScheduledActionType'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"PauseCluster")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ResizeCluster")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ResumeCluster")

instance Prelude.Hashable ScheduledActionType where
  hashWithSalt :: Int -> ScheduledActionType -> Int
hashWithSalt Int
_salt ScheduledActionType' {Maybe PauseClusterMessage
Maybe ResizeClusterMessage
Maybe ResumeClusterMessage
resumeCluster :: Maybe ResumeClusterMessage
resizeCluster :: Maybe ResizeClusterMessage
pauseCluster :: Maybe PauseClusterMessage
$sel:resumeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResumeClusterMessage
$sel:resizeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResizeClusterMessage
$sel:pauseCluster:ScheduledActionType' :: ScheduledActionType -> Maybe PauseClusterMessage
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PauseClusterMessage
pauseCluster
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResizeClusterMessage
resizeCluster
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResumeClusterMessage
resumeCluster

instance Prelude.NFData ScheduledActionType where
  rnf :: ScheduledActionType -> ()
rnf ScheduledActionType' {Maybe PauseClusterMessage
Maybe ResizeClusterMessage
Maybe ResumeClusterMessage
resumeCluster :: Maybe ResumeClusterMessage
resizeCluster :: Maybe ResizeClusterMessage
pauseCluster :: Maybe PauseClusterMessage
$sel:resumeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResumeClusterMessage
$sel:resizeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResizeClusterMessage
$sel:pauseCluster:ScheduledActionType' :: ScheduledActionType -> Maybe PauseClusterMessage
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe PauseClusterMessage
pauseCluster
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResizeClusterMessage
resizeCluster
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResumeClusterMessage
resumeCluster

instance Data.ToQuery ScheduledActionType where
  toQuery :: ScheduledActionType -> QueryString
toQuery ScheduledActionType' {Maybe PauseClusterMessage
Maybe ResizeClusterMessage
Maybe ResumeClusterMessage
resumeCluster :: Maybe ResumeClusterMessage
resizeCluster :: Maybe ResizeClusterMessage
pauseCluster :: Maybe PauseClusterMessage
$sel:resumeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResumeClusterMessage
$sel:resizeCluster:ScheduledActionType' :: ScheduledActionType -> Maybe ResizeClusterMessage
$sel:pauseCluster:ScheduledActionType' :: ScheduledActionType -> Maybe PauseClusterMessage
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"PauseCluster" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe PauseClusterMessage
pauseCluster,
        ByteString
"ResizeCluster" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ResizeClusterMessage
resizeCluster,
        ByteString
"ResumeCluster" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ResumeClusterMessage
resumeCluster
      ]