{-# 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.UpdateMember
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates a member configuration with new parameters.
--
-- Applies only to Hyperledger Fabric.
module Amazonka.ManagedBlockChain.UpdateMember
  ( -- * Creating a Request
    UpdateMember (..),
    newUpdateMember,

    -- * Request Lenses
    updateMember_logPublishingConfiguration,
    updateMember_networkId,
    updateMember_memberId,

    -- * Destructuring the Response
    UpdateMemberResponse (..),
    newUpdateMemberResponse,

    -- * Response Lenses
    updateMemberResponse_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:/ 'newUpdateMember' smart constructor.
data UpdateMember = UpdateMember'
  { -- | Configuration properties for publishing to Amazon CloudWatch Logs.
    UpdateMember -> Maybe MemberLogPublishingConfiguration
logPublishingConfiguration :: Prelude.Maybe MemberLogPublishingConfiguration,
    -- | The unique identifier of the Managed Blockchain network to which the
    -- member belongs.
    UpdateMember -> Text
networkId :: Prelude.Text,
    -- | The unique identifier of the member.
    UpdateMember -> Text
memberId :: Prelude.Text
  }
  deriving (UpdateMember -> UpdateMember -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateMember -> UpdateMember -> Bool
$c/= :: UpdateMember -> UpdateMember -> Bool
== :: UpdateMember -> UpdateMember -> Bool
$c== :: UpdateMember -> UpdateMember -> Bool
Prelude.Eq, ReadPrec [UpdateMember]
ReadPrec UpdateMember
Int -> ReadS UpdateMember
ReadS [UpdateMember]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateMember]
$creadListPrec :: ReadPrec [UpdateMember]
readPrec :: ReadPrec UpdateMember
$creadPrec :: ReadPrec UpdateMember
readList :: ReadS [UpdateMember]
$creadList :: ReadS [UpdateMember]
readsPrec :: Int -> ReadS UpdateMember
$creadsPrec :: Int -> ReadS UpdateMember
Prelude.Read, Int -> UpdateMember -> ShowS
[UpdateMember] -> ShowS
UpdateMember -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateMember] -> ShowS
$cshowList :: [UpdateMember] -> ShowS
show :: UpdateMember -> String
$cshow :: UpdateMember -> String
showsPrec :: Int -> UpdateMember -> ShowS
$cshowsPrec :: Int -> UpdateMember -> ShowS
Prelude.Show, forall x. Rep UpdateMember x -> UpdateMember
forall x. UpdateMember -> Rep UpdateMember x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateMember x -> UpdateMember
$cfrom :: forall x. UpdateMember -> Rep UpdateMember x
Prelude.Generic)

-- |
-- Create a value of 'UpdateMember' 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:
--
-- 'logPublishingConfiguration', 'updateMember_logPublishingConfiguration' - Configuration properties for publishing to Amazon CloudWatch Logs.
--
-- 'networkId', 'updateMember_networkId' - The unique identifier of the Managed Blockchain network to which the
-- member belongs.
--
-- 'memberId', 'updateMember_memberId' - The unique identifier of the member.
newUpdateMember ::
  -- | 'networkId'
  Prelude.Text ->
  -- | 'memberId'
  Prelude.Text ->
  UpdateMember
newUpdateMember :: Text -> Text -> UpdateMember
newUpdateMember Text
pNetworkId_ Text
pMemberId_ =
  UpdateMember'
    { $sel:logPublishingConfiguration:UpdateMember' :: Maybe MemberLogPublishingConfiguration
logPublishingConfiguration =
        forall a. Maybe a
Prelude.Nothing,
      $sel:networkId:UpdateMember' :: Text
networkId = Text
pNetworkId_,
      $sel:memberId:UpdateMember' :: Text
memberId = Text
pMemberId_
    }

-- | Configuration properties for publishing to Amazon CloudWatch Logs.
updateMember_logPublishingConfiguration :: Lens.Lens' UpdateMember (Prelude.Maybe MemberLogPublishingConfiguration)
updateMember_logPublishingConfiguration :: Lens' UpdateMember (Maybe MemberLogPublishingConfiguration)
updateMember_logPublishingConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMember' {Maybe MemberLogPublishingConfiguration
logPublishingConfiguration :: Maybe MemberLogPublishingConfiguration
$sel:logPublishingConfiguration:UpdateMember' :: UpdateMember -> Maybe MemberLogPublishingConfiguration
logPublishingConfiguration} -> Maybe MemberLogPublishingConfiguration
logPublishingConfiguration) (\s :: UpdateMember
s@UpdateMember' {} Maybe MemberLogPublishingConfiguration
a -> UpdateMember
s {$sel:logPublishingConfiguration:UpdateMember' :: Maybe MemberLogPublishingConfiguration
logPublishingConfiguration = Maybe MemberLogPublishingConfiguration
a} :: UpdateMember)

-- | The unique identifier of the Managed Blockchain network to which the
-- member belongs.
updateMember_networkId :: Lens.Lens' UpdateMember Prelude.Text
updateMember_networkId :: Lens' UpdateMember Text
updateMember_networkId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMember' {Text
networkId :: Text
$sel:networkId:UpdateMember' :: UpdateMember -> Text
networkId} -> Text
networkId) (\s :: UpdateMember
s@UpdateMember' {} Text
a -> UpdateMember
s {$sel:networkId:UpdateMember' :: Text
networkId = Text
a} :: UpdateMember)

-- | The unique identifier of the member.
updateMember_memberId :: Lens.Lens' UpdateMember Prelude.Text
updateMember_memberId :: Lens' UpdateMember Text
updateMember_memberId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateMember' {Text
memberId :: Text
$sel:memberId:UpdateMember' :: UpdateMember -> Text
memberId} -> Text
memberId) (\s :: UpdateMember
s@UpdateMember' {} Text
a -> UpdateMember
s {$sel:memberId:UpdateMember' :: Text
memberId = Text
a} :: UpdateMember)

instance Core.AWSRequest UpdateMember where
  type AWSResponse UpdateMember = UpdateMemberResponse
  request :: (Service -> Service) -> UpdateMember -> Request UpdateMember
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.patchJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateMember
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateMember)))
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 -> UpdateMemberResponse
UpdateMemberResponse'
            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 UpdateMember where
  hashWithSalt :: Int -> UpdateMember -> Int
hashWithSalt Int
_salt UpdateMember' {Maybe MemberLogPublishingConfiguration
Text
memberId :: Text
networkId :: Text
logPublishingConfiguration :: Maybe MemberLogPublishingConfiguration
$sel:memberId:UpdateMember' :: UpdateMember -> Text
$sel:networkId:UpdateMember' :: UpdateMember -> Text
$sel:logPublishingConfiguration:UpdateMember' :: UpdateMember -> Maybe MemberLogPublishingConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MemberLogPublishingConfiguration
logPublishingConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
networkId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
memberId

instance Prelude.NFData UpdateMember where
  rnf :: UpdateMember -> ()
rnf UpdateMember' {Maybe MemberLogPublishingConfiguration
Text
memberId :: Text
networkId :: Text
logPublishingConfiguration :: Maybe MemberLogPublishingConfiguration
$sel:memberId:UpdateMember' :: UpdateMember -> Text
$sel:networkId:UpdateMember' :: UpdateMember -> Text
$sel:logPublishingConfiguration:UpdateMember' :: UpdateMember -> Maybe MemberLogPublishingConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe MemberLogPublishingConfiguration
logPublishingConfiguration
      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
memberId

instance Data.ToHeaders UpdateMember where
  toHeaders :: UpdateMember -> 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.ToJSON UpdateMember where
  toJSON :: UpdateMember -> Value
toJSON UpdateMember' {Maybe MemberLogPublishingConfiguration
Text
memberId :: Text
networkId :: Text
logPublishingConfiguration :: Maybe MemberLogPublishingConfiguration
$sel:memberId:UpdateMember' :: UpdateMember -> Text
$sel:networkId:UpdateMember' :: UpdateMember -> Text
$sel:logPublishingConfiguration:UpdateMember' :: UpdateMember -> Maybe MemberLogPublishingConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"LogPublishingConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe MemberLogPublishingConfiguration
logPublishingConfiguration
          ]
      )

instance Data.ToPath UpdateMember where
  toPath :: UpdateMember -> ByteString
toPath UpdateMember' {Maybe MemberLogPublishingConfiguration
Text
memberId :: Text
networkId :: Text
logPublishingConfiguration :: Maybe MemberLogPublishingConfiguration
$sel:memberId:UpdateMember' :: UpdateMember -> Text
$sel:networkId:UpdateMember' :: UpdateMember -> Text
$sel:logPublishingConfiguration:UpdateMember' :: UpdateMember -> Maybe MemberLogPublishingConfiguration
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/networks/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
networkId,
        ByteString
"/members/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
memberId
      ]

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

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

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

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

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