{-# 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.IoTAnalytics.UpdateDatastore
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Used to update the settings of a data store.
module Amazonka.IoTAnalytics.UpdateDatastore
  ( -- * Creating a Request
    UpdateDatastore (..),
    newUpdateDatastore,

    -- * Request Lenses
    updateDatastore_datastoreStorage,
    updateDatastore_fileFormatConfiguration,
    updateDatastore_retentionPeriod,
    updateDatastore_datastoreName,

    -- * Destructuring the Response
    UpdateDatastoreResponse (..),
    newUpdateDatastoreResponse,
  )
where

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

-- | /See:/ 'newUpdateDatastore' smart constructor.
data UpdateDatastore = UpdateDatastore'
  { -- | Where data in a data store is stored.. You can choose @serviceManagedS3@
    -- storage, @customerManagedS3@ storage, or @iotSiteWiseMultiLayerStorage@
    -- storage. The default is @serviceManagedS3@. You can\'t change the choice
    -- of Amazon S3 storage after your data store is created.
    UpdateDatastore -> Maybe DatastoreStorage
datastoreStorage :: Prelude.Maybe DatastoreStorage,
    -- | Contains the configuration information of file formats. IoT Analytics
    -- data stores support JSON and <https://parquet.apache.org/ Parquet>.
    --
    -- The default file format is JSON. You can specify only one format.
    --
    -- You can\'t change the file format after you create the data store.
    UpdateDatastore -> Maybe FileFormatConfiguration
fileFormatConfiguration :: Prelude.Maybe FileFormatConfiguration,
    -- | How long, in days, message data is kept for the data store. The
    -- retention period can\'t be updated if the data store\'s Amazon S3
    -- storage is customer-managed.
    UpdateDatastore -> Maybe RetentionPeriod
retentionPeriod :: Prelude.Maybe RetentionPeriod,
    -- | The name of the data store to be updated.
    UpdateDatastore -> Text
datastoreName :: Prelude.Text
  }
  deriving (UpdateDatastore -> UpdateDatastore -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDatastore -> UpdateDatastore -> Bool
$c/= :: UpdateDatastore -> UpdateDatastore -> Bool
== :: UpdateDatastore -> UpdateDatastore -> Bool
$c== :: UpdateDatastore -> UpdateDatastore -> Bool
Prelude.Eq, ReadPrec [UpdateDatastore]
ReadPrec UpdateDatastore
Int -> ReadS UpdateDatastore
ReadS [UpdateDatastore]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDatastore]
$creadListPrec :: ReadPrec [UpdateDatastore]
readPrec :: ReadPrec UpdateDatastore
$creadPrec :: ReadPrec UpdateDatastore
readList :: ReadS [UpdateDatastore]
$creadList :: ReadS [UpdateDatastore]
readsPrec :: Int -> ReadS UpdateDatastore
$creadsPrec :: Int -> ReadS UpdateDatastore
Prelude.Read, Int -> UpdateDatastore -> ShowS
[UpdateDatastore] -> ShowS
UpdateDatastore -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDatastore] -> ShowS
$cshowList :: [UpdateDatastore] -> ShowS
show :: UpdateDatastore -> String
$cshow :: UpdateDatastore -> String
showsPrec :: Int -> UpdateDatastore -> ShowS
$cshowsPrec :: Int -> UpdateDatastore -> ShowS
Prelude.Show, forall x. Rep UpdateDatastore x -> UpdateDatastore
forall x. UpdateDatastore -> Rep UpdateDatastore x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateDatastore x -> UpdateDatastore
$cfrom :: forall x. UpdateDatastore -> Rep UpdateDatastore x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDatastore' 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:
--
-- 'datastoreStorage', 'updateDatastore_datastoreStorage' - Where data in a data store is stored.. You can choose @serviceManagedS3@
-- storage, @customerManagedS3@ storage, or @iotSiteWiseMultiLayerStorage@
-- storage. The default is @serviceManagedS3@. You can\'t change the choice
-- of Amazon S3 storage after your data store is created.
--
-- 'fileFormatConfiguration', 'updateDatastore_fileFormatConfiguration' - Contains the configuration information of file formats. IoT Analytics
-- data stores support JSON and <https://parquet.apache.org/ Parquet>.
--
-- The default file format is JSON. You can specify only one format.
--
-- You can\'t change the file format after you create the data store.
--
-- 'retentionPeriod', 'updateDatastore_retentionPeriod' - How long, in days, message data is kept for the data store. The
-- retention period can\'t be updated if the data store\'s Amazon S3
-- storage is customer-managed.
--
-- 'datastoreName', 'updateDatastore_datastoreName' - The name of the data store to be updated.
newUpdateDatastore ::
  -- | 'datastoreName'
  Prelude.Text ->
  UpdateDatastore
