{-# 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.KinesisVideo.UpdateMediaStorageConfiguration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Associates a @SignalingChannel@ to a stream to store the media. There
-- are two signaling modes that can specified :
--
-- -   If the @StorageStatus@ is disabled, no data will be stored, and the
--     @StreamARN@ parameter will not be needed.
--
-- -   If the @StorageStatus@ is enabled, the data will be stored in the
--     @StreamARN@ provided.
module Amazonka.KinesisVideo.UpdateMediaStorageConfiguration
  ( -- * Creating a Request
    UpdateMediaStorageConfiguration (..),
    newUpdateMediaStorageConfiguration,

    -- * Request Lenses
    updateMediaStorageConfiguration_channelARN,
    updateMediaStorageConfiguration_mediaStorageConfiguration,

    -- * Destructuring the Response
    UpdateMediaStorageConfigurationResponse (..),
    newUpdateMediaStorageConfigurationResponse,

    -- * Response Lenses
    updateMediaStorageConfigurationResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateMediaStorageConfiguration' smart constructor.
data UpdateMediaStorageConfiguration = UpdateMediaStorageConfiguration'
  { -- | The Amazon Resource Name (ARN) of the channel.
    UpdateMediaStorageConfiguration -> Text
channelARN :: Prelude.Text,
    -- | A structure that encapsulates, or contains, the media storage
    -- configuration properties.
    UpdateMediaStorageConfiguration -> MediaStorageConfiguration
mediaStorageConfiguration :: MediaStorageConfiguration
  }
  deriving (UpdateMediaStorageConfiguration
-> UpdateMediaStorageConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateMediaStorageConfiguration
-> UpdateMediaStorageConfiguration -> Bool
$c/= :: UpdateMediaStorageConfiguration
-> UpdateMediaStorageConfiguration -> Bool
== :: UpdateMediaStorageConfiguration
-> UpdateMediaStorageConfiguration -> Bool
$c== :: UpdateMediaStorageConfiguration
-> UpdateMediaStorageConfiguration -> Bool
Prelude.Eq, ReadPrec [UpdateMediaStorageConfiguration]
ReadPrec UpdateMediaStorageConfiguration
Int -> ReadS UpdateMediaStorageConfiguration
ReadS [UpdateMediaStorageConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateMediaStorageConfiguration]
$creadListPrec :: ReadPrec [UpdateMediaStorageConfiguration]
readPrec :: ReadPrec UpdateMediaStorageConfiguration
$creadPrec :: ReadPrec UpdateMediaStorageConfiguration
readList :: ReadS [UpdateMediaStorageConfiguration]
$creadList :: ReadS [UpdateMediaStorageConfiguration]
readsPrec :: Int -> ReadS UpdateMediaStorageConfiguration
$creadsPrec :: Int -> ReadS UpdateMediaStorageConfiguration
Prelude.Read, Int -> UpdateMediaStorageConfiguration -> ShowS
[UpdateMediaStorageConfiguration] -> ShowS
UpdateMediaStorageConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateMediaStorageConfiguration] -> ShowS
$cshowList :: [UpdateMediaStorageConfiguration] -> ShowS
show :: UpdateMediaStorageConfiguration -> String
$cshow :: UpdateMediaStorageConfiguration -> String
showsPrec :: Int -> UpdateMediaStorageConfiguration -> ShowS
$cshowsPrec :: Int -> UpdateMediaStorageConfiguration -> ShowS
Prelude.Show, forall x.
Rep UpdateMediaStorageConfiguration x
-> UpdateMediaStorageConfiguration
forall x.
UpdateMediaStorageConfiguration
-> Rep UpdateMediaStorageConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateMediaStorageConfiguration x
-> UpdateMediaStorageConfiguration
$cfrom :: forall x.
UpdateMediaStorageConfiguration
-> Rep UpdateMediaStorageConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'UpdateMediaStorageConfiguration' 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:
--
-- 'channelARN', 'updateMediaStorageConfiguration_channelARN' - The Amazon Resource Name (ARN) of the channel.
--
-- 'mediaStorageConfiguration', 'updateMediaStorageConfiguration_mediaStorageConfiguration' - A structure that encapsulates, or contains, the media storage
-- configuration properties.
newUpdateMediaStorageConfiguration ::
  -- | 'channelARN'
  Prelude.Text ->
  -- | 'mediaStorageConfiguration'
  MediaStorageConfiguration ->
  UpdateMediaStorageConfiguration
newUpdateMediaStorageConfiguration :: Text
-> MediaStorageConfiguration -> UpdateMediaStorageConfiguration
newUpdateMediaStorageConfiguration
  Text
pChannelARN_
  MediaStorageConfiguration
pMediaStorageConfiguration_ =
    UpdateMediaStorageConfiguration'
      { $sel:channelARN:UpdateMediaStorageConfiguration' :: Text
channelARN =
          Text
pChannelARN_,
        $sel:mediaStorageConfiguration:UpdateMediaStorageConfiguration' :: MediaStorageConfiguration
mediaStorageConfiguration =
          MediaStorageConfiguration
pMediaStorageConfiguration_
      }

-- | The Amazon Resource Name (ARN) of the channel.
updateMediaStorageConfiguration_channelARN :: Lens.Lens' UpdateMediaStorageConfiguration Prelude.Text
updateMediaStorageConfiguration_channelARN :: Lens' UpdateMediaStorageConfiguration Text
updateMediaStorageConfiguration_channelARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMediaStorageConfiguration' {Text
channelARN :: Text
$sel:channelARN:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> Text
channelARN} -> Text
channelARN) (\s :: UpdateMediaStorageConfiguration
s@UpdateMediaStorageConfiguration' {} Text
a -> UpdateMediaStorageConfiguration
s {$sel:channelARN:UpdateMediaStorageConfiguration' :: Text
channelARN = Text
a} :: UpdateMediaStorageConfiguration)

