{-# 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.ElasticTranscoder.Types.Preset
-- 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.ElasticTranscoder.Types.Preset where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.ElasticTranscoder.Types.AudioParameters
import Amazonka.ElasticTranscoder.Types.Thumbnails
import Amazonka.ElasticTranscoder.Types.VideoParameters
import qualified Amazonka.Prelude as Prelude

-- | Presets are templates that contain most of the settings for transcoding
-- media files from one format to another. Elastic Transcoder includes some
-- default presets for common formats, for example, several iPod and iPhone
-- versions. You can also create your own presets for formats that aren\'t
-- included among the default presets. You specify which preset you want to
-- use when you create a job.
--
-- /See:/ 'newPreset' smart constructor.
data Preset = Preset'
  { -- | The Amazon Resource Name (ARN) for the preset.
    Preset -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | A section of the response body that provides information about the audio
    -- preset values.
    Preset -> Maybe AudioParameters
audio :: Prelude.Maybe AudioParameters,
    -- | The container type for the output file. Valid values include @flac@,
    -- @flv@, @fmp4@, @gif@, @mp3@, @mp4@, @mpg@, @mxf@, @oga@, @ogg@, @ts@,
    -- and @webm@.
    Preset -> Maybe Text
container :: Prelude.Maybe Prelude.Text,
    -- | A description of the preset.
    Preset -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Identifier for the new preset. You use this value to get settings for
    -- the preset or to delete it.
    Preset -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The name of the preset.
    Preset -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | A section of the response body that provides information about the
    -- thumbnail preset values, if any.
    Preset -> Maybe Thumbnails
thumbnails :: Prelude.Maybe Thumbnails,
    -- | Whether the preset is a default preset provided by Elastic Transcoder
    -- (@System@) or a preset that you have defined (@Custom@).
    Preset -> Maybe Text
type' :: Prelude.Maybe Prelude.Text,
    -- | A section of the response body that provides information about the video
    -- preset values.
    Preset -> Maybe VideoParameters
video :: Prelude.Maybe VideoParameters
  }
  deriving (Preset -> Preset -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Preset -> Preset -> Bool
$c/= :: Preset -> Preset -> Bool
== :: Preset -> Preset -> Bool
$c== :: Preset -> Preset -> Bool
Prelude.Eq, ReadPrec [Preset]
ReadPrec Preset
Int -> ReadS Preset
ReadS [Preset]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Preset]
$creadListPrec :: ReadPrec [Preset]
readPrec :: ReadPrec Preset
$creadPrec :: ReadPrec Preset
readList :: ReadS [Preset]
$creadList :: ReadS [Preset]
readsPrec :: Int -> ReadS Preset
$creadsPrec :: Int -> ReadS Preset
Prelude.Read, Int -> Preset -> ShowS
[Preset] -> ShowS
Preset -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Preset] -> ShowS
$cshowList :: [Preset] -> ShowS
show :: Preset -> String
$cshow :: Preset -> String
showsPrec :: Int -> Preset -> ShowS
$cshowsPrec :: Int -> Preset -> ShowS
Prelude.Show, forall x. Rep Preset x -> Preset
forall x. Preset -> Rep Preset x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Preset x -> Preset
$cfrom :: forall x. Preset -> Rep Preset x
Prelude.Generic)

-- |
-- Create a value of 'Preset' 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:
--
-- 'arn', 'preset_arn' - The Amazon Resource Name (ARN) for the preset.
--
-- 'audio', 'preset_audio' - A section of the response body that provides information about the audio
-- preset values.
--
-- 'container', 'preset_container' - The container type for the output file. Valid values include @flac@,
-- @flv@, @fmp4@, @gif@, @mp3@, @mp4@, @mpg@, @mxf@, @oga@, @ogg@, @ts@,
-- and @webm@.
--
-- 'description', 'preset_description' - A description of the preset.
--
-- 'id', 'preset_id' - Identifier for the new preset. You use this value to get settings for
-- the preset or to delete it.
--
-- 'name', 'preset_name' - The name of the preset.
--
-- 'thumbnails', 'preset_thumbnails' - A section of the response body that provides information about the
-- thumbnail preset values, if any.
--
-- 'type'', 'preset_type' - Whether the preset is a default preset provided by Elastic Transcoder
-- (@System@) or a preset that you have defined (@Custom@).
--
-- 'video', 'preset_video' - A section of the response body that provides information about the video
-- preset values.
newPreset ::
  Preset
