{-# 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.MediaPackageVOD.Types.DashManifest
-- 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.MediaPackageVOD.Types.DashManifest where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MediaPackageVOD.Types.ManifestLayout
import Amazonka.MediaPackageVOD.Types.Profile
import Amazonka.MediaPackageVOD.Types.ScteMarkersSource
import Amazonka.MediaPackageVOD.Types.StreamSelection
import qualified Amazonka.Prelude as Prelude

-- | A DASH manifest configuration.
--
-- /See:/ 'newDashManifest' smart constructor.
data DashManifest = DashManifest'
  { -- | Determines the position of some tags in the Media Presentation
    -- Description (MPD). When set to FULL, elements like SegmentTemplate and
    -- ContentProtection are included in each Representation. When set to
    -- COMPACT, duplicate elements are combined and presented at the
    -- AdaptationSet level.
    DashManifest -> Maybe ManifestLayout
manifestLayout :: Prelude.Maybe ManifestLayout,
    -- | An optional string to include in the name of the manifest.
    DashManifest -> Maybe Text
manifestName :: Prelude.Maybe Prelude.Text,
    -- | Minimum duration (in seconds) that a player will buffer media before
    -- starting the presentation.
    DashManifest -> Maybe Int
minBufferTimeSeconds :: Prelude.Maybe Prelude.Int,
    -- | The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set
    -- to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.
    DashManifest -> Maybe Profile
profile :: Prelude.Maybe Profile,
    -- | The source of scte markers used. When set to SEGMENTS, the scte markers
    -- are sourced from the segments of the ingested content. When set to
    -- MANIFEST, the scte markers are sourced from the manifest of the ingested
    -- content. The MANIFEST value is compatible with source HLS playlists
    -- using the SCTE-35 Enhanced syntax (#EXT-OATCLS-SCTE35 tags). SCTE-35
    -- Elemental and SCTE-35 Daterange syntaxes are not supported with this
    -- option.
    DashManifest -> Maybe ScteMarkersSource
scteMarkersSource :: Prelude.Maybe ScteMarkersSource,
    DashManifest -> Maybe StreamSelection
streamSelection :: Prelude.Maybe StreamSelection
  }
  deriving (DashManifest -> DashManifest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DashManifest -> DashManifest -> Bool
$c/= :: DashManifest -> DashManifest -> Bool
== :: DashManifest -> DashManifest -> Bool
$c== :: DashManifest -> DashManifest -> Bool
Prelude.Eq, ReadPrec [DashManifest]
ReadPrec DashManifest
Int -> ReadS DashManifest
ReadS [DashManifest]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DashManifest]
$creadListPrec :: ReadPrec [DashManifest]
readPrec :: ReadPrec DashManifest
$creadPrec :: ReadPrec DashManifest
readList :: ReadS [DashManifest]
$creadList :: ReadS [DashManifest]
readsPrec :: Int -> ReadS DashManifest
$creadsPrec :: Int -> ReadS DashManifest
Prelude.Read, Int -> DashManifest -> ShowS
[DashManifest] -> ShowS
DashManifest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DashManifest] -> ShowS
$cshowList :: [DashManifest] -> ShowS
show :: DashManifest -> String
$cshow :: DashManifest -> String
showsPrec :: Int -> DashManifest -> ShowS
$cshowsPrec :: Int -> DashManifest -> ShowS
Prelude.Show, forall x. Rep DashManifest x -> DashManifest
forall x. DashManifest -> Rep DashManifest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DashManifest x -> DashManifest
$cfrom :: forall x. DashManifest -> Rep DashManifest x
Prelude.Generic)

