{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.AddMediaStreamRequest
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MediaConnect.Types.AddMediaStreamRequest 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.MediaStreamAttributesRequest
import Amazonka.MediaConnect.Types.MediaStreamType
import qualified Amazonka.Prelude as Prelude

-- | The media stream that you want to add to the flow.
--
-- /See:/ 'newAddMediaStreamRequest' smart constructor.
data AddMediaStreamRequest = AddMediaStreamRequest'
  { -- | The attributes that you want to assign to the new media stream.
    AddMediaStreamRequest -> Maybe MediaStreamAttributesRequest
attributes :: Prelude.Maybe MediaStreamAttributesRequest,
    -- | The sample rate (in Hz) for the stream. If the media stream type is
    -- video or ancillary data, set this value to 90000. If the media stream
    -- type is audio, set this value to either 48000 or 96000.
    AddMediaStreamRequest -> Maybe Int
clockRate :: Prelude.Maybe Prelude.Int,
    -- | A description that can help you quickly identify what your media stream
    -- is used for.
    AddMediaStreamRequest -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The resolution of the video.
    AddMediaStreamRequest -> Maybe Text
videoFormat :: Prelude.Maybe Prelude.Text,
    -- | The type of media stream.
    AddMediaStreamRequest -> MediaStreamType
mediaStreamType :: MediaStreamType,
    -- | A unique identifier for the media stream.
    AddMediaStreamRequest -> Int
mediaStreamId :: Prelude.Int,
    -- | A name that helps you distinguish one media stream from another.
    AddMediaStreamRequest -> Text
mediaStreamName :: Prelude.Text
  }
  deriving (AddMediaStreamRequest -> AddMediaStreamRequest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AddMediaStreamRequest -> AddMediaStreamRequest -> Bool
$c/= :: AddMediaStreamRequest -> AddMediaStreamRequest -> Bool
== :: AddMediaStreamRequest -> AddMediaStreamRequest -> Bool
$c== :: AddMediaStreamRequest -> AddMediaStreamRequest -> Bool
Prelude.Eq, ReadPrec [AddMediaStreamRequest]
ReadPrec AddMediaStreamRequest
Int -> ReadS AddMediaStreamRequest
ReadS [AddMediaStreamRequest]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AddMediaStreamRequest]
$creadListPrec :: ReadPrec [AddMediaStreamRequest]
readPrec :: ReadPrec AddMediaStreamRequest
$creadPrec :: ReadPrec AddMediaStreamRequest
readList :: ReadS [AddMediaStreamRequest]
$creadList :: ReadS [AddMediaStreamRequest]
readsPrec :: Int -> ReadS AddMediaStreamRequest
$creadsPrec :: Int -> ReadS AddMediaStreamRequest
Prelude.Read, Int -> AddMediaStreamRequest -> ShowS
[AddMediaStreamRequest] -> ShowS
AddMediaStreamRequest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AddMediaStreamRequest] -> ShowS
$cshowList :: [AddMediaStreamRequest] -> ShowS
show :: AddMediaStreamRequest -> String
$cshow :: AddMediaStreamRequest -> String
showsPrec :: Int -> AddMediaStreamRequest -> ShowS
$cshowsPrec :: Int -> AddMediaStreamRequest -> ShowS
Prelude.Show, forall x. Rep AddMediaStreamRequest x -> AddMediaStreamRequest
forall x. AddMediaStreamRequest -> Rep AddMediaStreamRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AddMediaStreamRequest x -> AddMediaStreamRequest
$cfrom :: forall x. AddMediaStreamRequest -> Rep AddMediaStreamRequest x
Prelude.Generic)

-- |
-- Create a value of 'AddMediaStreamRequest' 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:
--
-- 'attributes', 'addMediaStreamRequest_attributes' - The attributes that you want to assign to the new media stream.
--
-- 'clockRate', 'addMediaStreamRequest_clockRate' - The sample rate (in Hz) for the stream. If the media stream type is
-- video or ancillary data, set this value to 90000. If the media stream
-- type is audio, set this value to either 48000 or 96000.
--
-- 'description', 'addMediaStreamRequest_description' - A description that can help you quickly identify what your media stream
-- is used for.
--
-- 'videoFormat', 'addMediaStreamRequest_videoFormat' - The resolution of the video.
--
-- 'mediaStreamType', 'addMediaStreamRequest_mediaStreamType' - The type of media stream.
--
-- 'mediaStreamId', 'addMediaStreamRequest_mediaStreamId' - A unique identifier for the media stream.
--
-- 'mediaStreamName', 'addMediaStreamRequest_mediaStreamName' - A name that helps you distinguish one media stream from another.
newAddMediaStreamRequest ::
  -- | 'mediaStreamType'
  MediaStreamType ->
  -- | 'mediaStreamId'
  Prelude.Int ->
  -- | 'mediaStreamName'
  Prelude.Text ->
  AddMediaStreamRequest
newAddMediaStreamRequest :: MediaStreamType -> Int -> Text -> AddMediaStreamRequest
newAddMediaStreamRequest
  MediaStreamType
pMediaStreamType_
  Int
pMediaStreamId_
  Text
pMediaStreamName_ =
    AddMediaStreamRequest'
      { $sel:attributes:AddMediaStreamRequest' :: Maybe MediaStreamAttributesRequest
attributes =
          forall a. Maybe a
Prelude.Nothing,
        $sel:clockRate:AddMediaStreamRequest' :: Maybe Int
clockRate = forall a. Maybe a
Prelude.Nothing,
        $sel:description:AddMediaStreamRequest' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
        $sel:videoFormat:AddMediaStreamRequest' :: Maybe Text
videoFormat = forall a. Maybe a
Prelude.Nothing,
        $sel:mediaStreamType:AddMediaStreamRequest' :: MediaStreamType
mediaStreamType = MediaStreamType
pMediaStreamType_,
        $sel:mediaStreamId:AddMediaStreamRequest' :: Int
mediaStreamId = Int
pMediaStreamId_,
        $sel:mediaStreamName:AddMediaStreamRequest' :: Text
mediaStreamName = Text
pMediaStreamName_
      }

-- | The attributes that you want to assign to the new media stream.
addMediaStreamRequest_attributes :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe MediaStreamAttributesRequest)
addMediaStreamRequest_attributes :: Lens' AddMediaStreamRequest (Maybe MediaStreamAttributesRequest)
addMediaStreamRequest_attributes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {Maybe MediaStreamAttributesRequest
attributes :: Maybe MediaStreamAttributesRequest
$sel:attributes:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe MediaStreamAttributesRequest
attributes} -> Maybe MediaStreamAttributesRequest
attributes) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} Maybe MediaStreamAttributesRequest
a -> AddMediaStreamRequest
s {$sel:attributes:AddMediaStreamRequest' :: Maybe MediaStreamAttributesRequest
attributes = Maybe MediaStreamAttributesRequest
a} :: AddMediaStreamRequest)

-- | The sample rate (in Hz) for the stream. If the media stream type is
-- video or ancillary data, set this value to 90000. If the media stream
-- type is audio, set this value to either 48000 or 96000.
addMediaStreamRequest_clockRate :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe Prelude.Int)
addMediaStreamRequest_clockRate :: Lens' AddMediaStreamRequest (Maybe Int)
addMediaStreamRequest_clockRate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {Maybe Int
clockRate :: Maybe Int
$sel:clockRate:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Int
clockRate} -> Maybe Int
clockRate) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} Maybe Int
a -> AddMediaStreamRequest
s {$sel:clockRate:AddMediaStreamRequest' :: Maybe Int
clockRate = Maybe Int
a} :: AddMediaStreamRequest)

-- | A description that can help you quickly identify what your media stream
-- is used for.
addMediaStreamRequest_description :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe Prelude.Text)
addMediaStreamRequest_description :: Lens' AddMediaStreamRequest (Maybe Text)
addMediaStreamRequest_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {Maybe Text
description :: Maybe Text
$sel:description:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
description} -> Maybe Text
description) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} Maybe Text
a -> AddMediaStreamRequest
s {$sel:description:AddMediaStreamRequest' :: Maybe Text
description = Maybe Text
a} :: AddMediaStreamRequest)

-- | The resolution of the video.
addMediaStreamRequest_videoFormat :: Lens.Lens' AddMediaStreamRequest (Prelude.Maybe Prelude.Text)
addMediaStreamRequest_videoFormat :: Lens' AddMediaStreamRequest (Maybe Text)
addMediaStreamRequest_videoFormat = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {Maybe Text
videoFormat :: Maybe Text
$sel:videoFormat:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
videoFormat} -> Maybe Text
videoFormat) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} Maybe Text
a -> AddMediaStreamRequest
s {$sel:videoFormat:AddMediaStreamRequest' :: Maybe Text
videoFormat = Maybe Text
a} :: AddMediaStreamRequest)

-- | The type of media stream.
addMediaStreamRequest_mediaStreamType :: Lens.Lens' AddMediaStreamRequest MediaStreamType
addMediaStreamRequest_mediaStreamType :: Lens' AddMediaStreamRequest MediaStreamType
addMediaStreamRequest_mediaStreamType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {MediaStreamType
mediaStreamType :: MediaStreamType
$sel:mediaStreamType:AddMediaStreamRequest' :: AddMediaStreamRequest -> MediaStreamType
mediaStreamType} -> MediaStreamType
mediaStreamType) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} MediaStreamType
a -> AddMediaStreamRequest
s {$sel:mediaStreamType:AddMediaStreamRequest' :: MediaStreamType
mediaStreamType = MediaStreamType
a} :: AddMediaStreamRequest)

-- | A unique identifier for the media stream.
addMediaStreamRequest_mediaStreamId :: Lens.Lens' AddMediaStreamRequest Prelude.Int
addMediaStreamRequest_mediaStreamId :: Lens' AddMediaStreamRequest Int
addMediaStreamRequest_mediaStreamId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {Int
mediaStreamId :: Int
$sel:mediaStreamId:AddMediaStreamRequest' :: AddMediaStreamRequest -> Int
mediaStreamId} -> Int
mediaStreamId) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} Int
a -> AddMediaStreamRequest
s {$sel:mediaStreamId:AddMediaStreamRequest' :: Int
mediaStreamId = Int
a} :: AddMediaStreamRequest)

-- | A name that helps you distinguish one media stream from another.
addMediaStreamRequest_mediaStreamName :: Lens.Lens' AddMediaStreamRequest Prelude.Text
addMediaStreamRequest_mediaStreamName :: Lens' AddMediaStreamRequest Text
addMediaStreamRequest_mediaStreamName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AddMediaStreamRequest' {Text
mediaStreamName :: Text
$sel:mediaStreamName:AddMediaStreamRequest' :: AddMediaStreamRequest -> Text
mediaStreamName} -> Text
mediaStreamName) (\s :: AddMediaStreamRequest
s@AddMediaStreamRequest' {} Text
a -> AddMediaStreamRequest
s {$sel:mediaStreamName:AddMediaStreamRequest' :: Text
mediaStreamName = Text
a} :: AddMediaStreamRequest)

instance Prelude.Hashable AddMediaStreamRequest where
  hashWithSalt :: Int -> AddMediaStreamRequest -> Int
hashWithSalt Int
_salt AddMediaStreamRequest' {Int
Maybe Int
Maybe Text
Maybe MediaStreamAttributesRequest
Text
MediaStreamType
mediaStreamName :: Text
mediaStreamId :: Int
mediaStreamType :: MediaStreamType
videoFormat :: Maybe Text
description :: Maybe Text
clockRate :: Maybe Int
attributes :: Maybe MediaStreamAttributesRequest
$sel:mediaStreamName:AddMediaStreamRequest' :: AddMediaStreamRequest -> Text
$sel:mediaStreamId:AddMediaStreamRequest' :: AddMediaStreamRequest -> Int
$sel:mediaStreamType:AddMediaStreamRequest' :: AddMediaStreamRequest -> MediaStreamType
$sel:videoFormat:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
$sel:description:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
$sel:clockRate:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Int
$sel:attributes:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe MediaStreamAttributesRequest
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MediaStreamAttributesRequest
attributes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
clockRate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
videoFormat
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MediaStreamType
mediaStreamType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
mediaStreamId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
mediaStreamName

instance Prelude.NFData AddMediaStreamRequest where
  rnf :: AddMediaStreamRequest -> ()
rnf AddMediaStreamRequest' {Int
Maybe Int
Maybe Text
Maybe MediaStreamAttributesRequest
Text
MediaStreamType
mediaStreamName :: Text
mediaStreamId :: Int
mediaStreamType :: MediaStreamType
videoFormat :: Maybe Text
description :: Maybe Text
clockRate :: Maybe Int
attributes :: Maybe MediaStreamAttributesRequest
$sel:mediaStreamName:AddMediaStreamRequest' :: AddMediaStreamRequest -> Text
$sel:mediaStreamId:AddMediaStreamRequest' :: AddMediaStreamRequest -> Int
$sel:mediaStreamType:AddMediaStreamRequest' :: AddMediaStreamRequest -> MediaStreamType
$sel:videoFormat:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
$sel:description:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
$sel:clockRate:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Int
$sel:attributes:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe MediaStreamAttributesRequest
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe MediaStreamAttributesRequest
attributes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
clockRate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
videoFormat
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MediaStreamType
mediaStreamType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
mediaStreamId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
mediaStreamName

instance Data.ToJSON AddMediaStreamRequest where
  toJSON :: AddMediaStreamRequest -> Value
toJSON AddMediaStreamRequest' {Int
Maybe Int
Maybe Text
Maybe MediaStreamAttributesRequest
Text
MediaStreamType
mediaStreamName :: Text
mediaStreamId :: Int
mediaStreamType :: MediaStreamType
videoFormat :: Maybe Text
description :: Maybe Text
clockRate :: Maybe Int
attributes :: Maybe MediaStreamAttributesRequest
$sel:mediaStreamName:AddMediaStreamRequest' :: AddMediaStreamRequest -> Text
$sel:mediaStreamId:AddMediaStreamRequest' :: AddMediaStreamRequest -> Int
$sel:mediaStreamType:AddMediaStreamRequest' :: AddMediaStreamRequest -> MediaStreamType
$sel:videoFormat:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
$sel:description:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Text
$sel:clockRate:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe Int
$sel:attributes:AddMediaStreamRequest' :: AddMediaStreamRequest -> Maybe MediaStreamAttributesRequest
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"attributes" 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 MediaStreamAttributesRequest
attributes,
            (Key
"clockRate" 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 Int
clockRate,
            (Key
"description" 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 Text
description,
            (Key
"videoFormat" 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 Text
videoFormat,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"mediaStreamType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= MediaStreamType
mediaStreamType),
            forall a. a -> Maybe a
Prelude.Just (Key
"mediaStreamId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Int
mediaStreamId),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"mediaStreamName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
mediaStreamName)
          ]
      )