{-# 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.Connect.DeleteTrafficDistributionGroup
-- 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 a traffic distribution group. This API can be called only in the
-- Region where the traffic distribution group is created.
--
-- For more information about deleting traffic distribution groups, see
-- <https://docs.aws.amazon.com/connect/latest/adminguide/delete-traffic-distribution-groups.html Delete traffic distribution groups>
-- in the /Amazon Connect Administrator Guide/.
module Amazonka.Connect.DeleteTrafficDistributionGroup
  ( -- * Creating a Request
    DeleteTrafficDistributionGroup (..),
    newDeleteTrafficDistributionGroup,

    -- * Request Lenses
    deleteTrafficDistributionGroup_trafficDistributionGroupId,

    -- * Destructuring the Response
    DeleteTrafficDistributionGroupResponse (..),
    newDeleteTrafficDistributionGroupResponse,

    -- * Response Lenses
    deleteTrafficDistributionGroupResponse_httpStatus,
  )
where

import Amazonka.Connect.Types
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

-- | /See:/ 'newDeleteTrafficDistributionGroup' smart constructor.
data DeleteTrafficDistributionGroup = DeleteTrafficDistributionGroup'
  { -- | The identifier of the traffic distribution group. This can be the ID or
    -- the ARN if the API is being called in the Region where the traffic
    -- distribution group was created. The ARN must be provided if the call is
    -- from the replicated Region.
    DeleteTrafficDistributionGroup -> Text
trafficDistributionGroupId :: Prelude.Text
  }
  deriving (DeleteTrafficDistributionGroup
-> DeleteTrafficDistributionGroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteTrafficDistributionGroup
-> DeleteTrafficDistributionGroup -> Bool
$c/= :: DeleteTrafficDistributionGroup
-> DeleteTrafficDistributionGroup -> Bool
== :: DeleteTrafficDistributionGroup
-> DeleteTrafficDistributionGroup -> Bool
$c== :: DeleteTrafficDistributionGroup
-> DeleteTrafficDistributionGroup -> Bool
Prelude.Eq, ReadPrec [DeleteTrafficDistributionGroup]
ReadPrec DeleteTrafficDistributionGroup
Int -> ReadS DeleteTrafficDistributionGroup
ReadS [DeleteTrafficDistributionGroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteTrafficDistributionGroup]
$creadListPrec :: ReadPrec [DeleteTrafficDistributionGroup]
readPrec :: ReadPrec DeleteTrafficDistributionGroup
$creadPrec :: ReadPrec DeleteTrafficDistributionGroup
readList :: ReadS [DeleteTrafficDistributionGroup]
$creadList :: ReadS [DeleteTrafficDistributionGroup]
readsPrec :: Int -> ReadS DeleteTrafficDistributionGroup
$creadsPrec :: Int -> ReadS DeleteTrafficDistributionGroup
Prelude.Read, Int -> DeleteTrafficDistributionGroup -> ShowS
[DeleteTrafficDistributionGroup] -> ShowS
DeleteTrafficDistributionGroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteTrafficDistributionGroup] -> ShowS
$cshowList :: [DeleteTrafficDistributionGroup] -> ShowS
show :: DeleteTrafficDistributionGroup -> String
$cshow :: DeleteTrafficDistributionGroup -> String
showsPrec :: Int -> DeleteTrafficDistributionGroup -> ShowS
$cshowsPrec :: Int -> DeleteTrafficDistributionGroup -> ShowS
Prelude.Show, forall x.
Rep DeleteTrafficDistributionGroup x
-> DeleteTrafficDistributionGroup
forall x.
DeleteTrafficDistributionGroup
-> Rep DeleteTrafficDistributionGroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteTrafficDistributionGroup x
-> DeleteTrafficDistributionGroup
$cfrom :: forall x.
DeleteTrafficDistributionGroup
-> Rep DeleteTrafficDistributionGroup x
Prelude.Generic)

-- |
-- Create a value of 'DeleteTrafficDistributionGroup' 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:
--
-- 'trafficDistributionGroupId', 'deleteTrafficDistributionGroup_trafficDistributionGroupId' - The identifier of the traffic distribution group. This can be the ID or
-- the ARN if the API is being called in the Region where the traffic
-- distribution group was created. The ARN must be provided if the call is
-- from the replicated Region.
newDeleteTrafficDistributionGroup ::
  -- | 'trafficDistributionGroupId'
  Prelude.Text ->
  DeleteTrafficDistributionGroup
newDeleteTrafficDistributionGroup :: Text -> DeleteTrafficDistributionGroup
newDeleteTrafficDistributionGroup
  Text
pTrafficDistributionGroupId_ =
    DeleteTrafficDistributionGroup'
      { $sel:trafficDistributionGroupId:DeleteTrafficDistributionGroup' :: Text
trafficDistributionGroupId =
          Text
pTrafficDistributionGroupId_
      }

-- | The identifier of the traffic distribution group. This can be the ID or
-- the ARN if the API is being called in the Region where the traffic
-- distribution group was created. The ARN must be provided if the call is
-- from the replicated Region.
deleteTrafficDistributionGroup_trafficDistributionGroupId :: Lens.Lens' DeleteTrafficDistributionGroup Prelude.Text
deleteTrafficDistributionGroup_trafficDistributionGroupId :: Lens' DeleteTrafficDistributionGroup Text
deleteTrafficDistributionGroup_trafficDistributionGroupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteTrafficDistributionGroup' {Text
trafficDistributionGroupId :: Text
$sel:trafficDistributionGroupId:DeleteTrafficDistributionGroup' :: DeleteTrafficDistributionGroup -> Text
trafficDistributionGroupId} -> Text
trafficDistributionGroupId) (\s :: DeleteTrafficDistributionGroup
s@DeleteTrafficDistributionGroup' {} Text
a -> DeleteTrafficDistributionGroup
s {$sel:trafficDistributionGroupId:DeleteTrafficDistributionGroup' :: Text
trafficDistributionGroupId = Text
a} :: DeleteTrafficDistributionGroup)

instance
  Core.AWSRequest
    DeleteTrafficDistributionGroup
  where
  type
    AWSResponse DeleteTrafficDistributionGroup =
      DeleteTrafficDistributionGroupResponse
  request :: (Service -> Service)
-> DeleteTrafficDistributionGroup
-> Request DeleteTrafficDistributionGroup
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteTrafficDistributionGroup
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DeleteTrafficDistributionGroup)))
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 -> DeleteTrafficDistributionGroupResponse
DeleteTrafficDistributionGroupResponse'
            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
    DeleteTrafficDistributionGroup
  where
  hashWithSalt :: Int -> DeleteTrafficDistributionGroup -> Int
hashWithSalt
    Int
_salt
    DeleteTrafficDistributionGroup' {Text
trafficDistributionGroupId :: Text
$sel:trafficDistributionGroupId:DeleteTrafficDistributionGroup' :: DeleteTrafficDistributionGroup -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
trafficDistributionGroupId

instance
  Prelude.NFData
    DeleteTrafficDistributionGroup
  where
  rnf :: DeleteTrafficDistributionGroup -> ()
rnf DeleteTrafficDistributionGroup' {Text
trafficDistributionGroupId :: Text
$sel:trafficDistributionGroupId:DeleteTrafficDistributionGroup' :: DeleteTrafficDistributionGroup -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
trafficDistributionGroupId

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

instance Data.ToPath DeleteTrafficDistributionGroup where
  toPath :: DeleteTrafficDistributionGroup -> ByteString
toPath DeleteTrafficDistributionGroup' {Text
trafficDistributionGroupId :: Text
$sel:trafficDistributionGroupId:DeleteTrafficDistributionGroup' :: DeleteTrafficDistributionGroup -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/traffic-distribution-group/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
trafficDistributionGroupId
      ]

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

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

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

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

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