-- |
-- Create a value of 'DashManifest' 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:
--
-- 'manifestLayout', 'dashManifest_manifestLayout' - Determines the position of some tags in the Media Presentation
-- Description (MPD). When set to FULL, elements like SegmentTemplate and
-- ContentProtection are included in each Representation. When set to
-- COMPACT, duplicate elements are combined and presented at the
-- AdaptationSet level.
--
-- 'manifestName', 'dashManifest_manifestName' - An optional string to include in the name of the manifest.
--
-- 'minBufferTimeSeconds', 'dashManifest_minBufferTimeSeconds' - Minimum duration (in seconds) that a player will buffer media before
-- starting the presentation.
--
-- 'profile', 'dashManifest_profile' - The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set
-- to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.
--
-- 'scteMarkersSource', 'dashManifest_scteMarkersSource' - The source of scte markers used. When set to SEGMENTS, the scte markers
-- are sourced from the segments of the ingested content. When set to
-- MANIFEST, the scte markers are sourced from the manifest of the ingested
-- content. The MANIFEST value is compatible with source HLS playlists
-- using the SCTE-35 Enhanced syntax (#EXT-OATCLS-SCTE35 tags). SCTE-35
-- Elemental and SCTE-35 Daterange syntaxes are not supported with this
-- option.
--
-- 'streamSelection', 'dashManifest_streamSelection' - Undocumented member.
newDashManifest ::
  DashManifest
newDashManifest :: DashManifest
newDashManifest =
  DashManifest'
    { $sel:manifestLayout:DashManifest' :: Maybe ManifestLayout
manifestLayout = forall a. Maybe a
Prelude.Nothing,
      $sel:manifestName:DashManifest' :: Maybe Text
manifestName = forall a. Maybe a
Prelude.Nothing,
      $sel:minBufferTimeSeconds:DashManifest' :: Maybe Int
minBufferTimeSeconds = forall a. Maybe a
Prelude.Nothing,
      $sel:profile:DashManifest' :: Maybe Profile
profile = forall a. Maybe a
Prelude.Nothing,
      $sel:scteMarkersSource:DashManifest' :: Maybe ScteMarkersSource
scteMarkersSource = forall a. Maybe a
Prelude.Nothing,
      $sel:streamSelection:DashManifest' :: Maybe StreamSelection
streamSelection = forall a. Maybe a
Prelude.Nothing
    }

-- | Determines the position of some tags in the Media Presentation
-- Description (MPD). When set to FULL, elements like SegmentTemplate and
-- ContentProtection are included in each Representation. When set to
-- COMPACT, duplicate elements are combined and presented at the
-- AdaptationSet level.
dashManifest_manifestLayout :: Lens.Lens' DashManifest (Prelude.Maybe ManifestLayout)
dashManifest_manifestLayout :: Lens' DashManifest (Maybe ManifestLayout)
dashManifest_manifestLayout = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DashManifest' {Maybe ManifestLayout
manifestLayout :: Maybe ManifestLayout
$sel:manifestLayout:DashManifest' :: DashManifest -> Maybe ManifestLayout
manifestLayout} -> Maybe ManifestLayout
manifestLayout) (\s :: DashManifest
s@DashManifest' {} Maybe ManifestLayout
a -> DashManifest
s {$sel:manifestLayout:DashManifest' :: Maybe ManifestLayout
manifestLayout = Maybe ManifestLayout
a} :: DashManifest)

-- | An optional string to include in the name of the manifest.
dashManifest_manifestName :: Lens.Lens' DashManifest (Prelude.Maybe Prelude.Text)
dashManifest_manifestName :: Lens' DashManifest (Maybe Text)
dashManifest_manifestName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DashManifest' {Maybe Text
manifestName :: Maybe Text
$sel:manifestName:DashManifest' :: DashManifest -> Maybe Text
manifestName} -> Maybe Text
manifestName) (\s :: DashManifest
s@DashManifest' {} Maybe Text
a -> DashManifest
s {$sel:manifestName:DashManifest' :: Maybe Text
manifestName = Maybe Text
a} :: DashManifest)

-- | Minimum duration (in seconds) that a player will buffer media before
-- starting the presentation.
dashManifest_minBufferTimeSeconds :: Lens.Lens' DashManifest (Prelude.Maybe Prelude.Int)
dashManifest_minBufferTimeSeconds :: Lens' DashManifest (Maybe Int)
dashManifest_minBufferTimeSeconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DashManifest' {Maybe Int
minBufferTimeSeconds :: Maybe Int
$sel:minBufferTimeSeconds:DashManifest' :: DashManifest -> Maybe Int
minBufferTimeSeconds} -> Maybe Int
minBufferTimeSeconds) (\s :: DashManifest
s@DashManifest' {} Maybe Int
a -> DashManifest
s {$sel:minBufferTimeSeconds:DashManifest' :: Maybe Int
minBufferTimeSeconds = Maybe Int
a} :: DashManifest)

-- | The Dynamic Adaptive Streaming over HTTP (DASH) profile type. When set
-- to \"HBBTV_1_5\", HbbTV 1.5 compliant output is enabled.
dashManifest_profile :: Lens.Lens' DashManifest (Prelude.Maybe Profile)
dashManifest_profile :: Lens' DashManifest (Maybe Profile)
dashManifest_profile = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DashManifest' {Maybe Profile
profile :: Maybe Profile
$sel:profile:DashManifest' :: DashManifest -> Maybe Profile
profile} -> Maybe Profile
profile) (\s :: DashManifest
s@DashManifest' {} Maybe Profile
a -> DashManifest
s {$sel:profile:DashManifest' :: Maybe Profile
profile = Maybe Profile
a} :: DashManifest)

-- | The source of scte markers used. When set to SEGMENTS, the scte markers
-- are sourced from the segments of the ingested content. When set to
-- MANIFEST, the scte markers are sourced from the manifest of the ingested
-- content. The MANIFEST value is compatible with source HLS playlists
-- using the SCTE-35 Enhanced syntax (#EXT-OATCLS-SCTE35 tags). SCTE-35
-- Elemental and SCTE-35 Daterange syntaxes are not supported with this
-- option.
dashManifest_scteMarkersSource :: Lens.Lens' DashManifest (Prelude.Maybe ScteMarkersSource)
dashManifest_scteMarkersSource :: Lens' DashManifest (Maybe ScteMarkersSource)
dashManifest_scteMarkersSource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DashManifest' {Maybe ScteMarkersSource
scteMarkersSource :: Maybe ScteMarkersSource
$sel:scteMarkersSource:DashManifest' :: DashManifest -> Maybe ScteMarkersSource
scteMarkersSource} -> Maybe ScteMarkersSource
scteMarkersSource) (\s :: DashManifest
s@DashManifest' {} Maybe ScteMarkersSource
a -> DashManifest
s {$sel:scteMarkersSource:DashManifest' :: Maybe ScteMarkersSource
scteMarkersSource = Maybe ScteMarkersSource
a} :: DashManifest)

-- | Undocumented member.
dashManifest_streamSelection :: Lens.Lens' DashManifest (Prelude.Maybe StreamSelection)
dashManifest_streamSelection :: Lens' DashManifest (Maybe StreamSelection)
dashManifest_streamSelection = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DashManifest' {Maybe StreamSelection
streamSelection :: Maybe StreamSelection
$sel:streamSelection:DashManifest' :: DashManifest -> Maybe StreamSelection
streamSelection} -> Maybe StreamSelection
streamSelection) (\s :: DashManifest
s@DashManifest' {} Maybe StreamSelection
a -> DashManifest
s {$sel:streamSelection:DashManifest' :: Maybe StreamSelection
streamSelection = Maybe StreamSelection
a} :: DashManifest)

instance Data.FromJSON DashManifest where
  parseJSON :: Value -> Parser DashManifest
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DashManifest"
      ( \Object
x ->
          Maybe ManifestLayout
-> Maybe Text
-> Maybe Int
-> Maybe Profile
-> Maybe ScteMarkersSource
-> Maybe StreamSelection
-> DashManifest
DashManifest'
            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
"manifestLayout")
            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
"manifestName")
            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
"minBufferTimeSeconds")
            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
"profile")
            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
"scteMarkersSource")
            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
"streamSelection")
      )

instance Prelude.Hashable DashManifest where
  hashWithSalt :: Int -> DashManifest -> Int
hashWithSalt Int
_salt DashManifest' {Maybe Int
Maybe Text
Maybe ManifestLayout
Maybe Profile
Maybe ScteMarkersSource
Maybe StreamSelection
streamSelection :: Maybe StreamSelection
scteMarkersSource :: Maybe ScteMarkersSource
profile :: Maybe Profile
minBufferTimeSeconds :: Maybe Int
manifestName :: Maybe Text
manifestLayout :: Maybe ManifestLayout
$sel:streamSelection:DashManifest' :: DashManifest -> Maybe StreamSelection
$sel:scteMarkersSource:DashManifest' :: DashManifest -> Maybe ScteMarkersSource
$sel:profile:DashManifest' :: DashManifest -> Maybe Profile
$sel:minBufferTimeSeconds:DashManifest' :: DashManifest -> Maybe Int
$sel:manifestName:DashManifest' :: DashManifest -> Maybe Text
$sel:manifestLayout:DashManifest' :: DashManifest -> Maybe ManifestLayout
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ManifestLayout
manifestLayout
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
manifestName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
minBufferTimeSeconds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Profile
profile
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ScteMarkersSource
scteMarkersSource
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StreamSelection
streamSelection

instance Prelude.NFData DashManifest where
  rnf :: DashManifest -> ()
rnf DashManifest' {Maybe Int
Maybe Text
Maybe ManifestLayout
Maybe Profile
Maybe ScteMarkersSource
Maybe StreamSelection
streamSelection :: Maybe StreamSelection
scteMarkersSource :: Maybe ScteMarkersSource
profile :: Maybe Profile
minBufferTimeSeconds :: Maybe Int
manifestName :: Maybe Text
manifestLayout :: Maybe ManifestLayout
$sel:streamSelection:DashManifest' :: DashManifest -> Maybe StreamSelection
$sel:scteMarkersSource:DashManifest' :: DashManifest -> Maybe ScteMarkersSource
$sel:profile:DashManifest' :: DashManifest -> Maybe Profile
$sel:minBufferTimeSeconds:DashManifest' :: DashManifest -> Maybe Int
$sel:manifestName:DashManifest' :: DashManifest -> Maybe Text
$sel:manifestLayout:DashManifest' :: DashManifest -> Maybe ManifestLayout
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ManifestLayout
manifestLayout
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
manifestName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
minBufferTimeSeconds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Profile
profile
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ScteMarkersSource
scteMarkersSource
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StreamSelection
streamSelection

instance Data.ToJSON DashManifest where
  toJSON :: DashManifest -> Value
toJSON DashManifest' {Maybe Int
Maybe Text
Maybe ManifestLayout
Maybe Profile
Maybe ScteMarkersSource
Maybe StreamSelection
streamSelection :: Maybe StreamSelection
scteMarkersSource :: Maybe ScteMarkersSource
profile :: Maybe Profile
minBufferTimeSeconds :: Maybe Int
manifestName :: Maybe Text
manifestLayout :: Maybe ManifestLayout
$sel:streamSelection:DashManifest' :: DashManifest -> Maybe StreamSelection
$sel:scteMarkersSource:DashManifest' :: DashManifest -> Maybe ScteMarkersSource
$sel:profile:DashManifest' :: DashManifest -> Maybe Profile
$sel:minBufferTimeSeconds:DashManifest' :: DashManifest -> Maybe Int
$sel:manifestName:DashManifest' :: DashManifest -> Maybe Text
$sel:manifestLayout:DashManifest' :: DashManifest -> Maybe ManifestLayout
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"manifestLayout" 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 ManifestLayout
manifestLayout,
            (Key
"manifestName" 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
manifestName,
            (Key
"minBufferTimeSeconds" 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
minBufferTimeSeconds,
            (Key
"profile" 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 Profile
profile,
            (Key
"scteMarkersSource" 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 ScteMarkersSource
scteMarkersSource,
            (Key
"streamSelection" 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 StreamSelection
streamSelection
          ]
      )