{-# 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.LicenseManagerUserSubscriptions.RegisterIdentityProvider
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Registers an identity provider for user-based subscriptions.
module Amazonka.LicenseManagerUserSubscriptions.RegisterIdentityProvider
  ( -- * Creating a Request
    RegisterIdentityProvider (..),
    newRegisterIdentityProvider,

    -- * Request Lenses
    registerIdentityProvider_settings,
    registerIdentityProvider_identityProvider,
    registerIdentityProvider_product,

    -- * Destructuring the Response
    RegisterIdentityProviderResponse (..),
    newRegisterIdentityProviderResponse,

    -- * Response Lenses
    registerIdentityProviderResponse_httpStatus,
    registerIdentityProviderResponse_identityProviderSummary,
  )
where

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

-- | /See:/ 'newRegisterIdentityProvider' smart constructor.
data RegisterIdentityProvider = RegisterIdentityProvider'
  { -- | The registered identity provider’s product related configuration
    -- settings such as the subnets to provision VPC endpoints.
    RegisterIdentityProvider -> Maybe Settings
settings :: Prelude.Maybe Settings,
    -- | An object that specifies details for the identity provider.
    RegisterIdentityProvider -> IdentityProvider
identityProvider :: IdentityProvider,
    -- | The name of the user-based subscription product.
    RegisterIdentityProvider -> Text
product :: Prelude.Text
  }
  deriving (RegisterIdentityProvider -> RegisterIdentityProvider -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RegisterIdentityProvider -> RegisterIdentityProvider -> Bool
$c/= :: RegisterIdentityProvider -> RegisterIdentityProvider -> Bool
== :: RegisterIdentityProvider -> RegisterIdentityProvider -> Bool
$c== :: RegisterIdentityProvider -> RegisterIdentityProvider -> Bool
Prelude.Eq, ReadPrec [RegisterIdentityProvider]
ReadPrec RegisterIdentityProvider
Int -> ReadS RegisterIdentityProvider
ReadS [RegisterIdentityProvider]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RegisterIdentityProvider]
$creadListPrec :: ReadPrec [RegisterIdentityProvider]
readPrec :: ReadPrec RegisterIdentityProvider
$creadPrec :: ReadPrec RegisterIdentityProvider
readList :: ReadS [RegisterIdentityProvider]
$creadList :: ReadS [RegisterIdentityProvider]
readsPrec :: Int -> ReadS RegisterIdentityProvider
$creadsPrec :: Int -> ReadS RegisterIdentityProvider
Prelude.Read, Int -> RegisterIdentityProvider -> ShowS
[RegisterIdentityProvider] -> ShowS
RegisterIdentityProvider -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RegisterIdentityProvider] -> ShowS
$cshowList :: [RegisterIdentityProvider] -> ShowS
show :: RegisterIdentityProvider -> String
$cshow :: RegisterIdentityProvider -> String
showsPrec :: Int -> RegisterIdentityProvider -> ShowS
$cshowsPrec :: Int -> RegisterIdentityProvider -> ShowS
Prelude.Show, forall x.
Rep RegisterIdentityProvider x -> RegisterIdentityProvider
forall x.
RegisterIdentityProvider -> Rep RegisterIdentityProvider x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RegisterIdentityProvider x -> RegisterIdentityProvider
$cfrom :: forall x.
RegisterIdentityProvider -> Rep RegisterIdentityProvider x
Prelude.Generic)

-- |
-- Create a value of 'RegisterIdentityProvider' 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:
--
-- 'settings', 'registerIdentityProvider_settings' - The registered identity provider’s product related configuration
-- settings such as the subnets to provision VPC endpoints.
--
-- 'identityProvider', 'registerIdentityProvider_identityProvider' - An object that specifies details for the identity provider.
--
-- 'product', 'registerIdentityProvider_product' - The name of the user-based subscription product.
newRegisterIdentityProvider ::
  -- | 'identityProvider'
  IdentityProvider ->
  -- | 'product'
  Prelude.Text ->
  RegisterIdentityProvider
newRegisterIdentityProvider :: IdentityProvider -> Text -> RegisterIdentityProvider
newRegisterIdentityProvider
  IdentityProvider
pIdentityProvider_
  Text
pProduct_ =
    RegisterIdentityProvider'
      { $sel:settings:RegisterIdentityProvider' :: Maybe Settings
settings =
          forall a. Maybe a
Prelude.Nothing,
        $sel:identityProvider:RegisterIdentityProvider' :: IdentityProvider
identityProvider = IdentityProvider
pIdentityProvider_,
        $sel:product:RegisterIdentityProvider' :: Text
product = Text
pProduct_
      }

-- | The registered identity provider’s product related configuration
-- settings such as the subnets to provision VPC endpoints.
registerIdentityProvider_settings :: Lens.Lens' RegisterIdentityProvider (Prelude.Maybe Settings)
registerIdentityProvider_settings :: Lens' RegisterIdentityProvider (Maybe Settings)
registerIdentityProvider_settings = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RegisterIdentityProvider' {Maybe Settings
settings :: Maybe Settings
$sel:settings:RegisterIdentityProvider' :: RegisterIdentityProvider -> Maybe Settings
settings} -> Maybe Settings
settings) (\s :: RegisterIdentityProvider
s@RegisterIdentityProvider' {} Maybe Settings
a -> RegisterIdentityProvider
s {$sel:settings:RegisterIdentityProvider' :: Maybe Settings
settings = Maybe Settings
a} :: RegisterIdentityProvider)

-- | An object that specifies details for the identity provider.
registerIdentityProvider_identityProvider :: Lens.Lens' RegisterIdentityProvider IdentityProvider
registerIdentityProvider_identityProvider :: Lens' RegisterIdentityProvider IdentityProvider
registerIdentityProvider_identityProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RegisterIdentityProvider' {IdentityProvider
identityProvider :: IdentityProvider
$sel:identityProvider:RegisterIdentityProvider' :: RegisterIdentityProvider -> IdentityProvider
identityProvider} -> IdentityProvider
identityProvider) (\s :: RegisterIdentityProvider
s@RegisterIdentityProvider' {} IdentityProvider
a -> RegisterIdentityProvider
s {$sel:identityProvider:RegisterIdentityProvider' :: IdentityProvider
identityProvider = IdentityProvider
a} :: RegisterIdentityProvider)

-- | The name of the user-based subscription product.
registerIdentityProvider_product :: Lens.Lens' RegisterIdentityProvider Prelude.Text
registerIdentityProvider_product :: Lens' RegisterIdentityProvider Text
registerIdentityProvider_product = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RegisterIdentityProvider' {Text
product :: Text
$sel:product:RegisterIdentityProvider' :: RegisterIdentityProvider -> Text
product} -> Text
product) (\s :: RegisterIdentityProvider
s@RegisterIdentityProvider' {} Text
a -> RegisterIdentityProvider
s {$sel:product:RegisterIdentityProvider' :: Text
product = Text
a} :: RegisterIdentityProvider)

instance Core.AWSRequest RegisterIdentityProvider where
  type
    AWSResponse RegisterIdentityProvider =
      RegisterIdentityProviderResponse
  request :: (Service -> Service)
-> RegisterIdentityProvider -> Request RegisterIdentityProvider
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 RegisterIdentityProvider
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse RegisterIdentityProvider)))
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 -> IdentityProviderSummary -> RegisterIdentityProviderResponse
RegisterIdentityProviderResponse'
            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
"IdentityProviderSummary")
      )

instance Prelude.Hashable RegisterIdentityProvider where
  hashWithSalt :: Int -> RegisterIdentityProvider -> Int
hashWithSalt Int
_salt RegisterIdentityProvider' {Maybe Settings
Text
IdentityProvider
product :: Text
identityProvider :: IdentityProvider
settings :: Maybe Settings
$sel:product:RegisterIdentityProvider' :: RegisterIdentityProvider -> Text
$sel:identityProvider:RegisterIdentityProvider' :: RegisterIdentityProvider -> IdentityProvider
$sel:settings:RegisterIdentityProvider' :: RegisterIdentityProvider -> Maybe Settings
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Settings
settings
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` IdentityProvider
identityProvider
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
product

instance Prelude.NFData RegisterIdentityProvider where
  rnf :: RegisterIdentityProvider -> ()
rnf RegisterIdentityProvider' {Maybe Settings
Text
IdentityProvider
product :: Text
identityProvider :: IdentityProvider
settings :: Maybe Settings
$sel:product:RegisterIdentityProvider' :: RegisterIdentityProvider -> Text
$sel:identityProvider:RegisterIdentityProvider' :: RegisterIdentityProvider -> IdentityProvider
$sel:settings:RegisterIdentityProvider' :: RegisterIdentityProvider -> Maybe Settings
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Settings
settings
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf IdentityProvider
identityProvider
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
product

instance Data.ToHeaders RegisterIdentityProvider where
  toHeaders :: RegisterIdentityProvider -> 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 RegisterIdentityProvider where
  toJSON :: RegisterIdentityProvider -> Value
toJSON RegisterIdentityProvider' {Maybe Settings
Text
IdentityProvider
product :: Text
identityProvider :: IdentityProvider
settings :: Maybe Settings
$sel:product:RegisterIdentityProvider' :: RegisterIdentityProvider -> Text
$sel:identityProvider:RegisterIdentityProvider' :: RegisterIdentityProvider -> IdentityProvider
$sel:settings:RegisterIdentityProvider' :: RegisterIdentityProvider -> Maybe Settings
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Settings" 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 Settings
settings,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"IdentityProvider" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= IdentityProvider
identityProvider),
            forall a. a -> Maybe a
Prelude.Just (Key
"Product" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
product)
          ]
      )

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

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

-- | /See:/ 'newRegisterIdentityProviderResponse' smart constructor.
data RegisterIdentityProviderResponse = RegisterIdentityProviderResponse'
  { -- | The response's http status code.
    RegisterIdentityProviderResponse -> Int
httpStatus :: Prelude.Int,
    -- | Metadata that describes the results of an identity provider operation.
    RegisterIdentityProviderResponse -> IdentityProviderSummary
identityProviderSummary :: IdentityProviderSummary
  }
  deriving (RegisterIdentityProviderResponse
-> RegisterIdentityProviderResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RegisterIdentityProviderResponse
-> RegisterIdentityProviderResponse -> Bool
$c/= :: RegisterIdentityProviderResponse
-> RegisterIdentityProviderResponse -> Bool
== :: RegisterIdentityProviderResponse
-> RegisterIdentityProviderResponse -> Bool
$c== :: RegisterIdentityProviderResponse
-> RegisterIdentityProviderResponse -> Bool
Prelude.Eq, ReadPrec [RegisterIdentityProviderResponse]
ReadPrec RegisterIdentityProviderResponse
Int -> ReadS RegisterIdentityProviderResponse
ReadS [RegisterIdentityProviderResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RegisterIdentityProviderResponse]
$creadListPrec :: ReadPrec [RegisterIdentityProviderResponse]
readPrec :: ReadPrec RegisterIdentityProviderResponse
$creadPrec :: ReadPrec RegisterIdentityProviderResponse
readList :: ReadS [RegisterIdentityProviderResponse]
$creadList :: ReadS [RegisterIdentityProviderResponse]
readsPrec :: Int -> ReadS RegisterIdentityProviderResponse
$creadsPrec :: Int -> ReadS RegisterIdentityProviderResponse
Prelude.Read, Int -> RegisterIdentityProviderResponse -> ShowS
[RegisterIdentityProviderResponse] -> ShowS
RegisterIdentityProviderResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RegisterIdentityProviderResponse] -> ShowS
$cshowList :: [RegisterIdentityProviderResponse] -> ShowS
show :: RegisterIdentityProviderResponse -> String
$cshow :: RegisterIdentityProviderResponse -> String
showsPrec :: Int -> RegisterIdentityProviderResponse -> ShowS
$cshowsPrec :: Int -> RegisterIdentityProviderResponse -> ShowS
Prelude.Show, forall x.
Rep RegisterIdentityProviderResponse x
-> RegisterIdentityProviderResponse
forall x.
RegisterIdentityProviderResponse
-> Rep RegisterIdentityProviderResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RegisterIdentityProviderResponse x
-> RegisterIdentityProviderResponse
$cfrom :: forall x.
RegisterIdentityProviderResponse
-> Rep RegisterIdentityProviderResponse x
Prelude.Generic)

-- |
-- Create a value of 'RegisterIdentityProviderResponse' 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', 'registerIdentityProviderResponse_httpStatus' - The response's http status code.
--
-- 'identityProviderSummary', 'registerIdentityProviderResponse_identityProviderSummary' - Metadata that describes the results of an identity provider operation.
newRegisterIdentityProviderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'identityProviderSummary'
  IdentityProviderSummary ->
  RegisterIdentityProviderResponse
newRegisterIdentityProviderResponse :: Int -> IdentityProviderSummary -> RegisterIdentityProviderResponse
newRegisterIdentityProviderResponse
  Int
pHttpStatus_
  IdentityProviderSummary
pIdentityProviderSummary_ =
    RegisterIdentityProviderResponse'
      { $sel:httpStatus:RegisterIdentityProviderResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:identityProviderSummary:RegisterIdentityProviderResponse' :: IdentityProviderSummary
identityProviderSummary =
          IdentityProviderSummary
pIdentityProviderSummary_
      }

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

-- | Metadata that describes the results of an identity provider operation.
registerIdentityProviderResponse_identityProviderSummary :: Lens.Lens' RegisterIdentityProviderResponse IdentityProviderSummary
registerIdentityProviderResponse_identityProviderSummary :: Lens' RegisterIdentityProviderResponse IdentityProviderSummary
registerIdentityProviderResponse_identityProviderSummary = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RegisterIdentityProviderResponse' {IdentityProviderSummary
identityProviderSummary :: IdentityProviderSummary
$sel:identityProviderSummary:RegisterIdentityProviderResponse' :: RegisterIdentityProviderResponse -> IdentityProviderSummary
identityProviderSummary} -> IdentityProviderSummary
identityProviderSummary) (\s :: RegisterIdentityProviderResponse
s@RegisterIdentityProviderResponse' {} IdentityProviderSummary
a -> RegisterIdentityProviderResponse
s {$sel:identityProviderSummary:RegisterIdentityProviderResponse' :: IdentityProviderSummary
identityProviderSummary = IdentityProviderSummary
a} :: RegisterIdentityProviderResponse)

instance
  Prelude.NFData
    RegisterIdentityProviderResponse
  where
  rnf :: RegisterIdentityProviderResponse -> ()
rnf RegisterIdentityProviderResponse' {Int
IdentityProviderSummary
identityProviderSummary :: IdentityProviderSummary
httpStatus :: Int
$sel:identityProviderSummary:RegisterIdentityProviderResponse' :: RegisterIdentityProviderResponse -> IdentityProviderSummary
$sel:httpStatus:RegisterIdentityProviderResponse' :: RegisterIdentityProviderResponse -> 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 IdentityProviderSummary
identityProviderSummary