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

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

-- |
-- Module      : Amazonka.GroundStation.UpdateConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the @Config@ used when scheduling contacts.
--
-- Updating a @Config@ will not update the execution parameters for
-- existing future contacts scheduled with this @Config@.
module Amazonka.GroundStation.UpdateConfig
  ( -- * Creating a Request
    UpdateConfig (..),
    newUpdateConfig,

    -- * Request Lenses
    updateConfig_configData,
    updateConfig_configId,
    updateConfig_configType,
    updateConfig_name,

    -- * Destructuring the Response
    ConfigIdResponse (..),
    newConfigIdResponse,

    -- * Response Lenses
    configIdResponse_configArn,
    configIdResponse_configId,
    configIdResponse_configType,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.GroundStation.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- |
--
-- /See:/ 'newUpdateConfig' smart constructor.
data UpdateConfig = UpdateConfig'
  { -- | Parameters of a @Config@.
    UpdateConfig -> ConfigTypeData
configData :: ConfigTypeData,
    -- | UUID of a @Config@.
    UpdateConfig -> Text
configId :: Prelude.Text,
    -- | Type of a @Config@.
    UpdateConfig -> ConfigCapabilityType
configType :: ConfigCapabilityType,
    -- | Name of a @Config@.
    UpdateConfig -> Text
name :: Prelude.Text
  }
  deriving (UpdateConfig -> UpdateConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateConfig -> UpdateConfig -> Bool
$c/= :: UpdateConfig -> UpdateConfig -> Bool
== :: UpdateConfig -> UpdateConfig -> Bool
$c== :: UpdateConfig -> UpdateConfig -> Bool
Prelude.Eq, ReadPrec [UpdateConfig]
ReadPrec UpdateConfig
Int -> ReadS UpdateConfig
ReadS [UpdateConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateConfig]
$creadListPrec :: ReadPrec [UpdateConfig]
readPrec :: ReadPrec UpdateConfig
$creadPrec :: ReadPrec UpdateConfig
readList :: ReadS [UpdateConfig]
$creadList :: ReadS [UpdateConfig]
readsPrec :: Int -> ReadS UpdateConfig
$creadsPrec :: Int -> ReadS UpdateConfig
Prelude.Read, Int -> UpdateConfig -> ShowS
[UpdateConfig] -> ShowS
UpdateConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateConfig] -> ShowS
$cshowList :: [UpdateConfig] -> ShowS
show :: UpdateConfig -> String
$cshow :: UpdateConfig -> String
showsPrec :: Int -> UpdateConfig -> ShowS
$cshowsPrec :: Int -> UpdateConfig -> ShowS
Prelude.Show, forall x. Rep UpdateConfig x -> UpdateConfig
forall x. UpdateConfig -> Rep UpdateConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateConfig x -> UpdateConfig
$cfrom :: forall x. UpdateConfig -> Rep UpdateConfig x
Prelude.Generic)

-- |
-- Create a value of 'UpdateConfig' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'configData', 'updateConfig_configData' - Parameters of a @Config@.
--
-- 'configId', 'updateConfig_configId' - UUID of a @Config@.
--
-- 'configType', 'updateConfig_configType' - Type of a @Config@.
--
-- 'name', 'updateConfig_name' - Name of a @Config@.
newUpdateConfig ::
  -- | 'configData'
  ConfigTypeData ->
  -- | 'configId'
  Prelude.Text ->
  -- | 'configType'
  ConfigCapabilityType ->
  -- | 'name'
  Prelude.Text ->
  UpdateConfig
newUpdateConfig :: ConfigTypeData
-> Text -> ConfigCapabilityType -> Text -> UpdateConfig
newUpdateConfig
  ConfigTypeData
pConfigData_
  Text
pConfigId_
  ConfigCapabilityType
pConfigType_
  Text
pName_ =
    UpdateConfig'
      { $sel:configData:UpdateConfig' :: ConfigTypeData
configData = ConfigTypeData
pConfigData_,
        $sel:configId:UpdateConfig' :: Text
configId = Text
pConfigId_,
        $sel:configType:UpdateConfig' :: ConfigCapabilityType
configType = ConfigCapabilityType
pConfigType_,
        $sel:name:UpdateConfig' :: Text
name = Text
pName_
      }

-- | Parameters of a @Config@.
updateConfig_configData :: Lens.Lens' UpdateConfig ConfigTypeData
updateConfig_configData :: Lens' UpdateConfig ConfigTypeData
updateConfig_configData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateConfig' {ConfigTypeData
configData :: ConfigTypeData
$sel:configData:UpdateConfig' :: UpdateConfig -> ConfigTypeData
configData} -> ConfigTypeData
configData) (\s :: UpdateConfig
s@UpdateConfig' {} ConfigTypeData
a -> UpdateConfig
s {$sel:configData:UpdateConfig' :: ConfigTypeData
configData = ConfigTypeData
a} :: UpdateConfig)

-- | UUID of a @Config@.
updateConfig_configId :: Lens.Lens' UpdateConfig Prelude.Text
updateConfig_configId :: Lens' UpdateConfig Text
updateConfig_configId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateConfig' {Text
configId :: Text
$sel:configId:UpdateConfig' :: UpdateConfig -> Text
configId} -> Text
configId) (\s :: UpdateConfig
s@UpdateConfig' {} Text
a -> UpdateConfig
s {$sel:configId:UpdateConfig' :: Text
configId = Text
a} :: UpdateConfig)

-- | Type of a @Config@.
updateConfig_configType :: Lens.Lens' UpdateConfig ConfigCapabilityType
updateConfig_configType :: Lens' UpdateConfig ConfigCapabilityType
updateConfig_configType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateConfig' {ConfigCapabilityType
configType :: ConfigCapabilityType
$sel:configType:UpdateConfig' :: UpdateConfig -> ConfigCapabilityType
configType} -> ConfigCapabilityType
configType) (\s :: UpdateConfig
s@UpdateConfig' {} ConfigCapabilityType
a -> UpdateConfig
s {$sel:configType:UpdateConfig' :: ConfigCapabilityType
configType = ConfigCapabilityType
a} :: UpdateConfig)

-- | Name of a @Config@.
updateConfig_name :: Lens.Lens' UpdateConfig Prelude.Text
updateConfig_name :: Lens' UpdateConfig Text
updateConfig_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateConfig' {Text
name :: Text
$sel:name:UpdateConfig' :: UpdateConfig -> Text
name} -> Text
name) (\s :: UpdateConfig
s@UpdateConfig' {} Text
a -> UpdateConfig
s {$sel:name:UpdateConfig' :: Text
name = Text
a} :: UpdateConfig)

instance Core.AWSRequest UpdateConfig where
  type AWSResponse UpdateConfig = ConfigIdResponse
  request :: (Service -> Service) -> UpdateConfig -> Request UpdateConfig
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateConfig
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateConfig)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      (\Int
s ResponseHeaders
h Object
x -> forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)

instance Prelude.Hashable UpdateConfig where
  hashWithSalt :: Int -> UpdateConfig -> Int
hashWithSalt Int
_salt UpdateConfig' {Text
ConfigCapabilityType
ConfigTypeData
name :: Text
configType :: ConfigCapabilityType
configId :: Text
configData :: ConfigTypeData
$sel:name:UpdateConfig' :: UpdateConfig -> Text
$sel:configType:UpdateConfig' :: UpdateConfig -> ConfigCapabilityType
$sel:configId:UpdateConfig' :: UpdateConfig -> Text
$sel:configData:UpdateConfig' :: UpdateConfig -> ConfigTypeData
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ConfigTypeData
configData
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
configId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ConfigCapabilityType
configType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name

instance Prelude.NFData UpdateConfig where
  rnf :: UpdateConfig -> ()
rnf UpdateConfig' {Text
ConfigCapabilityType
ConfigTypeData
name :: Text
configType :: ConfigCapabilityType
configId :: Text
configData :: ConfigTypeData
$sel:name:UpdateConfig' :: UpdateConfig -> Text
$sel:configType:UpdateConfig' :: UpdateConfig -> ConfigCapabilityType
$sel:configId:UpdateConfig' :: UpdateConfig -> Text
$sel:configData:UpdateConfig' :: UpdateConfig -> ConfigTypeData
..} =
    forall a. NFData a => a -> ()
Prelude.rnf ConfigTypeData
configData
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
configId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ConfigCapabilityType
configType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name

instance Data.ToHeaders UpdateConfig where
  toHeaders :: UpdateConfig -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateConfig where
  toJSON :: UpdateConfig -> Value
toJSON UpdateConfig' {Text
ConfigCapabilityType
ConfigTypeData
name :: Text
configType :: ConfigCapabilityType
configId :: Text
configData :: ConfigTypeData
$sel:name:UpdateConfig' :: UpdateConfig -> Text
$sel:configType:UpdateConfig' :: UpdateConfig -> ConfigCapabilityType
$sel:configId:UpdateConfig' :: UpdateConfig -> Text
$sel:configData:UpdateConfig' :: UpdateConfig -> ConfigTypeData
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"configData" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ConfigTypeData
configData),
            forall a. a -> Maybe a
Prelude.Just (Key
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name)
          ]
      )

instance Data.ToPath UpdateConfig where
  toPath :: UpdateConfig -> ByteString
toPath UpdateConfig' {Text
ConfigCapabilityType
ConfigTypeData
name :: Text
configType :: ConfigCapabilityType
configId :: Text
configData :: ConfigTypeData
$sel:name:UpdateConfig' :: UpdateConfig -> Text
$sel:configType:UpdateConfig' :: UpdateConfig -> ConfigCapabilityType
$sel:configId:UpdateConfig' :: UpdateConfig -> Text
$sel:configData:UpdateConfig' :: UpdateConfig -> ConfigTypeData
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/config/",
        forall a. ToByteString a => a -> ByteString
Data.toBS ConfigCapabilityType
configType,
        ByteString
"/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
configId
      ]

instance Data.ToQuery UpdateConfig where
  toQuery :: UpdateConfig -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty