{-# 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.AppMesh.Types.ListenerTlsCertificate
-- 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.AppMesh.Types.ListenerTlsCertificate where

import Amazonka.AppMesh.Types.ListenerTlsAcmCertificate
import Amazonka.AppMesh.Types.ListenerTlsFileCertificate
import Amazonka.AppMesh.Types.ListenerTlsSdsCertificate
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

-- | An object that represents a listener\'s Transport Layer Security (TLS)
-- certificate.
--
-- /See:/ 'newListenerTlsCertificate' smart constructor.
data ListenerTlsCertificate = ListenerTlsCertificate'
  { -- | A reference to an object that represents an Certificate Manager
    -- certificate.
    ListenerTlsCertificate -> Maybe ListenerTlsAcmCertificate
acm :: Prelude.Maybe ListenerTlsAcmCertificate,
    -- | A reference to an object that represents a local file certificate.
    ListenerTlsCertificate -> Maybe ListenerTlsFileCertificate
file :: Prelude.Maybe ListenerTlsFileCertificate,
    -- | A reference to an object that represents a listener\'s Secret Discovery
    -- Service certificate.
    ListenerTlsCertificate -> Maybe ListenerTlsSdsCertificate
sds :: Prelude.Maybe ListenerTlsSdsCertificate
  }
  deriving (ListenerTlsCertificate -> ListenerTlsCertificate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListenerTlsCertificate -> ListenerTlsCertificate -> Bool
$c/= :: ListenerTlsCertificate -> ListenerTlsCertificate -> Bool
== :: ListenerTlsCertificate -> ListenerTlsCertificate -> Bool
$c== :: ListenerTlsCertificate -> ListenerTlsCertificate -> Bool
Prelude.Eq, ReadPrec [ListenerTlsCertificate]
ReadPrec ListenerTlsCertificate
Int -> ReadS ListenerTlsCertificate
ReadS [ListenerTlsCertificate]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListenerTlsCertificate]
$creadListPrec :: ReadPrec [ListenerTlsCertificate]
readPrec :: ReadPrec ListenerTlsCertificate
$creadPrec :: ReadPrec ListenerTlsCertificate
readList :: ReadS [ListenerTlsCertificate]
$creadList :: ReadS [ListenerTlsCertificate]
readsPrec :: Int -> ReadS ListenerTlsCertificate
$creadsPrec :: Int -> ReadS ListenerTlsCertificate
Prelude.Read, Int -> ListenerTlsCertificate -> ShowS
[ListenerTlsCertificate] -> ShowS
ListenerTlsCertificate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListenerTlsCertificate] -> ShowS
$cshowList :: [ListenerTlsCertificate] -> ShowS
show :: ListenerTlsCertificate -> String
$cshow :: ListenerTlsCertificate -> String
showsPrec :: Int -> ListenerTlsCertificate -> ShowS
$cshowsPrec :: Int -> ListenerTlsCertificate -> ShowS
Prelude.Show, forall x. Rep ListenerTlsCertificate x -> ListenerTlsCertificate
forall x. ListenerTlsCertificate -> Rep ListenerTlsCertificate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ListenerTlsCertificate x -> ListenerTlsCertificate
$cfrom :: forall x. ListenerTlsCertificate -> Rep ListenerTlsCertificate x
Prelude.Generic)

-- |
-- Create a value of 'ListenerTlsCertificate' 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:
--
-- 'acm', 'listenerTlsCertificate_acm' - A reference to an object that represents an Certificate Manager
-- certificate.
--
-- 'file', 'listenerTlsCertificate_file' - A reference to an object that represents a local file certificate.
--
-- 'sds', 'listenerTlsCertificate_sds' - A reference to an object that represents a listener\'s Secret Discovery
-- Service certificate.
newListenerTlsCertificate ::
  ListenerTlsCertificate
newListenerTlsCertificate :: ListenerTlsCertificate
newListenerTlsCertificate =
  ListenerTlsCertificate'
    { $sel:acm:ListenerTlsCertificate' :: Maybe ListenerTlsAcmCertificate
acm = forall a. Maybe a
Prelude.Nothing,
      $sel:file:ListenerTlsCertificate' :: Maybe ListenerTlsFileCertificate
file = forall a. Maybe a
Prelude.Nothing,
      $sel:sds:ListenerTlsCertificate' :: Maybe ListenerTlsSdsCertificate
sds = forall a. Maybe a
Prelude.Nothing
    }

-- | A reference to an object that represents an Certificate Manager
-- certificate.
listenerTlsCertificate_acm :: Lens.Lens' ListenerTlsCertificate (Prelude.Maybe ListenerTlsAcmCertificate)
listenerTlsCertificate_acm :: Lens' ListenerTlsCertificate (Maybe ListenerTlsAcmCertificate)
listenerTlsCertificate_acm = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListenerTlsCertificate' {Maybe ListenerTlsAcmCertificate
acm :: Maybe ListenerTlsAcmCertificate
$sel:acm:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsAcmCertificate
acm} -> Maybe ListenerTlsAcmCertificate
acm) (\s :: ListenerTlsCertificate
s@ListenerTlsCertificate' {} Maybe ListenerTlsAcmCertificate
a -> ListenerTlsCertificate
s {$sel:acm:ListenerTlsCertificate' :: Maybe ListenerTlsAcmCertificate
acm = Maybe ListenerTlsAcmCertificate
a} :: ListenerTlsCertificate)

-- | A reference to an object that represents a local file certificate.
listenerTlsCertificate_file :: Lens.Lens' ListenerTlsCertificate (Prelude.Maybe ListenerTlsFileCertificate)
listenerTlsCertificate_file :: Lens' ListenerTlsCertificate (Maybe ListenerTlsFileCertificate)
listenerTlsCertificate_file = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListenerTlsCertificate' {Maybe ListenerTlsFileCertificate
file :: Maybe ListenerTlsFileCertificate
$sel:file:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsFileCertificate
file} -> Maybe ListenerTlsFileCertificate
file) (\s :: ListenerTlsCertificate
s@ListenerTlsCertificate' {} Maybe ListenerTlsFileCertificate
a -> ListenerTlsCertificate
s {$sel:file:ListenerTlsCertificate' :: Maybe ListenerTlsFileCertificate
file = Maybe ListenerTlsFileCertificate
a} :: ListenerTlsCertificate)

-- | A reference to an object that represents a listener\'s Secret Discovery
-- Service certificate.
listenerTlsCertificate_sds :: Lens.Lens' ListenerTlsCertificate (Prelude.Maybe ListenerTlsSdsCertificate)
listenerTlsCertificate_sds :: Lens' ListenerTlsCertificate (Maybe ListenerTlsSdsCertificate)
listenerTlsCertificate_sds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListenerTlsCertificate' {Maybe ListenerTlsSdsCertificate
sds :: Maybe ListenerTlsSdsCertificate
$sel:sds:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsSdsCertificate
sds} -> Maybe ListenerTlsSdsCertificate
sds) (\s :: ListenerTlsCertificate
s@ListenerTlsCertificate' {} Maybe ListenerTlsSdsCertificate
a -> ListenerTlsCertificate
s {$sel:sds:ListenerTlsCertificate' :: Maybe ListenerTlsSdsCertificate
sds = Maybe ListenerTlsSdsCertificate
a} :: ListenerTlsCertificate)

instance Data.FromJSON ListenerTlsCertificate where
  parseJSON :: Value -> Parser ListenerTlsCertificate
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ListenerTlsCertificate"
      ( \Object
x ->
          Maybe ListenerTlsAcmCertificate
-> Maybe ListenerTlsFileCertificate
-> Maybe ListenerTlsSdsCertificate
-> ListenerTlsCertificate
ListenerTlsCertificate'
            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
"acm")
            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
"file")
            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
"sds")
      )

instance Prelude.Hashable ListenerTlsCertificate where
  hashWithSalt :: Int -> ListenerTlsCertificate -> Int
hashWithSalt Int
_salt ListenerTlsCertificate' {Maybe ListenerTlsAcmCertificate
Maybe ListenerTlsFileCertificate
Maybe ListenerTlsSdsCertificate
sds :: Maybe ListenerTlsSdsCertificate
file :: Maybe ListenerTlsFileCertificate
acm :: Maybe ListenerTlsAcmCertificate
$sel:sds:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsSdsCertificate
$sel:file:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsFileCertificate
$sel:acm:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsAcmCertificate
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ListenerTlsAcmCertificate
acm
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ListenerTlsFileCertificate
file
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ListenerTlsSdsCertificate
sds

instance Prelude.NFData ListenerTlsCertificate where
  rnf :: ListenerTlsCertificate -> ()
rnf ListenerTlsCertificate' {Maybe ListenerTlsAcmCertificate
Maybe ListenerTlsFileCertificate
Maybe ListenerTlsSdsCertificate
sds :: Maybe ListenerTlsSdsCertificate
file :: Maybe ListenerTlsFileCertificate
acm :: Maybe ListenerTlsAcmCertificate
$sel:sds:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsSdsCertificate
$sel:file:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsFileCertificate
$sel:acm:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsAcmCertificate
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ListenerTlsAcmCertificate
acm
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ListenerTlsFileCertificate
file
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ListenerTlsSdsCertificate
sds

instance Data.ToJSON ListenerTlsCertificate where
  toJSON :: ListenerTlsCertificate -> Value
toJSON ListenerTlsCertificate' {Maybe ListenerTlsAcmCertificate
Maybe ListenerTlsFileCertificate
Maybe ListenerTlsSdsCertificate
sds :: Maybe ListenerTlsSdsCertificate
file :: Maybe ListenerTlsFileCertificate
acm :: Maybe ListenerTlsAcmCertificate
$sel:sds:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsSdsCertificate
$sel:file:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsFileCertificate
$sel:acm:ListenerTlsCertificate' :: ListenerTlsCertificate -> Maybe ListenerTlsAcmCertificate
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"acm" 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 ListenerTlsAcmCertificate
acm,
            (Key
"file" 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 ListenerTlsFileCertificate
file,
            (Key
"sds" 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 ListenerTlsSdsCertificate
sds
          ]
      )