-- | A structure that encapsulates, or contains, the media storage
-- configuration properties.
updateMediaStorageConfiguration_mediaStorageConfiguration :: Lens.Lens' UpdateMediaStorageConfiguration MediaStorageConfiguration
updateMediaStorageConfiguration_mediaStorageConfiguration :: Lens' UpdateMediaStorageConfiguration MediaStorageConfiguration
updateMediaStorageConfiguration_mediaStorageConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMediaStorageConfiguration' {MediaStorageConfiguration
mediaStorageConfiguration :: MediaStorageConfiguration
$sel:mediaStorageConfiguration:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> MediaStorageConfiguration
mediaStorageConfiguration} -> MediaStorageConfiguration
mediaStorageConfiguration) (\s :: UpdateMediaStorageConfiguration
s@UpdateMediaStorageConfiguration' {} MediaStorageConfiguration
a -> UpdateMediaStorageConfiguration
s {$sel:mediaStorageConfiguration:UpdateMediaStorageConfiguration' :: MediaStorageConfiguration
mediaStorageConfiguration = MediaStorageConfiguration
a} :: UpdateMediaStorageConfiguration)

instance
  Core.AWSRequest
    UpdateMediaStorageConfiguration
  where
  type
    AWSResponse UpdateMediaStorageConfiguration =
      UpdateMediaStorageConfigurationResponse
  request :: (Service -> Service)
-> UpdateMediaStorageConfiguration
-> Request UpdateMediaStorageConfiguration
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateMediaStorageConfiguration
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse UpdateMediaStorageConfiguration)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> UpdateMediaStorageConfigurationResponse
UpdateMediaStorageConfigurationResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    UpdateMediaStorageConfiguration
  where
  hashWithSalt :: Int -> UpdateMediaStorageConfiguration -> Int
hashWithSalt
    Int
_salt
    UpdateMediaStorageConfiguration' {Text
MediaStorageConfiguration
mediaStorageConfiguration :: MediaStorageConfiguration
channelARN :: Text
$sel:mediaStorageConfiguration:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> MediaStorageConfiguration
$sel:channelARN:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
channelARN
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MediaStorageConfiguration
mediaStorageConfiguration

instance
  Prelude.NFData
    UpdateMediaStorageConfiguration
  where
  rnf :: UpdateMediaStorageConfiguration -> ()
rnf UpdateMediaStorageConfiguration' {Text
MediaStorageConfiguration
mediaStorageConfiguration :: MediaStorageConfiguration
channelARN :: Text
$sel:mediaStorageConfiguration:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> MediaStorageConfiguration
$sel:channelARN:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
channelARN
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MediaStorageConfiguration
mediaStorageConfiguration

instance
  Data.ToHeaders
    UpdateMediaStorageConfiguration
  where
  toHeaders :: UpdateMediaStorageConfiguration -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON UpdateMediaStorageConfiguration where
  toJSON :: UpdateMediaStorageConfiguration -> Value
toJSON UpdateMediaStorageConfiguration' {Text
MediaStorageConfiguration
mediaStorageConfiguration :: MediaStorageConfiguration
channelARN :: Text
$sel:mediaStorageConfiguration:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> MediaStorageConfiguration
$sel:channelARN:UpdateMediaStorageConfiguration' :: UpdateMediaStorageConfiguration -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"ChannelARN" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
channelARN),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"MediaStorageConfiguration"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= MediaStorageConfiguration
mediaStorageConfiguration
              )
          ]
      )

instance Data.ToPath UpdateMediaStorageConfiguration where
  toPath :: UpdateMediaStorageConfiguration -> ByteString
toPath =
    forall a b. a -> b -> a
Prelude.const ByteString
"/updateMediaStorageConfiguration"

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

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

-- |
-- Create a value of 'UpdateMediaStorageConfigurationResponse' 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:
--
-- 'httpStatus', 'updateMediaStorageConfigurationResponse_httpStatus' - The response's http status code.
newUpdateMediaStorageConfigurationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateMediaStorageConfigurationResponse
newUpdateMediaStorageConfigurationResponse :: Int -> UpdateMediaStorageConfigurationResponse
newUpdateMediaStorageConfigurationResponse
  Int
pHttpStatus_ =
    UpdateMediaStorageConfigurationResponse'
      { $sel:httpStatus:UpdateMediaStorageConfigurationResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

-- | The response's http status code.
updateMediaStorageConfigurationResponse_httpStatus :: Lens.Lens' UpdateMediaStorageConfigurationResponse Prelude.Int
updateMediaStorageConfigurationResponse_httpStatus :: Lens' UpdateMediaStorageConfigurationResponse Int
updateMediaStorageConfigurationResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMediaStorageConfigurationResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateMediaStorageConfigurationResponse' :: UpdateMediaStorageConfigurationResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: UpdateMediaStorageConfigurationResponse
s@UpdateMediaStorageConfigurationResponse' {} Int
a -> UpdateMediaStorageConfigurationResponse
s {$sel:httpStatus:UpdateMediaStorageConfigurationResponse' :: Int
httpStatus = Int
a} :: UpdateMediaStorageConfigurationResponse)

instance
  Prelude.NFData
    UpdateMediaStorageConfigurationResponse
  where
  rnf :: UpdateMediaStorageConfigurationResponse -> ()
rnf UpdateMediaStorageConfigurationResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateMediaStorageConfigurationResponse' :: UpdateMediaStorageConfigurationResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus