{-# 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.ChimeSdkMediaPipelines.Types.MediaPipeline
-- 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.ChimeSdkMediaPipelines.Types.MediaPipeline where

import Amazonka.ChimeSdkMediaPipelines.Types.MediaCapturePipeline
import Amazonka.ChimeSdkMediaPipelines.Types.MediaConcatenationPipeline
import Amazonka.ChimeSdkMediaPipelines.Types.MediaLiveConnectorPipeline
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | A pipeline consisting of a media capture, media concatenation, or
-- live-streaming pipeline.
--
-- /See:/ 'newMediaPipeline' smart constructor.
data MediaPipeline = MediaPipeline'
  { -- | A pipeline that enables users to capture audio and video.
    MediaPipeline -> Maybe MediaCapturePipeline
mediaCapturePipeline :: Prelude.Maybe MediaCapturePipeline,
    -- | The media concatenation pipeline in a media pipeline.
    MediaPipeline -> Maybe MediaConcatenationPipeline
mediaConcatenationPipeline :: Prelude.Maybe MediaConcatenationPipeline,
    -- | The connector pipeline of the media pipeline.
    MediaPipeline -> Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline :: Prelude.Maybe MediaLiveConnectorPipeline
  }
  deriving (MediaPipeline -> MediaPipeline -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MediaPipeline -> MediaPipeline -> Bool
$c/= :: MediaPipeline -> MediaPipeline -> Bool
== :: MediaPipeline -> MediaPipeline -> Bool
$c== :: MediaPipeline -> MediaPipeline -> Bool
Prelude.Eq, Int -> MediaPipeline -> ShowS
[MediaPipeline] -> ShowS
MediaPipeline -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MediaPipeline] -> ShowS
$cshowList :: [MediaPipeline] -> ShowS
show :: MediaPipeline -> String
$cshow :: MediaPipeline -> String
showsPrec :: Int -> MediaPipeline -> ShowS
$cshowsPrec :: Int -> MediaPipeline -> ShowS
Prelude.Show, forall x. Rep MediaPipeline x -> MediaPipeline
forall x. MediaPipeline -> Rep MediaPipeline x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MediaPipeline x -> MediaPipeline
$cfrom :: forall x. MediaPipeline -> Rep MediaPipeline x
Prelude.Generic)

-- |
-- Create a value of 'MediaPipeline' 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:
--
-- 'mediaCapturePipeline', 'mediaPipeline_mediaCapturePipeline' - A pipeline that enables users to capture audio and video.
--
-- 'mediaConcatenationPipeline', 'mediaPipeline_mediaConcatenationPipeline' - The media concatenation pipeline in a media pipeline.
--
-- 'mediaLiveConnectorPipeline', 'mediaPipeline_mediaLiveConnectorPipeline' - The connector pipeline of the media pipeline.
newMediaPipeline ::
  MediaPipeline
newMediaPipeline :: MediaPipeline
newMediaPipeline =
  MediaPipeline'
    { $sel:mediaCapturePipeline:MediaPipeline' :: Maybe MediaCapturePipeline
mediaCapturePipeline =
        forall a. Maybe a
Prelude.Nothing,
      $sel:mediaConcatenationPipeline:MediaPipeline' :: Maybe MediaConcatenationPipeline
mediaConcatenationPipeline = forall a. Maybe a
Prelude.Nothing,
      $sel:mediaLiveConnectorPipeline:MediaPipeline' :: Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline = forall a. Maybe a
Prelude.Nothing
    }

-- | A pipeline that enables users to capture audio and video.
mediaPipeline_mediaCapturePipeline :: Lens.Lens' MediaPipeline (Prelude.Maybe MediaCapturePipeline)
mediaPipeline_mediaCapturePipeline :: Lens' MediaPipeline (Maybe MediaCapturePipeline)
mediaPipeline_mediaCapturePipeline = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MediaPipeline' {Maybe MediaCapturePipeline
mediaCapturePipeline :: Maybe MediaCapturePipeline
$sel:mediaCapturePipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaCapturePipeline
mediaCapturePipeline} -> Maybe MediaCapturePipeline
mediaCapturePipeline) (\s :: MediaPipeline
s@MediaPipeline' {} Maybe MediaCapturePipeline
a -> MediaPipeline
s {$sel:mediaCapturePipeline:MediaPipeline' :: Maybe MediaCapturePipeline
mediaCapturePipeline = Maybe MediaCapturePipeline
a} :: MediaPipeline)

