{-|
Module      : Google.Cloud.Compute.Instance
Copyright   : (c) 2025 Tushar
License     : MIT
Maintainer  : 
Stability   : experimental

This module provides types and functions for interacting with Google Cloud Platform (GCP)
Compute Engine instances. It supports common operations such as listing, creating, deleting,
starting, and stopping instances, along with detailed configuration of instance properties.

All functions communicate with the GCP Compute Engine API v1 and return either an error
message ('Left') or a parsed response object ('Right').

For more information on the underlying API, see:
<https://cloud.google.com/compute/docs/reference/rest/v1/instances GCP Compute Instances Documentation>
-}

{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}

module Google.Cloud.Compute.Instance
  ( -- Data Types
    InstanceMetadata (..)
  , InstanceDeleteResp (..)
  , InstanceStartResponse (..)
  , RunDuration (..)
  , OnInstanceTerminationAction (..)
  , Scheduling (..)
  , InstanceTerminationAction (..)
  , NodeAffinity (..)
  , Warning (..)
  , GuestAccelerator (..)
  , ReservationAffinity (..)
  , DisplayDevice (..)
  , ShieldedInstanceConfig (..)
  , ShieldedInstanceIntegrityPolicy (..)
  , UpdateAutoLearnPolicy (..)
  , ConfidentialInstanceConfig (..)
  , InstanceEncryptionKey (..)
  , NetworkPerformanceConfig (..)
  , ResourceStatus (..)
  , InstanceList (..)
  , Error_ (..)
  , ErrorDetail (..)
  , DetailedError (..)
  , ErrorInfo (..)
  , QuotaInfo (..)
  , Help (..)
  , Link (..)
  , LocalizedMessage (..)
  -- Query Parameter Types
  , ListInstancesQuery (..)
  , RequestIdQuery (..)
  , InsertInstanceOps (..)
  -- Functions
  , listInstances
  , deleteInstance
  , startInstance
  , stopInstance
  , insertInstance
  -- Default Query Constructors
  , defaultListInstancesQuery
  , defaultInsertInstanceOps
  , defaultRequestIdQuery
  )
where

import Data.Aeson
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BS8
import Data.Maybe (catMaybes)
import Data.Text (Text)
import Google.Cloud.Common.Core
import Google.Cloud.Compute.Common
import qualified Data.Map.Strict as Map

-- ** Query Parameter Types**

-- | Query parameters for listing instances
data ListInstancesQuery = ListInstancesQuery
  { ListInstancesQuery -> Maybe [Char]
filter_ :: Maybe String
    -- ^ Filter expression for filtering listed instances
  , ListInstancesQuery -> Maybe Int
maxResults :: Maybe Int
    -- ^ Maximum number of results per page
  , ListInstancesQuery -> Maybe [Char]
orderBy :: Maybe String
    -- ^ Sort order for results
  , ListInstancesQuery -> Maybe [Char]
pageToken :: Maybe String
    -- ^ Page token for paginated results
  , ListInstancesQuery -> Maybe Bool
returnPartialSuccess :: Maybe Bool
    -- ^ Whether to return partial success results
  }
  deriving (Int -> ListInstancesQuery -> ShowS
[ListInstancesQuery] -> ShowS
ListInstancesQuery -> [Char]
(Int -> ListInstancesQuery -> ShowS)
-> (ListInstancesQuery -> [Char])
-> ([ListInstancesQuery] -> ShowS)
-> Show ListInstancesQuery
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ListInstancesQuery -> ShowS
showsPrec :: Int -> ListInstancesQuery -> ShowS
$cshow :: ListInstancesQuery -> [Char]
show :: ListInstancesQuery -> [Char]
$cshowList :: [ListInstancesQuery] -> ShowS
showList :: [ListInstancesQuery] -> ShowS
Show, ListInstancesQuery -> ListInstancesQuery -> Bool
(ListInstancesQuery -> ListInstancesQuery -> Bool)
-> (ListInstancesQuery -> ListInstancesQuery -> Bool)
-> Eq ListInstancesQuery
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ListInstancesQuery -> ListInstancesQuery -> Bool
== :: ListInstancesQuery -> ListInstancesQuery -> Bool
$c/= :: ListInstancesQuery -> ListInstancesQuery -> Bool
/= :: ListInstancesQuery -> ListInstancesQuery -> Bool
Eq)

-- Query parameters for operations with requestId (start, stop, delete)
data RequestIdQuery = RequestIdQuery
  { RequestIdQuery -> Maybe [Char]
requestId :: Maybe String
  }
  deriving (Int -> RequestIdQuery -> ShowS
[RequestIdQuery] -> ShowS
RequestIdQuery -> [Char]
(Int -> RequestIdQuery -> ShowS)
-> (RequestIdQuery -> [Char])
-> ([RequestIdQuery] -> ShowS)
-> Show RequestIdQuery
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RequestIdQuery -> ShowS
showsPrec :: Int -> RequestIdQuery -> ShowS
$cshow :: RequestIdQuery -> [Char]
show :: RequestIdQuery -> [Char]
$cshowList :: [RequestIdQuery] -> ShowS
showList :: [RequestIdQuery] -> ShowS
Show, RequestIdQuery -> RequestIdQuery -> Bool
(RequestIdQuery -> RequestIdQuery -> Bool)
-> (RequestIdQuery -> RequestIdQuery -> Bool) -> Eq RequestIdQuery
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RequestIdQuery -> RequestIdQuery -> Bool
== :: RequestIdQuery -> RequestIdQuery -> Bool
$c/= :: RequestIdQuery -> RequestIdQuery -> Bool
/= :: RequestIdQuery -> RequestIdQuery -> Bool
Eq)

-- ** Data Types with Custom JSON Instances**

data RunDuration
  = TerminationTime String
  deriving (Int -> RunDuration -> ShowS
[RunDuration] -> ShowS
RunDuration -> [Char]
(Int -> RunDuration -> ShowS)
-> (RunDuration -> [Char])
-> ([RunDuration] -> ShowS)
-> Show RunDuration
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RunDuration -> ShowS
showsPrec :: Int -> RunDuration -> ShowS
$cshow :: RunDuration -> [Char]
show :: RunDuration -> [Char]
$cshowList :: [RunDuration] -> ShowS
showList :: [RunDuration] -> ShowS
Show, RunDuration -> RunDuration -> Bool
(RunDuration -> RunDuration -> Bool)
-> (RunDuration -> RunDuration -> Bool) -> Eq RunDuration
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RunDuration -> RunDuration -> Bool
== :: RunDuration -> RunDuration -> Bool
$c/= :: RunDuration -> RunDuration -> Bool
/= :: RunDuration -> RunDuration -> Bool
Eq)

instance FromJSON RunDuration where
  parseJSON :: Value -> Parser RunDuration
parseJSON = [Char]
-> (Object -> Parser RunDuration) -> Value -> Parser RunDuration
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"RunDuration" ((Object -> Parser RunDuration) -> Value -> Parser RunDuration)
-> (Object -> Parser RunDuration) -> Value -> Parser RunDuration
forall a b. (a -> b) -> a -> b
$ \Object
o -> [Char] -> RunDuration
TerminationTime ([Char] -> RunDuration) -> Parser [Char] -> Parser RunDuration
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"terminationTime"

instance ToJSON RunDuration where
  toJSON :: RunDuration -> Value
toJSON (TerminationTime [Char]
t) = [Pair] -> Value
object [Key
"terminationTime" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
t]

data OnInstanceTerminationAction = DiscardLocalSsd {OnInstanceTerminationAction -> Bool
discardLocalSsd :: Bool}
  deriving (Int -> OnInstanceTerminationAction -> ShowS
[OnInstanceTerminationAction] -> ShowS
OnInstanceTerminationAction -> [Char]
(Int -> OnInstanceTerminationAction -> ShowS)
-> (OnInstanceTerminationAction -> [Char])
-> ([OnInstanceTerminationAction] -> ShowS)
-> Show OnInstanceTerminationAction
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OnInstanceTerminationAction -> ShowS
showsPrec :: Int -> OnInstanceTerminationAction -> ShowS
$cshow :: OnInstanceTerminationAction -> [Char]
show :: OnInstanceTerminationAction -> [Char]
$cshowList :: [OnInstanceTerminationAction] -> ShowS
showList :: [OnInstanceTerminationAction] -> ShowS
Show, OnInstanceTerminationAction -> OnInstanceTerminationAction -> Bool
(OnInstanceTerminationAction
 -> OnInstanceTerminationAction -> Bool)
-> (OnInstanceTerminationAction
    -> OnInstanceTerminationAction -> Bool)
-> Eq OnInstanceTerminationAction
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OnInstanceTerminationAction -> OnInstanceTerminationAction -> Bool
== :: OnInstanceTerminationAction -> OnInstanceTerminationAction -> Bool
$c/= :: OnInstanceTerminationAction -> OnInstanceTerminationAction -> Bool
/= :: OnInstanceTerminationAction -> OnInstanceTerminationAction -> Bool
Eq)

instance FromJSON OnInstanceTerminationAction where
  parseJSON :: Value -> Parser OnInstanceTerminationAction
parseJSON = [Char]
-> (Object -> Parser OnInstanceTerminationAction)
-> Value
-> Parser OnInstanceTerminationAction
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"OnInstanceTerminationAction" ((Object -> Parser OnInstanceTerminationAction)
 -> Value -> Parser OnInstanceTerminationAction)
-> (Object -> Parser OnInstanceTerminationAction)
-> Value
-> Parser OnInstanceTerminationAction
forall a b. (a -> b) -> a -> b
$ \Object
o -> Bool -> OnInstanceTerminationAction
DiscardLocalSsd (Bool -> OnInstanceTerminationAction)
-> Parser Bool -> Parser OnInstanceTerminationAction
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"discardLocalSsd"

instance ToJSON OnInstanceTerminationAction where
  toJSON :: OnInstanceTerminationAction -> Value
toJSON (DiscardLocalSsd Bool
b) = [Pair] -> Value
object [Key
"discardLocalSsd" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
b]

data Scheduling = Scheduling
  { Scheduling -> [Char]
onHostMaintenance :: String
  , Scheduling -> Bool
automaticRestart :: Bool
  , Scheduling -> Bool
preemptible :: Bool
  , Scheduling -> [NodeAffinity]
nodeAffinities :: [NodeAffinity]
  , Scheduling -> Int
minNodeCpus :: Int
  , Scheduling -> [Char]
locationHint :: String
  , Scheduling -> Int
availabilityDomain :: Int
  , Scheduling -> [Char]
provisioningModel :: String
  , Scheduling -> InstanceTerminationAction
instanceTerminationAction :: InstanceTerminationAction
  }
  deriving (Int -> Scheduling -> ShowS
[Scheduling] -> ShowS
Scheduling -> [Char]
(Int -> Scheduling -> ShowS)
-> (Scheduling -> [Char])
-> ([Scheduling] -> ShowS)
-> Show Scheduling
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Scheduling -> ShowS
showsPrec :: Int -> Scheduling -> ShowS
$cshow :: Scheduling -> [Char]
show :: Scheduling -> [Char]
$cshowList :: [Scheduling] -> ShowS
showList :: [Scheduling] -> ShowS
Show, Scheduling -> Scheduling -> Bool
(Scheduling -> Scheduling -> Bool)
-> (Scheduling -> Scheduling -> Bool) -> Eq Scheduling
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Scheduling -> Scheduling -> Bool
== :: Scheduling -> Scheduling -> Bool
$c/= :: Scheduling -> Scheduling -> Bool
/= :: Scheduling -> Scheduling -> Bool
Eq)

instance FromJSON Scheduling where
  parseJSON :: Value -> Parser Scheduling
parseJSON = [Char]
-> (Object -> Parser Scheduling) -> Value -> Parser Scheduling
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"Scheduling" ((Object -> Parser Scheduling) -> Value -> Parser Scheduling)
-> (Object -> Parser Scheduling) -> Value -> Parser Scheduling
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    [Char]
-> Bool
-> Bool
-> [NodeAffinity]
-> Int
-> [Char]
-> Int
-> [Char]
-> InstanceTerminationAction
-> Scheduling
Scheduling
      ([Char]
 -> Bool
 -> Bool
 -> [NodeAffinity]
 -> Int
 -> [Char]
 -> Int
 -> [Char]
 -> InstanceTerminationAction
 -> Scheduling)
-> Parser [Char]
-> Parser
     (Bool
      -> Bool
      -> [NodeAffinity]
      -> Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> Scheduling)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"onHostMaintenance"
      Parser
  (Bool
   -> Bool
   -> [NodeAffinity]
   -> Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> Scheduling)
-> Parser Bool
-> Parser
     (Bool
      -> [NodeAffinity]
      -> Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"automaticRestart"
      Parser
  (Bool
   -> [NodeAffinity]
   -> Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> Scheduling)
-> Parser Bool
-> Parser
     ([NodeAffinity]
      -> Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"preemptible"
      Parser
  ([NodeAffinity]
   -> Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> Scheduling)
-> Parser [NodeAffinity]
-> Parser
     (Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [NodeAffinity]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"nodeAffinities"
      Parser
  (Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> Scheduling)
-> Parser Int
-> Parser
     ([Char]
      -> Int -> [Char] -> InstanceTerminationAction -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"minNodeCpus"
      Parser
  ([Char]
   -> Int -> [Char] -> InstanceTerminationAction -> Scheduling)
-> Parser [Char]
-> Parser
     (Int -> [Char] -> InstanceTerminationAction -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"locationHint"
      Parser (Int -> [Char] -> InstanceTerminationAction -> Scheduling)
-> Parser Int
-> Parser ([Char] -> InstanceTerminationAction -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"availabilityDomain"
      Parser ([Char] -> InstanceTerminationAction -> Scheduling)
-> Parser [Char]
-> Parser (InstanceTerminationAction -> Scheduling)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"provisioningModel"
      Parser (InstanceTerminationAction -> Scheduling)
-> Parser InstanceTerminationAction -> Parser Scheduling
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser InstanceTerminationAction
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"instanceTerminationAction"

instance ToJSON Scheduling where
  toJSON :: Scheduling -> Value
toJSON Scheduling {Bool
Int
[Char]
[NodeAffinity]
InstanceTerminationAction
$sel:onHostMaintenance:Scheduling :: Scheduling -> [Char]
$sel:automaticRestart:Scheduling :: Scheduling -> Bool
$sel:preemptible:Scheduling :: Scheduling -> Bool
$sel:nodeAffinities:Scheduling :: Scheduling -> [NodeAffinity]
$sel:minNodeCpus:Scheduling :: Scheduling -> Int
$sel:locationHint:Scheduling :: Scheduling -> [Char]
$sel:availabilityDomain:Scheduling :: Scheduling -> Int
$sel:provisioningModel:Scheduling :: Scheduling -> [Char]
$sel:instanceTerminationAction:Scheduling :: Scheduling -> InstanceTerminationAction
onHostMaintenance :: [Char]
automaticRestart :: Bool
preemptible :: Bool
nodeAffinities :: [NodeAffinity]
minNodeCpus :: Int
locationHint :: [Char]
availabilityDomain :: Int
provisioningModel :: [Char]
instanceTerminationAction :: InstanceTerminationAction
..} =
    [Pair] -> Value
object
      [ Key
"onHostMaintenance" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
onHostMaintenance
      , Key
"automaticRestart" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
automaticRestart
      , Key
"preemptible" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
preemptible
      , Key
"nodeAffinities" Key -> [NodeAffinity] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [NodeAffinity]
nodeAffinities
      , Key
"minNodeCpus" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
minNodeCpus
      , Key
"locationHint" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
locationHint
      , Key
"availabilityDomain" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
availabilityDomain
      , Key
"provisioningModel" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
provisioningModel
      , Key
"instanceTerminationAction" Key -> InstanceTerminationAction -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= InstanceTerminationAction
instanceTerminationAction
      ]

data InstanceTerminationAction
  = RunDurationRunDuration RunDuration
  deriving (Int -> InstanceTerminationAction -> ShowS
[InstanceTerminationAction] -> ShowS
InstanceTerminationAction -> [Char]
(Int -> InstanceTerminationAction -> ShowS)
-> (InstanceTerminationAction -> [Char])
-> ([InstanceTerminationAction] -> ShowS)
-> Show InstanceTerminationAction
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstanceTerminationAction -> ShowS
showsPrec :: Int -> InstanceTerminationAction -> ShowS
$cshow :: InstanceTerminationAction -> [Char]
show :: InstanceTerminationAction -> [Char]
$cshowList :: [InstanceTerminationAction] -> ShowS
showList :: [InstanceTerminationAction] -> ShowS
Show, InstanceTerminationAction -> InstanceTerminationAction -> Bool
(InstanceTerminationAction -> InstanceTerminationAction -> Bool)
-> (InstanceTerminationAction -> InstanceTerminationAction -> Bool)
-> Eq InstanceTerminationAction
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstanceTerminationAction -> InstanceTerminationAction -> Bool
== :: InstanceTerminationAction -> InstanceTerminationAction -> Bool
$c/= :: InstanceTerminationAction -> InstanceTerminationAction -> Bool
/= :: InstanceTerminationAction -> InstanceTerminationAction -> Bool
Eq)

instance FromJSON InstanceTerminationAction where
  parseJSON :: Value -> Parser InstanceTerminationAction
parseJSON Value
v = RunDuration -> InstanceTerminationAction
RunDurationRunDuration (RunDuration -> InstanceTerminationAction)
-> Parser RunDuration -> Parser InstanceTerminationAction
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser RunDuration
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v

instance ToJSON InstanceTerminationAction where
  toJSON :: InstanceTerminationAction -> Value
toJSON (RunDurationRunDuration RunDuration
rd) = RunDuration -> Value
forall a. ToJSON a => a -> Value
toJSON RunDuration
rd

data NodeAffinity = NodeAffinity
  { NodeAffinity -> [Char]
key :: String
  , NodeAffinity -> [Char]
operator :: String
  , NodeAffinity -> [[Char]]
values :: [String]
  }
  deriving (Int -> NodeAffinity -> ShowS
[NodeAffinity] -> ShowS
NodeAffinity -> [Char]
(Int -> NodeAffinity -> ShowS)
-> (NodeAffinity -> [Char])
-> ([NodeAffinity] -> ShowS)
-> Show NodeAffinity
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NodeAffinity -> ShowS
showsPrec :: Int -> NodeAffinity -> ShowS
$cshow :: NodeAffinity -> [Char]
show :: NodeAffinity -> [Char]
$cshowList :: [NodeAffinity] -> ShowS
showList :: [NodeAffinity] -> ShowS
Show, NodeAffinity -> NodeAffinity -> Bool
(NodeAffinity -> NodeAffinity -> Bool)
-> (NodeAffinity -> NodeAffinity -> Bool) -> Eq NodeAffinity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NodeAffinity -> NodeAffinity -> Bool
== :: NodeAffinity -> NodeAffinity -> Bool
$c/= :: NodeAffinity -> NodeAffinity -> Bool
/= :: NodeAffinity -> NodeAffinity -> Bool
Eq)

instance FromJSON NodeAffinity where
  parseJSON :: Value -> Parser NodeAffinity
parseJSON = [Char]
-> (Object -> Parser NodeAffinity) -> Value -> Parser NodeAffinity
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"NodeAffinity" ((Object -> Parser NodeAffinity) -> Value -> Parser NodeAffinity)
-> (Object -> Parser NodeAffinity) -> Value -> Parser NodeAffinity
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    [Char] -> [Char] -> [[Char]] -> NodeAffinity
NodeAffinity
      ([Char] -> [Char] -> [[Char]] -> NodeAffinity)
-> Parser [Char] -> Parser ([Char] -> [[Char]] -> NodeAffinity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"key"
      Parser ([Char] -> [[Char]] -> NodeAffinity)
-> Parser [Char] -> Parser ([[Char]] -> NodeAffinity)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"operator"
      Parser ([[Char]] -> NodeAffinity)
-> Parser [[Char]] -> Parser NodeAffinity
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [[Char]]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"values"

instance ToJSON NodeAffinity where
  toJSON :: NodeAffinity -> Value
toJSON NodeAffinity {[Char]
[[Char]]
$sel:key:NodeAffinity :: NodeAffinity -> [Char]
$sel:operator:NodeAffinity :: NodeAffinity -> [Char]
$sel:values:NodeAffinity :: NodeAffinity -> [[Char]]
key :: [Char]
operator :: [Char]
values :: [[Char]]
..} =
    [Pair] -> Value
object
      [ Key
"key" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
key
      , Key
"operator" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
operator
      , Key
"values" Key -> [[Char]] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [[Char]]
values
      ]

data Warning = Warning
  { Warning -> [Char]
code :: String
  , Warning -> [Char]
message :: String
  }
  deriving (Int -> Warning -> ShowS
[Warning] -> ShowS
Warning -> [Char]
(Int -> Warning -> ShowS)
-> (Warning -> [Char]) -> ([Warning] -> ShowS) -> Show Warning
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Warning -> ShowS
showsPrec :: Int -> Warning -> ShowS
$cshow :: Warning -> [Char]
show :: Warning -> [Char]
$cshowList :: [Warning] -> ShowS
showList :: [Warning] -> ShowS
Show, Warning -> Warning -> Bool
(Warning -> Warning -> Bool)
-> (Warning -> Warning -> Bool) -> Eq Warning
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Warning -> Warning -> Bool
== :: Warning -> Warning -> Bool
$c/= :: Warning -> Warning -> Bool
/= :: Warning -> Warning -> Bool
Eq)

instance FromJSON Warning where
  parseJSON :: Value -> Parser Warning
parseJSON = [Char] -> (Object -> Parser Warning) -> Value -> Parser Warning
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"Warning" ((Object -> Parser Warning) -> Value -> Parser Warning)
-> (Object -> Parser Warning) -> Value -> Parser Warning
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    [Char] -> [Char] -> Warning
Warning
      ([Char] -> [Char] -> Warning)
-> Parser [Char] -> Parser ([Char] -> Warning)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"code"
      Parser ([Char] -> Warning) -> Parser [Char] -> Parser Warning
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"message"

instance ToJSON Warning where
  toJSON :: Warning -> Value
toJSON Warning {[Char]
$sel:code:Warning :: Warning -> [Char]
$sel:message:Warning :: Warning -> [Char]
code :: [Char]
message :: [Char]
..} =
    [Pair] -> Value
object
      [ Key
"code" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
code
      , Key
"message" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
message
      ]

-- | Metadata representing a Compute Engine instance
data InstanceMetadata = InstanceMetadata
  { InstanceMetadata -> Maybe [Char]
cpuPlatform :: Maybe String
    -- ^ The CPU platform used by this instance
  , InstanceMetadata -> Maybe Text
labelFingerprint :: Maybe Text
    -- ^ Fingerprint of the label metadata
  , InstanceMetadata -> Maybe InstanceEncryptionKey
instanceEncryptionKey :: Maybe InstanceEncryptionKey
    -- ^ Encryption key configuration for the instance
  , InstanceMetadata -> Maybe Text
minCpuPlatform :: Maybe Text
    -- ^ Minimum CPU platform required by the instance
  , InstanceMetadata -> Maybe [GuestAccelerator]
guestAccelerators :: Maybe [GuestAccelerator]
    -- ^ List of guest accelerators attached to the instance
  , InstanceMetadata -> Maybe Bool
startRestricted :: Maybe Bool
    -- ^ Whether instance start is restricted due to storage issues
  , InstanceMetadata -> Maybe Bool
deletionProtection :: Maybe Bool
    -- ^ Whether deletion protection is enabled
  , InstanceMetadata -> Maybe [Text]
resourcePolicies :: Maybe [Text]
    -- ^ Resource policies applied to the instance
  , InstanceMetadata -> Maybe Text
sourceMachineImage :: Maybe Text
    -- ^ Source machine image used to create the instance
  , InstanceMetadata -> Maybe ReservationAffinity
reservationAffinity :: Maybe ReservationAffinity
    -- ^ Reservation affinity configuration
  , InstanceMetadata -> Maybe Text
hostname :: Maybe Text
    -- ^ Custom hostname assigned to the instance
  , InstanceMetadata -> Maybe DisplayDevice
displayDevice :: Maybe DisplayDevice
    -- ^ Display device configuration
  , InstanceMetadata -> Maybe ShieldedInstanceConfig
shieldedInstanceConfig :: Maybe ShieldedInstanceConfig
    -- ^ Shielded VM configuration
  , InstanceMetadata -> Maybe ShieldedInstanceIntegrityPolicy
shieldedInstanceIntegrityPolicy :: Maybe ShieldedInstanceIntegrityPolicy
    -- ^ Integrity policy for shielded instances
  , InstanceMetadata -> Maybe InstanceEncryptionKey
sourceMachineImageEncryptionKey :: Maybe InstanceEncryptionKey
    -- ^ Encryption key for source machine image
  , InstanceMetadata -> Maybe ConfidentialInstanceConfig
confidentialInstanceConfig :: Maybe ConfidentialInstanceConfig
    -- ^ Confidential computing configuration
  , InstanceMetadata -> Maybe Text
fingerprint :: Maybe Text
    -- ^ Unique fingerprint for resource metadata
  , InstanceMetadata -> Maybe Text
privateIpv6GoogleAccess :: Maybe Text
    -- ^ Private IPv6 Google access configuration
  , InstanceMetadata -> Maybe [Char]
lastStartTimestamp :: Maybe String
    -- ^ Last start timestamp in RFC3339 format
  , InstanceMetadata -> Maybe [Char]
lastStopTimestamp :: Maybe String
    -- ^ Last stop timestamp in RFC3339 format
  , InstanceMetadata -> Maybe [Char]
lastSuspendedTimestamp :: Maybe String
    -- ^ Last suspension timestamp in RFC3339 format
  , InstanceMetadata -> Maybe Bool
satisfiesPzs :: Maybe Bool
    -- ^ Whether instance satisfies zone separation policy
  , InstanceMetadata -> Maybe Bool
satisfiesPzi :: Maybe Bool
    -- ^ Whether instance satisfies instance separation policy
  , InstanceMetadata -> Maybe ResourceStatus
resourceStatus :: Maybe ResourceStatus
    -- ^ Current resource status of the instance
  , InstanceMetadata -> Maybe NetworkPerformanceConfig
networkPerformanceConfig :: Maybe NetworkPerformanceConfig
    -- ^ Network performance configuration
  , InstanceMetadata -> Maybe Text
keyRevocationActionType :: Maybe Text
    -- ^ Type of key revocation action if applicable
  }
  deriving (Int -> InstanceMetadata -> ShowS
[InstanceMetadata] -> ShowS
InstanceMetadata -> [Char]
(Int -> InstanceMetadata -> ShowS)
-> (InstanceMetadata -> [Char])
-> ([InstanceMetadata] -> ShowS)
-> Show InstanceMetadata
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstanceMetadata -> ShowS
showsPrec :: Int -> InstanceMetadata -> ShowS
$cshow :: InstanceMetadata -> [Char]
show :: InstanceMetadata -> [Char]
$cshowList :: [InstanceMetadata] -> ShowS
showList :: [InstanceMetadata] -> ShowS
Show, InstanceMetadata -> InstanceMetadata -> Bool
(InstanceMetadata -> InstanceMetadata -> Bool)
-> (InstanceMetadata -> InstanceMetadata -> Bool)
-> Eq InstanceMetadata
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstanceMetadata -> InstanceMetadata -> Bool
== :: InstanceMetadata -> InstanceMetadata -> Bool
$c/= :: InstanceMetadata -> InstanceMetadata -> Bool
/= :: InstanceMetadata -> InstanceMetadata -> Bool
Eq)

instance FromJSON InstanceMetadata where
  parseJSON :: Value -> Parser InstanceMetadata
parseJSON = [Char]
-> (Object -> Parser InstanceMetadata)
-> Value
-> Parser InstanceMetadata
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"InstanceMetadata" ((Object -> Parser InstanceMetadata)
 -> Value -> Parser InstanceMetadata)
-> (Object -> Parser InstanceMetadata)
-> Value
-> Parser InstanceMetadata
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char]
-> Maybe Text
-> Maybe InstanceEncryptionKey
-> Maybe Text
-> Maybe [GuestAccelerator]
-> Maybe Bool
-> Maybe Bool
-> Maybe [Text]
-> Maybe Text
-> Maybe ReservationAffinity
-> Maybe Text
-> Maybe DisplayDevice
-> Maybe ShieldedInstanceConfig
-> Maybe ShieldedInstanceIntegrityPolicy
-> Maybe InstanceEncryptionKey
-> Maybe ConfidentialInstanceConfig
-> Maybe Text
-> Maybe Text
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe Bool
-> Maybe Bool
-> Maybe ResourceStatus
-> Maybe NetworkPerformanceConfig
-> Maybe Text
-> InstanceMetadata
InstanceMetadata
      (Maybe [Char]
 -> Maybe Text
 -> Maybe InstanceEncryptionKey
 -> Maybe Text
 -> Maybe [GuestAccelerator]
 -> Maybe Bool
 -> Maybe Bool
 -> Maybe [Text]
 -> Maybe Text
 -> Maybe ReservationAffinity
 -> Maybe Text
 -> Maybe DisplayDevice
 -> Maybe ShieldedInstanceConfig
 -> Maybe ShieldedInstanceIntegrityPolicy
 -> Maybe InstanceEncryptionKey
 -> Maybe ConfidentialInstanceConfig
 -> Maybe Text
 -> Maybe Text
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe Bool
 -> Maybe Bool
 -> Maybe ResourceStatus
 -> Maybe NetworkPerformanceConfig
 -> Maybe Text
 -> InstanceMetadata)
-> Parser (Maybe [Char])
-> Parser
     (Maybe Text
      -> Maybe InstanceEncryptionKey
      -> Maybe Text
      -> Maybe [GuestAccelerator]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"cpuPlatform"
      Parser
  (Maybe Text
   -> Maybe InstanceEncryptionKey
   -> Maybe Text
   -> Maybe [GuestAccelerator]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Text)
-> Parser
     (Maybe InstanceEncryptionKey
      -> Maybe Text
      -> Maybe [GuestAccelerator]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"labelFingerprint"
      Parser
  (Maybe InstanceEncryptionKey
   -> Maybe Text
   -> Maybe [GuestAccelerator]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe InstanceEncryptionKey)
-> Parser
     (Maybe Text
      -> Maybe [GuestAccelerator]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe InstanceEncryptionKey)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"instanceEncryptionKey"
      Parser
  (Maybe Text
   -> Maybe [GuestAccelerator]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Text)
-> Parser
     (Maybe [GuestAccelerator]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"minCpuPlatform"
      Parser
  (Maybe [GuestAccelerator]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe [GuestAccelerator])
-> Parser
     (Maybe Bool
      -> Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [GuestAccelerator])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"guestAccelerators"
      Parser
  (Maybe Bool
   -> Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Bool
      -> Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"startRestricted"
      Parser
  (Maybe Bool
   -> Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Bool)
-> Parser
     (Maybe [Text]
      -> Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"deletionProtection"
      Parser
  (Maybe [Text]
   -> Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe [Text])
-> Parser
     (Maybe Text
      -> Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"resourcePolicies"
      Parser
  (Maybe Text
   -> Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Text)
-> Parser
     (Maybe ReservationAffinity
      -> Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sourceMachineImage"
      Parser
  (Maybe ReservationAffinity
   -> Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe ReservationAffinity)
-> Parser
     (Maybe Text
      -> Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ReservationAffinity)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"reservationAffinity"
      Parser
  (Maybe Text
   -> Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Text)
-> Parser
     (Maybe DisplayDevice
      -> Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"hostname"
      Parser
  (Maybe DisplayDevice
   -> Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe DisplayDevice)
-> Parser
     (Maybe ShieldedInstanceConfig
      -> Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe DisplayDevice)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"displayDevice"
      Parser
  (Maybe ShieldedInstanceConfig
   -> Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe ShieldedInstanceConfig)
-> Parser
     (Maybe ShieldedInstanceIntegrityPolicy
      -> Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ShieldedInstanceConfig)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"shieldedInstanceConfig"
      Parser
  (Maybe ShieldedInstanceIntegrityPolicy
   -> Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe ShieldedInstanceIntegrityPolicy)
-> Parser
     (Maybe InstanceEncryptionKey
      -> Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ShieldedInstanceIntegrityPolicy)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"shieldedInstanceIntegrityPolicy"
      Parser
  (Maybe InstanceEncryptionKey
   -> Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe InstanceEncryptionKey)
-> Parser
     (Maybe ConfidentialInstanceConfig
      -> Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe InstanceEncryptionKey)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sourceMachineImageEncryptionKey"
      Parser
  (Maybe ConfidentialInstanceConfig
   -> Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe ConfidentialInstanceConfig)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ConfidentialInstanceConfig)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"confidentialInstanceConfig"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"fingerprint"
      Parser
  (Maybe Text
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Text)
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"privateIpv6GoogleAccess"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"lastStartTimestamp"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"lastStopTimestamp"
      Parser
  (Maybe [Char]
   -> Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe [Char])
-> Parser
     (Maybe Bool
      -> Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"lastSuspendedTimestamp"
      Parser
  (Maybe Bool
   -> Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Bool
      -> Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"satisfiesPzs"
      Parser
  (Maybe Bool
   -> Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe Bool)
-> Parser
     (Maybe ResourceStatus
      -> Maybe NetworkPerformanceConfig
      -> Maybe Text
      -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"satisfiesPzi"
      Parser
  (Maybe ResourceStatus
   -> Maybe NetworkPerformanceConfig
   -> Maybe Text
   -> InstanceMetadata)
-> Parser (Maybe ResourceStatus)
-> Parser
     (Maybe NetworkPerformanceConfig -> Maybe Text -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe ResourceStatus)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"resourceStatus"
      Parser
  (Maybe NetworkPerformanceConfig -> Maybe Text -> InstanceMetadata)
-> Parser (Maybe NetworkPerformanceConfig)
-> Parser (Maybe Text -> InstanceMetadata)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe NetworkPerformanceConfig)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"networkPerformanceConfig"
      Parser (Maybe Text -> InstanceMetadata)
-> Parser (Maybe Text) -> Parser InstanceMetadata
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"keyRevocationActionType"

instance ToJSON InstanceMetadata where
  toJSON :: InstanceMetadata -> Value
toJSON InstanceMetadata
im =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"cpuPlatform" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe [Char]
cpuPlatform InstanceMetadata
im
        , (Key
"labelFingerprint" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
labelFingerprint InstanceMetadata
im
        , (Key
"instanceEncryptionKey" Key -> InstanceEncryptionKey -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (InstanceEncryptionKey -> Pair)
-> Maybe InstanceEncryptionKey -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe InstanceEncryptionKey
instanceEncryptionKey InstanceMetadata
im
        , (Key
"minCpuPlatform" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
minCpuPlatform InstanceMetadata
im
        , (Key
"guestAccelerators" Key -> [GuestAccelerator] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([GuestAccelerator] -> Pair)
-> Maybe [GuestAccelerator] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe [GuestAccelerator]
guestAccelerators InstanceMetadata
im
        , (Key
"startRestricted" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Bool
startRestricted InstanceMetadata
im
        , (Key
"deletionProtection" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Bool
deletionProtection InstanceMetadata
im
        , (Key
"resourcePolicies" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Text] -> Pair) -> Maybe [Text] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe [Text]
resourcePolicies InstanceMetadata
im
        , (Key
"sourceMachineImage" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
sourceMachineImage InstanceMetadata
im
        , (Key
"reservationAffinity" Key -> ReservationAffinity -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ReservationAffinity -> Pair)
-> Maybe ReservationAffinity -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe ReservationAffinity
reservationAffinity InstanceMetadata
im
        , (Key
"hostname" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
hostname InstanceMetadata
im
        , (Key
"displayDevice" Key -> DisplayDevice -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (DisplayDevice -> Pair) -> Maybe DisplayDevice -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe DisplayDevice
displayDevice InstanceMetadata
im
        , (Key
"shieldedInstanceConfig" Key -> ShieldedInstanceConfig -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ShieldedInstanceConfig -> Pair)
-> Maybe ShieldedInstanceConfig -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe ShieldedInstanceConfig
shieldedInstanceConfig InstanceMetadata
im
        , (Key
"shieldedInstanceIntegrityPolicy" Key -> ShieldedInstanceIntegrityPolicy -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ShieldedInstanceIntegrityPolicy -> Pair)
-> Maybe ShieldedInstanceIntegrityPolicy -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe ShieldedInstanceIntegrityPolicy
shieldedInstanceIntegrityPolicy InstanceMetadata
im
        , (Key
"sourceMachineImageEncryptionKey" Key -> InstanceEncryptionKey -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (InstanceEncryptionKey -> Pair)
-> Maybe InstanceEncryptionKey -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe InstanceEncryptionKey
sourceMachineImageEncryptionKey InstanceMetadata
im
        , (Key
"confidentialInstanceConfig" Key -> ConfidentialInstanceConfig -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ConfidentialInstanceConfig -> Pair)
-> Maybe ConfidentialInstanceConfig -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe ConfidentialInstanceConfig
confidentialInstanceConfig InstanceMetadata
im
        , (Key
"fingerprint" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
fingerprint InstanceMetadata
im
        , (Key
"privateIpv6GoogleAccess" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
privateIpv6GoogleAccess InstanceMetadata
im
        , (Key
"lastStartTimestamp" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe [Char]
lastStartTimestamp InstanceMetadata
im
        , (Key
"lastStopTimestamp" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe [Char]
lastStopTimestamp InstanceMetadata
im
        , (Key
"lastSuspendedTimestamp" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe [Char]
lastSuspendedTimestamp InstanceMetadata
im
        , (Key
"satisfiesPzs" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Bool
satisfiesPzs InstanceMetadata
im
        , (Key
"satisfiesPzi" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Bool
satisfiesPzi InstanceMetadata
im
        , (Key
"resourceStatus" Key -> ResourceStatus -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ResourceStatus -> Pair) -> Maybe ResourceStatus -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe ResourceStatus
resourceStatus InstanceMetadata
im
        , (Key
"networkPerformanceConfig" Key -> NetworkPerformanceConfig -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (NetworkPerformanceConfig -> Pair)
-> Maybe NetworkPerformanceConfig -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe NetworkPerformanceConfig
networkPerformanceConfig InstanceMetadata
im
        , (Key
"keyRevocationActionType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceMetadata -> Maybe Text
keyRevocationActionType InstanceMetadata
im
        ]

data GuestAccelerator = GuestAccelerator
  { GuestAccelerator -> Text
acceleratorType :: Text
  , GuestAccelerator -> Int
acceleratorCount :: Int
  }
  deriving (Int -> GuestAccelerator -> ShowS
[GuestAccelerator] -> ShowS
GuestAccelerator -> [Char]
(Int -> GuestAccelerator -> ShowS)
-> (GuestAccelerator -> [Char])
-> ([GuestAccelerator] -> ShowS)
-> Show GuestAccelerator
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GuestAccelerator -> ShowS
showsPrec :: Int -> GuestAccelerator -> ShowS
$cshow :: GuestAccelerator -> [Char]
show :: GuestAccelerator -> [Char]
$cshowList :: [GuestAccelerator] -> ShowS
showList :: [GuestAccelerator] -> ShowS
Show, GuestAccelerator -> GuestAccelerator -> Bool
(GuestAccelerator -> GuestAccelerator -> Bool)
-> (GuestAccelerator -> GuestAccelerator -> Bool)
-> Eq GuestAccelerator
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GuestAccelerator -> GuestAccelerator -> Bool
== :: GuestAccelerator -> GuestAccelerator -> Bool
$c/= :: GuestAccelerator -> GuestAccelerator -> Bool
/= :: GuestAccelerator -> GuestAccelerator -> Bool
Eq)

instance FromJSON GuestAccelerator where
  parseJSON :: Value -> Parser GuestAccelerator
parseJSON = [Char]
-> (Object -> Parser GuestAccelerator)
-> Value
-> Parser GuestAccelerator
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"GuestAccelerator" ((Object -> Parser GuestAccelerator)
 -> Value -> Parser GuestAccelerator)
-> (Object -> Parser GuestAccelerator)
-> Value
-> Parser GuestAccelerator
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Text -> Int -> GuestAccelerator
GuestAccelerator
      (Text -> Int -> GuestAccelerator)
-> Parser Text -> Parser (Int -> GuestAccelerator)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"acceleratorType"
      Parser (Int -> GuestAccelerator)
-> Parser Int -> Parser GuestAccelerator
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"acceleratorCount"

instance ToJSON GuestAccelerator where
  toJSON :: GuestAccelerator -> Value
toJSON GuestAccelerator
ga =
    [Pair] -> Value
object
      [ Key
"acceleratorType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= GuestAccelerator -> Text
acceleratorType GuestAccelerator
ga
      , Key
"acceleratorCount" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= GuestAccelerator -> Int
acceleratorCount GuestAccelerator
ga
      ]

data ReservationAffinity = ReservationAffinity
  { ReservationAffinity -> Maybe Text
consumeReservationType :: Maybe Text
  , ReservationAffinity -> Maybe Text
key :: Maybe Text
  , ReservationAffinity -> Maybe [Text]
values :: Maybe [Text]
  }
  deriving (Int -> ReservationAffinity -> ShowS
[ReservationAffinity] -> ShowS
ReservationAffinity -> [Char]
(Int -> ReservationAffinity -> ShowS)
-> (ReservationAffinity -> [Char])
-> ([ReservationAffinity] -> ShowS)
-> Show ReservationAffinity
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReservationAffinity -> ShowS
showsPrec :: Int -> ReservationAffinity -> ShowS
$cshow :: ReservationAffinity -> [Char]
show :: ReservationAffinity -> [Char]
$cshowList :: [ReservationAffinity] -> ShowS
showList :: [ReservationAffinity] -> ShowS
Show, ReservationAffinity -> ReservationAffinity -> Bool
(ReservationAffinity -> ReservationAffinity -> Bool)
-> (ReservationAffinity -> ReservationAffinity -> Bool)
-> Eq ReservationAffinity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReservationAffinity -> ReservationAffinity -> Bool
== :: ReservationAffinity -> ReservationAffinity -> Bool
$c/= :: ReservationAffinity -> ReservationAffinity -> Bool
/= :: ReservationAffinity -> ReservationAffinity -> Bool
Eq)

instance FromJSON ReservationAffinity where
  parseJSON :: Value -> Parser ReservationAffinity
parseJSON = [Char]
-> (Object -> Parser ReservationAffinity)
-> Value
-> Parser ReservationAffinity
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ReservationAffinity" ((Object -> Parser ReservationAffinity)
 -> Value -> Parser ReservationAffinity)
-> (Object -> Parser ReservationAffinity)
-> Value
-> Parser ReservationAffinity
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe Text -> Maybe Text -> Maybe [Text] -> ReservationAffinity
ReservationAffinity
      (Maybe Text -> Maybe Text -> Maybe [Text] -> ReservationAffinity)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Maybe [Text] -> ReservationAffinity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"consumeReservationType"
      Parser (Maybe Text -> Maybe [Text] -> ReservationAffinity)
-> Parser (Maybe Text)
-> Parser (Maybe [Text] -> ReservationAffinity)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"key"
      Parser (Maybe [Text] -> ReservationAffinity)
-> Parser (Maybe [Text]) -> Parser ReservationAffinity
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Text])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"values"

instance ToJSON ReservationAffinity where
  toJSON :: ReservationAffinity -> Value
toJSON ReservationAffinity {Maybe [Text]
Maybe Text
$sel:consumeReservationType:ReservationAffinity :: ReservationAffinity -> Maybe Text
$sel:key:ReservationAffinity :: ReservationAffinity -> Maybe Text
$sel:values:ReservationAffinity :: ReservationAffinity -> Maybe [Text]
consumeReservationType :: Maybe Text
key :: Maybe Text
values :: Maybe [Text]
..} =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"consumeReservationType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
consumeReservationType
        , (Key
"key" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
key
        , (Key
"values" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Text] -> Pair) -> Maybe [Text] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Text]
values
        ]

data DisplayDevice = DisplayDevice
  { DisplayDevice -> Bool
enableDisplay :: Bool
  }
  deriving (Int -> DisplayDevice -> ShowS
[DisplayDevice] -> ShowS
DisplayDevice -> [Char]
(Int -> DisplayDevice -> ShowS)
-> (DisplayDevice -> [Char])
-> ([DisplayDevice] -> ShowS)
-> Show DisplayDevice
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DisplayDevice -> ShowS
showsPrec :: Int -> DisplayDevice -> ShowS
$cshow :: DisplayDevice -> [Char]
show :: DisplayDevice -> [Char]
$cshowList :: [DisplayDevice] -> ShowS
showList :: [DisplayDevice] -> ShowS
Show, DisplayDevice -> DisplayDevice -> Bool
(DisplayDevice -> DisplayDevice -> Bool)
-> (DisplayDevice -> DisplayDevice -> Bool) -> Eq DisplayDevice
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DisplayDevice -> DisplayDevice -> Bool
== :: DisplayDevice -> DisplayDevice -> Bool
$c/= :: DisplayDevice -> DisplayDevice -> Bool
/= :: DisplayDevice -> DisplayDevice -> Bool
Eq)

instance FromJSON DisplayDevice where
  parseJSON :: Value -> Parser DisplayDevice
parseJSON = [Char]
-> (Object -> Parser DisplayDevice)
-> Value
-> Parser DisplayDevice
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"DisplayDevice" ((Object -> Parser DisplayDevice) -> Value -> Parser DisplayDevice)
-> (Object -> Parser DisplayDevice)
-> Value
-> Parser DisplayDevice
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Bool -> DisplayDevice
DisplayDevice
      (Bool -> DisplayDevice) -> Parser Bool -> Parser DisplayDevice
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"enableDisplay"

instance ToJSON DisplayDevice where
  toJSON :: DisplayDevice -> Value
toJSON DisplayDevice
dd = [Pair] -> Value
object [Key
"enableDisplay" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= DisplayDevice -> Bool
enableDisplay DisplayDevice
dd]

data ShieldedInstanceConfig = ShieldedInstanceConfig
  { ShieldedInstanceConfig -> Bool
enableSecureBoot :: Bool
  , ShieldedInstanceConfig -> Bool
enableVtpm :: Bool
  , ShieldedInstanceConfig -> Bool
enableIntegrityMonitoring :: Bool
  }
  deriving (Int -> ShieldedInstanceConfig -> ShowS
[ShieldedInstanceConfig] -> ShowS
ShieldedInstanceConfig -> [Char]
(Int -> ShieldedInstanceConfig -> ShowS)
-> (ShieldedInstanceConfig -> [Char])
-> ([ShieldedInstanceConfig] -> ShowS)
-> Show ShieldedInstanceConfig
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ShieldedInstanceConfig -> ShowS
showsPrec :: Int -> ShieldedInstanceConfig -> ShowS
$cshow :: ShieldedInstanceConfig -> [Char]
show :: ShieldedInstanceConfig -> [Char]
$cshowList :: [ShieldedInstanceConfig] -> ShowS
showList :: [ShieldedInstanceConfig] -> ShowS
Show, ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool
(ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool)
-> (ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool)
-> Eq ShieldedInstanceConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool
== :: ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool
$c/= :: ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool
/= :: ShieldedInstanceConfig -> ShieldedInstanceConfig -> Bool
Eq)

instance FromJSON ShieldedInstanceConfig where
  parseJSON :: Value -> Parser ShieldedInstanceConfig
parseJSON = [Char]
-> (Object -> Parser ShieldedInstanceConfig)
-> Value
-> Parser ShieldedInstanceConfig
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ShieldedInstanceConfig" ((Object -> Parser ShieldedInstanceConfig)
 -> Value -> Parser ShieldedInstanceConfig)
-> (Object -> Parser ShieldedInstanceConfig)
-> Value
-> Parser ShieldedInstanceConfig
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Bool -> Bool -> Bool -> ShieldedInstanceConfig
ShieldedInstanceConfig
      (Bool -> Bool -> Bool -> ShieldedInstanceConfig)
-> Parser Bool -> Parser (Bool -> Bool -> ShieldedInstanceConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"enableSecureBoot"
      Parser (Bool -> Bool -> ShieldedInstanceConfig)
-> Parser Bool -> Parser (Bool -> ShieldedInstanceConfig)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"enableVtpm"
      Parser (Bool -> ShieldedInstanceConfig)
-> Parser Bool -> Parser ShieldedInstanceConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"enableIntegrityMonitoring"

instance ToJSON ShieldedInstanceConfig where
  toJSON :: ShieldedInstanceConfig -> Value
toJSON ShieldedInstanceConfig
sic =
    [Pair] -> Value
object
      [ Key
"enableSecureBoot" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ShieldedInstanceConfig -> Bool
enableSecureBoot ShieldedInstanceConfig
sic
      , Key
"enableVtpm" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ShieldedInstanceConfig -> Bool
enableVtpm ShieldedInstanceConfig
sic
      , Key
"enableIntegrityMonitoring" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ShieldedInstanceConfig -> Bool
enableIntegrityMonitoring ShieldedInstanceConfig
sic
      ]

data ShieldedInstanceIntegrityPolicy = ShieldedInstanceIntegrityPolicy
  { ShieldedInstanceIntegrityPolicy -> Maybe UpdateAutoLearnPolicy
policy :: Maybe UpdateAutoLearnPolicy
  }
  deriving (Int -> ShieldedInstanceIntegrityPolicy -> ShowS
[ShieldedInstanceIntegrityPolicy] -> ShowS
ShieldedInstanceIntegrityPolicy -> [Char]
(Int -> ShieldedInstanceIntegrityPolicy -> ShowS)
-> (ShieldedInstanceIntegrityPolicy -> [Char])
-> ([ShieldedInstanceIntegrityPolicy] -> ShowS)
-> Show ShieldedInstanceIntegrityPolicy
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ShieldedInstanceIntegrityPolicy -> ShowS
showsPrec :: Int -> ShieldedInstanceIntegrityPolicy -> ShowS
$cshow :: ShieldedInstanceIntegrityPolicy -> [Char]
show :: ShieldedInstanceIntegrityPolicy -> [Char]
$cshowList :: [ShieldedInstanceIntegrityPolicy] -> ShowS
showList :: [ShieldedInstanceIntegrityPolicy] -> ShowS
Show, ShieldedInstanceIntegrityPolicy
-> ShieldedInstanceIntegrityPolicy -> Bool
(ShieldedInstanceIntegrityPolicy
 -> ShieldedInstanceIntegrityPolicy -> Bool)
-> (ShieldedInstanceIntegrityPolicy
    -> ShieldedInstanceIntegrityPolicy -> Bool)
-> Eq ShieldedInstanceIntegrityPolicy
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ShieldedInstanceIntegrityPolicy
-> ShieldedInstanceIntegrityPolicy -> Bool
== :: ShieldedInstanceIntegrityPolicy
-> ShieldedInstanceIntegrityPolicy -> Bool
$c/= :: ShieldedInstanceIntegrityPolicy
-> ShieldedInstanceIntegrityPolicy -> Bool
/= :: ShieldedInstanceIntegrityPolicy
-> ShieldedInstanceIntegrityPolicy -> Bool
Eq)

instance FromJSON ShieldedInstanceIntegrityPolicy where
  parseJSON :: Value -> Parser ShieldedInstanceIntegrityPolicy
parseJSON = [Char]
-> (Object -> Parser ShieldedInstanceIntegrityPolicy)
-> Value
-> Parser ShieldedInstanceIntegrityPolicy
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ShieldedInstanceIntegrityPolicy" ((Object -> Parser ShieldedInstanceIntegrityPolicy)
 -> Value -> Parser ShieldedInstanceIntegrityPolicy)
-> (Object -> Parser ShieldedInstanceIntegrityPolicy)
-> Value
-> Parser ShieldedInstanceIntegrityPolicy
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe UpdateAutoLearnPolicy -> ShieldedInstanceIntegrityPolicy
ShieldedInstanceIntegrityPolicy
      (Maybe UpdateAutoLearnPolicy -> ShieldedInstanceIntegrityPolicy)
-> Parser (Maybe UpdateAutoLearnPolicy)
-> Parser ShieldedInstanceIntegrityPolicy
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe UpdateAutoLearnPolicy)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"policy"

instance ToJSON ShieldedInstanceIntegrityPolicy where
  toJSON :: ShieldedInstanceIntegrityPolicy -> Value
toJSON ShieldedInstanceIntegrityPolicy
sip =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [(Key
"policy" Key -> UpdateAutoLearnPolicy -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (UpdateAutoLearnPolicy -> Pair)
-> Maybe UpdateAutoLearnPolicy -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ShieldedInstanceIntegrityPolicy -> Maybe UpdateAutoLearnPolicy
policy ShieldedInstanceIntegrityPolicy
sip]

data UpdateAutoLearnPolicy = UpdateAutoLearnPolicy {UpdateAutoLearnPolicy -> Bool
updateAutoLearnPolicy :: Bool}
  deriving (Int -> UpdateAutoLearnPolicy -> ShowS
[UpdateAutoLearnPolicy] -> ShowS
UpdateAutoLearnPolicy -> [Char]
(Int -> UpdateAutoLearnPolicy -> ShowS)
-> (UpdateAutoLearnPolicy -> [Char])
-> ([UpdateAutoLearnPolicy] -> ShowS)
-> Show UpdateAutoLearnPolicy
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UpdateAutoLearnPolicy -> ShowS
showsPrec :: Int -> UpdateAutoLearnPolicy -> ShowS
$cshow :: UpdateAutoLearnPolicy -> [Char]
show :: UpdateAutoLearnPolicy -> [Char]
$cshowList :: [UpdateAutoLearnPolicy] -> ShowS
showList :: [UpdateAutoLearnPolicy] -> ShowS
Show, UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool
(UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool)
-> (UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool)
-> Eq UpdateAutoLearnPolicy
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool
== :: UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool
$c/= :: UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool
/= :: UpdateAutoLearnPolicy -> UpdateAutoLearnPolicy -> Bool
Eq)

instance FromJSON UpdateAutoLearnPolicy where
  parseJSON :: Value -> Parser UpdateAutoLearnPolicy
parseJSON = [Char]
-> (Object -> Parser UpdateAutoLearnPolicy)
-> Value
-> Parser UpdateAutoLearnPolicy
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"UpdateAutoLearnPolicy" ((Object -> Parser UpdateAutoLearnPolicy)
 -> Value -> Parser UpdateAutoLearnPolicy)
-> (Object -> Parser UpdateAutoLearnPolicy)
-> Value
-> Parser UpdateAutoLearnPolicy
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Bool -> UpdateAutoLearnPolicy
UpdateAutoLearnPolicy
      (Bool -> UpdateAutoLearnPolicy)
-> Parser Bool -> Parser UpdateAutoLearnPolicy
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"updateAutoLearnPolicy"

instance ToJSON UpdateAutoLearnPolicy where
  toJSON :: UpdateAutoLearnPolicy -> Value
toJSON UpdateAutoLearnPolicy
uap = [Pair] -> Value
object [Key
"updateAutoLearnPolicy" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= UpdateAutoLearnPolicy -> Bool
updateAutoLearnPolicy UpdateAutoLearnPolicy
uap]

data ConfidentialInstanceConfig = ConfidentialInstanceConfig
  { ConfidentialInstanceConfig -> Maybe Bool
enableConfidentialCompute :: Maybe Bool
  , ConfidentialInstanceConfig -> Maybe Text
confidentialInstanceType :: Maybe Text
  }
  deriving (Int -> ConfidentialInstanceConfig -> ShowS
[ConfidentialInstanceConfig] -> ShowS
ConfidentialInstanceConfig -> [Char]
(Int -> ConfidentialInstanceConfig -> ShowS)
-> (ConfidentialInstanceConfig -> [Char])
-> ([ConfidentialInstanceConfig] -> ShowS)
-> Show ConfidentialInstanceConfig
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConfidentialInstanceConfig -> ShowS
showsPrec :: Int -> ConfidentialInstanceConfig -> ShowS
$cshow :: ConfidentialInstanceConfig -> [Char]
show :: ConfidentialInstanceConfig -> [Char]
$cshowList :: [ConfidentialInstanceConfig] -> ShowS
showList :: [ConfidentialInstanceConfig] -> ShowS
Show, ConfidentialInstanceConfig -> ConfidentialInstanceConfig -> Bool
(ConfidentialInstanceConfig -> ConfidentialInstanceConfig -> Bool)
-> (ConfidentialInstanceConfig
    -> ConfidentialInstanceConfig -> Bool)
-> Eq ConfidentialInstanceConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConfidentialInstanceConfig -> ConfidentialInstanceConfig -> Bool
== :: ConfidentialInstanceConfig -> ConfidentialInstanceConfig -> Bool
$c/= :: ConfidentialInstanceConfig -> ConfidentialInstanceConfig -> Bool
/= :: ConfidentialInstanceConfig -> ConfidentialInstanceConfig -> Bool
Eq)

instance FromJSON ConfidentialInstanceConfig where
  parseJSON :: Value -> Parser ConfidentialInstanceConfig
parseJSON = [Char]
-> (Object -> Parser ConfidentialInstanceConfig)
-> Value
-> Parser ConfidentialInstanceConfig
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ConfidentialInstanceConfig" ((Object -> Parser ConfidentialInstanceConfig)
 -> Value -> Parser ConfidentialInstanceConfig)
-> (Object -> Parser ConfidentialInstanceConfig)
-> Value
-> Parser ConfidentialInstanceConfig
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe Bool -> Maybe Text -> ConfidentialInstanceConfig
ConfidentialInstanceConfig
      (Maybe Bool -> Maybe Text -> ConfidentialInstanceConfig)
-> Parser (Maybe Bool)
-> Parser (Maybe Text -> ConfidentialInstanceConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"enableConfidentialCompute"
      Parser (Maybe Text -> ConfidentialInstanceConfig)
-> Parser (Maybe Text) -> Parser ConfidentialInstanceConfig
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"confidentialInstanceType"

instance ToJSON ConfidentialInstanceConfig where
  toJSON :: ConfidentialInstanceConfig -> Value
toJSON ConfidentialInstanceConfig
cic =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"enableConfidentialCompute" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConfidentialInstanceConfig -> Maybe Bool
enableConfidentialCompute ConfidentialInstanceConfig
cic
        , (Key
"confidentialInstanceType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConfidentialInstanceConfig -> Maybe Text
confidentialInstanceType ConfidentialInstanceConfig
cic
        ]

data InstanceEncryptionKey = InstanceEncryptionKey
  { InstanceEncryptionKey -> Maybe Text
sha256 :: Maybe Text
  , InstanceEncryptionKey -> Maybe Text
kmsKeyServiceAccount :: Maybe Text
  , InstanceEncryptionKey -> Maybe Text
rawKey :: Maybe Text
  , InstanceEncryptionKey -> Maybe Text
rsaEncryptedKey :: Maybe Text
  , InstanceEncryptionKey -> Maybe Text
kmsKeyName :: Maybe Text
  }
  deriving (Int -> InstanceEncryptionKey -> ShowS
[InstanceEncryptionKey] -> ShowS
InstanceEncryptionKey -> [Char]
(Int -> InstanceEncryptionKey -> ShowS)
-> (InstanceEncryptionKey -> [Char])
-> ([InstanceEncryptionKey] -> ShowS)
-> Show InstanceEncryptionKey
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstanceEncryptionKey -> ShowS
showsPrec :: Int -> InstanceEncryptionKey -> ShowS
$cshow :: InstanceEncryptionKey -> [Char]
show :: InstanceEncryptionKey -> [Char]
$cshowList :: [InstanceEncryptionKey] -> ShowS
showList :: [InstanceEncryptionKey] -> ShowS
Show, InstanceEncryptionKey -> InstanceEncryptionKey -> Bool
(InstanceEncryptionKey -> InstanceEncryptionKey -> Bool)
-> (InstanceEncryptionKey -> InstanceEncryptionKey -> Bool)
-> Eq InstanceEncryptionKey
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstanceEncryptionKey -> InstanceEncryptionKey -> Bool
== :: InstanceEncryptionKey -> InstanceEncryptionKey -> Bool
$c/= :: InstanceEncryptionKey -> InstanceEncryptionKey -> Bool
/= :: InstanceEncryptionKey -> InstanceEncryptionKey -> Bool
Eq)

instance FromJSON InstanceEncryptionKey where
  parseJSON :: Value -> Parser InstanceEncryptionKey
parseJSON = [Char]
-> (Object -> Parser InstanceEncryptionKey)
-> Value
-> Parser InstanceEncryptionKey
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"InstanceEncryptionKey" ((Object -> Parser InstanceEncryptionKey)
 -> Value -> Parser InstanceEncryptionKey)
-> (Object -> Parser InstanceEncryptionKey)
-> Value
-> Parser InstanceEncryptionKey
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> InstanceEncryptionKey
InstanceEncryptionKey
      (Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> InstanceEncryptionKey)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text -> Maybe Text -> Maybe Text -> InstanceEncryptionKey)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"sha256"
      Parser
  (Maybe Text
   -> Maybe Text -> Maybe Text -> Maybe Text -> InstanceEncryptionKey)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text -> Maybe Text -> Maybe Text -> InstanceEncryptionKey)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"kmsKeyServiceAccount"
      Parser
  (Maybe Text -> Maybe Text -> Maybe Text -> InstanceEncryptionKey)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Maybe Text -> InstanceEncryptionKey)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"rawKey"
      Parser (Maybe Text -> Maybe Text -> InstanceEncryptionKey)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> InstanceEncryptionKey)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"rsaEncryptedKey"
      Parser (Maybe Text -> InstanceEncryptionKey)
-> Parser (Maybe Text) -> Parser InstanceEncryptionKey
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"kmsKeyName"

instance ToJSON InstanceEncryptionKey where
  toJSON :: InstanceEncryptionKey -> Value
toJSON InstanceEncryptionKey
iek =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"sha256" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceEncryptionKey -> Maybe Text
sha256 InstanceEncryptionKey
iek
        , (Key
"kmsKeyServiceAccount" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceEncryptionKey -> Maybe Text
kmsKeyServiceAccount InstanceEncryptionKey
iek
        , (Key
"rawKey" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceEncryptionKey -> Maybe Text
rawKey InstanceEncryptionKey
iek
        , (Key
"rsaEncryptedKey" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceEncryptionKey -> Maybe Text
rsaEncryptedKey InstanceEncryptionKey
iek
        , (Key
"kmsKeyName" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceEncryptionKey -> Maybe Text
kmsKeyName InstanceEncryptionKey
iek
        ]

data NetworkPerformanceConfig = NetworkPerformanceConfig
  { NetworkPerformanceConfig -> Text
totalEgressBandwidthTier :: Text
  }
  deriving (Int -> NetworkPerformanceConfig -> ShowS
[NetworkPerformanceConfig] -> ShowS
NetworkPerformanceConfig -> [Char]
(Int -> NetworkPerformanceConfig -> ShowS)
-> (NetworkPerformanceConfig -> [Char])
-> ([NetworkPerformanceConfig] -> ShowS)
-> Show NetworkPerformanceConfig
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkPerformanceConfig -> ShowS
showsPrec :: Int -> NetworkPerformanceConfig -> ShowS
$cshow :: NetworkPerformanceConfig -> [Char]
show :: NetworkPerformanceConfig -> [Char]
$cshowList :: [NetworkPerformanceConfig] -> ShowS
showList :: [NetworkPerformanceConfig] -> ShowS
Show, NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool
(NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool)
-> (NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool)
-> Eq NetworkPerformanceConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool
== :: NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool
$c/= :: NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool
/= :: NetworkPerformanceConfig -> NetworkPerformanceConfig -> Bool
Eq)

instance FromJSON NetworkPerformanceConfig where
  parseJSON :: Value -> Parser NetworkPerformanceConfig
parseJSON = [Char]
-> (Object -> Parser NetworkPerformanceConfig)
-> Value
-> Parser NetworkPerformanceConfig
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"NetworkPerformanceConfig" ((Object -> Parser NetworkPerformanceConfig)
 -> Value -> Parser NetworkPerformanceConfig)
-> (Object -> Parser NetworkPerformanceConfig)
-> Value
-> Parser NetworkPerformanceConfig
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Text -> NetworkPerformanceConfig
NetworkPerformanceConfig
      (Text -> NetworkPerformanceConfig)
-> Parser Text -> Parser NetworkPerformanceConfig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"totalEgressBandwidthTier"

instance ToJSON NetworkPerformanceConfig where
  toJSON :: NetworkPerformanceConfig -> Value
toJSON NetworkPerformanceConfig
npc = [Pair] -> Value
object [Key
"totalEgressBandwidthTier" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= NetworkPerformanceConfig -> Text
totalEgressBandwidthTier NetworkPerformanceConfig
npc]

data ResourceStatus = ResourceStatus
  { ResourceStatus -> [Char]
onHostMaintenance :: String
  , ResourceStatus -> Bool
automaticRestart :: Bool
  , ResourceStatus -> Bool
preemptible :: Bool
  , ResourceStatus -> [NodeAffinity]
nodeAffinities :: [NodeAffinity]
  , ResourceStatus -> Int
minNodeCpus :: Int
  , ResourceStatus -> [Char]
locationHint :: String
  , ResourceStatus -> Int
availabilityDomain :: Int
  , ResourceStatus -> [Char]
provisioningModel :: String
  , ResourceStatus -> InstanceTerminationAction
instanceTerminationAction :: InstanceTerminationAction
  }
  deriving (Int -> ResourceStatus -> ShowS
[ResourceStatus] -> ShowS
ResourceStatus -> [Char]
(Int -> ResourceStatus -> ShowS)
-> (ResourceStatus -> [Char])
-> ([ResourceStatus] -> ShowS)
-> Show ResourceStatus
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResourceStatus -> ShowS
showsPrec :: Int -> ResourceStatus -> ShowS
$cshow :: ResourceStatus -> [Char]
show :: ResourceStatus -> [Char]
$cshowList :: [ResourceStatus] -> ShowS
showList :: [ResourceStatus] -> ShowS
Show, ResourceStatus -> ResourceStatus -> Bool
(ResourceStatus -> ResourceStatus -> Bool)
-> (ResourceStatus -> ResourceStatus -> Bool) -> Eq ResourceStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ResourceStatus -> ResourceStatus -> Bool
== :: ResourceStatus -> ResourceStatus -> Bool
$c/= :: ResourceStatus -> ResourceStatus -> Bool
/= :: ResourceStatus -> ResourceStatus -> Bool
Eq)

instance FromJSON ResourceStatus where
  parseJSON :: Value -> Parser ResourceStatus
parseJSON = [Char]
-> (Object -> Parser ResourceStatus)
-> Value
-> Parser ResourceStatus
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ResourceStatus" ((Object -> Parser ResourceStatus)
 -> Value -> Parser ResourceStatus)
-> (Object -> Parser ResourceStatus)
-> Value
-> Parser ResourceStatus
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    [Char]
-> Bool
-> Bool
-> [NodeAffinity]
-> Int
-> [Char]
-> Int
-> [Char]
-> InstanceTerminationAction
-> ResourceStatus
ResourceStatus
      ([Char]
 -> Bool
 -> Bool
 -> [NodeAffinity]
 -> Int
 -> [Char]
 -> Int
 -> [Char]
 -> InstanceTerminationAction
 -> ResourceStatus)
-> Parser [Char]
-> Parser
     (Bool
      -> Bool
      -> [NodeAffinity]
      -> Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> ResourceStatus)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"onHostMaintenance"
      Parser
  (Bool
   -> Bool
   -> [NodeAffinity]
   -> Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> ResourceStatus)
-> Parser Bool
-> Parser
     (Bool
      -> [NodeAffinity]
      -> Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"automaticRestart"
      Parser
  (Bool
   -> [NodeAffinity]
   -> Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> ResourceStatus)
-> Parser Bool
-> Parser
     ([NodeAffinity]
      -> Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"preemptible"
      Parser
  ([NodeAffinity]
   -> Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> ResourceStatus)
-> Parser [NodeAffinity]
-> Parser
     (Int
      -> [Char]
      -> Int
      -> [Char]
      -> InstanceTerminationAction
      -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [NodeAffinity]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"nodeAffinities"
      Parser
  (Int
   -> [Char]
   -> Int
   -> [Char]
   -> InstanceTerminationAction
   -> ResourceStatus)
-> Parser Int
-> Parser
     ([Char]
      -> Int -> [Char] -> InstanceTerminationAction -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"minNodeCpus"
      Parser
  ([Char]
   -> Int -> [Char] -> InstanceTerminationAction -> ResourceStatus)
-> Parser [Char]
-> Parser
     (Int -> [Char] -> InstanceTerminationAction -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"locationHint"
      Parser
  (Int -> [Char] -> InstanceTerminationAction -> ResourceStatus)
-> Parser Int
-> Parser ([Char] -> InstanceTerminationAction -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"availabilityDomain"
      Parser ([Char] -> InstanceTerminationAction -> ResourceStatus)
-> Parser [Char]
-> Parser (InstanceTerminationAction -> ResourceStatus)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"provisioningModel"
      Parser (InstanceTerminationAction -> ResourceStatus)
-> Parser InstanceTerminationAction -> Parser ResourceStatus
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser InstanceTerminationAction
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"instanceTerminationAction"

instance ToJSON ResourceStatus where
  toJSON :: ResourceStatus -> Value
toJSON ResourceStatus {Bool
Int
[Char]
[NodeAffinity]
InstanceTerminationAction
$sel:onHostMaintenance:ResourceStatus :: ResourceStatus -> [Char]
$sel:automaticRestart:ResourceStatus :: ResourceStatus -> Bool
$sel:preemptible:ResourceStatus :: ResourceStatus -> Bool
$sel:nodeAffinities:ResourceStatus :: ResourceStatus -> [NodeAffinity]
$sel:minNodeCpus:ResourceStatus :: ResourceStatus -> Int
$sel:locationHint:ResourceStatus :: ResourceStatus -> [Char]
$sel:availabilityDomain:ResourceStatus :: ResourceStatus -> Int
$sel:provisioningModel:ResourceStatus :: ResourceStatus -> [Char]
$sel:instanceTerminationAction:ResourceStatus :: ResourceStatus -> InstanceTerminationAction
onHostMaintenance :: [Char]
automaticRestart :: Bool
preemptible :: Bool
nodeAffinities :: [NodeAffinity]
minNodeCpus :: Int
locationHint :: [Char]
availabilityDomain :: Int
provisioningModel :: [Char]
instanceTerminationAction :: InstanceTerminationAction
..} =
    [Pair] -> Value
object
      [ Key
"onHostMaintenance" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
onHostMaintenance
      , Key
"automaticRestart" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
automaticRestart
      , Key
"preemptible" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
preemptible
      , Key
"nodeAffinities" Key -> [NodeAffinity] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [NodeAffinity]
nodeAffinities
      , Key
"minNodeCpus" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
minNodeCpus
      , Key
"locationHint" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
locationHint
      , Key
"availabilityDomain" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
availabilityDomain
      , Key
"provisioningModel" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
provisioningModel
      , Key
"instanceTerminationAction" Key -> InstanceTerminationAction -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= InstanceTerminationAction
instanceTerminationAction
      ]

data InstanceList = InstanceList
  { InstanceList -> [Char]
kind :: String
  , InstanceList -> [Char]
id_ :: String
  , InstanceList -> Maybe [InstanceMetadata]
items :: Maybe [InstanceMetadata]
  }
  deriving (Int -> InstanceList -> ShowS
[InstanceList] -> ShowS
InstanceList -> [Char]
(Int -> InstanceList -> ShowS)
-> (InstanceList -> [Char])
-> ([InstanceList] -> ShowS)
-> Show InstanceList
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstanceList -> ShowS
showsPrec :: Int -> InstanceList -> ShowS
$cshow :: InstanceList -> [Char]
show :: InstanceList -> [Char]
$cshowList :: [InstanceList] -> ShowS
showList :: [InstanceList] -> ShowS
Show, InstanceList -> InstanceList -> Bool
(InstanceList -> InstanceList -> Bool)
-> (InstanceList -> InstanceList -> Bool) -> Eq InstanceList
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstanceList -> InstanceList -> Bool
== :: InstanceList -> InstanceList -> Bool
$c/= :: InstanceList -> InstanceList -> Bool
/= :: InstanceList -> InstanceList -> Bool
Eq)

instance FromJSON InstanceList where
  parseJSON :: Value -> Parser InstanceList
parseJSON = [Char]
-> (Object -> Parser InstanceList) -> Value -> Parser InstanceList
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"InstanceList" ((Object -> Parser InstanceList) -> Value -> Parser InstanceList)
-> (Object -> Parser InstanceList) -> Value -> Parser InstanceList
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    [Char] -> [Char] -> Maybe [InstanceMetadata] -> InstanceList
InstanceList
      ([Char] -> [Char] -> Maybe [InstanceMetadata] -> InstanceList)
-> Parser [Char]
-> Parser ([Char] -> Maybe [InstanceMetadata] -> InstanceList)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"kind"
      Parser ([Char] -> Maybe [InstanceMetadata] -> InstanceList)
-> Parser [Char]
-> Parser (Maybe [InstanceMetadata] -> InstanceList)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
      Parser (Maybe [InstanceMetadata] -> InstanceList)
-> Parser (Maybe [InstanceMetadata]) -> Parser InstanceList
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [InstanceMetadata])
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"items"

instance ToJSON InstanceList where
  toJSON :: InstanceList -> Value
toJSON InstanceList {[Char]
Maybe [InstanceMetadata]
$sel:kind:InstanceList :: InstanceList -> [Char]
$sel:id_:InstanceList :: InstanceList -> [Char]
$sel:items:InstanceList :: InstanceList -> Maybe [InstanceMetadata]
kind :: [Char]
id_ :: [Char]
items :: Maybe [InstanceMetadata]
..} =
    [Pair] -> Value
object
      [ Key
"kind" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
kind
      , Key
"id" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
id_
      , Key
"items" Key -> Maybe [InstanceMetadata] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe [InstanceMetadata]
items
      ]

-- | Response structure for delete instance operation
data InstanceDeleteResp = InstanceDeleteResp
  { InstanceDeleteResp -> Maybe [Char]
kind :: Maybe String
     -- ^ Type of resource (always "compute#operation")
  , InstanceDeleteResp -> Maybe [Char]
id_ :: Maybe String
        -- ^ Unique identifier for the operation
  , InstanceDeleteResp -> Maybe [Char]
creationTimestamp :: Maybe String
      -- ^ Creation timestamp in RFC3339 format
  , InstanceDeleteResp -> Maybe [Char]
name :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
zone :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
clientOperationId :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
operationType :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
targetLink :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
targetId :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
status :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
statusMessage :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
user :: Maybe String
  , InstanceDeleteResp -> Maybe Int
progress :: Maybe Int
  , InstanceDeleteResp -> Maybe [Char]
insertTime :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
startTime :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
endTime :: Maybe String
  , InstanceDeleteResp -> Maybe Error_
error_ :: Maybe Error_
  , InstanceDeleteResp -> Maybe [Warning]
warnings :: Maybe [Warning]
  , InstanceDeleteResp -> Maybe Int
httpErrorStatusCode :: Maybe Int
  , InstanceDeleteResp -> Maybe [Char]
httpErrorMessage :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
selfLink :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
region :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
description :: Maybe String
  , InstanceDeleteResp -> Maybe [Char]
operationGroupId :: Maybe String
  }
  deriving (Int -> InstanceDeleteResp -> ShowS
[InstanceDeleteResp] -> ShowS
InstanceDeleteResp -> [Char]
(Int -> InstanceDeleteResp -> ShowS)
-> (InstanceDeleteResp -> [Char])
-> ([InstanceDeleteResp] -> ShowS)
-> Show InstanceDeleteResp
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstanceDeleteResp -> ShowS
showsPrec :: Int -> InstanceDeleteResp -> ShowS
$cshow :: InstanceDeleteResp -> [Char]
show :: InstanceDeleteResp -> [Char]
$cshowList :: [InstanceDeleteResp] -> ShowS
showList :: [InstanceDeleteResp] -> ShowS
Show, InstanceDeleteResp -> InstanceDeleteResp -> Bool
(InstanceDeleteResp -> InstanceDeleteResp -> Bool)
-> (InstanceDeleteResp -> InstanceDeleteResp -> Bool)
-> Eq InstanceDeleteResp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstanceDeleteResp -> InstanceDeleteResp -> Bool
== :: InstanceDeleteResp -> InstanceDeleteResp -> Bool
$c/= :: InstanceDeleteResp -> InstanceDeleteResp -> Bool
/= :: InstanceDeleteResp -> InstanceDeleteResp -> Bool
Eq)

instance FromJSON InstanceDeleteResp where
  parseJSON :: Value -> Parser InstanceDeleteResp
parseJSON = [Char]
-> (Object -> Parser InstanceDeleteResp)
-> Value
-> Parser InstanceDeleteResp
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"InstanceDeleteResp" ((Object -> Parser InstanceDeleteResp)
 -> Value -> Parser InstanceDeleteResp)
-> (Object -> Parser InstanceDeleteResp)
-> Value
-> Parser InstanceDeleteResp
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe Int
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe Error_
-> Maybe [Warning]
-> Maybe Int
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> InstanceDeleteResp
InstanceDeleteResp
      (Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe Int
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe Error_
 -> Maybe [Warning]
 -> Maybe Int
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"kind"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"id"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"creationTimestamp"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"name"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"zone"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"clientOperationId"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"operationType"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"targetLink"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"targetId"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"status"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"statusMessage"
      Parser
  (Maybe [Char]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"user"
      Parser
  (Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe Int)
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"progress"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"insertTime"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"startTime"
      Parser
  (Maybe [Char]
   -> Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe Error_
      -> Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"endTime"
      Parser
  (Maybe Error_
   -> Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe Error_)
-> Parser
     (Maybe [Warning]
      -> Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Error_)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"error"
      Parser
  (Maybe [Warning]
   -> Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Warning])
-> Parser
     (Maybe Int
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Warning])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"warnings"
      Parser
  (Maybe Int
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe Int)
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"httpErrorStatusCode"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> Maybe [Char]
      -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"httpErrorMessage"
      Parser
  (Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> Maybe [Char]
   -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char] -> Maybe [Char] -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"selfLink"
      Parser
  (Maybe [Char]
   -> Maybe [Char] -> Maybe [Char] -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser (Maybe [Char] -> Maybe [Char] -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"region"
      Parser (Maybe [Char] -> Maybe [Char] -> InstanceDeleteResp)
-> Parser (Maybe [Char])
-> Parser (Maybe [Char] -> InstanceDeleteResp)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
      Parser (Maybe [Char] -> InstanceDeleteResp)
-> Parser (Maybe [Char]) -> Parser InstanceDeleteResp
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"operationGroupId"

instance ToJSON InstanceDeleteResp where
  toJSON :: InstanceDeleteResp -> Value
toJSON InstanceDeleteResp {Maybe Int
Maybe [Char]
Maybe [Warning]
Maybe Error_
$sel:kind:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:id_:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:creationTimestamp:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:name:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:zone:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:clientOperationId:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:operationType:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:targetLink:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:targetId:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:status:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:statusMessage:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:user:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:progress:InstanceDeleteResp :: InstanceDeleteResp -> Maybe Int
$sel:insertTime:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:startTime:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:endTime:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:error_:InstanceDeleteResp :: InstanceDeleteResp -> Maybe Error_
$sel:warnings:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Warning]
$sel:httpErrorStatusCode:InstanceDeleteResp :: InstanceDeleteResp -> Maybe Int
$sel:httpErrorMessage:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:selfLink:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:region:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:description:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
$sel:operationGroupId:InstanceDeleteResp :: InstanceDeleteResp -> Maybe [Char]
kind :: Maybe [Char]
id_ :: Maybe [Char]
creationTimestamp :: Maybe [Char]
name :: Maybe [Char]
zone :: Maybe [Char]
clientOperationId :: Maybe [Char]
operationType :: Maybe [Char]
targetLink :: Maybe [Char]
targetId :: Maybe [Char]
status :: Maybe [Char]
statusMessage :: Maybe [Char]
user :: Maybe [Char]
progress :: Maybe Int
insertTime :: Maybe [Char]
startTime :: Maybe [Char]
endTime :: Maybe [Char]
error_ :: Maybe Error_
warnings :: Maybe [Warning]
httpErrorStatusCode :: Maybe Int
httpErrorMessage :: Maybe [Char]
selfLink :: Maybe [Char]
region :: Maybe [Char]
description :: Maybe [Char]
operationGroupId :: Maybe [Char]
..} =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"kind" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
kind
        , (Key
"id" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
id_
        , (Key
"creationTimestamp" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
creationTimestamp
        , (Key
"name" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
name
        , (Key
"zone" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
zone
        , (Key
"clientOperationId" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
clientOperationId
        , (Key
"operationType" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
operationType
        , (Key
"targetLink" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
targetLink
        , (Key
"targetId" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
targetId
        , (Key
"status" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
status
        , (Key
"statusMessage" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
statusMessage
        , (Key
"user" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
user
        , (Key
"progress" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Int
progress
        , (Key
"insertTime" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
insertTime
        , (Key
"startTime" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
startTime
        , (Key
"endTime" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
endTime
        , (Key
"error" Key -> Error_ -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Error_ -> Pair) -> Maybe Error_ -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Error_
error_
        , (Key
"warnings" Key -> [Warning] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Warning] -> Pair) -> Maybe [Warning] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Warning]
warnings
        , (Key
"httpErrorStatusCode" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Int
httpErrorStatusCode
        , (Key
"httpErrorMessage" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
httpErrorMessage
        , (Key
"selfLink" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
selfLink
        , (Key
"region" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
region
        , (Key
"description" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
description
        , (Key
"operationGroupId" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
operationGroupId
        ]

data Error_ = Error_
  { Error_ -> Maybe [ErrorDetail]
errors :: Maybe [ErrorDetail]
  }
  deriving (Int -> Error_ -> ShowS
[Error_] -> ShowS
Error_ -> [Char]
(Int -> Error_ -> ShowS)
-> (Error_ -> [Char]) -> ([Error_] -> ShowS) -> Show Error_
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Error_ -> ShowS
showsPrec :: Int -> Error_ -> ShowS
$cshow :: Error_ -> [Char]
show :: Error_ -> [Char]
$cshowList :: [Error_] -> ShowS
showList :: [Error_] -> ShowS
Show, Error_ -> Error_ -> Bool
(Error_ -> Error_ -> Bool)
-> (Error_ -> Error_ -> Bool) -> Eq Error_
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Error_ -> Error_ -> Bool
== :: Error_ -> Error_ -> Bool
$c/= :: Error_ -> Error_ -> Bool
/= :: Error_ -> Error_ -> Bool
Eq)

instance FromJSON Error_ where
  parseJSON :: Value -> Parser Error_
parseJSON = [Char] -> (Object -> Parser Error_) -> Value -> Parser Error_
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"Error" ((Object -> Parser Error_) -> Value -> Parser Error_)
-> (Object -> Parser Error_) -> Value -> Parser Error_
forall a b. (a -> b) -> a -> b
$ \Object
o -> Maybe [ErrorDetail] -> Error_
Error_ (Maybe [ErrorDetail] -> Error_)
-> Parser (Maybe [ErrorDetail]) -> Parser Error_
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [ErrorDetail])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"errors"

instance ToJSON Error_ where
  toJSON :: Error_ -> Value
toJSON Error_
e = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes [(Key
"errors" Key -> [ErrorDetail] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([ErrorDetail] -> Pair) -> Maybe [ErrorDetail] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Error_ -> Maybe [ErrorDetail]
errors Error_
e]

data ErrorDetail = ErrorDetail
  { ErrorDetail -> Maybe [Char]
code :: Maybe String
  , ErrorDetail -> Maybe [Char]
location :: Maybe String
  , ErrorDetail -> Maybe [Char]
message :: Maybe String
  , ErrorDetail -> Maybe [DetailedError]
errorDetails :: Maybe [DetailedError]
  }
  deriving (Int -> ErrorDetail -> ShowS
[ErrorDetail] -> ShowS
ErrorDetail -> [Char]
(Int -> ErrorDetail -> ShowS)
-> (ErrorDetail -> [Char])
-> ([ErrorDetail] -> ShowS)
-> Show ErrorDetail
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ErrorDetail -> ShowS
showsPrec :: Int -> ErrorDetail -> ShowS
$cshow :: ErrorDetail -> [Char]
show :: ErrorDetail -> [Char]
$cshowList :: [ErrorDetail] -> ShowS
showList :: [ErrorDetail] -> ShowS
Show, ErrorDetail -> ErrorDetail -> Bool
(ErrorDetail -> ErrorDetail -> Bool)
-> (ErrorDetail -> ErrorDetail -> Bool) -> Eq ErrorDetail
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ErrorDetail -> ErrorDetail -> Bool
== :: ErrorDetail -> ErrorDetail -> Bool
$c/= :: ErrorDetail -> ErrorDetail -> Bool
/= :: ErrorDetail -> ErrorDetail -> Bool
Eq)

instance FromJSON ErrorDetail where
  parseJSON :: Value -> Parser ErrorDetail
parseJSON = [Char]
-> (Object -> Parser ErrorDetail) -> Value -> Parser ErrorDetail
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ErrorDetail" ((Object -> Parser ErrorDetail) -> Value -> Parser ErrorDetail)
-> (Object -> Parser ErrorDetail) -> Value -> Parser ErrorDetail
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [DetailedError]
-> ErrorDetail
ErrorDetail
      (Maybe [Char]
 -> Maybe [Char]
 -> Maybe [Char]
 -> Maybe [DetailedError]
 -> ErrorDetail)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe [Char] -> Maybe [DetailedError] -> ErrorDetail)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"code"
      Parser
  (Maybe [Char]
   -> Maybe [Char] -> Maybe [DetailedError] -> ErrorDetail)
-> Parser (Maybe [Char])
-> Parser (Maybe [Char] -> Maybe [DetailedError] -> ErrorDetail)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"location"
      Parser (Maybe [Char] -> Maybe [DetailedError] -> ErrorDetail)
-> Parser (Maybe [Char])
-> Parser (Maybe [DetailedError] -> ErrorDetail)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"message"
      Parser (Maybe [DetailedError] -> ErrorDetail)
-> Parser (Maybe [DetailedError]) -> Parser ErrorDetail
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [DetailedError])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"errorDetails"

instance ToJSON ErrorDetail where
  toJSON :: ErrorDetail -> Value
toJSON ErrorDetail {Maybe [Char]
Maybe [DetailedError]
$sel:code:ErrorDetail :: ErrorDetail -> Maybe [Char]
$sel:location:ErrorDetail :: ErrorDetail -> Maybe [Char]
$sel:message:ErrorDetail :: ErrorDetail -> Maybe [Char]
$sel:errorDetails:ErrorDetail :: ErrorDetail -> Maybe [DetailedError]
code :: Maybe [Char]
location :: Maybe [Char]
message :: Maybe [Char]
errorDetails :: Maybe [DetailedError]
..} =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"code" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
code
        , (Key
"location" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
location
        , (Key
"message" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
message
        , (Key
"errorDetails" Key -> [DetailedError] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([DetailedError] -> Pair) -> Maybe [DetailedError] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [DetailedError]
errorDetails
        ]

data DetailedError = DetailedError
  { DetailedError -> Maybe ErrorInfo
errorInfo :: Maybe ErrorInfo
  , DetailedError -> Maybe QuotaInfo
quotaInfo :: Maybe QuotaInfo
  , DetailedError -> Maybe Help
help :: Maybe Help
  , DetailedError -> Maybe LocalizedMessage
localizedMessage :: Maybe LocalizedMessage
  }
  deriving (Int -> DetailedError -> ShowS
[DetailedError] -> ShowS
DetailedError -> [Char]
(Int -> DetailedError -> ShowS)
-> (DetailedError -> [Char])
-> ([DetailedError] -> ShowS)
-> Show DetailedError
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DetailedError -> ShowS
showsPrec :: Int -> DetailedError -> ShowS
$cshow :: DetailedError -> [Char]
show :: DetailedError -> [Char]
$cshowList :: [DetailedError] -> ShowS
showList :: [DetailedError] -> ShowS
Show, DetailedError -> DetailedError -> Bool
(DetailedError -> DetailedError -> Bool)
-> (DetailedError -> DetailedError -> Bool) -> Eq DetailedError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DetailedError -> DetailedError -> Bool
== :: DetailedError -> DetailedError -> Bool
$c/= :: DetailedError -> DetailedError -> Bool
/= :: DetailedError -> DetailedError -> Bool
Eq)

instance FromJSON DetailedError where
  parseJSON :: Value -> Parser DetailedError
parseJSON = [Char]
-> (Object -> Parser DetailedError)
-> Value
-> Parser DetailedError
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"DetailedError" ((Object -> Parser DetailedError) -> Value -> Parser DetailedError)
-> (Object -> Parser DetailedError)
-> Value
-> Parser DetailedError
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe ErrorInfo
-> Maybe QuotaInfo
-> Maybe Help
-> Maybe LocalizedMessage
-> DetailedError
DetailedError
      (Maybe ErrorInfo
 -> Maybe QuotaInfo
 -> Maybe Help
 -> Maybe LocalizedMessage
 -> DetailedError)
-> Parser (Maybe ErrorInfo)
-> Parser
     (Maybe QuotaInfo
      -> Maybe Help -> Maybe LocalizedMessage -> DetailedError)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe ErrorInfo)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"errorInfo"
      Parser
  (Maybe QuotaInfo
   -> Maybe Help -> Maybe LocalizedMessage -> DetailedError)
-> Parser (Maybe QuotaInfo)
-> Parser (Maybe Help -> Maybe LocalizedMessage -> DetailedError)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe QuotaInfo)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"quotaInfo"
      Parser (Maybe Help -> Maybe LocalizedMessage -> DetailedError)
-> Parser (Maybe Help)
-> Parser (Maybe LocalizedMessage -> DetailedError)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Help)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"help"
      Parser (Maybe LocalizedMessage -> DetailedError)
-> Parser (Maybe LocalizedMessage) -> Parser DetailedError
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe LocalizedMessage)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"localizedMessage"

instance ToJSON DetailedError where
  toJSON :: DetailedError -> Value
toJSON DetailedError
de =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"errorInfo" Key -> ErrorInfo -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (ErrorInfo -> Pair) -> Maybe ErrorInfo -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DetailedError -> Maybe ErrorInfo
errorInfo DetailedError
de
        , (Key
"quotaInfo" Key -> QuotaInfo -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (QuotaInfo -> Pair) -> Maybe QuotaInfo -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DetailedError -> Maybe QuotaInfo
quotaInfo DetailedError
de
        , (Key
"help" Key -> Help -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Help -> Pair) -> Maybe Help -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DetailedError -> Maybe Help
help DetailedError
de
        , (Key
"localizedMessage" Key -> LocalizedMessage -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (LocalizedMessage -> Pair) -> Maybe LocalizedMessage -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DetailedError -> Maybe LocalizedMessage
localizedMessage DetailedError
de
        ]

data ErrorInfo = ErrorInfo
  { ErrorInfo -> Maybe [Char]
reason :: Maybe String
  , ErrorInfo -> Maybe [Char]
domain :: Maybe String
  }
  deriving (Int -> ErrorInfo -> ShowS
[ErrorInfo] -> ShowS
ErrorInfo -> [Char]
(Int -> ErrorInfo -> ShowS)
-> (ErrorInfo -> [Char])
-> ([ErrorInfo] -> ShowS)
-> Show ErrorInfo
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ErrorInfo -> ShowS
showsPrec :: Int -> ErrorInfo -> ShowS
$cshow :: ErrorInfo -> [Char]
show :: ErrorInfo -> [Char]
$cshowList :: [ErrorInfo] -> ShowS
showList :: [ErrorInfo] -> ShowS
Show, ErrorInfo -> ErrorInfo -> Bool
(ErrorInfo -> ErrorInfo -> Bool)
-> (ErrorInfo -> ErrorInfo -> Bool) -> Eq ErrorInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ErrorInfo -> ErrorInfo -> Bool
== :: ErrorInfo -> ErrorInfo -> Bool
$c/= :: ErrorInfo -> ErrorInfo -> Bool
/= :: ErrorInfo -> ErrorInfo -> Bool
Eq)

instance FromJSON ErrorInfo where
  parseJSON :: Value -> Parser ErrorInfo
parseJSON = [Char] -> (Object -> Parser ErrorInfo) -> Value -> Parser ErrorInfo
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"ErrorInfo" ((Object -> Parser ErrorInfo) -> Value -> Parser ErrorInfo)
-> (Object -> Parser ErrorInfo) -> Value -> Parser ErrorInfo
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char] -> Maybe [Char] -> ErrorInfo
ErrorInfo
      (Maybe [Char] -> Maybe [Char] -> ErrorInfo)
-> Parser (Maybe [Char]) -> Parser (Maybe [Char] -> ErrorInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"reason"
      Parser (Maybe [Char] -> ErrorInfo)
-> Parser (Maybe [Char]) -> Parser ErrorInfo
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"domain"

instance ToJSON ErrorInfo where
  toJSON :: ErrorInfo -> Value
toJSON ErrorInfo
ei =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"reason" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ErrorInfo -> Maybe [Char]
reason ErrorInfo
ei
        , (Key
"domain" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ErrorInfo -> Maybe [Char]
domain ErrorInfo
ei
        ]

data QuotaInfo = QuotaInfo
  { QuotaInfo -> Maybe [Char]
metricName :: Maybe String
  , QuotaInfo -> Maybe [Char]
limitName :: Maybe String
  , QuotaInfo -> Maybe Double
limit :: Maybe Double
  , QuotaInfo -> Maybe Double
futureLimit :: Maybe Double
  , QuotaInfo -> Maybe [Char]
rolloutStatus :: Maybe String
  }
  deriving (Int -> QuotaInfo -> ShowS
[QuotaInfo] -> ShowS
QuotaInfo -> [Char]
(Int -> QuotaInfo -> ShowS)
-> (QuotaInfo -> [Char])
-> ([QuotaInfo] -> ShowS)
-> Show QuotaInfo
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> QuotaInfo -> ShowS
showsPrec :: Int -> QuotaInfo -> ShowS
$cshow :: QuotaInfo -> [Char]
show :: QuotaInfo -> [Char]
$cshowList :: [QuotaInfo] -> ShowS
showList :: [QuotaInfo] -> ShowS
Show, QuotaInfo -> QuotaInfo -> Bool
(QuotaInfo -> QuotaInfo -> Bool)
-> (QuotaInfo -> QuotaInfo -> Bool) -> Eq QuotaInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: QuotaInfo -> QuotaInfo -> Bool
== :: QuotaInfo -> QuotaInfo -> Bool
$c/= :: QuotaInfo -> QuotaInfo -> Bool
/= :: QuotaInfo -> QuotaInfo -> Bool
Eq)

instance FromJSON QuotaInfo where
  parseJSON :: Value -> Parser QuotaInfo
parseJSON = [Char] -> (Object -> Parser QuotaInfo) -> Value -> Parser QuotaInfo
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"QuotaInfo" ((Object -> Parser QuotaInfo) -> Value -> Parser QuotaInfo)
-> (Object -> Parser QuotaInfo) -> Value -> Parser QuotaInfo
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char]
-> Maybe [Char]
-> Maybe Double
-> Maybe Double
-> Maybe [Char]
-> QuotaInfo
QuotaInfo
      (Maybe [Char]
 -> Maybe [Char]
 -> Maybe Double
 -> Maybe Double
 -> Maybe [Char]
 -> QuotaInfo)
-> Parser (Maybe [Char])
-> Parser
     (Maybe [Char]
      -> Maybe Double -> Maybe Double -> Maybe [Char] -> QuotaInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"metricName"
      Parser
  (Maybe [Char]
   -> Maybe Double -> Maybe Double -> Maybe [Char] -> QuotaInfo)
-> Parser (Maybe [Char])
-> Parser
     (Maybe Double -> Maybe Double -> Maybe [Char] -> QuotaInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"limitName"
      Parser (Maybe Double -> Maybe Double -> Maybe [Char] -> QuotaInfo)
-> Parser (Maybe Double)
-> Parser (Maybe Double -> Maybe [Char] -> QuotaInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"limit"
      Parser (Maybe Double -> Maybe [Char] -> QuotaInfo)
-> Parser (Maybe Double) -> Parser (Maybe [Char] -> QuotaInfo)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Double)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"futureLimit"
      Parser (Maybe [Char] -> QuotaInfo)
-> Parser (Maybe [Char]) -> Parser QuotaInfo
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"rolloutStatus"

instance ToJSON QuotaInfo where
  toJSON :: QuotaInfo -> Value
toJSON QuotaInfo
qi =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"metricName" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> QuotaInfo -> Maybe [Char]
metricName QuotaInfo
qi
        , (Key
"limitName" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> QuotaInfo -> Maybe [Char]
limitName QuotaInfo
qi
        , (Key
"limit" Key -> Double -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Double -> Pair) -> Maybe Double -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> QuotaInfo -> Maybe Double
limit QuotaInfo
qi
        , (Key
"futureLimit" Key -> Double -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Double -> Pair) -> Maybe Double -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> QuotaInfo -> Maybe Double
futureLimit QuotaInfo
qi
        , (Key
"rolloutStatus" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> QuotaInfo -> Maybe [Char]
rolloutStatus QuotaInfo
qi
        ]

data Help = Help
  { Help -> Maybe [Link]
links :: Maybe [Link]
  }
  deriving (Int -> Help -> ShowS
[Help] -> ShowS
Help -> [Char]
(Int -> Help -> ShowS)
-> (Help -> [Char]) -> ([Help] -> ShowS) -> Show Help
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Help -> ShowS
showsPrec :: Int -> Help -> ShowS
$cshow :: Help -> [Char]
show :: Help -> [Char]
$cshowList :: [Help] -> ShowS
showList :: [Help] -> ShowS
Show, Help -> Help -> Bool
(Help -> Help -> Bool) -> (Help -> Help -> Bool) -> Eq Help
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Help -> Help -> Bool
== :: Help -> Help -> Bool
$c/= :: Help -> Help -> Bool
/= :: Help -> Help -> Bool
Eq)

instance FromJSON Help where
  parseJSON :: Value -> Parser Help
parseJSON = [Char] -> (Object -> Parser Help) -> Value -> Parser Help
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"Help" ((Object -> Parser Help) -> Value -> Parser Help)
-> (Object -> Parser Help) -> Value -> Parser Help
forall a b. (a -> b) -> a -> b
$ \Object
o -> Maybe [Link] -> Help
Help (Maybe [Link] -> Help) -> Parser (Maybe [Link]) -> Parser Help
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Link])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"links"

instance ToJSON Help where
  toJSON :: Help -> Value
toJSON Help
h = [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes [(Key
"links" Key -> [Link] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Link] -> Pair) -> Maybe [Link] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Help -> Maybe [Link]
links Help
h]

data Link = Link
  { Link -> Maybe [Char]
description :: Maybe String
  , Link -> Maybe [Char]
url :: Maybe String
  }
  deriving (Int -> Link -> ShowS
[Link] -> ShowS
Link -> [Char]
(Int -> Link -> ShowS)
-> (Link -> [Char]) -> ([Link] -> ShowS) -> Show Link
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Link -> ShowS
showsPrec :: Int -> Link -> ShowS
$cshow :: Link -> [Char]
show :: Link -> [Char]
$cshowList :: [Link] -> ShowS
showList :: [Link] -> ShowS
Show, Link -> Link -> Bool
(Link -> Link -> Bool) -> (Link -> Link -> Bool) -> Eq Link
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Link -> Link -> Bool
== :: Link -> Link -> Bool
$c/= :: Link -> Link -> Bool
/= :: Link -> Link -> Bool
Eq)

instance FromJSON Link where
  parseJSON :: Value -> Parser Link
parseJSON = [Char] -> (Object -> Parser Link) -> Value -> Parser Link
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"Link" ((Object -> Parser Link) -> Value -> Parser Link)
-> (Object -> Parser Link) -> Value -> Parser Link
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char] -> Maybe [Char] -> Link
Link
      (Maybe [Char] -> Maybe [Char] -> Link)
-> Parser (Maybe [Char]) -> Parser (Maybe [Char] -> Link)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"description"
      Parser (Maybe [Char] -> Link)
-> Parser (Maybe [Char]) -> Parser Link
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"url"

instance ToJSON Link where
  toJSON :: Link -> Value
toJSON Link {Maybe [Char]
$sel:description:Link :: Link -> Maybe [Char]
$sel:url:Link :: Link -> Maybe [Char]
description :: Maybe [Char]
url :: Maybe [Char]
..} =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"description" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
description
        , (Key
"url" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
url
        ]

data LocalizedMessage = LocalizedMessage
  { LocalizedMessage -> Maybe [Char]
locale :: Maybe String
  , LocalizedMessage -> Maybe [Char]
message :: Maybe String
  }
  deriving (Int -> LocalizedMessage -> ShowS
[LocalizedMessage] -> ShowS
LocalizedMessage -> [Char]
(Int -> LocalizedMessage -> ShowS)
-> (LocalizedMessage -> [Char])
-> ([LocalizedMessage] -> ShowS)
-> Show LocalizedMessage
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LocalizedMessage -> ShowS
showsPrec :: Int -> LocalizedMessage -> ShowS
$cshow :: LocalizedMessage -> [Char]
show :: LocalizedMessage -> [Char]
$cshowList :: [LocalizedMessage] -> ShowS
showList :: [LocalizedMessage] -> ShowS
Show, LocalizedMessage -> LocalizedMessage -> Bool
(LocalizedMessage -> LocalizedMessage -> Bool)
-> (LocalizedMessage -> LocalizedMessage -> Bool)
-> Eq LocalizedMessage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LocalizedMessage -> LocalizedMessage -> Bool
== :: LocalizedMessage -> LocalizedMessage -> Bool
$c/= :: LocalizedMessage -> LocalizedMessage -> Bool
/= :: LocalizedMessage -> LocalizedMessage -> Bool
Eq)

instance FromJSON LocalizedMessage where
  parseJSON :: Value -> Parser LocalizedMessage
parseJSON = [Char]
-> (Object -> Parser LocalizedMessage)
-> Value
-> Parser LocalizedMessage
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"LocalizedMessage" ((Object -> Parser LocalizedMessage)
 -> Value -> Parser LocalizedMessage)
-> (Object -> Parser LocalizedMessage)
-> Value
-> Parser LocalizedMessage
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe [Char] -> Maybe [Char] -> LocalizedMessage
LocalizedMessage
      (Maybe [Char] -> Maybe [Char] -> LocalizedMessage)
-> Parser (Maybe [Char])
-> Parser (Maybe [Char] -> LocalizedMessage)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"locale"
      Parser (Maybe [Char] -> LocalizedMessage)
-> Parser (Maybe [Char]) -> Parser LocalizedMessage
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe [Char])
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"message"

instance ToJSON LocalizedMessage where
  toJSON :: LocalizedMessage -> Value
toJSON LocalizedMessage {Maybe [Char]
$sel:locale:LocalizedMessage :: LocalizedMessage -> Maybe [Char]
$sel:message:LocalizedMessage :: LocalizedMessage -> Maybe [Char]
locale :: Maybe [Char]
message :: Maybe [Char]
..} =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"locale" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
locale
        , (Key
"message" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) ([Char] -> Pair) -> Maybe [Char] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
message
        ]

data InstanceStartResponse = InstanceStartResponse
  { InstanceStartResponse -> Maybe Text
kind :: Maybe Text
  , InstanceStartResponse -> Maybe Text
id_ :: Maybe Text
  , InstanceStartResponse -> Maybe Text
creationTimestamp :: Maybe Text
  , InstanceStartResponse -> Maybe Text
name :: Maybe Text
  , InstanceStartResponse -> Maybe Text
zone :: Maybe Text
  , InstanceStartResponse -> Maybe Text
clientOperationId :: Maybe Text
  , InstanceStartResponse -> Maybe Text
operationType :: Maybe Text
  , InstanceStartResponse -> Maybe Text
targetLink :: Maybe Text
  , InstanceStartResponse -> Maybe Text
targetId :: Maybe Text
  , InstanceStartResponse -> Maybe Text
status :: Maybe Text
  , InstanceStartResponse -> Maybe Text
statusMessage :: Maybe Text
  , InstanceStartResponse -> Maybe Text
user :: Maybe Text
  }
  deriving (Int -> InstanceStartResponse -> ShowS
[InstanceStartResponse] -> ShowS
InstanceStartResponse -> [Char]
(Int -> InstanceStartResponse -> ShowS)
-> (InstanceStartResponse -> [Char])
-> ([InstanceStartResponse] -> ShowS)
-> Show InstanceStartResponse
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstanceStartResponse -> ShowS
showsPrec :: Int -> InstanceStartResponse -> ShowS
$cshow :: InstanceStartResponse -> [Char]
show :: InstanceStartResponse -> [Char]
$cshowList :: [InstanceStartResponse] -> ShowS
showList :: [InstanceStartResponse] -> ShowS
Show, InstanceStartResponse -> InstanceStartResponse -> Bool
(InstanceStartResponse -> InstanceStartResponse -> Bool)
-> (InstanceStartResponse -> InstanceStartResponse -> Bool)
-> Eq InstanceStartResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstanceStartResponse -> InstanceStartResponse -> Bool
== :: InstanceStartResponse -> InstanceStartResponse -> Bool
$c/= :: InstanceStartResponse -> InstanceStartResponse -> Bool
/= :: InstanceStartResponse -> InstanceStartResponse -> Bool
Eq)

instance FromJSON InstanceStartResponse where
  parseJSON :: Value -> Parser InstanceStartResponse
parseJSON = [Char]
-> (Object -> Parser InstanceStartResponse)
-> Value
-> Parser InstanceStartResponse
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"InstanceStartResponse" ((Object -> Parser InstanceStartResponse)
 -> Value -> Parser InstanceStartResponse)
-> (Object -> Parser InstanceStartResponse)
-> Value
-> Parser InstanceStartResponse
forall a b. (a -> b) -> a -> b
$ \Object
o ->
    Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> InstanceStartResponse
InstanceStartResponse
      (Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"kind"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"id"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"creationTimestamp"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"name"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"zone"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"clientOperationId"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"operationType"
      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text -> Maybe Text -> Maybe Text -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"targetLink"
      Parser
  (Maybe Text
   -> Maybe Text -> Maybe Text -> Maybe Text -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text -> Maybe Text -> Maybe Text -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"targetId"
      Parser
  (Maybe Text -> Maybe Text -> Maybe Text -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> Maybe Text -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"status"
      Parser (Maybe Text -> Maybe Text -> InstanceStartResponse)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> InstanceStartResponse)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"statusMessage"
      Parser (Maybe Text -> InstanceStartResponse)
-> Parser (Maybe Text) -> Parser InstanceStartResponse
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"user"

instance ToJSON InstanceStartResponse where
  toJSON :: InstanceStartResponse -> Value
toJSON InstanceStartResponse {Maybe Text
$sel:kind:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:id_:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:creationTimestamp:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:name:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:zone:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:clientOperationId:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:operationType:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:targetLink:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:targetId:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:status:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:statusMessage:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
$sel:user:InstanceStartResponse :: InstanceStartResponse -> Maybe Text
kind :: Maybe Text
id_ :: Maybe Text
creationTimestamp :: Maybe Text
name :: Maybe Text
zone :: Maybe Text
clientOperationId :: Maybe Text
operationType :: Maybe Text
targetLink :: Maybe Text
targetId :: Maybe Text
status :: Maybe Text
statusMessage :: Maybe Text
user :: Maybe Text
..} =
    [Pair] -> Value
object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$
      [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Key
"kind" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
kind
        , (Key
"id" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
id_
        , (Key
"creationTimestamp" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
creationTimestamp
        , (Key
"name" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
name
        , (Key
"zone" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
zone
        , (Key
"clientOperationId" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
clientOperationId
        , (Key
"operationType" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
operationType
        , (Key
"targetLink" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
targetLink
        , (Key
"targetId" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
targetId
        , (Key
"status" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
status
        , (Key
"statusMessage" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
statusMessage
        , (Key
"user" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Text
user
        ]

data InsertInstanceOps = InsertInstanceOps
  { InsertInstanceOps -> [Char]
name :: String
  , InsertInstanceOps -> [Char]
machineType :: String
  , InsertInstanceOps -> Maybe [Disk]
disks :: Maybe [Disk]
  , InsertInstanceOps -> Maybe [NetworkInterface]
networkInterfaces :: Maybe [NetworkInterface]
  }
  deriving (Int -> InsertInstanceOps -> ShowS
[InsertInstanceOps] -> ShowS
InsertInstanceOps -> [Char]
(Int -> InsertInstanceOps -> ShowS)
-> (InsertInstanceOps -> [Char])
-> ([InsertInstanceOps] -> ShowS)
-> Show InsertInstanceOps
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InsertInstanceOps -> ShowS
showsPrec :: Int -> InsertInstanceOps -> ShowS
$cshow :: InsertInstanceOps -> [Char]
show :: InsertInstanceOps -> [Char]
$cshowList :: [InsertInstanceOps] -> ShowS
showList :: [InsertInstanceOps] -> ShowS
Show, InsertInstanceOps -> InsertInstanceOps -> Bool
(InsertInstanceOps -> InsertInstanceOps -> Bool)
-> (InsertInstanceOps -> InsertInstanceOps -> Bool)
-> Eq InsertInstanceOps
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InsertInstanceOps -> InsertInstanceOps -> Bool
== :: InsertInstanceOps -> InsertInstanceOps -> Bool
$c/= :: InsertInstanceOps -> InsertInstanceOps -> Bool
/= :: InsertInstanceOps -> InsertInstanceOps -> Bool
Eq)

data NetworkInterface = NetworkInterface
  { NetworkInterface -> [Char]
network :: String
  }
  deriving (Int -> NetworkInterface -> ShowS
[NetworkInterface] -> ShowS
NetworkInterface -> [Char]
(Int -> NetworkInterface -> ShowS)
-> (NetworkInterface -> [Char])
-> ([NetworkInterface] -> ShowS)
-> Show NetworkInterface
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkInterface -> ShowS
showsPrec :: Int -> NetworkInterface -> ShowS
$cshow :: NetworkInterface -> [Char]
show :: NetworkInterface -> [Char]
$cshowList :: [NetworkInterface] -> ShowS
showList :: [NetworkInterface] -> ShowS
Show, NetworkInterface -> NetworkInterface -> Bool
(NetworkInterface -> NetworkInterface -> Bool)
-> (NetworkInterface -> NetworkInterface -> Bool)
-> Eq NetworkInterface
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkInterface -> NetworkInterface -> Bool
== :: NetworkInterface -> NetworkInterface -> Bool
$c/= :: NetworkInterface -> NetworkInterface -> Bool
/= :: NetworkInterface -> NetworkInterface -> Bool
Eq)

data InsertInstanceQuery = InsertInstanceQuery
  { InsertInstanceQuery -> Maybe [Char]
requestId :: Maybe String
  , InsertInstanceQuery -> Maybe [Char]
sourceInstanceTemplate :: Maybe String
  }
  deriving (Int -> InsertInstanceQuery -> ShowS
[InsertInstanceQuery] -> ShowS
InsertInstanceQuery -> [Char]
(Int -> InsertInstanceQuery -> ShowS)
-> (InsertInstanceQuery -> [Char])
-> ([InsertInstanceQuery] -> ShowS)
-> Show InsertInstanceQuery
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InsertInstanceQuery -> ShowS
showsPrec :: Int -> InsertInstanceQuery -> ShowS
$cshow :: InsertInstanceQuery -> [Char]
show :: InsertInstanceQuery -> [Char]
$cshowList :: [InsertInstanceQuery] -> ShowS
showList :: [InsertInstanceQuery] -> ShowS
Show, InsertInstanceQuery -> InsertInstanceQuery -> Bool
(InsertInstanceQuery -> InsertInstanceQuery -> Bool)
-> (InsertInstanceQuery -> InsertInstanceQuery -> Bool)
-> Eq InsertInstanceQuery
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InsertInstanceQuery -> InsertInstanceQuery -> Bool
== :: InsertInstanceQuery -> InsertInstanceQuery -> Bool
$c/= :: InsertInstanceQuery -> InsertInstanceQuery -> Bool
/= :: InsertInstanceQuery -> InsertInstanceQuery -> Bool
Eq)

instance ToJSON InsertInstanceOps where
  toJSON :: InsertInstanceOps -> Value
toJSON InsertInstanceOps {[Char]
Maybe [Disk]
Maybe [NetworkInterface]
$sel:name:InsertInstanceOps :: InsertInstanceOps -> [Char]
$sel:machineType:InsertInstanceOps :: InsertInstanceOps -> [Char]
$sel:disks:InsertInstanceOps :: InsertInstanceOps -> Maybe [Disk]
$sel:networkInterfaces:InsertInstanceOps :: InsertInstanceOps -> Maybe [NetworkInterface]
name :: [Char]
machineType :: [Char]
disks :: Maybe [Disk]
networkInterfaces :: Maybe [NetworkInterface]
..} =
    [Pair] -> Value
object
      [ Key
"name" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
name
      , Key
"machineType" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
machineType
      , Key
"disks" Key -> Maybe [Disk] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe [Disk]
disks
      , Key
"networkInterfaces" Key -> Maybe [NetworkInterface] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe [NetworkInterface]
networkInterfaces
      ]

instance ToJSON NetworkInterface where
  toJSON :: NetworkInterface -> Value
toJSON NetworkInterface
ni =
    [Pair] -> Value
object
      [ Key
"network" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= NetworkInterface -> [Char]
network NetworkInterface
ni
      ]

-- | Represents a disk attached to a Compute Engine instance
data Disk = Disk
  { Disk -> Bool
autoDelete :: Bool
    -- ^ Whether disk should be auto-deleted when instance is deleted
  , Disk -> Bool
boot :: Bool
    -- ^ Whether this is a boot disk
  , Disk -> [Char]
deviceName :: String
    -- ^ Unique device name visible to the guest OS
  , Disk -> Maybe InitializeParams
initializeParams :: Maybe InitializeParams
    -- ^ Initialization parameters for the disk
  , Disk -> [Char]
mode :: String
    -- ^ Access mode (READ_WRITE or READ_ONLY)
  , Disk -> [Char]
type_ :: String
    -- ^ Disk type (PERSISTENT or SCRATCH)
  }
  deriving (Int -> Disk -> ShowS
[Disk] -> ShowS
Disk -> [Char]
(Int -> Disk -> ShowS)
-> (Disk -> [Char]) -> ([Disk] -> ShowS) -> Show Disk
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Disk -> ShowS
showsPrec :: Int -> Disk -> ShowS
$cshow :: Disk -> [Char]
show :: Disk -> [Char]
$cshowList :: [Disk] -> ShowS
showList :: [Disk] -> ShowS
Show, Disk -> Disk -> Bool
(Disk -> Disk -> Bool) -> (Disk -> Disk -> Bool) -> Eq Disk
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Disk -> Disk -> Bool
== :: Disk -> Disk -> Bool
$c/= :: Disk -> Disk -> Bool
/= :: Disk -> Disk -> Bool
Eq)

-- | Disk initialization parameters for new disk creation
data InitializeParams = InitializeParams
  { InitializeParams -> [Char]
diskSizeGb :: String
    -- ^ Size of the disk in GB (passed as String to match API format)
  , InitializeParams -> [Char]
diskType :: String
    -- ^ Full URL of disk type resource
  , InitializeParams -> Map [Char] [Char]
labels :: Map.Map String String
    -- ^ Labels to apply to the disk
  , InitializeParams -> [Char]
sourceImage :: String
    -- ^ Source image used to create the disk
  }
  deriving (Int -> InitializeParams -> ShowS
[InitializeParams] -> ShowS
InitializeParams -> [Char]
(Int -> InitializeParams -> ShowS)
-> (InitializeParams -> [Char])
-> ([InitializeParams] -> ShowS)
-> Show InitializeParams
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InitializeParams -> ShowS
showsPrec :: Int -> InitializeParams -> ShowS
$cshow :: InitializeParams -> [Char]
show :: InitializeParams -> [Char]
$cshowList :: [InitializeParams] -> ShowS
showList :: [InitializeParams] -> ShowS
Show, InitializeParams -> InitializeParams -> Bool
(InitializeParams -> InitializeParams -> Bool)
-> (InitializeParams -> InitializeParams -> Bool)
-> Eq InitializeParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InitializeParams -> InitializeParams -> Bool
== :: InitializeParams -> InitializeParams -> Bool
$c/= :: InitializeParams -> InitializeParams -> Bool
/= :: InitializeParams -> InitializeParams -> Bool
Eq)

instance ToJSON Disk where
  toJSON :: Disk -> Value
toJSON Disk{Bool
[Char]
Maybe InitializeParams
$sel:autoDelete:Disk :: Disk -> Bool
$sel:boot:Disk :: Disk -> Bool
$sel:deviceName:Disk :: Disk -> [Char]
$sel:initializeParams:Disk :: Disk -> Maybe InitializeParams
$sel:mode:Disk :: Disk -> [Char]
$sel:type_:Disk :: Disk -> [Char]
autoDelete :: Bool
boot :: Bool
deviceName :: [Char]
initializeParams :: Maybe InitializeParams
mode :: [Char]
type_ :: [Char]
..} = [Pair] -> Value
object
    [ Key
"autoDelete" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
autoDelete
    , Key
"boot" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
boot
    , Key
"deviceName" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
deviceName
    , Key
"initializeParams" Key -> Maybe InitializeParams -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe InitializeParams
initializeParams
    , Key
"mode" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
mode
    , Key
"type" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
type_  -- Map type_ to "type" in JSON
    ]

instance FromJSON Disk where
  parseJSON :: Value -> Parser Disk
parseJSON = [Char] -> (Object -> Parser Disk) -> Value -> Parser Disk
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"Disk" ((Object -> Parser Disk) -> Value -> Parser Disk)
-> (Object -> Parser Disk) -> Value -> Parser Disk
forall a b. (a -> b) -> a -> b
$ \Object
v -> Bool
-> Bool
-> [Char]
-> Maybe InitializeParams
-> [Char]
-> [Char]
-> Disk
Disk
    (Bool
 -> Bool
 -> [Char]
 -> Maybe InitializeParams
 -> [Char]
 -> [Char]
 -> Disk)
-> Parser Bool
-> Parser
     (Bool
      -> [Char] -> Maybe InitializeParams -> [Char] -> [Char] -> Disk)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"autoDelete"
    Parser
  (Bool
   -> [Char] -> Maybe InitializeParams -> [Char] -> [Char] -> Disk)
-> Parser Bool
-> Parser
     ([Char] -> Maybe InitializeParams -> [Char] -> [Char] -> Disk)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"boot"
    Parser
  ([Char] -> Maybe InitializeParams -> [Char] -> [Char] -> Disk)
-> Parser [Char]
-> Parser (Maybe InitializeParams -> [Char] -> [Char] -> Disk)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"deviceName"
    Parser (Maybe InitializeParams -> [Char] -> [Char] -> Disk)
-> Parser (Maybe InitializeParams)
-> Parser ([Char] -> [Char] -> Disk)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Maybe InitializeParams)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"initializeParams"
    Parser ([Char] -> [Char] -> Disk)
-> Parser [Char] -> Parser ([Char] -> Disk)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"mode"
    Parser ([Char] -> Disk) -> Parser [Char] -> Parser Disk
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"type"  -- Parse "type" field into type_

instance ToJSON InitializeParams where
  toJSON :: InitializeParams -> Value
toJSON InitializeParams{[Char]
Map [Char] [Char]
$sel:diskSizeGb:InitializeParams :: InitializeParams -> [Char]
$sel:diskType:InitializeParams :: InitializeParams -> [Char]
$sel:labels:InitializeParams :: InitializeParams -> Map [Char] [Char]
$sel:sourceImage:InitializeParams :: InitializeParams -> [Char]
diskSizeGb :: [Char]
diskType :: [Char]
labels :: Map [Char] [Char]
sourceImage :: [Char]
..} = [Pair] -> Value
object
    [ Key
"diskSizeGb" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
diskSizeGb
    , Key
"diskType" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
diskType
    , Key
"labels" Key -> Map [Char] [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map [Char] [Char]
labels
    , Key
"sourceImage" Key -> [Char] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Char]
sourceImage
    ]

instance FromJSON InitializeParams where
  parseJSON :: Value -> Parser InitializeParams
parseJSON = [Char]
-> (Object -> Parser InitializeParams)
-> Value
-> Parser InitializeParams
forall a. [Char] -> (Object -> Parser a) -> Value -> Parser a
withObject [Char]
"InitializeParams" ((Object -> Parser InitializeParams)
 -> Value -> Parser InitializeParams)
-> (Object -> Parser InitializeParams)
-> Value
-> Parser InitializeParams
forall a b. (a -> b) -> a -> b
$ \Object
v -> [Char] -> [Char] -> Map [Char] [Char] -> [Char] -> InitializeParams
InitializeParams
    ([Char]
 -> [Char] -> Map [Char] [Char] -> [Char] -> InitializeParams)
-> Parser [Char]
-> Parser
     ([Char] -> Map [Char] [Char] -> [Char] -> InitializeParams)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"diskSizeGb"
    Parser ([Char] -> Map [Char] [Char] -> [Char] -> InitializeParams)
-> Parser [Char]
-> Parser (Map [Char] [Char] -> [Char] -> InitializeParams)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"diskType"
    Parser (Map [Char] [Char] -> [Char] -> InitializeParams)
-> Parser (Map [Char] [Char])
-> Parser ([Char] -> InitializeParams)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser (Map [Char] [Char])
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"labels"
    Parser ([Char] -> InitializeParams)
-> Parser [Char] -> Parser InitializeParams
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Char]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"sourceImage"


-- ** Instance Operation Functions**

-- | List instances in a given zone
--
-- @
-- listInstances 
--   :: String       -- ^ GCP Project ID
--   -> String       -- ^ Zone name
--   -> Maybe ListInstancesQuery  -- ^ Optional query parameters
--   -> IO (Either String InstanceList)
-- @
--
-- Returns either an error message or an 'InstanceList' containing
-- the collection of instances
listInstances ::
  String -> String -> Maybe ListInstancesQuery -> IO (Either String InstanceList)
listInstances :: [Char]
-> [Char]
-> Maybe ListInstancesQuery
-> IO (Either [Char] InstanceList)
listInstances [Char]
projectId [Char]
zone_ Maybe ListInstancesQuery
mbQuery = do
  let queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [(ByteString, Maybe ByteString)]
-> (ListInstancesQuery -> [(ByteString, Maybe ByteString)])
-> Maybe ListInstancesQuery
-> [(ByteString, Maybe ByteString)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ListInstancesQuery -> [(ByteString, Maybe ByteString)]
toQueryList Maybe ListInstancesQuery
mbQuery
  RequestOptions -> IO (Either [Char] InstanceList)
forall b. FromJSON b => RequestOptions -> IO (Either [Char] b)
doRequestJSON
    RequestOptions
      { reqMethod :: RequestMethod
reqMethod = RequestMethod
GET
      , reqUrl :: [Char]
reqUrl = [Char]
googleComputeUrl
      , mbQueryParams :: Maybe [(ByteString, Maybe ByteString)]
mbQueryParams = [(ByteString, Maybe ByteString)]
-> Maybe [(ByteString, Maybe ByteString)]
forall a. a -> Maybe a
Just [(ByteString, Maybe ByteString)]
queryParams
      , mbReqBody :: Maybe ByteString
mbReqBody = Maybe ByteString
forall a. Maybe a
Nothing
      , mbReqHeaders :: Maybe RequestHeaders
mbReqHeaders = Maybe RequestHeaders
forall a. Maybe a
Nothing
      , mbReqPath :: Maybe [Char]
mbReqPath = [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char]
"/projects/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
projectId [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/zones/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
zone_ [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/instances")
      }
  where
    toQueryList :: ListInstancesQuery -> [(BS.ByteString, Maybe BS.ByteString)]
    toQueryList :: ListInstancesQuery -> [(ByteString, Maybe ByteString)]
toQueryList ListInstancesQuery
q =
      [Maybe (ByteString, Maybe ByteString)]
-> [(ByteString, Maybe ByteString)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (ByteString
"filter",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ListInstancesQuery -> Maybe [Char]
filter_ ListInstancesQuery
q
        , (ByteString
"maxResults",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (Int -> Maybe ByteString)
-> Int
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Int -> ByteString) -> Int -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> ByteString) -> (Int -> [Char]) -> Int -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [Char]
forall a. Show a => a -> [Char]
show (Int -> (ByteString, Maybe ByteString))
-> Maybe Int -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ListInstancesQuery -> Maybe Int
maxResults ListInstancesQuery
q
        , (ByteString
"orderBy",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ListInstancesQuery -> Maybe [Char]
orderBy ListInstancesQuery
q
        , (ByteString
"pageToken",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ListInstancesQuery -> Maybe [Char]
pageToken ListInstancesQuery
q
        , (ByteString
"returnPartialSuccess",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> (Bool -> Maybe ByteString)
-> Bool
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Bool -> ByteString) -> Bool -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> ByteString) -> (Bool -> [Char]) -> Bool -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> [Char]
forall a. Show a => a -> [Char]
show (Bool -> (ByteString, Maybe ByteString))
-> Maybe Bool -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ListInstancesQuery -> Maybe Bool
returnPartialSuccess ListInstancesQuery
q
        ]

deleteInstance ::
  String -> String -> String -> Maybe RequestIdQuery -> IO (Either String InstanceDeleteResp)
deleteInstance :: [Char]
-> [Char]
-> [Char]
-> Maybe RequestIdQuery
-> IO (Either [Char] InstanceDeleteResp)
deleteInstance [Char]
project [Char]
zone_ [Char]
name_ Maybe RequestIdQuery
mbQuery = do
  let queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [(ByteString, Maybe ByteString)]
-> (RequestIdQuery -> [(ByteString, Maybe ByteString)])
-> Maybe RequestIdQuery
-> [(ByteString, Maybe ByteString)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] RequestIdQuery -> [(ByteString, Maybe ByteString)]
toQueryList Maybe RequestIdQuery
mbQuery
  RequestOptions -> IO (Either [Char] InstanceDeleteResp)
forall b. FromJSON b => RequestOptions -> IO (Either [Char] b)
doRequestJSON
    RequestOptions
      { reqMethod :: RequestMethod
reqMethod = RequestMethod
DELETE
      , reqUrl :: [Char]
reqUrl = [Char]
googleComputeUrl
      , mbQueryParams :: Maybe [(ByteString, Maybe ByteString)]
mbQueryParams = [(ByteString, Maybe ByteString)]
-> Maybe [(ByteString, Maybe ByteString)]
forall a. a -> Maybe a
Just [(ByteString, Maybe ByteString)]
queryParams
      , mbReqBody :: Maybe ByteString
mbReqBody = Maybe ByteString
forall a. Maybe a
Nothing
      , mbReqHeaders :: Maybe RequestHeaders
mbReqHeaders = Maybe RequestHeaders
forall a. Maybe a
Nothing
      , mbReqPath :: Maybe [Char]
mbReqPath = [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char]
"/projects/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
project [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/zones/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
zone_ [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/instances/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
name_)
      }
  where
    toQueryList :: RequestIdQuery -> [(BS.ByteString, Maybe BS.ByteString)]
    toQueryList :: RequestIdQuery -> [(ByteString, Maybe ByteString)]
toQueryList RequestIdQuery {Maybe [Char]
$sel:requestId:RequestIdQuery :: RequestIdQuery -> Maybe [Char]
requestId :: Maybe [Char]
..} =
      [Maybe (ByteString, Maybe ByteString)]
-> [(ByteString, Maybe ByteString)]
forall a. [Maybe a] -> [a]
catMaybes
        [(ByteString
"requestId",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
requestId]

startInstance ::
  String ->
  String ->
  String ->
  Maybe RequestIdQuery ->
  IO (Either String InstanceStartResponse)
startInstance :: [Char]
-> [Char]
-> [Char]
-> Maybe RequestIdQuery
-> IO (Either [Char] InstanceStartResponse)
startInstance [Char]
projectId [Char]
zone_ [Char]
instanceName Maybe RequestIdQuery
mbQuery = do
  let queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [(ByteString, Maybe ByteString)]
-> (RequestIdQuery -> [(ByteString, Maybe ByteString)])
-> Maybe RequestIdQuery
-> [(ByteString, Maybe ByteString)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] RequestIdQuery -> [(ByteString, Maybe ByteString)]
toQueryList Maybe RequestIdQuery
mbQuery
  RequestOptions -> IO (Either [Char] InstanceStartResponse)
forall b. FromJSON b => RequestOptions -> IO (Either [Char] b)
doRequestJSON
    RequestOptions
      { reqMethod :: RequestMethod
reqMethod = RequestMethod
POST
      , reqUrl :: [Char]
reqUrl = [Char]
googleComputeUrl
      , mbQueryParams :: Maybe [(ByteString, Maybe ByteString)]
mbQueryParams = [(ByteString, Maybe ByteString)]
-> Maybe [(ByteString, Maybe ByteString)]
forall a. a -> Maybe a
Just [(ByteString, Maybe ByteString)]
queryParams
      , mbReqBody :: Maybe ByteString
mbReqBody = Maybe ByteString
forall a. Maybe a
Nothing
      , mbReqHeaders :: Maybe RequestHeaders
mbReqHeaders = Maybe RequestHeaders
forall a. Maybe a
Nothing
      , mbReqPath :: Maybe [Char]
mbReqPath =
          [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char]
"/projects/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
projectId [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/zones/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
zone_ [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/instances/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
instanceName [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/start")
      }
  where
    toQueryList :: RequestIdQuery -> [(BS.ByteString, Maybe BS.ByteString)]
    toQueryList :: RequestIdQuery -> [(ByteString, Maybe ByteString)]
toQueryList RequestIdQuery {Maybe [Char]
$sel:requestId:RequestIdQuery :: RequestIdQuery -> Maybe [Char]
requestId :: Maybe [Char]
..} =
      [Maybe (ByteString, Maybe ByteString)]
-> [(ByteString, Maybe ByteString)]
forall a. [Maybe a] -> [a]
catMaybes
        [(ByteString
"requestId",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
requestId]

stopInstance ::
  String ->
  String ->
  String ->
  Maybe RequestIdQuery ->
  IO (Either String InstanceStartResponse)
stopInstance :: [Char]
-> [Char]
-> [Char]
-> Maybe RequestIdQuery
-> IO (Either [Char] InstanceStartResponse)
stopInstance [Char]
projectId [Char]
zone_ [Char]
instanceName Maybe RequestIdQuery
mbQuery = do
  let queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [(ByteString, Maybe ByteString)]
-> (RequestIdQuery -> [(ByteString, Maybe ByteString)])
-> Maybe RequestIdQuery
-> [(ByteString, Maybe ByteString)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] RequestIdQuery -> [(ByteString, Maybe ByteString)]
toQueryList Maybe RequestIdQuery
mbQuery
  RequestOptions -> IO (Either [Char] InstanceStartResponse)
forall b. FromJSON b => RequestOptions -> IO (Either [Char] b)
doRequestJSON
    RequestOptions
      { reqMethod :: RequestMethod
reqMethod = RequestMethod
POST
      , reqUrl :: [Char]
reqUrl = [Char]
googleComputeUrl
      , mbQueryParams :: Maybe [(ByteString, Maybe ByteString)]
mbQueryParams = [(ByteString, Maybe ByteString)]
-> Maybe [(ByteString, Maybe ByteString)]
forall a. a -> Maybe a
Just [(ByteString, Maybe ByteString)]
queryParams
      , mbReqBody :: Maybe ByteString
mbReqBody = Maybe ByteString
forall a. Maybe a
Nothing
      , mbReqHeaders :: Maybe RequestHeaders
mbReqHeaders = Maybe RequestHeaders
forall a. Maybe a
Nothing
      , mbReqPath :: Maybe [Char]
mbReqPath =
          [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char]
"/projects/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
projectId [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/zones/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
zone_ [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/instances/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
instanceName [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/stop")
      }
  where
    toQueryList :: RequestIdQuery -> [(BS.ByteString, Maybe BS.ByteString)]
    toQueryList :: RequestIdQuery -> [(ByteString, Maybe ByteString)]
toQueryList RequestIdQuery {Maybe [Char]
$sel:requestId:RequestIdQuery :: RequestIdQuery -> Maybe [Char]
requestId :: Maybe [Char]
..} =
      [Maybe (ByteString, Maybe ByteString)]
-> [(ByteString, Maybe ByteString)]
forall a. [Maybe a] -> [a]
catMaybes
        [(ByteString
"requestId",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
requestId]

insertInstance ::
  String ->
  String ->
  InsertInstanceOps ->
  Maybe InsertInstanceQuery ->
  IO (Either String InstanceStartResponse)
insertInstance :: [Char]
-> [Char]
-> InsertInstanceOps
-> Maybe InsertInstanceQuery
-> IO (Either [Char] InstanceStartResponse)
insertInstance [Char]
projectId [Char]
zone_ InsertInstanceOps
insertOps Maybe InsertInstanceQuery
mbQuery = do
  let queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [(ByteString, Maybe ByteString)]
-> (InsertInstanceQuery -> [(ByteString, Maybe ByteString)])
-> Maybe InsertInstanceQuery
-> [(ByteString, Maybe ByteString)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] InsertInstanceQuery -> [(ByteString, Maybe ByteString)]
toQueryList Maybe InsertInstanceQuery
mbQuery
  RequestOptions -> IO (Either [Char] InstanceStartResponse)
forall b. FromJSON b => RequestOptions -> IO (Either [Char] b)
doRequestJSON
    RequestOptions
      { reqMethod :: RequestMethod
reqMethod = RequestMethod
POST
      , reqUrl :: [Char]
reqUrl = [Char]
googleComputeUrl
      , mbQueryParams :: Maybe [(ByteString, Maybe ByteString)]
mbQueryParams = [(ByteString, Maybe ByteString)]
-> Maybe [(ByteString, Maybe ByteString)]
forall a. a -> Maybe a
Just [(ByteString, Maybe ByteString)]
queryParams
      , mbReqBody :: Maybe ByteString
mbReqBody = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString
forall a b. (a -> b) -> a -> b
$ InsertInstanceOps -> ByteString
forall a. ToJSON a => a -> ByteString
encode InsertInstanceOps
insertOps
      , mbReqHeaders :: Maybe RequestHeaders
mbReqHeaders = Maybe RequestHeaders
forall a. Maybe a
Nothing
      , mbReqPath :: Maybe [Char]
mbReqPath = [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just ([Char] -> Maybe [Char]) -> [Char] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"/projects/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
projectId [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/zones/" [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
zone_ [Char] -> ShowS
forall a. Semigroup a => a -> a -> a
<> [Char]
"/instances"
      }
  where
    toQueryList :: InsertInstanceQuery -> [(BS.ByteString, Maybe BS.ByteString)]
    toQueryList :: InsertInstanceQuery -> [(ByteString, Maybe ByteString)]
toQueryList InsertInstanceQuery {Maybe [Char]
$sel:requestId:InsertInstanceQuery :: InsertInstanceQuery -> Maybe [Char]
$sel:sourceInstanceTemplate:InsertInstanceQuery :: InsertInstanceQuery -> Maybe [Char]
requestId :: Maybe [Char]
sourceInstanceTemplate :: Maybe [Char]
..} =
      [Maybe (ByteString, Maybe ByteString)]
-> [(ByteString, Maybe ByteString)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (ByteString
"requestId",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
requestId
        , (ByteString
"sourceInstanceTemplate",) (Maybe ByteString -> (ByteString, Maybe ByteString))
-> ([Char] -> Maybe ByteString)
-> [Char]
-> (ByteString, Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ([Char] -> ByteString) -> [Char] -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
BS8.pack ([Char] -> (ByteString, Maybe ByteString))
-> Maybe [Char] -> Maybe (ByteString, Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Char]
sourceInstanceTemplate
        ]

-- ** Default Query Parameter Constructors**

-- All fields set to 'Nothing', which the API interprets as:
-- * No filtering
-- * Default page size
-- * No sorting
-- * Return full results
defaultListInstancesQuery :: ListInstancesQuery
defaultListInstancesQuery :: ListInstancesQuery
defaultListInstancesQuery =
  ListInstancesQuery
    { $sel:filter_:ListInstancesQuery :: Maybe [Char]
filter_ = Maybe [Char]
forall a. Maybe a
Nothing
    , $sel:maxResults:ListInstancesQuery :: Maybe Int
maxResults = Maybe Int
forall a. Maybe a
Nothing
    , $sel:orderBy:ListInstancesQuery :: Maybe [Char]
orderBy = Maybe [Char]
forall a. Maybe a
Nothing
    , $sel:pageToken:ListInstancesQuery :: Maybe [Char]
pageToken = Maybe [Char]
forall a. Maybe a
Nothing
    , $sel:returnPartialSuccess:ListInstancesQuery :: Maybe Bool
returnPartialSuccess = Maybe Bool
forall a. Maybe a
Nothing
    }

defaultRequestIdQuery :: String -> RequestIdQuery
defaultRequestIdQuery :: [Char] -> RequestIdQuery
defaultRequestIdQuery [Char]
rid = RequestIdQuery {$sel:requestId:RequestIdQuery :: Maybe [Char]
requestId = [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
rid}

-- | Create a default instance configuration
--
-- Creates a basic instance configuration with:
-- * 10GB persistent boot disk
-- * Default Debian image
-- * Network interface on default VPC
defaultInsertInstanceOps :: String -> String -> String -> String -> InsertInstanceOps
defaultInsertInstanceOps :: [Char] -> [Char] -> [Char] -> [Char] -> InsertInstanceOps
defaultInsertInstanceOps [Char]
projectId [Char]
zone [Char]
instanceName [Char]
machineType =
  InsertInstanceOps
    { $sel:name:InsertInstanceOps :: [Char]
name = [Char]
instanceName
    , $sel:machineType:InsertInstanceOps :: [Char]
machineType = [Char]
"zones/" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
zone [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"/machineTypes/" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
machineType
    , $sel:disks:InsertInstanceOps :: Maybe [Disk]
disks = [Disk] -> Maybe [Disk]
forall a. a -> Maybe a
Just [Disk
defaultDisk]
    , $sel:networkInterfaces:InsertInstanceOps :: Maybe [NetworkInterface]
networkInterfaces = [NetworkInterface] -> Maybe [NetworkInterface]
forall a. a -> Maybe a
Just [NetworkInterface
defaultNetworkInterface]
  }
  where
    defaultDisk :: Disk
defaultDisk = Disk
      { $sel:autoDelete:Disk :: Bool
autoDelete = Bool
True
      , $sel:boot:Disk :: Bool
boot = Bool
True
      , $sel:deviceName:Disk :: [Char]
deviceName = [Char]
instanceName [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"-boot"  -- Dynamic, based on instanceName
      , $sel:initializeParams:Disk :: Maybe InitializeParams
initializeParams = InitializeParams -> Maybe InitializeParams
forall a. a -> Maybe a
Just InitializeParams
defaultInitializeParams
      , $sel:mode:Disk :: [Char]
mode = [Char]
"READ_WRITE"
      , $sel:type_:Disk :: [Char]
type_ = [Char]
"PERSISTENT"
      }
    defaultInitializeParams :: InitializeParams
defaultInitializeParams = InitializeParams
      { $sel:diskSizeGb:InitializeParams :: [Char]
diskSizeGb = [Char]
"10"
      , $sel:diskType:InitializeParams :: [Char]
diskType = [Char]
"projects/" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
projectId [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"/zones/" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
zone [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"/diskTypes/pd-standard"
      , $sel:labels:InitializeParams :: Map [Char] [Char]
labels = Map [Char] [Char]
forall k a. Map k a
Map.empty
      , $sel:sourceImage:InitializeParams :: [Char]
sourceImage = [Char]
"projects/debian-cloud/global/images/debian-12-bookworm-v20250311"
      }
    defaultNetworkInterface :: NetworkInterface
defaultNetworkInterface = NetworkInterface
      { $sel:network:NetworkInterface :: [Char]
network = [Char]
"projects/" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
projectId [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"/global/networks/default"
      }