{-# 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.ManagedBlockChain.DeleteNode
-- 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 node that your Amazon Web Services account owns. All data on
-- the node is lost and cannot be recovered.
--
-- Applies to Hyperledger Fabric and Ethereum.
module Amazonka.ManagedBlockChain.DeleteNode
  ( -- * Creating a Request
    DeleteNode (..),
    newDeleteNode,

    -- * Request Lenses
    deleteNode_memberId,
    deleteNode_networkId,
    deleteNode_nodeId,

    -- * Destructuring the Response
    DeleteNodeResponse (..),
    newDeleteNodeResponse,

    -- * Response Lenses
    deleteNodeResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDeleteNode' smart constructor.
data DeleteNode = DeleteNode'
  { -- | The unique identifier of the member that owns this node.
    --
    -- Applies only to Hyperledger Fabric and is required for Hyperledger
    -- Fabric.
    DeleteNode -> Maybe Text
memberId :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier of the network that the node is on.
    --
    -- Ethereum public networks have the following @NetworkId@s:
    --
    -- -   @n-ethereum-mainnet@
    --
    -- -   @n-ethereum-goerli@
    --
    -- -   @n-ethereum-rinkeby@
    --
    -- -   @n-ethereum-ropsten@
    DeleteNode -> Text
networkId :: Prelude.Text,
    -- | The unique identifier of the node.
    DeleteNode -> Text
nodeId :: Prelude.Text
  }
  deriving (DeleteNode -> DeleteNode -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteNode -> DeleteNode -> Bool
$c/= :: DeleteNode -> DeleteNode -> Bool
== :: DeleteNode -> DeleteNode -> Bool
$c== :: DeleteNode -> DeleteNode -> Bool
Prelude.Eq, ReadPrec [DeleteNode]
ReadPrec DeleteNode
Int -> ReadS DeleteNode
ReadS [DeleteNode]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteNode]
$creadListPrec :: ReadPrec [DeleteNode]
readPrec :: ReadPrec DeleteNode
$creadPrec :: ReadPrec DeleteNode
readList :: ReadS [DeleteNode]
$creadList :: ReadS [DeleteNode]
readsPrec :: Int -> ReadS DeleteNode
$creadsPrec :: Int -> ReadS DeleteNode
Prelude.Read, Int -> DeleteNode -> ShowS
[DeleteNode] -> ShowS
DeleteNode -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteNode] -> ShowS
$cshowList :: [DeleteNode] -> ShowS
show :: DeleteNode -> String
$cshow :: DeleteNode -> String
showsPrec :: Int -> DeleteNode -> ShowS
$cshowsPrec :: Int -> DeleteNode -> ShowS
Prelude.Show, forall x. Rep DeleteNode x -> DeleteNode
forall x. DeleteNode -> Rep DeleteNode x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteNode x -> DeleteNode
$cfrom :: forall x. DeleteNode -> Rep DeleteNode x
Prelude.Generic)

-- |
-- Create a value of 'DeleteNode' 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:
--
-- 'memberId', 'deleteNode_memberId' - The unique identifier of the member that owns this node.
--
-- Applies only to Hyperledger Fabric and is required for Hyperledger
-- Fabric.
--
-- 'networkId', 'deleteNode_networkId' - The unique identifier of the network that the node is on.
--
-- Ethereum public networks have the following @NetworkId@s:
--
-- -   @n-ethereum-mainnet@
--
-- -   @n-ethereum-goerli@
--
-- -   @n-ethereum-rinkeby@
--
-- -   @n-ethereum-ropsten@
--
-- 'nodeId', 'deleteNode_nodeId' - The unique identifier of the node.
newDeleteNode ::
  -- | 'networkId'
  Prelude.Text ->
  -- | 'nodeId'
  Prelude.Text ->
  DeleteNode
newDeleteNode :: Text -> Text -> DeleteNode
newDeleteNode Text
pNetworkId_ Text
pNodeId_ =
  DeleteNode'
    { $sel:memberId:DeleteNode' :: Maybe Text
memberId = forall a. Maybe a
Prelude.Nothing,
      $sel:networkId:DeleteNode' :: Text
networkId = Text
pNetworkId_,
      $sel:nodeId:DeleteNode' :: Text
nodeId = Text
pNodeId_
    }

-- | The unique identifier of the member that owns this node.
--
-- Applies only to Hyperledger Fabric and is required for Hyperledger
-- Fabric.
deleteNode_memberId :: Lens.Lens' DeleteNode (Prelude.Maybe Prelude.Text)
deleteNode_memberId :: Lens' DeleteNode (Maybe Text)
deleteNode_memberId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteNode' {Maybe Text
memberId :: Maybe Text
$sel:memberId:DeleteNode' :: DeleteNode -> Maybe Text
memberId} -> Maybe Text
memberId) (\s :: DeleteNode
s@DeleteNode' {} Maybe Text
a -> DeleteNode
s {$sel:memberId:DeleteNode' :: Maybe Text
memberId = Maybe Text
a} :: DeleteNode)

-- | The unique identifier of the network that the node is on.
--
-- Ethereum public networks have the following @NetworkId@s:
--
-- -   @n-ethereum-mainnet@
--
-- -   @n-ethereum-goerli@
--
-- -   @n-ethereum-rinkeby@
--
-- -   @n-ethereum-ropsten@
deleteNode_networkId :: Lens.Lens' DeleteNode Prelude.Text
deleteNode_networkId :: Lens' DeleteNode Text
deleteNode_networkId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteNode' {Text
networkId :: Text
$sel:networkId:DeleteNode' :: DeleteNode -> Text
networkId} -> Text
networkId) (\s :: DeleteNode
s@DeleteNode' {} Text
a -> DeleteNode
s {$sel:networkId:DeleteNode' :: Text
networkId = Text
a} :: DeleteNode)

-- | The unique identifier of the node.
deleteNode_nodeId :: Lens.Lens' DeleteNode Prelude.Text
deleteNode_nodeId :: Lens' DeleteNode Text
deleteNode_nodeId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteNode' {Text
nodeId :: Text
$sel:nodeId:DeleteNode' :: DeleteNode -> Text
nodeId} -> Text
nodeId) (\s :: DeleteNode
s@DeleteNode' {} Text
a -> DeleteNode
s {$sel:nodeId:DeleteNode' :: Text
nodeId = Text
a} :: DeleteNode)

instance Core.AWSRequest DeleteNode where
  type AWSResponse DeleteNode = DeleteNodeResponse
  request :: (Service -> Service) -> DeleteNode -> Request DeleteNode
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 DeleteNode
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteNode)))
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 -> DeleteNodeResponse
DeleteNodeResponse'
            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 DeleteNode where
  hashWithSalt :: Int -> DeleteNode -> Int
hashWithSalt Int
_salt DeleteNode' {Maybe Text
Text
nodeId :: Text
networkId :: Text
memberId :: Maybe Text
$sel:nodeId:DeleteNode' :: DeleteNode -> Text
$sel:networkId:DeleteNode' :: DeleteNode -> Text
$sel:memberId:DeleteNode' :: DeleteNode -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
memberId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
networkId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
nodeId

instance Prelude.NFData DeleteNode where
  rnf :: DeleteNode -> ()
rnf DeleteNode' {Maybe Text
Text
nodeId :: Text
networkId :: Text
memberId :: Maybe Text
$sel:nodeId:DeleteNode' :: DeleteNode -> Text
$sel:networkId:DeleteNode' :: DeleteNode -> Text
$sel:memberId:DeleteNode' :: DeleteNode -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
memberId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
networkId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
nodeId

instance Data.ToHeaders DeleteNode where
  toHeaders :: DeleteNode -> 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 DeleteNode where
  toPath :: DeleteNode -> ByteString
toPath DeleteNode' {Maybe Text
Text
nodeId :: Text
networkId :: Text
memberId :: Maybe Text
$sel:nodeId:DeleteNode' :: DeleteNode -> Text
$sel:networkId:DeleteNode' :: DeleteNode -> Text
$sel:memberId:DeleteNode' :: DeleteNode -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/networks/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
networkId,
        ByteString
"/nodes/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
nodeId
      ]

instance Data.ToQuery DeleteNode where
  toQuery :: DeleteNode -> QueryString
toQuery DeleteNode' {Maybe Text
Text
nodeId :: Text
networkId :: Text
memberId :: Maybe Text
$sel:nodeId:DeleteNode' :: DeleteNode -> Text
$sel:networkId:DeleteNode' :: DeleteNode -> Text
$sel:memberId:DeleteNode' :: DeleteNode -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"memberId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
memberId]

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

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

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

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