-- | The media concatenation pipeline in a media pipeline.
mediaPipeline_mediaConcatenationPipeline :: Lens.Lens' MediaPipeline (Prelude.Maybe MediaConcatenationPipeline)
mediaPipeline_mediaConcatenationPipeline :: Lens' MediaPipeline (Maybe MediaConcatenationPipeline)
mediaPipeline_mediaConcatenationPipeline = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MediaPipeline' {Maybe MediaConcatenationPipeline
mediaConcatenationPipeline :: Maybe MediaConcatenationPipeline
$sel:mediaConcatenationPipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaConcatenationPipeline
mediaConcatenationPipeline} -> Maybe MediaConcatenationPipeline
mediaConcatenationPipeline) (\s :: MediaPipeline
s@MediaPipeline' {} Maybe MediaConcatenationPipeline
a -> MediaPipeline
s {$sel:mediaConcatenationPipeline:MediaPipeline' :: Maybe MediaConcatenationPipeline
mediaConcatenationPipeline = Maybe MediaConcatenationPipeline
a} :: MediaPipeline)

-- | The connector pipeline of the media pipeline.
mediaPipeline_mediaLiveConnectorPipeline :: Lens.Lens' MediaPipeline (Prelude.Maybe MediaLiveConnectorPipeline)
mediaPipeline_mediaLiveConnectorPipeline :: Lens' MediaPipeline (Maybe MediaLiveConnectorPipeline)
mediaPipeline_mediaLiveConnectorPipeline = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MediaPipeline' {Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline :: Maybe MediaLiveConnectorPipeline
$sel:mediaLiveConnectorPipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline} -> Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline) (\s :: MediaPipeline
s@MediaPipeline' {} Maybe MediaLiveConnectorPipeline
a -> MediaPipeline
s {$sel:mediaLiveConnectorPipeline:MediaPipeline' :: Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline = Maybe MediaLiveConnectorPipeline
a} :: MediaPipeline)

instance Data.FromJSON MediaPipeline where
  parseJSON :: Value -> Parser MediaPipeline
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"MediaPipeline"
      ( \Object
x ->
          Maybe MediaCapturePipeline
-> Maybe MediaConcatenationPipeline
-> Maybe MediaLiveConnectorPipeline
-> MediaPipeline
MediaPipeline'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MediaCapturePipeline")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MediaConcatenationPipeline")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MediaLiveConnectorPipeline")
      )

instance Prelude.Hashable MediaPipeline where
  hashWithSalt :: Int -> MediaPipeline -> Int
hashWithSalt Int
_salt MediaPipeline' {Maybe MediaLiveConnectorPipeline
Maybe MediaConcatenationPipeline
Maybe MediaCapturePipeline
mediaLiveConnectorPipeline :: Maybe MediaLiveConnectorPipeline
mediaConcatenationPipeline :: Maybe MediaConcatenationPipeline
mediaCapturePipeline :: Maybe MediaCapturePipeline
$sel:mediaLiveConnectorPipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaLiveConnectorPipeline
$sel:mediaConcatenationPipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaConcatenationPipeline
$sel:mediaCapturePipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaCapturePipeline
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MediaCapturePipeline
mediaCapturePipeline
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MediaConcatenationPipeline
mediaConcatenationPipeline
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline

instance Prelude.NFData MediaPipeline where
  rnf :: MediaPipeline -> ()
rnf MediaPipeline' {Maybe MediaLiveConnectorPipeline
Maybe MediaConcatenationPipeline
Maybe MediaCapturePipeline
mediaLiveConnectorPipeline :: Maybe MediaLiveConnectorPipeline
mediaConcatenationPipeline :: Maybe MediaConcatenationPipeline
mediaCapturePipeline :: Maybe MediaCapturePipeline
$sel:mediaLiveConnectorPipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaLiveConnectorPipeline
$sel:mediaConcatenationPipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaConcatenationPipeline
$sel:mediaCapturePipeline:MediaPipeline' :: MediaPipeline -> Maybe MediaCapturePipeline
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe MediaCapturePipeline
mediaCapturePipeline
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MediaConcatenationPipeline
mediaConcatenationPipeline
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MediaLiveConnectorPipeline
mediaLiveConnectorPipeline