{-# 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.IotTwinMaker.DeleteEntity
-- 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 an entity.
module Amazonka.IotTwinMaker.DeleteEntity
  ( -- * Creating a Request
    DeleteEntity (..),
    newDeleteEntity,

    -- * Request Lenses
    deleteEntity_isRecursive,
    deleteEntity_workspaceId,
    deleteEntity_entityId,

    -- * Destructuring the Response
    DeleteEntityResponse (..),
    newDeleteEntityResponse,

    -- * Response Lenses
    deleteEntityResponse_httpStatus,
    deleteEntityResponse_state,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IotTwinMaker.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteEntity' smart constructor.
data DeleteEntity = DeleteEntity'
  { -- | A Boolean value that specifies whether the operation deletes child
    -- entities.
    DeleteEntity -> Maybe Bool
isRecursive :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the workspace that contains the entity to delete.
    DeleteEntity -> Text
workspaceId :: Prelude.Text,
    -- | The ID of the entity to delete.
    DeleteEntity -> Text
entityId :: Prelude.Text
  }
  deriving (DeleteEntity -> DeleteEntity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteEntity -> DeleteEntity -> Bool
$c/= :: DeleteEntity -> DeleteEntity -> Bool
== :: DeleteEntity -> DeleteEntity -> Bool
$c== :: DeleteEntity -> DeleteEntity -> Bool
Prelude.Eq, ReadPrec [DeleteEntity]
ReadPrec DeleteEntity
Int -> ReadS DeleteEntity
ReadS [DeleteEntity]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteEntity]
$creadListPrec :: ReadPrec [DeleteEntity]
readPrec :: ReadPrec DeleteEntity
$creadPrec :: ReadPrec DeleteEntity
readList :: ReadS [DeleteEntity]
$creadList :: ReadS [DeleteEntity]
readsPrec :: Int -> ReadS DeleteEntity
$creadsPrec :: Int -> ReadS DeleteEntity
Prelude.Read, Int -> DeleteEntity -> ShowS
[DeleteEntity] -> ShowS
DeleteEntity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteEntity] -> ShowS
$cshowList :: [DeleteEntity] -> ShowS
show :: DeleteEntity -> String
$cshow :: DeleteEntity -> String
showsPrec :: Int -> DeleteEntity -> ShowS
$cshowsPrec :: Int -> DeleteEntity -> ShowS
Prelude.Show, forall x. Rep DeleteEntity x -> DeleteEntity
forall x. DeleteEntity -> Rep DeleteEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteEntity x -> DeleteEntity
$cfrom :: forall x. DeleteEntity -> Rep DeleteEntity x
Prelude.Generic)

-- |
-- Create a value of 'DeleteEntity' 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:
--
-- 'isRecursive', 'deleteEntity_isRecursive' - A Boolean value that specifies whether the operation deletes child
-- entities.
--
-- 'workspaceId', 'deleteEntity_workspaceId' - The ID of the workspace that contains the entity to delete.
--
-- 'entityId', 'deleteEntity_entityId' - The ID of the entity to delete.
newDeleteEntity ::
  -- | 'workspaceId'
  Prelude.Text ->
  -- | 'entityId'
  Prelude.Text ->
  DeleteEntity
newDeleteEntity :: Text -> Text -> DeleteEntity
newDeleteEntity Text
pWorkspaceId_ Text
pEntityId_ =
  DeleteEntity'
    { $sel:isRecursive:DeleteEntity' :: Maybe Bool
isRecursive = forall a. Maybe a
Prelude.Nothing,
      $sel:workspaceId:DeleteEntity' :: Text
workspaceId = Text
pWorkspaceId_,
      $sel:entityId:DeleteEntity' :: Text
entityId = Text
pEntityId_
    }

-- | A Boolean value that specifies whether the operation deletes child
-- entities.
deleteEntity_isRecursive :: Lens.Lens' DeleteEntity (Prelude.Maybe Prelude.Bool)
deleteEntity_isRecursive :: Lens' DeleteEntity (Maybe Bool)
deleteEntity_isRecursive = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteEntity' {Maybe Bool
isRecursive :: Maybe Bool
$sel:isRecursive:DeleteEntity' :: DeleteEntity -> Maybe Bool
isRecursive} -> Maybe Bool
isRecursive) (\s :: DeleteEntity
s@DeleteEntity' {} Maybe Bool
a -> DeleteEntity
s {$sel:isRecursive:DeleteEntity' :: Maybe Bool
isRecursive = Maybe Bool
a} :: DeleteEntity)

-- | The ID of the workspace that contains the entity to delete.
deleteEntity_workspaceId :: Lens.Lens' DeleteEntity Prelude.Text
deleteEntity_workspaceId :: Lens' DeleteEntity Text
deleteEntity_workspaceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteEntity' {Text
workspaceId :: Text
$sel:workspaceId:DeleteEntity' :: DeleteEntity -> Text
workspaceId} -> Text
workspaceId) (\s :: DeleteEntity
s@DeleteEntity' {} Text
a -> DeleteEntity
s {$sel:workspaceId:DeleteEntity' :: Text
workspaceId = Text
a} :: DeleteEntity)

