{-# 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.WellArchitected.UpdateWorkloadShare
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Update a workload share.
module Amazonka.WellArchitected.UpdateWorkloadShare
  ( -- * Creating a Request
    UpdateWorkloadShare (..),
    newUpdateWorkloadShare,

    -- * Request Lenses
    updateWorkloadShare_shareId,
    updateWorkloadShare_workloadId,
    updateWorkloadShare_permissionType,

    -- * Destructuring the Response
    UpdateWorkloadShareResponse (..),
    newUpdateWorkloadShareResponse,

    -- * Response Lenses
    updateWorkloadShareResponse_workloadId,
    updateWorkloadShareResponse_workloadShare,
    updateWorkloadShareResponse_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.WellArchitected.Types

-- | Input for Update Workload Share
--
-- /See:/ 'newUpdateWorkloadShare' smart constructor.
data UpdateWorkloadShare = UpdateWorkloadShare'
  { UpdateWorkloadShare -> Text
shareId :: Prelude.Text,
    UpdateWorkloadShare -> Text
workloadId :: Prelude.Text,
    UpdateWorkloadShare -> PermissionType
permissionType :: PermissionType
  }
  deriving (UpdateWorkloadShare -> UpdateWorkloadShare -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateWorkloadShare -> UpdateWorkloadShare -> Bool
$c/= :: UpdateWorkloadShare -> UpdateWorkloadShare -> Bool
== :: UpdateWorkloadShare -> UpdateWorkloadShare -> Bool
$c== :: UpdateWorkloadShare -> UpdateWorkloadShare -> Bool
Prelude.Eq, ReadPrec [UpdateWorkloadShare]
ReadPrec UpdateWorkloadShare
Int -> ReadS UpdateWorkloadShare
ReadS [UpdateWorkloadShare]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateWorkloadShare]
$creadListPrec :: ReadPrec [UpdateWorkloadShare]
readPrec :: ReadPrec UpdateWorkloadShare
$creadPrec :: ReadPrec UpdateWorkloadShare
readList :: ReadS [UpdateWorkloadShare]
$creadList :: ReadS [UpdateWorkloadShare]
readsPrec :: Int -> ReadS UpdateWorkloadShare
$creadsPrec :: Int -> ReadS UpdateWorkloadShare
Prelude.Read, Int -> UpdateWorkloadShare -> ShowS
[UpdateWorkloadShare] -> ShowS
UpdateWorkloadShare -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateWorkloadShare] -> ShowS
$cshowList :: [UpdateWorkloadShare] -> ShowS
show :: UpdateWorkloadShare -> String
$cshow :: UpdateWorkloadShare -> String
showsPrec :: Int -> UpdateWorkloadShare -> ShowS
$cshowsPrec :: Int -> UpdateWorkloadShare -> ShowS
Prelude.Show, forall x. Rep UpdateWorkloadShare x -> UpdateWorkloadShare
forall x. UpdateWorkloadShare -> Rep UpdateWorkloadShare x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateWorkloadShare x -> UpdateWorkloadShare
$cfrom :: forall x. UpdateWorkloadShare -> Rep UpdateWorkloadShare x
Prelude.Generic)

-- |
-- Create a value of 'UpdateWorkloadShare' 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:
--
-- 'shareId', 'updateWorkloadShare_shareId' - Undocumented member.
--
-- 'workloadId', 'updateWorkloadShare_workloadId' - Undocumented member.
--
-- 'permissionType', 'updateWorkloadShare_permissionType' - Undocumented member.
newUpdateWorkloadShare ::
  -- | 'shareId'
  Prelude.Text ->
  -- | 'workloadId'
  Prelude.Text ->
  -- | 'permissionType'
  PermissionType ->
  UpdateWorkloadShare
newUpdateWorkloadShare :: Text -> Text -> PermissionType -> UpdateWorkloadShare
newUpdateWorkloadShare
  Text
pShareId_
  Text
pWorkloadId_
  PermissionType
pPermissionType_ =
    UpdateWorkloadShare'
      { $sel:shareId:UpdateWorkloadShare' :: Text
shareId = Text
pShareId_,
        $sel:workloadId:UpdateWorkloadShare' :: Text
workloadId = Text
pWorkloadId_,
        $sel:permissionType:UpdateWorkloadShare' :: PermissionType
permissionType = PermissionType
pPermissionType_
      }

-- | Undocumented member.
updateWorkloadShare_shareId :: Lens.Lens' UpdateWorkloadShare Prelude.Text
updateWorkloadShare_shareId :: Lens' UpdateWorkloadShare Text
updateWorkloadShare_shareId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateWorkloadShare' {Text
shareId :: Text
$sel:shareId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
shareId} -> Text
shareId) (\s :: UpdateWorkloadShare
s@UpdateWorkloadShare' {} Text
a -> UpdateWorkloadShare
s {$sel:shareId:UpdateWorkloadShare' :: Text
shareId = Text
a} :: UpdateWorkloadShare)

-- | Undocumented member.
updateWorkloadShare_workloadId :: Lens.Lens' UpdateWorkloadShare Prelude.Text
updateWorkloadShare_workloadId :: Lens' UpdateWorkloadShare Text
updateWorkloadShare_workloadId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateWorkloadShare' {Text
workloadId :: Text
$sel:workloadId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
workloadId} -> Text
workloadId) (\s :: UpdateWorkloadShare
s@UpdateWorkloadShare' {} Text
a -> UpdateWorkloadShare
s {$sel:workloadId:UpdateWorkloadShare' :: Text
workloadId = Text
a} :: UpdateWorkloadShare)

-- | Undocumented member.
updateWorkloadShare_permissionType :: Lens.Lens' UpdateWorkloadShare PermissionType
updateWorkloadShare_permissionType :: Lens' UpdateWorkloadShare PermissionType
updateWorkloadShare_permissionType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateWorkloadShare' {PermissionType
permissionType :: PermissionType
$sel:permissionType:UpdateWorkloadShare' :: UpdateWorkloadShare -> PermissionType
permissionType} -> PermissionType
permissionType) (\s :: UpdateWorkloadShare
s@UpdateWorkloadShare' {} PermissionType
a -> UpdateWorkloadShare
s {$sel:permissionType:UpdateWorkloadShare' :: PermissionType
permissionType = PermissionType
a} :: UpdateWorkloadShare)

instance Core.AWSRequest UpdateWorkloadShare where
  type
    AWSResponse UpdateWorkloadShare =
      UpdateWorkloadShareResponse
  request :: (Service -> Service)
-> UpdateWorkloadShare -> Request UpdateWorkloadShare
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 UpdateWorkloadShare
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateWorkloadShare)))
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 ->
          Maybe Text
-> Maybe WorkloadShare -> Int -> UpdateWorkloadShareResponse
UpdateWorkloadShareResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"WorkloadId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"WorkloadShare")
            forall (f :: * -> *) a b. Applicative f => 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 UpdateWorkloadShare where
  hashWithSalt :: Int -> UpdateWorkloadShare -> Int
hashWithSalt Int
_salt UpdateWorkloadShare' {Text
PermissionType
permissionType :: PermissionType
workloadId :: Text
shareId :: Text
$sel:permissionType:UpdateWorkloadShare' :: UpdateWorkloadShare -> PermissionType
$sel:workloadId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
$sel:shareId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
shareId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
workloadId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` PermissionType
permissionType

instance Prelude.NFData UpdateWorkloadShare where
  rnf :: UpdateWorkloadShare -> ()
rnf UpdateWorkloadShare' {Text
PermissionType
permissionType :: PermissionType
workloadId :: Text
shareId :: Text
$sel:permissionType:UpdateWorkloadShare' :: UpdateWorkloadShare -> PermissionType
$sel:workloadId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
$sel:shareId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
shareId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
workloadId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf PermissionType
permissionType

instance Data.ToHeaders UpdateWorkloadShare where
  toHeaders :: UpdateWorkloadShare -> 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 UpdateWorkloadShare where
  toJSON :: UpdateWorkloadShare -> Value
toJSON UpdateWorkloadShare' {Text
PermissionType
permissionType :: PermissionType
workloadId :: Text
shareId :: Text
$sel:permissionType:UpdateWorkloadShare' :: UpdateWorkloadShare -> PermissionType
$sel:workloadId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
$sel:shareId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"PermissionType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= PermissionType
permissionType)
          ]
      )

instance Data.ToPath UpdateWorkloadShare where
  toPath :: UpdateWorkloadShare -> ByteString
toPath UpdateWorkloadShare' {Text
PermissionType
permissionType :: PermissionType
workloadId :: Text
shareId :: Text
$sel:permissionType:UpdateWorkloadShare' :: UpdateWorkloadShare -> PermissionType
$sel:workloadId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
$sel:shareId:UpdateWorkloadShare' :: UpdateWorkloadShare -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/workloads/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
workloadId,
        ByteString
"/shares/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
shareId
      ]

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

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

-- |
-- Create a value of 'UpdateWorkloadShareResponse' 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:
--
-- 'workloadId', 'updateWorkloadShareResponse_workloadId' - Undocumented member.
--
-- 'workloadShare', 'updateWorkloadShareResponse_workloadShare' - Undocumented member.
--
-- 'httpStatus', 'updateWorkloadShareResponse_httpStatus' - The response's http status code.
newUpdateWorkloadShareResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateWorkloadShareResponse
newUpdateWorkloadShareResponse :: Int -> UpdateWorkloadShareResponse
newUpdateWorkloadShareResponse Int
pHttpStatus_ =
  UpdateWorkloadShareResponse'
    { $sel:workloadId:UpdateWorkloadShareResponse' :: Maybe Text
workloadId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:workloadShare:UpdateWorkloadShareResponse' :: Maybe WorkloadShare
workloadShare = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateWorkloadShareResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
updateWorkloadShareResponse_workloadId :: Lens.Lens' UpdateWorkloadShareResponse (Prelude.Maybe Prelude.Text)
updateWorkloadShareResponse_workloadId :: Lens' UpdateWorkloadShareResponse (Maybe Text)
updateWorkloadShareResponse_workloadId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateWorkloadShareResponse' {Maybe Text
workloadId :: Maybe Text
$sel:workloadId:UpdateWorkloadShareResponse' :: UpdateWorkloadShareResponse -> Maybe Text
workloadId} -> Maybe Text
workloadId) (\s :: UpdateWorkloadShareResponse
s@UpdateWorkloadShareResponse' {} Maybe Text
a -> UpdateWorkloadShareResponse
s {$sel:workloadId:UpdateWorkloadShareResponse' :: Maybe Text
workloadId = Maybe Text
a} :: UpdateWorkloadShareResponse)

-- | Undocumented member.
updateWorkloadShareResponse_workloadShare :: Lens.Lens' UpdateWorkloadShareResponse (Prelude.Maybe WorkloadShare)
updateWorkloadShareResponse_workloadShare :: Lens' UpdateWorkloadShareResponse (Maybe WorkloadShare)
updateWorkloadShareResponse_workloadShare = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateWorkloadShareResponse' {Maybe WorkloadShare
workloadShare :: Maybe WorkloadShare
$sel:workloadShare:UpdateWorkloadShareResponse' :: UpdateWorkloadShareResponse -> Maybe WorkloadShare
workloadShare} -> Maybe WorkloadShare
workloadShare) (\s :: UpdateWorkloadShareResponse
s@UpdateWorkloadShareResponse' {} Maybe WorkloadShare
a -> UpdateWorkloadShareResponse
s {$sel:workloadShare:UpdateWorkloadShareResponse' :: Maybe WorkloadShare
workloadShare = Maybe WorkloadShare
a} :: UpdateWorkloadShareResponse)

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

instance Prelude.NFData UpdateWorkloadShareResponse where
  rnf :: UpdateWorkloadShareResponse -> ()
rnf UpdateWorkloadShareResponse' {Int
Maybe Text
Maybe WorkloadShare
httpStatus :: Int
workloadShare :: Maybe WorkloadShare
workloadId :: Maybe Text
$sel:httpStatus:UpdateWorkloadShareResponse' :: UpdateWorkloadShareResponse -> Int
$sel:workloadShare:UpdateWorkloadShareResponse' :: UpdateWorkloadShareResponse -> Maybe WorkloadShare
$sel:workloadId:UpdateWorkloadShareResponse' :: UpdateWorkloadShareResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
workloadId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe WorkloadShare
workloadShare
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus