{-# 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.Chime.Types.ArtifactsConfiguration
-- 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.Chime.Types.ArtifactsConfiguration where

import Amazonka.Chime.Types.AudioArtifactsConfiguration
import Amazonka.Chime.Types.ContentArtifactsConfiguration
import Amazonka.Chime.Types.VideoArtifactsConfiguration
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

-- | The configuration for the artifacts.
--
-- /See:/ 'newArtifactsConfiguration' smart constructor.
data ArtifactsConfiguration = ArtifactsConfiguration'
  { -- | The configuration for the audio artifacts.
    ArtifactsConfiguration -> AudioArtifactsConfiguration
audio :: AudioArtifactsConfiguration,
    -- | The configuration for the video artifacts.
    ArtifactsConfiguration -> VideoArtifactsConfiguration
video :: VideoArtifactsConfiguration,
    -- | The configuration for the content artifacts.
    ArtifactsConfiguration -> ContentArtifactsConfiguration
content :: ContentArtifactsConfiguration
  }
  deriving (ArtifactsConfiguration -> ArtifactsConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ArtifactsConfiguration -> ArtifactsConfiguration -> Bool
$c/= :: ArtifactsConfiguration -> ArtifactsConfiguration -> Bool
== :: ArtifactsConfiguration -> ArtifactsConfiguration -> Bool
$c== :: ArtifactsConfiguration -> ArtifactsConfiguration -> Bool
Prelude.Eq, ReadPrec [ArtifactsConfiguration]
ReadPrec ArtifactsConfiguration
Int -> ReadS ArtifactsConfiguration
ReadS [ArtifactsConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ArtifactsConfiguration]
$creadListPrec :: ReadPrec [ArtifactsConfiguration]
readPrec :: ReadPrec ArtifactsConfiguration
$creadPrec :: ReadPrec ArtifactsConfiguration
readList :: ReadS [ArtifactsConfiguration]
$creadList :: ReadS [ArtifactsConfiguration]
readsPrec :: Int -> ReadS ArtifactsConfiguration
$creadsPrec :: Int -> ReadS ArtifactsConfiguration
Prelude.Read, Int -> ArtifactsConfiguration -> ShowS
[ArtifactsConfiguration] -> ShowS
ArtifactsConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ArtifactsConfiguration] -> ShowS
$cshowList :: [ArtifactsConfiguration] -> ShowS
show :: ArtifactsConfiguration -> String
$cshow :: ArtifactsConfiguration -> String
showsPrec :: Int -> ArtifactsConfiguration -> ShowS
$cshowsPrec :: Int -> ArtifactsConfiguration -> ShowS
Prelude.Show, forall x. Rep ArtifactsConfiguration x -> ArtifactsConfiguration
forall x. ArtifactsConfiguration -> Rep ArtifactsConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ArtifactsConfiguration x -> ArtifactsConfiguration
$cfrom :: forall x. ArtifactsConfiguration -> Rep ArtifactsConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'ArtifactsConfiguration' 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:
--
-- 'audio', 'artifactsConfiguration_audio' - The configuration for the audio artifacts.
--
-- 'video', 'artifactsConfiguration_video' - The configuration for the video artifacts.
--
-- 'content', 'artifactsConfiguration_content' - The configuration for the content artifacts.
newArtifactsConfiguration ::
  -- | 'audio'
  AudioArtifactsConfiguration ->
  -- | 'video'
  VideoArtifactsConfiguration ->
  -- | 'content'
  ContentArtifactsConfiguration ->
  ArtifactsConfiguration
newArtifactsConfiguration :: AudioArtifactsConfiguration
-> VideoArtifactsConfiguration
-> ContentArtifactsConfiguration
-> ArtifactsConfiguration
newArtifactsConfiguration AudioArtifactsConfiguration
pAudio_ VideoArtifactsConfiguration
pVideo_ ContentArtifactsConfiguration
pContent_ =
  ArtifactsConfiguration'
    { $sel:audio:ArtifactsConfiguration' :: AudioArtifactsConfiguration
audio = AudioArtifactsConfiguration
pAudio_,
      $sel:video:ArtifactsConfiguration' :: VideoArtifactsConfiguration
video = VideoArtifactsConfiguration
pVideo_,
      $sel:content:ArtifactsConfiguration' :: ContentArtifactsConfiguration
content = ContentArtifactsConfiguration
pContent_
    }

-- | The configuration for the audio artifacts.
artifactsConfiguration_audio :: Lens.Lens' ArtifactsConfiguration AudioArtifactsConfiguration
artifactsConfiguration_audio :: Lens' ArtifactsConfiguration AudioArtifactsConfiguration
artifactsConfiguration_audio = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ArtifactsConfiguration' {AudioArtifactsConfiguration
audio :: AudioArtifactsConfiguration
$sel:audio:ArtifactsConfiguration' :: ArtifactsConfiguration -> AudioArtifactsConfiguration
audio} -> AudioArtifactsConfiguration
audio) (\s :: ArtifactsConfiguration
s@ArtifactsConfiguration' {} AudioArtifactsConfiguration
a -> ArtifactsConfiguration
s {$sel:audio:ArtifactsConfiguration' :: AudioArtifactsConfiguration
audio = AudioArtifactsConfiguration
a} :: ArtifactsConfiguration)

-- | The configuration for the video artifacts.
artifactsConfiguration_video :: Lens.Lens' ArtifactsConfiguration VideoArtifactsConfiguration
artifactsConfiguration_video :: Lens' ArtifactsConfiguration VideoArtifactsConfiguration
artifactsConfiguration_video = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ArtifactsConfiguration' {VideoArtifactsConfiguration
video :: VideoArtifactsConfiguration
$sel:video:ArtifactsConfiguration' :: ArtifactsConfiguration -> VideoArtifactsConfiguration
video} -> VideoArtifactsConfiguration
video) (\s :: ArtifactsConfiguration
s@ArtifactsConfiguration' {} VideoArtifactsConfiguration
a -> ArtifactsConfiguration
s {$sel:video:ArtifactsConfiguration' :: VideoArtifactsConfiguration
video = VideoArtifactsConfiguration
a} :: ArtifactsConfiguration)

-- | The configuration for the content artifacts.
artifactsConfiguration_content :: Lens.Lens' ArtifactsConfiguration ContentArtifactsConfiguration
artifactsConfiguration_content :: Lens' ArtifactsConfiguration ContentArtifactsConfiguration
artifactsConfiguration_content = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ArtifactsConfiguration' {ContentArtifactsConfiguration
content :: ContentArtifactsConfiguration
$sel:content:ArtifactsConfiguration' :: ArtifactsConfiguration -> ContentArtifactsConfiguration
content} -> ContentArtifactsConfiguration
content) (\s :: ArtifactsConfiguration
s@ArtifactsConfiguration' {} ContentArtifactsConfiguration
a -> ArtifactsConfiguration
s {$sel:content:ArtifactsConfiguration' :: ContentArtifactsConfiguration
content = ContentArtifactsConfiguration
a} :: ArtifactsConfiguration)

instance Data.FromJSON ArtifactsConfiguration where
  parseJSON :: Value -> Parser ArtifactsConfiguration
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ArtifactsConfiguration"
      ( \Object
x ->
          AudioArtifactsConfiguration
-> VideoArtifactsConfiguration
-> ContentArtifactsConfiguration
-> ArtifactsConfiguration
ArtifactsConfiguration'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser 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 a
Data..: Key
"Video")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"Content")
      )

instance Prelude.Hashable ArtifactsConfiguration where
  hashWithSalt :: Int -> ArtifactsConfiguration -> Int
hashWithSalt Int
_salt ArtifactsConfiguration' {AudioArtifactsConfiguration
ContentArtifactsConfiguration
VideoArtifactsConfiguration
content :: ContentArtifactsConfiguration
video :: VideoArtifactsConfiguration
audio :: AudioArtifactsConfiguration
$sel:content:ArtifactsConfiguration' :: ArtifactsConfiguration -> ContentArtifactsConfiguration
$sel:video:ArtifactsConfiguration' :: ArtifactsConfiguration -> VideoArtifactsConfiguration
$sel:audio:ArtifactsConfiguration' :: ArtifactsConfiguration -> AudioArtifactsConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AudioArtifactsConfiguration
audio
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VideoArtifactsConfiguration
video
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ContentArtifactsConfiguration
content

instance Prelude.NFData ArtifactsConfiguration where
  rnf :: ArtifactsConfiguration -> ()
rnf ArtifactsConfiguration' {AudioArtifactsConfiguration
ContentArtifactsConfiguration
VideoArtifactsConfiguration
content :: ContentArtifactsConfiguration
video :: VideoArtifactsConfiguration
audio :: AudioArtifactsConfiguration
$sel:content:ArtifactsConfiguration' :: ArtifactsConfiguration -> ContentArtifactsConfiguration
$sel:video:ArtifactsConfiguration' :: ArtifactsConfiguration -> VideoArtifactsConfiguration
$sel:audio:ArtifactsConfiguration' :: ArtifactsConfiguration -> AudioArtifactsConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf AudioArtifactsConfiguration
audio
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VideoArtifactsConfiguration
video
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ContentArtifactsConfiguration
content

instance Data.ToJSON ArtifactsConfiguration where
  toJSON :: ArtifactsConfiguration -> Value
toJSON ArtifactsConfiguration' {AudioArtifactsConfiguration
ContentArtifactsConfiguration
VideoArtifactsConfiguration
content :: ContentArtifactsConfiguration
video :: VideoArtifactsConfiguration
audio :: AudioArtifactsConfiguration
$sel:content:ArtifactsConfiguration' :: ArtifactsConfiguration -> ContentArtifactsConfiguration
$sel:video:ArtifactsConfiguration' :: ArtifactsConfiguration -> VideoArtifactsConfiguration
$sel:audio:ArtifactsConfiguration' :: ArtifactsConfiguration -> AudioArtifactsConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"Audio" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= AudioArtifactsConfiguration
audio),
            forall a. a -> Maybe a
Prelude.Just (Key
"Video" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= VideoArtifactsConfiguration
video),
            forall a. a -> Maybe a
Prelude.Just (Key
"Content" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ContentArtifactsConfiguration
content)
          ]
      )