{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.IoT.UpdateAccountAuditConfiguration
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Configures or reconfigures the Device Defender audit settings for this
-- account. Settings include how audit notifications are sent and which
-- audit checks are enabled or disabled.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions UpdateAccountAuditConfiguration>
-- action.
module Amazonka.IoT.UpdateAccountAuditConfiguration
  ( -- * Creating a Request
    UpdateAccountAuditConfiguration (..),
    newUpdateAccountAuditConfiguration,

    -- * Request Lenses
    updateAccountAuditConfiguration_auditCheckConfigurations,
    updateAccountAuditConfiguration_auditNotificationTargetConfigurations,
    updateAccountAuditConfiguration_roleArn,

    -- * Destructuring the Response
    UpdateAccountAuditConfigurationResponse (..),
    newUpdateAccountAuditConfigurationResponse,

    -- * Response Lenses
    updateAccountAuditConfigurationResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import Amazonka.IoT.Types
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateAccountAuditConfiguration' smart constructor.
data UpdateAccountAuditConfiguration = UpdateAccountAuditConfiguration'
  { -- | Specifies which audit checks are enabled and disabled for this account.
    -- Use @DescribeAccountAuditConfiguration@ to see the list of all checks,
    -- including those that are currently enabled.
    --
    -- Some data collection might start immediately when certain checks are
    -- enabled. When a check is disabled, any data collected so far in relation
    -- to the check is deleted.
    --
    -- You cannot disable a check if it\'s used by any scheduled audit. You
    -- must first delete the check from the scheduled audit or delete the
    -- scheduled audit itself.
    --
    -- On the first call to @UpdateAccountAuditConfiguration@, this parameter
    -- is required and must specify at least one enabled check.
    UpdateAccountAuditConfiguration
-> Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations :: Prelude.Maybe (Prelude.HashMap Prelude.Text AuditCheckConfiguration),
    -- | Information about the targets to which audit notifications are sent.
    UpdateAccountAuditConfiguration
-> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations :: Prelude.Maybe (Prelude.HashMap AuditNotificationType AuditNotificationTarget),
    -- | The Amazon Resource Name (ARN) of the role that grants permission to IoT
    -- to access information about your devices, policies, certificates, and
    -- other items as required when performing an audit.
    UpdateAccountAuditConfiguration -> Maybe Text
roleArn :: Prelude.Maybe Prelude.Text
  }
  deriving (UpdateAccountAuditConfiguration
-> UpdateAccountAuditConfiguration -> Bool
(UpdateAccountAuditConfiguration
 -> UpdateAccountAuditConfiguration -> Bool)
-> (UpdateAccountAuditConfiguration
    -> UpdateAccountAuditConfiguration -> Bool)
-> Eq UpdateAccountAuditConfiguration
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateAccountAuditConfiguration
-> UpdateAccountAuditConfiguration -> Bool
$c/= :: UpdateAccountAuditConfiguration
-> UpdateAccountAuditConfiguration -> Bool
== :: UpdateAccountAuditConfiguration
-> UpdateAccountAuditConfiguration -> Bool
$c== :: UpdateAccountAuditConfiguration
-> UpdateAccountAuditConfiguration -> Bool
Prelude.Eq, ReadPrec [UpdateAccountAuditConfiguration]
ReadPrec UpdateAccountAuditConfiguration
Int -> ReadS UpdateAccountAuditConfiguration
ReadS [UpdateAccountAuditConfiguration]
(Int -> ReadS UpdateAccountAuditConfiguration)
-> ReadS [UpdateAccountAuditConfiguration]
-> ReadPrec UpdateAccountAuditConfiguration
-> ReadPrec [UpdateAccountAuditConfiguration]
-> Read UpdateAccountAuditConfiguration
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateAccountAuditConfiguration]
$creadListPrec :: ReadPrec [UpdateAccountAuditConfiguration]
readPrec :: ReadPrec UpdateAccountAuditConfiguration
$creadPrec :: ReadPrec UpdateAccountAuditConfiguration
readList :: ReadS [UpdateAccountAuditConfiguration]
$creadList :: ReadS [UpdateAccountAuditConfiguration]
readsPrec :: Int -> ReadS UpdateAccountAuditConfiguration
$creadsPrec :: Int -> ReadS UpdateAccountAuditConfiguration
Prelude.Read, Int -> UpdateAccountAuditConfiguration -> ShowS
[UpdateAccountAuditConfiguration] -> ShowS
UpdateAccountAuditConfiguration -> String
(Int -> UpdateAccountAuditConfiguration -> ShowS)
-> (UpdateAccountAuditConfiguration -> String)
-> ([UpdateAccountAuditConfiguration] -> ShowS)
-> Show UpdateAccountAuditConfiguration
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateAccountAuditConfiguration] -> ShowS
$cshowList :: [UpdateAccountAuditConfiguration] -> ShowS
show :: UpdateAccountAuditConfiguration -> String
$cshow :: UpdateAccountAuditConfiguration -> String
showsPrec :: Int -> UpdateAccountAuditConfiguration -> ShowS
$cshowsPrec :: Int -> UpdateAccountAuditConfiguration -> ShowS
Prelude.Show, (forall x.
 UpdateAccountAuditConfiguration
 -> Rep UpdateAccountAuditConfiguration x)
-> (forall x.
    Rep UpdateAccountAuditConfiguration x
    -> UpdateAccountAuditConfiguration)
-> Generic UpdateAccountAuditConfiguration
forall x.
Rep UpdateAccountAuditConfiguration x
-> UpdateAccountAuditConfiguration
forall x.
UpdateAccountAuditConfiguration
-> Rep UpdateAccountAuditConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateAccountAuditConfiguration x
-> UpdateAccountAuditConfiguration
$cfrom :: forall x.
UpdateAccountAuditConfiguration
-> Rep UpdateAccountAuditConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'UpdateAccountAuditConfiguration' 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:
--
-- 'auditCheckConfigurations', 'updateAccountAuditConfiguration_auditCheckConfigurations' - Specifies which audit checks are enabled and disabled for this account.
-- Use @DescribeAccountAuditConfiguration@ to see the list of all checks,
-- including those that are currently enabled.
--
-- Some data collection might start immediately when certain checks are
-- enabled. When a check is disabled, any data collected so far in relation
-- to the check is deleted.
--
-- You cannot disable a check if it\'s used by any scheduled audit. You
-- must first delete the check from the scheduled audit or delete the
-- scheduled audit itself.
--
-- On the first call to @UpdateAccountAuditConfiguration@, this parameter
-- is required and must specify at least one enabled check.
--
-- 'auditNotificationTargetConfigurations', 'updateAccountAuditConfiguration_auditNotificationTargetConfigurations' - Information about the targets to which audit notifications are sent.
--
-- 'roleArn', 'updateAccountAuditConfiguration_roleArn' - The Amazon Resource Name (ARN) of the role that grants permission to IoT
-- to access information about your devices, policies, certificates, and
-- other items as required when performing an audit.
newUpdateAccountAuditConfiguration ::
  UpdateAccountAuditConfiguration
newUpdateAccountAuditConfiguration :: UpdateAccountAuditConfiguration
newUpdateAccountAuditConfiguration =
  UpdateAccountAuditConfiguration' :: Maybe (HashMap Text AuditCheckConfiguration)
-> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
-> Maybe Text
-> UpdateAccountAuditConfiguration
UpdateAccountAuditConfiguration'
    { $sel:auditCheckConfigurations:UpdateAccountAuditConfiguration' :: Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations =
        Maybe (HashMap Text AuditCheckConfiguration)
forall a. Maybe a
Prelude.Nothing,
      $sel:auditNotificationTargetConfigurations:UpdateAccountAuditConfiguration' :: Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations =
        Maybe (HashMap AuditNotificationType AuditNotificationTarget)
forall a. Maybe a
Prelude.Nothing,
      $sel:roleArn:UpdateAccountAuditConfiguration' :: Maybe Text
roleArn = Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | Specifies which audit checks are enabled and disabled for this account.
-- Use @DescribeAccountAuditConfiguration@ to see the list of all checks,
-- including those that are currently enabled.
--
-- Some data collection might start immediately when certain checks are
-- enabled. When a check is disabled, any data collected so far in relation
-- to the check is deleted.
--
-- You cannot disable a check if it\'s used by any scheduled audit. You
-- must first delete the check from the scheduled audit or delete the
-- scheduled audit itself.
--
-- On the first call to @UpdateAccountAuditConfiguration@, this parameter
-- is required and must specify at least one enabled check.
updateAccountAuditConfiguration_auditCheckConfigurations :: Lens.Lens' UpdateAccountAuditConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text AuditCheckConfiguration))
updateAccountAuditConfiguration_auditCheckConfigurations :: (Maybe (HashMap Text AuditCheckConfiguration)
 -> f (Maybe (HashMap Text AuditCheckConfiguration)))
-> UpdateAccountAuditConfiguration
-> f UpdateAccountAuditConfiguration
updateAccountAuditConfiguration_auditCheckConfigurations = (UpdateAccountAuditConfiguration
 -> Maybe (HashMap Text AuditCheckConfiguration))
-> (UpdateAccountAuditConfiguration
    -> Maybe (HashMap Text AuditCheckConfiguration)
    -> UpdateAccountAuditConfiguration)
-> Lens
     UpdateAccountAuditConfiguration
     UpdateAccountAuditConfiguration
     (Maybe (HashMap Text AuditCheckConfiguration))
     (Maybe (HashMap Text AuditCheckConfiguration))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAccountAuditConfiguration' {Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations :: Maybe (HashMap Text AuditCheckConfiguration)
$sel:auditCheckConfigurations:UpdateAccountAuditConfiguration' :: UpdateAccountAuditConfiguration
-> Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations} -> Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations) (\s :: UpdateAccountAuditConfiguration
s@UpdateAccountAuditConfiguration' {} Maybe (HashMap Text AuditCheckConfiguration)
a -> UpdateAccountAuditConfiguration
s {$sel:auditCheckConfigurations:UpdateAccountAuditConfiguration' :: Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations = Maybe (HashMap Text AuditCheckConfiguration)
a} :: UpdateAccountAuditConfiguration) ((Maybe (HashMap Text AuditCheckConfiguration)
  -> f (Maybe (HashMap Text AuditCheckConfiguration)))
 -> UpdateAccountAuditConfiguration
 -> f UpdateAccountAuditConfiguration)
-> ((Maybe (HashMap Text AuditCheckConfiguration)
     -> f (Maybe (HashMap Text AuditCheckConfiguration)))
    -> Maybe (HashMap Text AuditCheckConfiguration)
    -> f (Maybe (HashMap Text AuditCheckConfiguration)))
-> (Maybe (HashMap Text AuditCheckConfiguration)
    -> f (Maybe (HashMap Text AuditCheckConfiguration)))
-> UpdateAccountAuditConfiguration
-> f UpdateAccountAuditConfiguration
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (HashMap Text AuditCheckConfiguration)
  (HashMap Text AuditCheckConfiguration)
  (HashMap Text AuditCheckConfiguration)
  (HashMap Text AuditCheckConfiguration)
-> Iso
     (Maybe (HashMap Text AuditCheckConfiguration))
     (Maybe (HashMap Text AuditCheckConfiguration))
     (Maybe (HashMap Text AuditCheckConfiguration))
     (Maybe (HashMap Text AuditCheckConfiguration))
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  (HashMap Text AuditCheckConfiguration)
  (HashMap Text AuditCheckConfiguration)
  (HashMap Text AuditCheckConfiguration)
  (HashMap Text AuditCheckConfiguration)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Information about the targets to which audit notifications are sent.
updateAccountAuditConfiguration_auditNotificationTargetConfigurations :: Lens.Lens' UpdateAccountAuditConfiguration (Prelude.Maybe (Prelude.HashMap AuditNotificationType AuditNotificationTarget))
updateAccountAuditConfiguration_auditNotificationTargetConfigurations :: (Maybe (HashMap AuditNotificationType AuditNotificationTarget)
 -> f (Maybe
         (HashMap AuditNotificationType AuditNotificationTarget)))