newPreset :: Preset
newPreset =
  Preset'
    { $sel:arn:Preset' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:audio:Preset' :: Maybe AudioParameters
audio = forall a. Maybe a
Prelude.Nothing,
      $sel:container:Preset' :: Maybe Text
container = forall a. Maybe a
Prelude.Nothing,
      $sel:description:Preset' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:id:Preset' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:name:Preset' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:thumbnails:Preset' :: Maybe Thumbnails
thumbnails = forall a. Maybe a
Prelude.Nothing,
      $sel:type':Preset' :: Maybe Text
type' = forall a. Maybe a
Prelude.Nothing,
      $sel:video:Preset' :: Maybe VideoParameters
video = forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) for the preset.
preset_arn :: Lens.Lens' Preset (Prelude.Maybe Prelude.Text)
preset_arn :: Lens' Preset (Maybe Text)
preset_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Text
arn :: Maybe Text
$sel:arn:Preset' :: Preset -> Maybe Text
arn} -> Maybe Text
arn) (\s :: Preset
s@Preset' {} Maybe Text
a -> Preset
s {$sel:arn:Preset' :: Maybe Text
arn = Maybe Text
a} :: Preset)

-- | A section of the response body that provides information about the audio
-- preset values.
preset_audio :: Lens.Lens' Preset (Prelude.Maybe AudioParameters)
preset_audio :: Lens' Preset (Maybe AudioParameters)
preset_audio = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe AudioParameters
audio :: Maybe AudioParameters
$sel:audio:Preset' :: Preset -> Maybe AudioParameters
audio} -> Maybe AudioParameters
audio) (\s :: Preset
s@Preset' {} Maybe AudioParameters
a -> Preset
s {$sel:audio:Preset' :: Maybe AudioParameters
audio = Maybe AudioParameters
a} :: Preset)

-- | The container type for the output file. Valid values include @flac@,
-- @flv@, @fmp4@, @gif@, @mp3@, @mp4@, @mpg@, @mxf@, @oga@, @ogg@, @ts@,
-- and @webm@.
preset_container :: Lens.Lens' Preset (Prelude.Maybe Prelude.Text)
preset_container :: Lens' Preset (Maybe Text)
preset_container = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Text
container :: Maybe Text
$sel:container:Preset' :: Preset -> Maybe Text
container} -> Maybe Text
container) (\s :: Preset
s@Preset' {} Maybe Text
a -> Preset
s {$sel:container:Preset' :: Maybe Text
container = Maybe Text
a} :: Preset)

-- | A description of the preset.
preset_description :: Lens.Lens' Preset (Prelude.Maybe Prelude.Text)
preset_description :: Lens' Preset (Maybe Text)
preset_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Text
description :: Maybe Text
$sel:description:Preset' :: Preset -> Maybe Text
description} -> Maybe Text
description) (\s :: Preset
s@Preset' {} Maybe Text
a -> Preset
s {$sel:description:Preset' :: Maybe Text
description = Maybe Text
a} :: Preset)

-- | Identifier for the new preset. You use this value to get settings for
-- the preset or to delete it.
preset_id :: Lens.Lens' Preset (Prelude.Maybe Prelude.Text)
preset_id :: Lens' Preset (Maybe Text)
preset_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Text
id :: Maybe Text
$sel:id:Preset' :: Preset -> Maybe Text
id} -> Maybe Text
id) (\s :: Preset
s@Preset' {} Maybe Text
a -> Preset
s {$sel:id:Preset' :: Maybe Text
id = Maybe Text
a} :: Preset)

-- | The name of the preset.
preset_name :: Lens.Lens' Preset (Prelude.Maybe Prelude.Text)
preset_name :: Lens' Preset (Maybe Text)
preset_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Text
name :: Maybe Text
$sel:name:Preset' :: Preset -> Maybe Text
name} -> Maybe Text
name) (\s :: Preset
s@Preset' {} Maybe Text
a -> Preset
s {$sel:name:Preset' :: Maybe Text
name = Maybe Text
a} :: Preset)

-- | A section of the response body that provides information about the
-- thumbnail preset values, if any.
preset_thumbnails :: Lens.Lens' Preset (Prelude.Maybe Thumbnails)
preset_thumbnails :: Lens' Preset (Maybe Thumbnails)
preset_thumbnails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Thumbnails
thumbnails :: Maybe Thumbnails
$sel:thumbnails:Preset' :: Preset -> Maybe Thumbnails
thumbnails} -> Maybe Thumbnails
thumbnails) (\s :: Preset
s@Preset' {} Maybe Thumbnails
a -> Preset
s {$sel:thumbnails:Preset' :: Maybe Thumbnails
thumbnails = Maybe Thumbnails
a} :: Preset)

-- | Whether the preset is a default preset provided by Elastic Transcoder
-- (@System@) or a preset that you have defined (@Custom@).
preset_type :: Lens.Lens' Preset (Prelude.Maybe Prelude.Text)
preset_type :: Lens' Preset (Maybe Text)
preset_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe Text
type' :: Maybe Text
$sel:type':Preset' :: Preset -> Maybe Text
type'} -> Maybe Text
type') (\s :: Preset
s@Preset' {} Maybe Text
a -> Preset
s {$sel:type':Preset' :: Maybe Text
type' = Maybe Text
a} :: Preset)

-- | A section of the response body that provides information about the video
-- preset values.
preset_video :: Lens.Lens' Preset (Prelude.Maybe VideoParameters)
preset_video :: Lens' Preset (Maybe VideoParameters)
preset_video = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Preset' {Maybe VideoParameters
video :: Maybe VideoParameters
$sel:video:Preset' :: Preset -> Maybe VideoParameters
video} -> Maybe VideoParameters
video) (\s :: Preset
s@Preset' {} Maybe VideoParameters
a -> Preset
s {$sel:video:Preset' :: Maybe VideoParameters
video = Maybe VideoParameters
a} :: Preset)

instance Data.FromJSON Preset where
  parseJSON :: Value -> Parser Preset
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Preset"
      ( \Object
x ->
          Maybe Text
-> Maybe AudioParameters
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Thumbnails
-> Maybe Text
-> Maybe VideoParameters
-> Preset
Preset'
            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
"Arn")
            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
"Audio")
            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
"Container")
            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
"Description")
            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
"Id")
            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
"Name")
            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
"Thumbnails")
            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
"Type")
            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
"Video")
      )

instance Prelude.Hashable Preset where
  hashWithSalt :: Int -> Preset -> Int
hashWithSalt Int
_salt Preset' {Maybe Text
Maybe AudioParameters
Maybe Thumbnails
Maybe VideoParameters
video :: Maybe VideoParameters
type' :: Maybe Text
thumbnails :: Maybe Thumbnails
name :: Maybe Text
id :: Maybe Text
description :: Maybe Text
container :: Maybe Text
audio :: Maybe AudioParameters
arn :: Maybe Text
$sel:video:Preset' :: Preset -> Maybe VideoParameters
$sel:type':Preset' :: Preset -> Maybe Text
$sel:thumbnails:Preset' :: Preset -> Maybe Thumbnails
$sel:name:Preset' :: Preset -> Maybe Text
$sel:id:Preset' :: Preset -> Maybe Text
$sel:description:Preset' :: Preset -> Maybe Text
$sel:container:Preset' :: Preset -> Maybe Text
$sel:audio:Preset' :: Preset -> Maybe AudioParameters
$sel:arn:Preset' :: Preset -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AudioParameters
audio
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
container
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Thumbnails
thumbnails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
type'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VideoParameters
video

instance Prelude.NFData Preset where
  rnf :: Preset -> ()
rnf Preset' {Maybe Text
Maybe AudioParameters
Maybe Thumbnails
Maybe VideoParameters
video :: Maybe VideoParameters
type' :: Maybe Text
thumbnails :: Maybe Thumbnails
name :: Maybe Text
id :: Maybe Text
description :: Maybe Text
container :: Maybe Text
audio :: Maybe AudioParameters
arn :: Maybe Text
$sel:video:Preset' :: Preset -> Maybe VideoParameters
$sel:type':Preset' :: Preset -> Maybe Text
$sel:thumbnails:Preset' :: Preset -> Maybe Thumbnails
$sel:name:Preset' :: Preset -> Maybe Text
$sel:id:Preset' :: Preset -> Maybe Text
$sel:description:Preset' :: Preset -> Maybe Text
$sel:container:Preset' :: Preset -> Maybe Text
$sel:audio:Preset' :: Preset -> Maybe AudioParameters
$sel:arn:Preset' :: Preset -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AudioParameters
audio
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
container
      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
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Thumbnails
thumbnails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
type'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VideoParameters
video