-- | The ID of the entity to delete.
deleteEntity_entityId :: Lens.Lens' DeleteEntity Prelude.Text
deleteEntity_entityId :: Lens' DeleteEntity Text
deleteEntity_entityId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteEntity' {Text
entityId :: Text
$sel:entityId:DeleteEntity' :: DeleteEntity -> Text
entityId} -> Text
entityId) (\s :: DeleteEntity
s@DeleteEntity' {} Text
a -> DeleteEntity
s {$sel:entityId:DeleteEntity' :: Text
entityId = Text
a} :: DeleteEntity)

instance Core.AWSRequest DeleteEntity where
  type AWSResponse DeleteEntity = DeleteEntityResponse
  request :: (Service -> Service) -> DeleteEntity -> Request DeleteEntity
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 DeleteEntity
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteEntity)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> State -> DeleteEntityResponse
DeleteEntityResponse'
            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"state")
      )

instance Prelude.Hashable DeleteEntity where
  hashWithSalt :: Int -> DeleteEntity -> Int
hashWithSalt Int
_salt DeleteEntity' {Maybe Bool
Text
entityId :: Text
workspaceId :: Text
isRecursive :: Maybe Bool
$sel:entityId:DeleteEntity' :: DeleteEntity -> Text
$sel:workspaceId:DeleteEntity' :: DeleteEntity -> Text
$sel:isRecursive:DeleteEntity' :: DeleteEntity -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
isRecursive
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
workspaceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
entityId

instance Prelude.NFData DeleteEntity where
  rnf :: DeleteEntity -> ()
rnf DeleteEntity' {Maybe Bool
Text
entityId :: Text
workspaceId :: Text
isRecursive :: Maybe Bool
$sel:entityId:DeleteEntity' :: DeleteEntity -> Text
$sel:workspaceId:DeleteEntity' :: DeleteEntity -> Text
$sel:isRecursive:DeleteEntity' :: DeleteEntity -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
isRecursive
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
workspaceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
entityId

instance Data.ToHeaders DeleteEntity where
  toHeaders :: DeleteEntity -> 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 DeleteEntity where
  toPath :: DeleteEntity -> ByteString
toPath DeleteEntity' {Maybe Bool
Text
entityId :: Text
workspaceId :: Text
isRecursive :: Maybe Bool
$sel:entityId:DeleteEntity' :: DeleteEntity -> Text
$sel:workspaceId:DeleteEntity' :: DeleteEntity -> Text
$sel:isRecursive:DeleteEntity' :: DeleteEntity -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/workspaces/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
workspaceId,
        ByteString
"/entities/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
entityId
      ]

instance Data.ToQuery DeleteEntity where
  toQuery :: DeleteEntity -> QueryString
toQuery DeleteEntity' {Maybe Bool
Text
entityId :: Text
workspaceId :: Text
isRecursive :: Maybe Bool
$sel:entityId:DeleteEntity' :: DeleteEntity -> Text
$sel:workspaceId:DeleteEntity' :: DeleteEntity -> Text
$sel:isRecursive:DeleteEntity' :: DeleteEntity -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"isRecursive" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
isRecursive]

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

-- |
-- Create a value of 'DeleteEntityResponse' 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', 'deleteEntityResponse_httpStatus' - The response's http status code.
--
-- 'state', 'deleteEntityResponse_state' - The current state of the deleted entity.
newDeleteEntityResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'state'
  State ->
  DeleteEntityResponse
newDeleteEntityResponse :: Int -> State -> DeleteEntityResponse
newDeleteEntityResponse Int
pHttpStatus_ State
pState_ =
  DeleteEntityResponse'
    { $sel:httpStatus:DeleteEntityResponse' :: Int
httpStatus = Int
pHttpStatus_,
      $sel:state:DeleteEntityResponse' :: State
state = State
pState_
    }

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

-- | The current state of the deleted entity.
deleteEntityResponse_state :: Lens.Lens' DeleteEntityResponse State
deleteEntityResponse_state :: Lens' DeleteEntityResponse State
deleteEntityResponse_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteEntityResponse' {State
state :: State
$sel:state:DeleteEntityResponse' :: DeleteEntityResponse -> State
state} -> State
state) (\s :: DeleteEntityResponse
s@DeleteEntityResponse' {} State
a -> DeleteEntityResponse
s {$sel:state:DeleteEntityResponse' :: State
state = State
a} :: DeleteEntityResponse)

instance Prelude.NFData DeleteEntityResponse where
  rnf :: DeleteEntityResponse -> ()
rnf DeleteEntityResponse' {Int
State
state :: State
httpStatus :: Int
$sel:state:DeleteEntityResponse' :: DeleteEntityResponse -> State
$sel:httpStatus:DeleteEntityResponse' :: DeleteEntityResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf State
state