-> UpdateAccountAuditConfiguration
-> f UpdateAccountAuditConfiguration
updateAccountAuditConfiguration_auditNotificationTargetConfigurations = (UpdateAccountAuditConfiguration
 -> Maybe (HashMap AuditNotificationType AuditNotificationTarget))
-> (UpdateAccountAuditConfiguration
    -> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
    -> UpdateAccountAuditConfiguration)
-> Lens
     UpdateAccountAuditConfiguration
     UpdateAccountAuditConfiguration
     (Maybe (HashMap AuditNotificationType AuditNotificationTarget))
     (Maybe (HashMap AuditNotificationType AuditNotificationTarget))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAccountAuditConfiguration' {Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations :: Maybe (HashMap AuditNotificationType AuditNotificationTarget)
$sel:auditNotificationTargetConfigurations:UpdateAccountAuditConfiguration' :: UpdateAccountAuditConfiguration
-> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations} -> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations) (\s :: UpdateAccountAuditConfiguration
s@UpdateAccountAuditConfiguration' {} Maybe (HashMap AuditNotificationType AuditNotificationTarget)
a -> UpdateAccountAuditConfiguration
s {$sel:auditNotificationTargetConfigurations:UpdateAccountAuditConfiguration' :: Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations = Maybe (HashMap AuditNotificationType AuditNotificationTarget)
a} :: UpdateAccountAuditConfiguration) ((Maybe (HashMap AuditNotificationType AuditNotificationTarget)
  -> f (Maybe
          (HashMap AuditNotificationType AuditNotificationTarget)))
 -> UpdateAccountAuditConfiguration
 -> f UpdateAccountAuditConfiguration)
-> ((Maybe (HashMap AuditNotificationType AuditNotificationTarget)
     -> f (Maybe
             (HashMap AuditNotificationType AuditNotificationTarget)))
    -> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
    -> f (Maybe
            (HashMap AuditNotificationType AuditNotificationTarget)))
-> (Maybe (HashMap AuditNotificationType AuditNotificationTarget)
    -> f (Maybe
            (HashMap AuditNotificationType AuditNotificationTarget)))
-> UpdateAccountAuditConfiguration
-> f UpdateAccountAuditConfiguration
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (HashMap AuditNotificationType AuditNotificationTarget)
  (HashMap AuditNotificationType AuditNotificationTarget)
  (HashMap AuditNotificationType AuditNotificationTarget)
  (HashMap AuditNotificationType AuditNotificationTarget)
-> Iso
     (Maybe (HashMap AuditNotificationType AuditNotificationTarget))
     (Maybe (HashMap AuditNotificationType AuditNotificationTarget))
     (Maybe (HashMap AuditNotificationType AuditNotificationTarget))
     (Maybe (HashMap AuditNotificationType AuditNotificationTarget))
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  (HashMap AuditNotificationType AuditNotificationTarget)
  (HashMap AuditNotificationType AuditNotificationTarget)
  (HashMap AuditNotificationType AuditNotificationTarget)
  (HashMap AuditNotificationType AuditNotificationTarget)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Amazon Resource Name (ARN) of the role that grants permission to IoT
-- to access information about your devices, policies, certificates, and
-- other items as required when performing an audit.
updateAccountAuditConfiguration_roleArn :: Lens.Lens' UpdateAccountAuditConfiguration (Prelude.Maybe Prelude.Text)
updateAccountAuditConfiguration_roleArn :: (Maybe Text -> f (Maybe Text))
-> UpdateAccountAuditConfiguration
-> f UpdateAccountAuditConfiguration
updateAccountAuditConfiguration_roleArn = (UpdateAccountAuditConfiguration -> Maybe Text)
-> (UpdateAccountAuditConfiguration
    -> Maybe Text -> UpdateAccountAuditConfiguration)
-> Lens
     UpdateAccountAuditConfiguration
     UpdateAccountAuditConfiguration
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAccountAuditConfiguration' {Maybe Text
roleArn :: Maybe Text
$sel:roleArn:UpdateAccountAuditConfiguration' :: UpdateAccountAuditConfiguration -> Maybe Text
roleArn} -> Maybe Text
roleArn) (\s :: UpdateAccountAuditConfiguration
s@UpdateAccountAuditConfiguration' {} Maybe Text
a -> UpdateAccountAuditConfiguration
s {$sel:roleArn:UpdateAccountAuditConfiguration' :: Maybe Text
roleArn = Maybe Text
a} :: UpdateAccountAuditConfiguration)

instance
  Core.AWSRequest
    UpdateAccountAuditConfiguration
  where
  type
    AWSResponse UpdateAccountAuditConfiguration =
      UpdateAccountAuditConfigurationResponse
  request :: UpdateAccountAuditConfiguration
-> Request UpdateAccountAuditConfiguration
request = Service
-> UpdateAccountAuditConfiguration
-> Request UpdateAccountAuditConfiguration
forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.patchJSON Service
defaultService
  response :: Logger
-> Service
-> Proxy UpdateAccountAuditConfiguration
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse UpdateAccountAuditConfiguration)))
response =
    (Int
 -> ResponseHeaders
 -> ()
 -> Either String (AWSResponse UpdateAccountAuditConfiguration))
-> Logger
-> Service
-> Proxy UpdateAccountAuditConfiguration
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse UpdateAccountAuditConfiguration)))
forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> UpdateAccountAuditConfigurationResponse
UpdateAccountAuditConfigurationResponse'
            (Int -> UpdateAccountAuditConfigurationResponse)
-> Either String Int
-> Either String UpdateAccountAuditConfigurationResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    UpdateAccountAuditConfiguration

instance
  Prelude.NFData
    UpdateAccountAuditConfiguration

instance
  Core.ToHeaders
    UpdateAccountAuditConfiguration
  where
  toHeaders :: UpdateAccountAuditConfiguration -> ResponseHeaders
toHeaders = ResponseHeaders
-> UpdateAccountAuditConfiguration -> ResponseHeaders
forall a b. a -> b -> a
Prelude.const ResponseHeaders
forall a. Monoid a => a
Prelude.mempty

instance Core.ToJSON UpdateAccountAuditConfiguration where
  toJSON :: UpdateAccountAuditConfiguration -> Value
toJSON UpdateAccountAuditConfiguration' {Maybe Text
Maybe (HashMap Text AuditCheckConfiguration)
Maybe (HashMap AuditNotificationType AuditNotificationTarget)
roleArn :: Maybe Text
auditNotificationTargetConfigurations :: Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditCheckConfigurations :: Maybe (HashMap Text AuditCheckConfiguration)
$sel:roleArn:UpdateAccountAuditConfiguration' :: UpdateAccountAuditConfiguration -> Maybe Text
$sel:auditNotificationTargetConfigurations:UpdateAccountAuditConfiguration' :: UpdateAccountAuditConfiguration
-> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
$sel:auditCheckConfigurations:UpdateAccountAuditConfiguration' :: UpdateAccountAuditConfiguration
-> Maybe (HashMap Text AuditCheckConfiguration)
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"auditCheckConfigurations" Text -> HashMap Text AuditCheckConfiguration -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (HashMap Text AuditCheckConfiguration -> Pair)
-> Maybe (HashMap Text AuditCheckConfiguration) -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text AuditCheckConfiguration)
auditCheckConfigurations,
            (Text
"auditNotificationTargetConfigurations" Text
-> HashMap AuditNotificationType AuditNotificationTarget -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (HashMap AuditNotificationType AuditNotificationTarget -> Pair)
-> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
-> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap AuditNotificationType AuditNotificationTarget)
auditNotificationTargetConfigurations,
            (Text
"roleArn" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
roleArn
          ]
      )

instance Core.ToPath UpdateAccountAuditConfiguration where
  toPath :: UpdateAccountAuditConfiguration -> ByteString
toPath = ByteString -> UpdateAccountAuditConfiguration -> ByteString
forall a b. a -> b -> a
Prelude.const ByteString
"/audit/configuration"

instance Core.ToQuery UpdateAccountAuditConfiguration where
  toQuery :: UpdateAccountAuditConfiguration -> QueryString
toQuery = QueryString -> UpdateAccountAuditConfiguration -> QueryString
forall a b. a -> b -> a
Prelude.const QueryString
forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newUpdateAccountAuditConfigurationResponse' smart constructor.
data UpdateAccountAuditConfigurationResponse = UpdateAccountAuditConfigurationResponse'
  { -- | The response's http status code.
    UpdateAccountAuditConfigurationResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateAccountAuditConfigurationResponse
-> UpdateAccountAuditConfigurationResponse -> Bool
(UpdateAccountAuditConfigurationResponse
 -> UpdateAccountAuditConfigurationResponse -> Bool)
-> (UpdateAccountAuditConfigurationResponse
    -> UpdateAccountAuditConfigurationResponse -> Bool)
-> Eq UpdateAccountAuditConfigurationResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateAccountAuditConfigurationResponse
-> UpdateAccountAuditConfigurationResponse -> Bool
$c/= :: UpdateAccountAuditConfigurationResponse
-> UpdateAccountAuditConfigurationResponse -> Bool
== :: UpdateAccountAuditConfigurationResponse
-> UpdateAccountAuditConfigurationResponse -> Bool
$c== :: UpdateAccountAuditConfigurationResponse
-> UpdateAccountAuditConfigurationResponse -> Bool
Prelude.Eq, ReadPrec [UpdateAccountAuditConfigurationResponse]
ReadPrec UpdateAccountAuditConfigurationResponse
Int -> ReadS UpdateAccountAuditConfigurationResponse
ReadS [UpdateAccountAuditConfigurationResponse]
(Int -> ReadS UpdateAccountAuditConfigurationResponse)
-> ReadS [UpdateAccountAuditConfigurationResponse]
-> ReadPrec UpdateAccountAuditConfigurationResponse
-> ReadPrec [UpdateAccountAuditConfigurationResponse]
-> Read UpdateAccountAuditConfigurationResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateAccountAuditConfigurationResponse]
$creadListPrec :: ReadPrec [UpdateAccountAuditConfigurationResponse]
readPrec :: ReadPrec UpdateAccountAuditConfigurationResponse
$creadPrec :: ReadPrec UpdateAccountAuditConfigurationResponse
readList :: ReadS [UpdateAccountAuditConfigurationResponse]
$creadList :: ReadS [UpdateAccountAuditConfigurationResponse]
readsPrec :: Int -> ReadS UpdateAccountAuditConfigurationResponse
$creadsPrec :: Int -> ReadS UpdateAccountAuditConfigurationResponse
Prelude.Read, Int -> UpdateAccountAuditConfigurationResponse -> ShowS
[UpdateAccountAuditConfigurationResponse] -> ShowS
UpdateAccountAuditConfigurationResponse -> String
(Int -> UpdateAccountAuditConfigurationResponse -> ShowS)
-> (UpdateAccountAuditConfigurationResponse -> String)
-> ([UpdateAccountAuditConfigurationResponse] -> ShowS)
-> Show UpdateAccountAuditConfigurationResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateAccountAuditConfigurationResponse] -> ShowS
$cshowList :: [UpdateAccountAuditConfigurationResponse] -> ShowS
show :: UpdateAccountAuditConfigurationResponse -> String
$cshow :: UpdateAccountAuditConfigurationResponse -> String
showsPrec :: Int -> UpdateAccountAuditConfigurationResponse -> ShowS
$cshowsPrec :: Int -> UpdateAccountAuditConfigurationResponse -> ShowS
Prelude.Show, (forall x.
 UpdateAccountAuditConfigurationResponse
 -> Rep UpdateAccountAuditConfigurationResponse x)
-> (forall x.
    Rep UpdateAccountAuditConfigurationResponse x
    -> UpdateAccountAuditConfigurationResponse)
-> Generic UpdateAccountAuditConfigurationResponse
forall x.
Rep UpdateAccountAuditConfigurationResponse x
-> UpdateAccountAuditConfigurationResponse
forall x.
UpdateAccountAuditConfigurationResponse
-> Rep UpdateAccountAuditConfigurationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateAccountAuditConfigurationResponse x
-> UpdateAccountAuditConfigurationResponse
$cfrom :: forall x.
UpdateAccountAuditConfigurationResponse
-> Rep UpdateAccountAuditConfigurationResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateAccountAuditConfigurationResponse' 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:
--
-- 'httpStatus', 'updateAccountAuditConfigurationResponse_httpStatus' - The response's http status code.
newUpdateAccountAuditConfigurationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateAccountAuditConfigurationResponse
newUpdateAccountAuditConfigurationResponse :: Int -> UpdateAccountAuditConfigurationResponse
newUpdateAccountAuditConfigurationResponse
  Int
pHttpStatus_ =
    UpdateAccountAuditConfigurationResponse' :: Int -> UpdateAccountAuditConfigurationResponse
UpdateAccountAuditConfigurationResponse'
      { $sel:httpStatus:UpdateAccountAuditConfigurationResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

-- | The response's http status code.
updateAccountAuditConfigurationResponse_httpStatus :: Lens.Lens' UpdateAccountAuditConfigurationResponse Prelude.Int
updateAccountAuditConfigurationResponse_httpStatus :: (Int -> f Int)
-> UpdateAccountAuditConfigurationResponse
-> f UpdateAccountAuditConfigurationResponse
updateAccountAuditConfigurationResponse_httpStatus = (UpdateAccountAuditConfigurationResponse -> Int)
-> (UpdateAccountAuditConfigurationResponse
    -> Int -> UpdateAccountAuditConfigurationResponse)
-> Lens
     UpdateAccountAuditConfigurationResponse
     UpdateAccountAuditConfigurationResponse
     Int
     Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateAccountAuditConfigurationResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateAccountAuditConfigurationResponse' :: UpdateAccountAuditConfigurationResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: UpdateAccountAuditConfigurationResponse
s@UpdateAccountAuditConfigurationResponse' {} Int
a -> UpdateAccountAuditConfigurationResponse
s {$sel:httpStatus:UpdateAccountAuditConfigurationResponse' :: Int
httpStatus = Int
a} :: UpdateAccountAuditConfigurationResponse)

instance
  Prelude.NFData
    UpdateAccountAuditConfigurationResponse