newUpdateDatastore :: Text -> UpdateDatastore
newUpdateDatastore Text
pDatastoreName_ =
  UpdateDatastore'
    { $sel:datastoreStorage:UpdateDatastore' :: Maybe DatastoreStorage
datastoreStorage =
        forall a. Maybe a
Prelude.Nothing,
      $sel:fileFormatConfiguration:UpdateDatastore' :: Maybe FileFormatConfiguration
fileFormatConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:retentionPeriod:UpdateDatastore' :: Maybe RetentionPeriod
retentionPeriod = forall a. Maybe a
Prelude.Nothing,
      $sel:datastoreName:UpdateDatastore' :: Text
datastoreName = Text
pDatastoreName_
    }

-- | Where data in a data store is stored.. You can choose @serviceManagedS3@
-- storage, @customerManagedS3@ storage, or @iotSiteWiseMultiLayerStorage@
-- storage. The default is @serviceManagedS3@. You can\'t change the choice
-- of Amazon S3 storage after your data store is created.
updateDatastore_datastoreStorage :: Lens.Lens' UpdateDatastore (Prelude.Maybe DatastoreStorage)
updateDatastore_datastoreStorage :: Lens' UpdateDatastore (Maybe DatastoreStorage)
updateDatastore_datastoreStorage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDatastore' {Maybe DatastoreStorage
datastoreStorage :: Maybe DatastoreStorage
$sel:datastoreStorage:UpdateDatastore' :: UpdateDatastore -> Maybe DatastoreStorage
datastoreStorage} -> Maybe DatastoreStorage
datastoreStorage) (\s :: UpdateDatastore
s@UpdateDatastore' {} Maybe DatastoreStorage
a -> UpdateDatastore
s {$sel:datastoreStorage:UpdateDatastore' :: Maybe DatastoreStorage
datastoreStorage = Maybe DatastoreStorage
a} :: UpdateDatastore)

-- | Contains the configuration information of file formats. IoT Analytics
-- data stores support JSON and <https://parquet.apache.org/ Parquet>.
--
-- The default file format is JSON. You can specify only one format.
--
-- You can\'t change the file format after you create the data store.
updateDatastore_fileFormatConfiguration :: Lens.Lens' UpdateDatastore (Prelude.Maybe FileFormatConfiguration)
updateDatastore_fileFormatConfiguration :: Lens' UpdateDatastore (Maybe FileFormatConfiguration)
updateDatastore_fileFormatConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDatastore' {Maybe FileFormatConfiguration
fileFormatConfiguration :: Maybe FileFormatConfiguration
$sel:fileFormatConfiguration:UpdateDatastore' :: UpdateDatastore -> Maybe FileFormatConfiguration
fileFormatConfiguration} -> Maybe FileFormatConfiguration
fileFormatConfiguration) (\s :: UpdateDatastore
s@UpdateDatastore' {} Maybe FileFormatConfiguration
a -> UpdateDatastore
s {$sel:fileFormatConfiguration:UpdateDatastore' :: Maybe FileFormatConfiguration
fileFormatConfiguration = Maybe FileFormatConfiguration
a} :: UpdateDatastore)

-- | How long, in days, message data is kept for the data store. The
-- retention period can\'t be updated if the data store\'s Amazon S3
-- storage is customer-managed.
updateDatastore_retentionPeriod :: Lens.Lens' UpdateDatastore (Prelude.Maybe RetentionPeriod)
updateDatastore_retentionPeriod :: Lens' UpdateDatastore (Maybe RetentionPeriod)
updateDatastore_retentionPeriod = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDatastore' {Maybe RetentionPeriod
retentionPeriod :: Maybe RetentionPeriod
$sel:retentionPeriod:UpdateDatastore' :: UpdateDatastore -> Maybe RetentionPeriod
retentionPeriod} -> Maybe RetentionPeriod
retentionPeriod) (\s :: UpdateDatastore
s@UpdateDatastore' {} Maybe RetentionPeriod
a -> UpdateDatastore
s {$sel:retentionPeriod:UpdateDatastore' :: Maybe RetentionPeriod
retentionPeriod = Maybe RetentionPeriod
a} :: UpdateDatastore)

-- | The name of the data store to be updated.
updateDatastore_datastoreName :: Lens.Lens' UpdateDatastore Prelude.Text
updateDatastore_datastoreName :: Lens' UpdateDatastore Text
updateDatastore_datastoreName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDatastore' {Text
datastoreName :: Text
$sel:datastoreName:UpdateDatastore' :: UpdateDatastore -> Text
datastoreName} -> Text
datastoreName) (\s :: UpdateDatastore
s@UpdateDatastore' {} Text
a -> UpdateDatastore
s {$sel:datastoreName:UpdateDatastore' :: Text
datastoreName = Text
a} :: UpdateDatastore)

instance Core.AWSRequest UpdateDatastore where
  type
    AWSResponse UpdateDatastore =
      UpdateDatastoreResponse
  request :: (Service -> Service) -> UpdateDatastore -> Request UpdateDatastore
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 UpdateDatastore
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateDatastore)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull UpdateDatastoreResponse
UpdateDatastoreResponse'

instance Prelude.Hashable UpdateDatastore where
  hashWithSalt :: Int -> UpdateDatastore -> Int
hashWithSalt Int
_salt UpdateDatastore' {Maybe RetentionPeriod
Maybe FileFormatConfiguration
Maybe DatastoreStorage
Text
datastoreName :: Text
retentionPeriod :: Maybe RetentionPeriod
fileFormatConfiguration :: Maybe FileFormatConfiguration
datastoreStorage :: Maybe DatastoreStorage
$sel:datastoreName:UpdateDatastore' :: UpdateDatastore -> Text
$sel:retentionPeriod:UpdateDatastore' :: UpdateDatastore -> Maybe RetentionPeriod
$sel:fileFormatConfiguration:UpdateDatastore' :: UpdateDatastore -> Maybe FileFormatConfiguration
$sel:datastoreStorage:UpdateDatastore' :: UpdateDatastore -> Maybe DatastoreStorage
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DatastoreStorage
datastoreStorage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FileFormatConfiguration
fileFormatConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RetentionPeriod
retentionPeriod
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
datastoreName

instance Prelude.NFData UpdateDatastore where
  rnf :: UpdateDatastore -> ()
rnf UpdateDatastore' {Maybe RetentionPeriod
Maybe FileFormatConfiguration
Maybe DatastoreStorage
Text
datastoreName :: Text
retentionPeriod :: Maybe RetentionPeriod
fileFormatConfiguration :: Maybe FileFormatConfiguration
datastoreStorage :: Maybe DatastoreStorage
$sel:datastoreName:UpdateDatastore' :: UpdateDatastore -> Text
$sel:retentionPeriod:UpdateDatastore' :: UpdateDatastore -> Maybe RetentionPeriod
$sel:fileFormatConfiguration:UpdateDatastore' :: UpdateDatastore -> Maybe FileFormatConfiguration
$sel:datastoreStorage:UpdateDatastore' :: UpdateDatastore -> Maybe DatastoreStorage
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DatastoreStorage
datastoreStorage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FileFormatConfiguration
fileFormatConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RetentionPeriod
retentionPeriod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
datastoreName

instance Data.ToHeaders UpdateDatastore where
  toHeaders :: UpdateDatastore -> [Header]
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON UpdateDatastore where
  toJSON :: UpdateDatastore -> Value
toJSON UpdateDatastore' {Maybe RetentionPeriod
Maybe FileFormatConfiguration
Maybe DatastoreStorage
Text
datastoreName :: Text
retentionPeriod :: Maybe RetentionPeriod
fileFormatConfiguration :: Maybe FileFormatConfiguration
datastoreStorage :: Maybe DatastoreStorage
$sel:datastoreName:UpdateDatastore' :: UpdateDatastore -> Text
$sel:retentionPeriod:UpdateDatastore' :: UpdateDatastore -> Maybe RetentionPeriod
$sel:fileFormatConfiguration:UpdateDatastore' :: UpdateDatastore -> Maybe FileFormatConfiguration
$sel:datastoreStorage:UpdateDatastore' :: UpdateDatastore -> Maybe DatastoreStorage
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"datastoreStorage" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DatastoreStorage
datastoreStorage,
            (Key
"fileFormatConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe FileFormatConfiguration
fileFormatConfiguration,
            (Key
"retentionPeriod" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RetentionPeriod
retentionPeriod
          ]
      )

instance Data.ToPath UpdateDatastore where
  toPath :: UpdateDatastore -> ByteString
toPath UpdateDatastore' {Maybe RetentionPeriod
Maybe FileFormatConfiguration
Maybe DatastoreStorage
Text
datastoreName :: Text
retentionPeriod :: Maybe RetentionPeriod
fileFormatConfiguration :: Maybe FileFormatConfiguration
datastoreStorage :: Maybe DatastoreStorage
$sel:datastoreName:UpdateDatastore' :: UpdateDatastore -> Text
$sel:retentionPeriod:UpdateDatastore' :: UpdateDatastore -> Maybe RetentionPeriod
$sel:fileFormatConfiguration:UpdateDatastore' :: UpdateDatastore -> Maybe FileFormatConfiguration
$sel:datastoreStorage:UpdateDatastore' :: UpdateDatastore -> Maybe DatastoreStorage
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/datastores/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
datastoreName]

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

-- | /See:/ 'newUpdateDatastoreResponse' smart constructor.
data UpdateDatastoreResponse = UpdateDatastoreResponse'
  {
  }
  deriving (UpdateDatastoreResponse -> UpdateDatastoreResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDatastoreResponse -> UpdateDatastoreResponse -> Bool
$c/= :: UpdateDatastoreResponse -> UpdateDatastoreResponse -> Bool
== :: UpdateDatastoreResponse -> UpdateDatastoreResponse -> Bool
$c== :: UpdateDatastoreResponse -> UpdateDatastoreResponse -> Bool
Prelude.Eq, ReadPrec [UpdateDatastoreResponse]
ReadPrec UpdateDatastoreResponse
Int -> ReadS UpdateDatastoreResponse
ReadS [UpdateDatastoreResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDatastoreResponse]
$creadListPrec :: ReadPrec [UpdateDatastoreResponse]
readPrec :: ReadPrec UpdateDatastoreResponse
$creadPrec :: ReadPrec UpdateDatastoreResponse
readList :: ReadS [UpdateDatastoreResponse]
$creadList :: ReadS [UpdateDatastoreResponse]
readsPrec :: Int -> ReadS UpdateDatastoreResponse
$creadsPrec :: Int -> ReadS UpdateDatastoreResponse
Prelude.Read, Int -> UpdateDatastoreResponse -> ShowS
[UpdateDatastoreResponse] -> ShowS
UpdateDatastoreResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDatastoreResponse] -> ShowS
$cshowList :: [UpdateDatastoreResponse] -> ShowS
show :: UpdateDatastoreResponse -> String
$cshow :: UpdateDatastoreResponse -> String
showsPrec :: Int -> UpdateDatastoreResponse -> ShowS
$cshowsPrec :: Int -> UpdateDatastoreResponse -> ShowS
Prelude.Show, forall x. Rep UpdateDatastoreResponse x -> UpdateDatastoreResponse
forall x. UpdateDatastoreResponse -> Rep UpdateDatastoreResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateDatastoreResponse x -> UpdateDatastoreResponse
$cfrom :: forall x. UpdateDatastoreResponse -> Rep UpdateDatastoreResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDatastoreResponse' 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.
newUpdateDatastoreResponse ::
  UpdateDatastoreResponse
newUpdateDatastoreResponse :: UpdateDatastoreResponse
newUpdateDatastoreResponse = UpdateDatastoreResponse
UpdateDatastoreResponse'

instance Prelude.NFData UpdateDatastoreResponse where
  rnf :: UpdateDatastoreResponse -> ()
rnf UpdateDatastoreResponse
_ = ()