module Stratosphere.ResourceAttributes.UpdatePolicy where
import Stratosphere.Prelude
import Stratosphere.Property
import Stratosphere.ResourceAttributes.AutoScalingReplacingUpdatePolicy
import Stratosphere.ResourceAttributes.AutoScalingRollingUpdatePolicy
import Stratosphere.ResourceAttributes.AutoScalingScheduledActionPolicy
import qualified Data.Aeson as JSON
data UpdatePolicy = UpdatePolicy
{ UpdatePolicy -> Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
, UpdatePolicy -> Maybe AutoScalingRollingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
, UpdatePolicy -> Maybe AutoScalingScheduledActionPolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
}
deriving (Int -> UpdatePolicy -> ShowS
[UpdatePolicy] -> ShowS
UpdatePolicy -> String
(Int -> UpdatePolicy -> ShowS)
-> (UpdatePolicy -> String)
-> ([UpdatePolicy] -> ShowS)
-> Show UpdatePolicy
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UpdatePolicy -> ShowS
showsPrec :: Int -> UpdatePolicy -> ShowS
$cshow :: UpdatePolicy -> String
show :: UpdatePolicy -> String
$cshowList :: [UpdatePolicy] -> ShowS
showList :: [UpdatePolicy] -> ShowS
Show, UpdatePolicy -> UpdatePolicy -> Bool
(UpdatePolicy -> UpdatePolicy -> Bool)
-> (UpdatePolicy -> UpdatePolicy -> Bool) -> Eq UpdatePolicy
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UpdatePolicy -> UpdatePolicy -> Bool
== :: UpdatePolicy -> UpdatePolicy -> Bool
$c/= :: UpdatePolicy -> UpdatePolicy -> Bool
/= :: UpdatePolicy -> UpdatePolicy -> Bool
Eq, (forall x. UpdatePolicy -> Rep UpdatePolicy x)
-> (forall x. Rep UpdatePolicy x -> UpdatePolicy)
-> Generic UpdatePolicy
forall x. Rep UpdatePolicy x -> UpdatePolicy
forall x. UpdatePolicy -> Rep UpdatePolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. UpdatePolicy -> Rep UpdatePolicy x
from :: forall x. UpdatePolicy -> Rep UpdatePolicy x
$cto :: forall x. Rep UpdatePolicy x -> UpdatePolicy
to :: forall x. Rep UpdatePolicy x -> UpdatePolicy
Generic)
instance Property "ReplacingUpdate" UpdatePolicy where
type PropertyType "ReplacingUpdate" UpdatePolicy = AutoScalingReplacingUpdatePolicy
set :: PropertyType "ReplacingUpdate" UpdatePolicy
-> UpdatePolicy -> UpdatePolicy
set PropertyType "ReplacingUpdate" UpdatePolicy
newValue UpdatePolicy{Maybe AutoScalingScheduledActionPolicy
Maybe AutoScalingRollingUpdatePolicy
Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: UpdatePolicy -> Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: UpdatePolicy -> Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: UpdatePolicy -> Maybe AutoScalingScheduledActionPolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
..} = UpdatePolicy{replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate = AutoScalingReplacingUpdatePolicy
-> Maybe AutoScalingReplacingUpdatePolicy
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PropertyType "ReplacingUpdate" UpdatePolicy
AutoScalingReplacingUpdatePolicy
newValue, Maybe AutoScalingScheduledActionPolicy
Maybe AutoScalingRollingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
..}
instance Property "RollingUpdate" UpdatePolicy where
type PropertyType "RollingUpdate" UpdatePolicy = AutoScalingRollingUpdatePolicy
set :: PropertyType "RollingUpdate" UpdatePolicy
-> UpdatePolicy -> UpdatePolicy
set PropertyType "RollingUpdate" UpdatePolicy
newValue UpdatePolicy{Maybe AutoScalingScheduledActionPolicy
Maybe AutoScalingRollingUpdatePolicy
Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: UpdatePolicy -> Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: UpdatePolicy -> Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: UpdatePolicy -> Maybe AutoScalingScheduledActionPolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
..} = UpdatePolicy{rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
rollingUpdate = AutoScalingRollingUpdatePolicy
-> Maybe AutoScalingRollingUpdatePolicy
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PropertyType "RollingUpdate" UpdatePolicy
AutoScalingRollingUpdatePolicy
newValue, Maybe AutoScalingScheduledActionPolicy
Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
..}
instance Property "ScheduledAction" UpdatePolicy where
type PropertyType "ScheduledAction" UpdatePolicy = AutoScalingScheduledActionPolicy
set :: PropertyType "ScheduledAction" UpdatePolicy
-> UpdatePolicy -> UpdatePolicy
set PropertyType "ScheduledAction" UpdatePolicy
newValue UpdatePolicy{Maybe AutoScalingScheduledActionPolicy
Maybe AutoScalingRollingUpdatePolicy
Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: UpdatePolicy -> Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: UpdatePolicy -> Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: UpdatePolicy -> Maybe AutoScalingScheduledActionPolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
..} = UpdatePolicy{scheduledAction :: Maybe AutoScalingScheduledActionPolicy
scheduledAction = AutoScalingScheduledActionPolicy
-> Maybe AutoScalingScheduledActionPolicy
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PropertyType "ScheduledAction" UpdatePolicy
AutoScalingScheduledActionPolicy
newValue, Maybe AutoScalingRollingUpdatePolicy
Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
..}
instance JSON.ToJSON UpdatePolicy where
toJSON :: UpdatePolicy -> Value
toJSON UpdatePolicy{Maybe AutoScalingScheduledActionPolicy
Maybe AutoScalingRollingUpdatePolicy
Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate :: UpdatePolicy -> Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: UpdatePolicy -> Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: UpdatePolicy -> Maybe AutoScalingScheduledActionPolicy
replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
scheduledAction :: Maybe AutoScalingScheduledActionPolicy
..}
= [Pair] -> Value
JSON.object
([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
[ (AutoScalingReplacingUpdatePolicy -> Pair)
-> Maybe AutoScalingReplacingUpdatePolicy -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key
"ReplacingUpdate",) (Value -> Pair)
-> (AutoScalingReplacingUpdatePolicy -> Value)
-> AutoScalingReplacingUpdatePolicy
-> Pair
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AutoScalingReplacingUpdatePolicy -> Value
forall a. ToJSON a => a -> Value
JSON.toJSON) Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate
, (AutoScalingRollingUpdatePolicy -> Pair)
-> Maybe AutoScalingRollingUpdatePolicy -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key
"RollingUpdate",) (Value -> Pair)
-> (AutoScalingRollingUpdatePolicy -> Value)
-> AutoScalingRollingUpdatePolicy
-> Pair
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AutoScalingRollingUpdatePolicy -> Value
forall a. ToJSON a => a -> Value
JSON.toJSON) Maybe AutoScalingRollingUpdatePolicy
rollingUpdate
, (AutoScalingScheduledActionPolicy -> Pair)
-> Maybe AutoScalingScheduledActionPolicy -> Maybe Pair
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Key
"ScheduledAction",) (Value -> Pair)
-> (AutoScalingScheduledActionPolicy -> Value)
-> AutoScalingScheduledActionPolicy
-> Pair
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AutoScalingScheduledActionPolicy -> Value
forall a. ToJSON a => a -> Value
JSON.toJSON) Maybe AutoScalingScheduledActionPolicy
scheduledAction
]
mkUpdatePolicy :: UpdatePolicy
mkUpdatePolicy :: UpdatePolicy
mkUpdatePolicy =
UpdatePolicy
{ replacingUpdate :: Maybe AutoScalingReplacingUpdatePolicy
replacingUpdate = Maybe AutoScalingReplacingUpdatePolicy
forall a. Maybe a
Nothing
, rollingUpdate :: Maybe AutoScalingRollingUpdatePolicy
rollingUpdate = Maybe AutoScalingRollingUpdatePolicy
forall a. Maybe a
Nothing
, scheduledAction :: Maybe AutoScalingScheduledActionPolicy
scheduledAction = Maybe AutoScalingScheduledActionPolicy
forall a. Maybe a
Nothing
}