{-# 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.MediaConnect.AddFlowMediaStreams
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Adds media streams to an existing flow. After you add a media stream to
-- a flow, you can associate it with a source and\/or an output that uses
-- the ST 2110 JPEG XS or CDI protocol.
module Amazonka.MediaConnect.AddFlowMediaStreams
  ( -- * Creating a Request
    AddFlowMediaStreams (..),
    newAddFlowMediaStreams,

    -- * Request Lenses
    addFlowMediaStreams_flowArn,
    addFlowMediaStreams_mediaStreams,

    -- * Destructuring the Response
    AddFlowMediaStreamsResponse (..),
    newAddFlowMediaStreamsResponse,

    -- * Response Lenses
    addFlowMediaStreamsResponse_flowArn,
    addFlowMediaStreamsResponse_mediaStreams,
    addFlowMediaStreamsResponse_httpStatus,
  )
where

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

-- | A request to add media streams to the flow.
--
-- /See:/ 'newAddFlowMediaStreams' smart constructor.
data AddFlowMediaStreams = AddFlowMediaStreams'
  { -- | The Amazon Resource Name (ARN) of the flow.
    AddFlowMediaStreams -> Text
flowArn :: Prelude.Text,
    -- | The media streams that you want to add to the flow.
    AddFlowMediaStreams -> [AddMediaStreamRequest]
mediaStreams :: [AddMediaStreamRequest]
  }
  deriving (AddFlowMediaStreams -> AddFlowMediaStreams -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AddFlowMediaStreams -> AddFlowMediaStreams -> Bool
$c/= :: AddFlowMediaStreams -> AddFlowMediaStreams -> Bool
== :: AddFlowMediaStreams -> AddFlowMediaStreams -> Bool
$c== :: AddFlowMediaStreams -> AddFlowMediaStreams -> Bool
Prelude.Eq, ReadPrec [AddFlowMediaStreams]
ReadPrec AddFlowMediaStreams
Int -> ReadS AddFlowMediaStreams
ReadS [AddFlowMediaStreams]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AddFlowMediaStreams]
$creadListPrec :: ReadPrec [AddFlowMediaStreams]
readPrec :: ReadPrec AddFlowMediaStreams
$creadPrec :: ReadPrec AddFlowMediaStreams
readList :: ReadS [AddFlowMediaStreams]
$creadList :: ReadS [AddFlowMediaStreams]
readsPrec :: Int -> ReadS AddFlowMediaStreams
$creadsPrec :: Int -> ReadS AddFlowMediaStreams
Prelude.Read, Int -> AddFlowMediaStreams -> ShowS
[AddFlowMediaStreams] -> ShowS
AddFlowMediaStreams -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AddFlowMediaStreams] -> ShowS
$cshowList :: [AddFlowMediaStreams] -> ShowS
show :: AddFlowMediaStreams -> String
$cshow :: AddFlowMediaStreams -> String
showsPrec :: Int -> AddFlowMediaStreams -> ShowS
$cshowsPrec :: Int -> AddFlowMediaStreams -> ShowS
Prelude.Show, forall x. Rep AddFlowMediaStreams x -> AddFlowMediaStreams
forall x. AddFlowMediaStreams -> Rep AddFlowMediaStreams x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AddFlowMediaStreams x -> AddFlowMediaStreams
$cfrom :: forall x. AddFlowMediaStreams -> Rep AddFlowMediaStreams x
Prelude.Generic)

-- |
-- Create a value of 'AddFlowMediaStreams' 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:
--
-- 'flowArn', 'addFlowMediaStreams_flowArn' - The Amazon Resource Name (ARN) of the flow.
--
-- 'mediaStreams', 'addFlowMediaStreams_mediaStreams' - The media streams that you want to add to the flow.
newAddFlowMediaStreams ::
  -- | 'flowArn'
  Prelude.Text ->
  AddFlowMediaStreams
newAddFlowMediaStreams :: Text -> AddFlowMediaStreams
newAddFlowMediaStreams Text
pFlowArn_ =
  AddFlowMediaStreams'
    { $sel:flowArn:AddFlowMediaStreams' :: Text
flowArn = Text
pFlowArn_,
      $sel:mediaStreams:AddFlowMediaStreams' :: [AddMediaStreamRequest]
mediaStreams = forall a. Monoid a => a
Prelude.mempty
    }

-- | The Amazon Resource Name (ARN) of the flow.
addFlowMediaStreams_flowArn :: Lens.Lens' AddFlowMediaStreams Prelude.Text
addFlowMediaStreams_flowArn :: Lens' AddFlowMediaStreams Text
addFlowMediaStreams_flowArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddFlowMediaStreams' {Text
flowArn :: Text
$sel:flowArn:AddFlowMediaStreams' :: AddFlowMediaStreams -> Text
flowArn} -> Text
flowArn) (\s :: AddFlowMediaStreams
s@AddFlowMediaStreams' {} Text
a -> AddFlowMediaStreams
s {$sel:flowArn:AddFlowMediaStreams' :: Text
flowArn = Text
a} :: AddFlowMediaStreams)

-- | The media streams that you want to add to the flow.
addFlowMediaStreams_mediaStreams :: Lens.Lens' AddFlowMediaStreams [AddMediaStreamRequest]
addFlowMediaStreams_mediaStreams :: Lens' AddFlowMediaStreams [AddMediaStreamRequest]
addFlowMediaStreams_mediaStreams = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddFlowMediaStreams' {[AddMediaStreamRequest]
mediaStreams :: [AddMediaStreamRequest]
$sel:mediaStreams:AddFlowMediaStreams' :: AddFlowMediaStreams -> [AddMediaStreamRequest]
mediaStreams} -> [AddMediaStreamRequest]
mediaStreams) (\s :: AddFlowMediaStreams
s@AddFlowMediaStreams' {} [AddMediaStreamRequest]
a -> AddFlowMediaStreams
s {$sel:mediaStreams:AddFlowMediaStreams' :: [AddMediaStreamRequest]
mediaStreams = [AddMediaStreamRequest]
a} :: AddFlowMediaStreams) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest AddFlowMediaStreams where
  type
    AWSResponse AddFlowMediaStreams =
      AddFlowMediaStreamsResponse
  request :: (Service -> Service)
-> AddFlowMediaStreams -> Request AddFlowMediaStreams
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 AddFlowMediaStreams
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse AddFlowMediaStreams)))
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 ->
          Maybe Text
-> Maybe [MediaStream] -> Int -> AddFlowMediaStreamsResponse
AddFlowMediaStreamsResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"flowArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"mediaStreams" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => 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 AddFlowMediaStreams where
  hashWithSalt :: Int -> AddFlowMediaStreams -> Int
hashWithSalt Int
_salt AddFlowMediaStreams' {[AddMediaStreamRequest]
Text
mediaStreams :: [AddMediaStreamRequest]
flowArn :: Text
$sel:mediaStreams:AddFlowMediaStreams' :: AddFlowMediaStreams -> [AddMediaStreamRequest]
$sel:flowArn:AddFlowMediaStreams' :: AddFlowMediaStreams -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
flowArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [AddMediaStreamRequest]
mediaStreams

instance Prelude.NFData AddFlowMediaStreams where
  rnf :: AddFlowMediaStreams -> ()
rnf AddFlowMediaStreams' {[AddMediaStreamRequest]
Text
mediaStreams :: [AddMediaStreamRequest]
flowArn :: Text
$sel:mediaStreams:AddFlowMediaStreams' :: AddFlowMediaStreams -> [AddMediaStreamRequest]
$sel:flowArn:AddFlowMediaStreams' :: AddFlowMediaStreams -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
flowArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [AddMediaStreamRequest]
mediaStreams

instance Data.ToHeaders AddFlowMediaStreams where
  toHeaders :: AddFlowMediaStreams -> 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 AddFlowMediaStreams where
  toJSON :: AddFlowMediaStreams -> Value
toJSON AddFlowMediaStreams' {[AddMediaStreamRequest]
Text
mediaStreams :: [AddMediaStreamRequest]
flowArn :: Text
$sel:mediaStreams:AddFlowMediaStreams' :: AddFlowMediaStreams -> [AddMediaStreamRequest]
$sel:flowArn:AddFlowMediaStreams' :: AddFlowMediaStreams -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [forall a. a -> Maybe a
Prelude.Just (Key
"mediaStreams" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [AddMediaStreamRequest]
mediaStreams)]
      )

instance Data.ToPath AddFlowMediaStreams where
  toPath :: AddFlowMediaStreams -> ByteString
toPath AddFlowMediaStreams' {[AddMediaStreamRequest]
Text
mediaStreams :: [AddMediaStreamRequest]
flowArn :: Text
$sel:mediaStreams:AddFlowMediaStreams' :: AddFlowMediaStreams -> [AddMediaStreamRequest]
$sel:flowArn:AddFlowMediaStreams' :: AddFlowMediaStreams -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/v1/flows/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
flowArn, ByteString
"/mediaStreams"]

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

-- | /See:/ 'newAddFlowMediaStreamsResponse' smart constructor.
data AddFlowMediaStreamsResponse = AddFlowMediaStreamsResponse'
  { -- | The ARN of the flow that you added media streams to.
    AddFlowMediaStreamsResponse -> Maybe Text
flowArn :: Prelude.Maybe Prelude.Text,
    -- | The media streams that you added to the flow.
    AddFlowMediaStreamsResponse -> Maybe [MediaStream]
mediaStreams :: Prelude.Maybe [MediaStream],
    -- | The response's http status code.
    AddFlowMediaStreamsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (AddFlowMediaStreamsResponse -> AddFlowMediaStreamsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AddFlowMediaStreamsResponse -> AddFlowMediaStreamsResponse -> Bool
$c/= :: AddFlowMediaStreamsResponse -> AddFlowMediaStreamsResponse -> Bool
== :: AddFlowMediaStreamsResponse -> AddFlowMediaStreamsResponse -> Bool
$c== :: AddFlowMediaStreamsResponse -> AddFlowMediaStreamsResponse -> Bool
Prelude.Eq, ReadPrec [AddFlowMediaStreamsResponse]
ReadPrec AddFlowMediaStreamsResponse
Int -> ReadS AddFlowMediaStreamsResponse
ReadS [AddFlowMediaStreamsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AddFlowMediaStreamsResponse]
$creadListPrec :: ReadPrec [AddFlowMediaStreamsResponse]
readPrec :: ReadPrec AddFlowMediaStreamsResponse
$creadPrec :: ReadPrec AddFlowMediaStreamsResponse
readList :: ReadS [AddFlowMediaStreamsResponse]
$creadList :: ReadS [AddFlowMediaStreamsResponse]
readsPrec :: Int -> ReadS AddFlowMediaStreamsResponse
$creadsPrec :: Int -> ReadS AddFlowMediaStreamsResponse
Prelude.Read, Int -> AddFlowMediaStreamsResponse -> ShowS
[AddFlowMediaStreamsResponse] -> ShowS
AddFlowMediaStreamsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AddFlowMediaStreamsResponse] -> ShowS
$cshowList :: [AddFlowMediaStreamsResponse] -> ShowS
show :: AddFlowMediaStreamsResponse -> String
$cshow :: AddFlowMediaStreamsResponse -> String
showsPrec :: Int -> AddFlowMediaStreamsResponse -> ShowS
$cshowsPrec :: Int -> AddFlowMediaStreamsResponse -> ShowS
Prelude.Show, forall x.
Rep AddFlowMediaStreamsResponse x -> AddFlowMediaStreamsResponse
forall x.
AddFlowMediaStreamsResponse -> Rep AddFlowMediaStreamsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep AddFlowMediaStreamsResponse x -> AddFlowMediaStreamsResponse
$cfrom :: forall x.
AddFlowMediaStreamsResponse -> Rep AddFlowMediaStreamsResponse x
Prelude.Generic)

-- |
-- Create a value of 'AddFlowMediaStreamsResponse' 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:
--
-- 'flowArn', 'addFlowMediaStreamsResponse_flowArn' - The ARN of the flow that you added media streams to.
--
-- 'mediaStreams', 'addFlowMediaStreamsResponse_mediaStreams' - The media streams that you added to the flow.
--
-- 'httpStatus', 'addFlowMediaStreamsResponse_httpStatus' - The response's http status code.
newAddFlowMediaStreamsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  AddFlowMediaStreamsResponse
newAddFlowMediaStreamsResponse :: Int -> AddFlowMediaStreamsResponse
newAddFlowMediaStreamsResponse Int
pHttpStatus_ =
  AddFlowMediaStreamsResponse'
    { $sel:flowArn:AddFlowMediaStreamsResponse' :: Maybe Text
flowArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:mediaStreams:AddFlowMediaStreamsResponse' :: Maybe [MediaStream]
mediaStreams = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:AddFlowMediaStreamsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ARN of the flow that you added media streams to.
addFlowMediaStreamsResponse_flowArn :: Lens.Lens' AddFlowMediaStreamsResponse (Prelude.Maybe Prelude.Text)
addFlowMediaStreamsResponse_flowArn :: Lens' AddFlowMediaStreamsResponse (Maybe Text)
addFlowMediaStreamsResponse_flowArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddFlowMediaStreamsResponse' {Maybe Text
flowArn :: Maybe Text
$sel:flowArn:AddFlowMediaStreamsResponse' :: AddFlowMediaStreamsResponse -> Maybe Text
flowArn} -> Maybe Text
flowArn) (\s :: AddFlowMediaStreamsResponse
s@AddFlowMediaStreamsResponse' {} Maybe Text
a -> AddFlowMediaStreamsResponse
s {$sel:flowArn:AddFlowMediaStreamsResponse' :: Maybe Text
flowArn = Maybe Text
a} :: AddFlowMediaStreamsResponse)

-- | The media streams that you added to the flow.
addFlowMediaStreamsResponse_mediaStreams :: Lens.Lens' AddFlowMediaStreamsResponse (Prelude.Maybe [MediaStream])
addFlowMediaStreamsResponse_mediaStreams :: Lens' AddFlowMediaStreamsResponse (Maybe [MediaStream])
addFlowMediaStreamsResponse_mediaStreams = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddFlowMediaStreamsResponse' {Maybe [MediaStream]
mediaStreams :: Maybe [MediaStream]
$sel:mediaStreams:AddFlowMediaStreamsResponse' :: AddFlowMediaStreamsResponse -> Maybe [MediaStream]
mediaStreams} -> Maybe [MediaStream]
mediaStreams) (\s :: AddFlowMediaStreamsResponse
s@AddFlowMediaStreamsResponse' {} Maybe [MediaStream]
a -> AddFlowMediaStreamsResponse
s {$sel:mediaStreams:AddFlowMediaStreamsResponse' :: Maybe [MediaStream]
mediaStreams = Maybe [MediaStream]
a} :: AddFlowMediaStreamsResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

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

instance Prelude.NFData AddFlowMediaStreamsResponse where
  rnf :: AddFlowMediaStreamsResponse -> ()
rnf AddFlowMediaStreamsResponse' {Int
Maybe [MediaStream]
Maybe Text
httpStatus :: Int
mediaStreams :: Maybe [MediaStream]
flowArn :: Maybe Text
$sel:httpStatus:AddFlowMediaStreamsResponse' :: AddFlowMediaStreamsResponse -> Int
$sel:mediaStreams:AddFlowMediaStreamsResponse' :: AddFlowMediaStreamsResponse -> Maybe [MediaStream]
$sel:flowArn:AddFlowMediaStreamsResponse' :: AddFlowMediaStreamsResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
flowArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [MediaStream]
mediaStreams
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus