{-# 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.ServiceCatalog.AcceptPortfolioShare
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Accepts an offer to share the specified portfolio.
module Amazonka.ServiceCatalog.AcceptPortfolioShare
  ( -- * Creating a Request
    AcceptPortfolioShare (..),
    newAcceptPortfolioShare,

    -- * Request Lenses
    acceptPortfolioShare_acceptLanguage,
    acceptPortfolioShare_portfolioShareType,
    acceptPortfolioShare_portfolioId,

    -- * Destructuring the Response
    AcceptPortfolioShareResponse (..),
    newAcceptPortfolioShareResponse,

    -- * Response Lenses
    acceptPortfolioShareResponse_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.ServiceCatalog.Types

-- | /See:/ 'newAcceptPortfolioShare' smart constructor.
data AcceptPortfolioShare = AcceptPortfolioShare'
  { -- | The language code.
    --
    -- -   @en@ - English (default)
    --
    -- -   @jp@ - Japanese
    --
    -- -   @zh@ - Chinese
    AcceptPortfolioShare -> Maybe Text
acceptLanguage :: Prelude.Maybe Prelude.Text,
    -- | The type of shared portfolios to accept. The default is to accept
    -- imported portfolios.
    --
    -- -   @AWS_ORGANIZATIONS@ - Accept portfolios shared by the management
    --     account of your organization.
    --
    -- -   @IMPORTED@ - Accept imported portfolios.
    --
    -- -   @AWS_SERVICECATALOG@ - Not supported. (Throws
    --     ResourceNotFoundException.)
    --
    -- For example,
    -- @aws servicecatalog accept-portfolio-share --portfolio-id \"port-2qwzkwxt3y5fk\" --portfolio-share-type AWS_ORGANIZATIONS@
    AcceptPortfolioShare -> Maybe PortfolioShareType
portfolioShareType :: Prelude.Maybe PortfolioShareType,
    -- | The portfolio identifier.
    AcceptPortfolioShare -> Text
portfolioId :: Prelude.Text
  }
  deriving (AcceptPortfolioShare -> AcceptPortfolioShare -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AcceptPortfolioShare -> AcceptPortfolioShare -> Bool
$c/= :: AcceptPortfolioShare -> AcceptPortfolioShare -> Bool
== :: AcceptPortfolioShare -> AcceptPortfolioShare -> Bool
$c== :: AcceptPortfolioShare -> AcceptPortfolioShare -> Bool
Prelude.Eq, ReadPrec [AcceptPortfolioShare]
ReadPrec AcceptPortfolioShare
Int -> ReadS AcceptPortfolioShare
ReadS [AcceptPortfolioShare]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AcceptPortfolioShare]
$creadListPrec :: ReadPrec [AcceptPortfolioShare]
readPrec :: ReadPrec AcceptPortfolioShare
$creadPrec :: ReadPrec AcceptPortfolioShare
readList :: ReadS [AcceptPortfolioShare]
$creadList :: ReadS [AcceptPortfolioShare]
readsPrec :: Int -> ReadS AcceptPortfolioShare
$creadsPrec :: Int -> ReadS AcceptPortfolioShare
Prelude.Read, Int -> AcceptPortfolioShare -> ShowS
[AcceptPortfolioShare] -> ShowS
AcceptPortfolioShare -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AcceptPortfolioShare] -> ShowS
$cshowList :: [AcceptPortfolioShare] -> ShowS
show :: AcceptPortfolioShare -> String
$cshow :: AcceptPortfolioShare -> String
showsPrec :: Int -> AcceptPortfolioShare -> ShowS
$cshowsPrec :: Int -> AcceptPortfolioShare -> ShowS
Prelude.Show, forall x. Rep AcceptPortfolioShare x -> AcceptPortfolioShare
forall x. AcceptPortfolioShare -> Rep AcceptPortfolioShare x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AcceptPortfolioShare x -> AcceptPortfolioShare
$cfrom :: forall x. AcceptPortfolioShare -> Rep AcceptPortfolioShare x
Prelude.Generic)

-- |
-- Create a value of 'AcceptPortfolioShare' 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:
--
-- 'acceptLanguage', 'acceptPortfolioShare_acceptLanguage' - The language code.
--
-- -   @en@ - English (default)
--
-- -   @jp@ - Japanese
--
-- -   @zh@ - Chinese
--
-- 'portfolioShareType', 'acceptPortfolioShare_portfolioShareType' - The type of shared portfolios to accept. The default is to accept
-- imported portfolios.
--
-- -   @AWS_ORGANIZATIONS@ - Accept portfolios shared by the management
--     account of your organization.
--
-- -   @IMPORTED@ - Accept imported portfolios.
--
-- -   @AWS_SERVICECATALOG@ - Not supported. (Throws
--     ResourceNotFoundException.)
--
-- For example,
-- @aws servicecatalog accept-portfolio-share --portfolio-id \"port-2qwzkwxt3y5fk\" --portfolio-share-type AWS_ORGANIZATIONS@
--
-- 'portfolioId', 'acceptPortfolioShare_portfolioId' - The portfolio identifier.
newAcceptPortfolioShare ::
  -- | 'portfolioId'
  Prelude.Text ->
  AcceptPortfolioShare
newAcceptPortfolioShare :: Text -> AcceptPortfolioShare
newAcceptPortfolioShare Text
pPortfolioId_ =
  AcceptPortfolioShare'
    { $sel:acceptLanguage:AcceptPortfolioShare' :: Maybe Text
acceptLanguage =
        forall a. Maybe a
Prelude.Nothing,
      $sel:portfolioShareType:AcceptPortfolioShare' :: Maybe PortfolioShareType
portfolioShareType = forall a. Maybe a
Prelude.Nothing,
      $sel:portfolioId:AcceptPortfolioShare' :: Text
portfolioId = Text
pPortfolioId_
    }

-- | The language code.
--
-- -   @en@ - English (default)
--
-- -   @jp@ - Japanese
--
-- -   @zh@ - Chinese
acceptPortfolioShare_acceptLanguage :: Lens.Lens' AcceptPortfolioShare (Prelude.Maybe Prelude.Text)
acceptPortfolioShare_acceptLanguage :: Lens' AcceptPortfolioShare (Maybe Text)
acceptPortfolioShare_acceptLanguage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AcceptPortfolioShare' {Maybe Text
acceptLanguage :: Maybe Text
$sel:acceptLanguage:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe Text
acceptLanguage} -> Maybe Text
acceptLanguage) (\s :: AcceptPortfolioShare
s@AcceptPortfolioShare' {} Maybe Text
a -> AcceptPortfolioShare
s {$sel:acceptLanguage:AcceptPortfolioShare' :: Maybe Text
acceptLanguage = Maybe Text
a} :: AcceptPortfolioShare)

-- | The type of shared portfolios to accept. The default is to accept
-- imported portfolios.
--
-- -   @AWS_ORGANIZATIONS@ - Accept portfolios shared by the management
--     account of your organization.
--
-- -   @IMPORTED@ - Accept imported portfolios.
--
-- -   @AWS_SERVICECATALOG@ - Not supported. (Throws
--     ResourceNotFoundException.)
--
-- For example,
-- @aws servicecatalog accept-portfolio-share --portfolio-id \"port-2qwzkwxt3y5fk\" --portfolio-share-type AWS_ORGANIZATIONS@
acceptPortfolioShare_portfolioShareType :: Lens.Lens' AcceptPortfolioShare (Prelude.Maybe PortfolioShareType)
acceptPortfolioShare_portfolioShareType :: Lens' AcceptPortfolioShare (Maybe PortfolioShareType)
acceptPortfolioShare_portfolioShareType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AcceptPortfolioShare' {Maybe PortfolioShareType
portfolioShareType :: Maybe PortfolioShareType
$sel:portfolioShareType:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe PortfolioShareType
portfolioShareType} -> Maybe PortfolioShareType
portfolioShareType) (\s :: AcceptPortfolioShare
s@AcceptPortfolioShare' {} Maybe PortfolioShareType
a -> AcceptPortfolioShare
s {$sel:portfolioShareType:AcceptPortfolioShare' :: Maybe PortfolioShareType
portfolioShareType = Maybe PortfolioShareType
a} :: AcceptPortfolioShare)

-- | The portfolio identifier.
acceptPortfolioShare_portfolioId :: Lens.Lens' AcceptPortfolioShare Prelude.Text
acceptPortfolioShare_portfolioId :: Lens' AcceptPortfolioShare Text
acceptPortfolioShare_portfolioId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AcceptPortfolioShare' {Text
portfolioId :: Text
$sel:portfolioId:AcceptPortfolioShare' :: AcceptPortfolioShare -> Text
portfolioId} -> Text
portfolioId) (\s :: AcceptPortfolioShare
s@AcceptPortfolioShare' {} Text
a -> AcceptPortfolioShare
s {$sel:portfolioId:AcceptPortfolioShare' :: Text
portfolioId = Text
a} :: AcceptPortfolioShare)

instance Core.AWSRequest AcceptPortfolioShare where
  type
    AWSResponse AcceptPortfolioShare =
      AcceptPortfolioShareResponse
  request :: (Service -> Service)
-> AcceptPortfolioShare -> Request AcceptPortfolioShare
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy AcceptPortfolioShare
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse AcceptPortfolioShare)))
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 -> AcceptPortfolioShareResponse
AcceptPortfolioShareResponse'
            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 AcceptPortfolioShare where
  hashWithSalt :: Int -> AcceptPortfolioShare -> Int
hashWithSalt Int
_salt AcceptPortfolioShare' {Maybe Text
Maybe PortfolioShareType
Text
portfolioId :: Text
portfolioShareType :: Maybe PortfolioShareType
acceptLanguage :: Maybe Text
$sel:portfolioId:AcceptPortfolioShare' :: AcceptPortfolioShare -> Text
$sel:portfolioShareType:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe PortfolioShareType
$sel:acceptLanguage:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
acceptLanguage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PortfolioShareType
portfolioShareType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
portfolioId

instance Prelude.NFData AcceptPortfolioShare where
  rnf :: AcceptPortfolioShare -> ()
rnf AcceptPortfolioShare' {Maybe Text
Maybe PortfolioShareType
Text
portfolioId :: Text
portfolioShareType :: Maybe PortfolioShareType
acceptLanguage :: Maybe Text
$sel:portfolioId:AcceptPortfolioShare' :: AcceptPortfolioShare -> Text
$sel:portfolioShareType:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe PortfolioShareType
$sel:acceptLanguage:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
acceptLanguage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PortfolioShareType
portfolioShareType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
portfolioId

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

instance Data.ToJSON AcceptPortfolioShare where
  toJSON :: AcceptPortfolioShare -> Value
toJSON AcceptPortfolioShare' {Maybe Text
Maybe PortfolioShareType
Text
portfolioId :: Text
portfolioShareType :: Maybe PortfolioShareType
acceptLanguage :: Maybe Text
$sel:portfolioId:AcceptPortfolioShare' :: AcceptPortfolioShare -> Text
$sel:portfolioShareType:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe PortfolioShareType
$sel:acceptLanguage:AcceptPortfolioShare' :: AcceptPortfolioShare -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AcceptLanguage" 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 Text
acceptLanguage,
            (Key
"PortfolioShareType" 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 PortfolioShareType
portfolioShareType,
            forall a. a -> Maybe a
Prelude.Just (Key
"PortfolioId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
portfolioId)
          ]
      )

instance Data.ToPath AcceptPortfolioShare where
  toPath :: AcceptPortfolioShare -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

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

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

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

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