{-# 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.WorkMail.DeleteMobileDeviceAccessOverride
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes the mobile device access override for the given WorkMail
-- organization, user, and device.
--
-- Deleting already deleted and non-existing overrides does not produce an
-- error. In those cases, the service sends back an HTTP 200 response with
-- an empty HTTP body.
module Amazonka.WorkMail.DeleteMobileDeviceAccessOverride
  ( -- * Creating a Request
    DeleteMobileDeviceAccessOverride (..),
    newDeleteMobileDeviceAccessOverride,

    -- * Request Lenses
    deleteMobileDeviceAccessOverride_organizationId,
    deleteMobileDeviceAccessOverride_userId,
    deleteMobileDeviceAccessOverride_deviceId,

    -- * Destructuring the Response
    DeleteMobileDeviceAccessOverrideResponse (..),
    newDeleteMobileDeviceAccessOverrideResponse,

    -- * Response Lenses
    deleteMobileDeviceAccessOverrideResponse_httpStatus,
  )
where

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
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.WorkMail.Types

-- | /See:/ 'newDeleteMobileDeviceAccessOverride' smart constructor.
data DeleteMobileDeviceAccessOverride = DeleteMobileDeviceAccessOverride'
  { -- | The WorkMail organization for which the access override will be deleted.
    DeleteMobileDeviceAccessOverride -> Text
organizationId :: Prelude.Text,
    -- | The WorkMail user for which you want to delete the override. Accepts the
    -- following types of user identities:
    --
    -- -   User ID: @12345678-1234-1234-1234-123456789012@ or
    --     @S-1-1-12-1234567890-123456789-123456789-1234@
    --
    -- -   Email address: @user\@domain.tld@
    --
    -- -   User name: @user@
    DeleteMobileDeviceAccessOverride -> Text
userId :: Prelude.Text,
    -- | The mobile device for which you delete the override. @DeviceId@ is case
    -- insensitive.
    DeleteMobileDeviceAccessOverride -> Text
deviceId :: Prelude.Text
  }
  deriving (DeleteMobileDeviceAccessOverride
-> DeleteMobileDeviceAccessOverride -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteMobileDeviceAccessOverride
-> DeleteMobileDeviceAccessOverride -> Bool
$c/= :: DeleteMobileDeviceAccessOverride
-> DeleteMobileDeviceAccessOverride -> Bool
== :: DeleteMobileDeviceAccessOverride
-> DeleteMobileDeviceAccessOverride -> Bool
$c== :: DeleteMobileDeviceAccessOverride
-> DeleteMobileDeviceAccessOverride -> Bool
Prelude.Eq, ReadPrec [DeleteMobileDeviceAccessOverride]
ReadPrec DeleteMobileDeviceAccessOverride
Int -> ReadS DeleteMobileDeviceAccessOverride
ReadS [DeleteMobileDeviceAccessOverride]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteMobileDeviceAccessOverride]
$creadListPrec :: ReadPrec [DeleteMobileDeviceAccessOverride]
readPrec :: ReadPrec DeleteMobileDeviceAccessOverride
$creadPrec :: ReadPrec DeleteMobileDeviceAccessOverride
readList :: ReadS [DeleteMobileDeviceAccessOverride]
$creadList :: ReadS [DeleteMobileDeviceAccessOverride]
readsPrec :: Int -> ReadS DeleteMobileDeviceAccessOverride
$creadsPrec :: Int -> ReadS DeleteMobileDeviceAccessOverride
Prelude.Read, Int -> DeleteMobileDeviceAccessOverride -> ShowS
[DeleteMobileDeviceAccessOverride] -> ShowS
DeleteMobileDeviceAccessOverride -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteMobileDeviceAccessOverride] -> ShowS
$cshowList :: [DeleteMobileDeviceAccessOverride] -> ShowS
show :: DeleteMobileDeviceAccessOverride -> String
$cshow :: DeleteMobileDeviceAccessOverride -> String
showsPrec :: Int -> DeleteMobileDeviceAccessOverride -> ShowS
$cshowsPrec :: Int -> DeleteMobileDeviceAccessOverride -> ShowS
Prelude.Show, forall x.
Rep DeleteMobileDeviceAccessOverride x
-> DeleteMobileDeviceAccessOverride
forall x.
DeleteMobileDeviceAccessOverride
-> Rep DeleteMobileDeviceAccessOverride x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteMobileDeviceAccessOverride x
-> DeleteMobileDeviceAccessOverride
$cfrom :: forall x.
DeleteMobileDeviceAccessOverride
-> Rep DeleteMobileDeviceAccessOverride x
Prelude.Generic)

-- |
-- Create a value of 'DeleteMobileDeviceAccessOverride' 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:
--
-- 'organizationId', 'deleteMobileDeviceAccessOverride_organizationId' - The WorkMail organization for which the access override will be deleted.
--
-- 'userId', 'deleteMobileDeviceAccessOverride_userId' - The WorkMail user for which you want to delete the override. Accepts the
-- following types of user identities:
--
-- -   User ID: @12345678-1234-1234-1234-123456789012@ or
--     @S-1-1-12-1234567890-123456789-123456789-1234@
--
-- -   Email address: @user\@domain.tld@
--
-- -   User name: @user@
--
-- 'deviceId', 'deleteMobileDeviceAccessOverride_deviceId' - The mobile device for which you delete the override. @DeviceId@ is case
-- insensitive.
newDeleteMobileDeviceAccessOverride ::
  -- | 'organizationId'
  Prelude.Text ->
  -- | 'userId'
  Prelude.Text ->
  -- | 'deviceId'
  Prelude.Text ->
  DeleteMobileDeviceAccessOverride
newDeleteMobileDeviceAccessOverride :: Text -> Text -> Text -> DeleteMobileDeviceAccessOverride
newDeleteMobileDeviceAccessOverride
  Text
pOrganizationId_
  Text
pUserId_
  Text
pDeviceId_ =
    DeleteMobileDeviceAccessOverride'
      { $sel:organizationId:DeleteMobileDeviceAccessOverride' :: Text
organizationId =
          Text
pOrganizationId_,
        $sel:userId:DeleteMobileDeviceAccessOverride' :: Text
userId = Text
pUserId_,
        $sel:deviceId:DeleteMobileDeviceAccessOverride' :: Text
deviceId = Text
pDeviceId_
      }

-- | The WorkMail organization for which the access override will be deleted.
deleteMobileDeviceAccessOverride_organizationId :: Lens.Lens' DeleteMobileDeviceAccessOverride Prelude.Text
deleteMobileDeviceAccessOverride_organizationId :: Lens' DeleteMobileDeviceAccessOverride Text
deleteMobileDeviceAccessOverride_organizationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteMobileDeviceAccessOverride' {Text
organizationId :: Text
$sel:organizationId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
organizationId} -> Text
organizationId) (\s :: DeleteMobileDeviceAccessOverride
s@DeleteMobileDeviceAccessOverride' {} Text
a -> DeleteMobileDeviceAccessOverride
s {$sel:organizationId:DeleteMobileDeviceAccessOverride' :: Text
organizationId = Text
a} :: DeleteMobileDeviceAccessOverride)

-- | The WorkMail user for which you want to delete the override. Accepts the
-- following types of user identities:
--
-- -   User ID: @12345678-1234-1234-1234-123456789012@ or
--     @S-1-1-12-1234567890-123456789-123456789-1234@
--
-- -   Email address: @user\@domain.tld@
--
-- -   User name: @user@
deleteMobileDeviceAccessOverride_userId :: Lens.Lens' DeleteMobileDeviceAccessOverride Prelude.Text
deleteMobileDeviceAccessOverride_userId :: Lens' DeleteMobileDeviceAccessOverride Text
deleteMobileDeviceAccessOverride_userId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteMobileDeviceAccessOverride' {Text
userId :: Text
$sel:userId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
userId} -> Text
userId) (\s :: DeleteMobileDeviceAccessOverride
s@DeleteMobileDeviceAccessOverride' {} Text
a -> DeleteMobileDeviceAccessOverride
s {$sel:userId:DeleteMobileDeviceAccessOverride' :: Text
userId = Text
a} :: DeleteMobileDeviceAccessOverride)

-- | The mobile device for which you delete the override. @DeviceId@ is case
-- insensitive.
deleteMobileDeviceAccessOverride_deviceId :: Lens.Lens' DeleteMobileDeviceAccessOverride Prelude.Text
deleteMobileDeviceAccessOverride_deviceId :: Lens' DeleteMobileDeviceAccessOverride Text
deleteMobileDeviceAccessOverride_deviceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteMobileDeviceAccessOverride' {Text
deviceId :: Text
$sel:deviceId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
deviceId} -> Text
deviceId) (\s :: DeleteMobileDeviceAccessOverride
s@DeleteMobileDeviceAccessOverride' {} Text
a -> DeleteMobileDeviceAccessOverride
s {$sel:deviceId:DeleteMobileDeviceAccessOverride' :: Text
deviceId = Text
a} :: DeleteMobileDeviceAccessOverride)

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

instance
  Prelude.Hashable
    DeleteMobileDeviceAccessOverride
  where
  hashWithSalt :: Int -> DeleteMobileDeviceAccessOverride -> Int
hashWithSalt
    Int
_salt
    DeleteMobileDeviceAccessOverride' {Text
deviceId :: Text
userId :: Text
organizationId :: Text
$sel:deviceId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
$sel:userId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
$sel:organizationId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
organizationId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
userId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deviceId

instance
  Prelude.NFData
    DeleteMobileDeviceAccessOverride
  where
  rnf :: DeleteMobileDeviceAccessOverride -> ()
rnf DeleteMobileDeviceAccessOverride' {Text
deviceId :: Text
userId :: Text
organizationId :: Text
$sel:deviceId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
$sel:userId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
$sel:organizationId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
organizationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
userId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
deviceId

instance
  Data.ToHeaders
    DeleteMobileDeviceAccessOverride
  where
  toHeaders :: DeleteMobileDeviceAccessOverride -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"WorkMailService.DeleteMobileDeviceAccessOverride" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DeleteMobileDeviceAccessOverride where
  toJSON :: DeleteMobileDeviceAccessOverride -> Value
toJSON DeleteMobileDeviceAccessOverride' {Text
deviceId :: Text
userId :: Text
organizationId :: Text
$sel:deviceId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
$sel:userId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
$sel:organizationId:DeleteMobileDeviceAccessOverride' :: DeleteMobileDeviceAccessOverride -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"OrganizationId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
organizationId),
            forall a. a -> Maybe a
Prelude.Just (Key
"UserId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
userId),
            forall a. a -> Maybe a
Prelude.Just (Key
"DeviceId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deviceId)
          ]
      )

instance Data.ToPath DeleteMobileDeviceAccessOverride where
  toPath :: DeleteMobileDeviceAccessOverride -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

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

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

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

instance
  Prelude.NFData
    DeleteMobileDeviceAccessOverrideResponse
  where
  rnf :: DeleteMobileDeviceAccessOverrideResponse -> ()
rnf DeleteMobileDeviceAccessOverrideResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteMobileDeviceAccessOverrideResponse' :: DeleteMobileDeviceAccessOverrideResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus