{-# 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.ConnectCampaigns.StartInstanceOnboardingJob
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Onboard the specific Amazon Connect instance to Connect Campaigns.
module Amazonka.ConnectCampaigns.StartInstanceOnboardingJob
  ( -- * Creating a Request
    StartInstanceOnboardingJob (..),
    newStartInstanceOnboardingJob,

    -- * Request Lenses
    startInstanceOnboardingJob_connectInstanceId,
    startInstanceOnboardingJob_encryptionConfig,

    -- * Destructuring the Response
    StartInstanceOnboardingJobResponse (..),
    newStartInstanceOnboardingJobResponse,

    -- * Response Lenses
    startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus,
    startInstanceOnboardingJobResponse_httpStatus,
  )
where

import Amazonka.ConnectCampaigns.Types
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

-- | The request for StartInstanceOnboardingJob API.
--
-- /See:/ 'newStartInstanceOnboardingJob' smart constructor.
data StartInstanceOnboardingJob = StartInstanceOnboardingJob'
  { StartInstanceOnboardingJob -> Text
connectInstanceId :: Prelude.Text,
    StartInstanceOnboardingJob -> EncryptionConfig
encryptionConfig :: EncryptionConfig
  }
  deriving (StartInstanceOnboardingJob -> StartInstanceOnboardingJob -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartInstanceOnboardingJob -> StartInstanceOnboardingJob -> Bool
$c/= :: StartInstanceOnboardingJob -> StartInstanceOnboardingJob -> Bool
== :: StartInstanceOnboardingJob -> StartInstanceOnboardingJob -> Bool
$c== :: StartInstanceOnboardingJob -> StartInstanceOnboardingJob -> Bool
Prelude.Eq, ReadPrec [StartInstanceOnboardingJob]
ReadPrec StartInstanceOnboardingJob
Int -> ReadS StartInstanceOnboardingJob
ReadS [StartInstanceOnboardingJob]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartInstanceOnboardingJob]
$creadListPrec :: ReadPrec [StartInstanceOnboardingJob]
readPrec :: ReadPrec StartInstanceOnboardingJob
$creadPrec :: ReadPrec StartInstanceOnboardingJob
readList :: ReadS [StartInstanceOnboardingJob]
$creadList :: ReadS [StartInstanceOnboardingJob]
readsPrec :: Int -> ReadS StartInstanceOnboardingJob
$creadsPrec :: Int -> ReadS StartInstanceOnboardingJob
Prelude.Read, Int -> StartInstanceOnboardingJob -> ShowS
[StartInstanceOnboardingJob] -> ShowS
StartInstanceOnboardingJob -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartInstanceOnboardingJob] -> ShowS
$cshowList :: [StartInstanceOnboardingJob] -> ShowS
show :: StartInstanceOnboardingJob -> String
$cshow :: StartInstanceOnboardingJob -> String
showsPrec :: Int -> StartInstanceOnboardingJob -> ShowS
$cshowsPrec :: Int -> StartInstanceOnboardingJob -> ShowS
Prelude.Show, forall x.
Rep StartInstanceOnboardingJob x -> StartInstanceOnboardingJob
forall x.
StartInstanceOnboardingJob -> Rep StartInstanceOnboardingJob x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep StartInstanceOnboardingJob x -> StartInstanceOnboardingJob
$cfrom :: forall x.
StartInstanceOnboardingJob -> Rep StartInstanceOnboardingJob x
Prelude.Generic)

-- |
-- Create a value of 'StartInstanceOnboardingJob' 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:
--
-- 'connectInstanceId', 'startInstanceOnboardingJob_connectInstanceId' - Undocumented member.
--
-- 'encryptionConfig', 'startInstanceOnboardingJob_encryptionConfig' - Undocumented member.
newStartInstanceOnboardingJob ::
  -- | 'connectInstanceId'
  Prelude.Text ->
  -- | 'encryptionConfig'
  EncryptionConfig ->
  StartInstanceOnboardingJob
newStartInstanceOnboardingJob :: Text -> EncryptionConfig -> StartInstanceOnboardingJob
newStartInstanceOnboardingJob
  Text
pConnectInstanceId_
  EncryptionConfig
pEncryptionConfig_ =
    StartInstanceOnboardingJob'
      { $sel:connectInstanceId:StartInstanceOnboardingJob' :: Text
connectInstanceId =
          Text
pConnectInstanceId_,
        $sel:encryptionConfig:StartInstanceOnboardingJob' :: EncryptionConfig
encryptionConfig = EncryptionConfig
pEncryptionConfig_
      }

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

-- | Undocumented member.
startInstanceOnboardingJob_encryptionConfig :: Lens.Lens' StartInstanceOnboardingJob EncryptionConfig
startInstanceOnboardingJob_encryptionConfig :: Lens' StartInstanceOnboardingJob EncryptionConfig
startInstanceOnboardingJob_encryptionConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartInstanceOnboardingJob' {EncryptionConfig
encryptionConfig :: EncryptionConfig
$sel:encryptionConfig:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> EncryptionConfig
encryptionConfig} -> EncryptionConfig
encryptionConfig) (\s :: StartInstanceOnboardingJob
s@StartInstanceOnboardingJob' {} EncryptionConfig
a -> StartInstanceOnboardingJob
s {$sel:encryptionConfig:StartInstanceOnboardingJob' :: EncryptionConfig
encryptionConfig = EncryptionConfig
a} :: StartInstanceOnboardingJob)

instance Core.AWSRequest StartInstanceOnboardingJob where
  type
    AWSResponse StartInstanceOnboardingJob =
      StartInstanceOnboardingJobResponse
  request :: (Service -> Service)
-> StartInstanceOnboardingJob -> Request StartInstanceOnboardingJob
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy StartInstanceOnboardingJob
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse StartInstanceOnboardingJob)))
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 InstanceOnboardingJobStatus
-> Int -> StartInstanceOnboardingJobResponse
StartInstanceOnboardingJobResponse'
            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
"connectInstanceOnboardingJobStatus")
            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 StartInstanceOnboardingJob where
  hashWithSalt :: Int -> StartInstanceOnboardingJob -> Int
hashWithSalt Int
_salt StartInstanceOnboardingJob' {Text
EncryptionConfig
encryptionConfig :: EncryptionConfig
connectInstanceId :: Text
$sel:encryptionConfig:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> EncryptionConfig
$sel:connectInstanceId:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
connectInstanceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` EncryptionConfig
encryptionConfig

instance Prelude.NFData StartInstanceOnboardingJob where
  rnf :: StartInstanceOnboardingJob -> ()
rnf StartInstanceOnboardingJob' {Text
EncryptionConfig
encryptionConfig :: EncryptionConfig
connectInstanceId :: Text
$sel:encryptionConfig:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> EncryptionConfig
$sel:connectInstanceId:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
connectInstanceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf EncryptionConfig
encryptionConfig

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

instance Data.ToPath StartInstanceOnboardingJob where
  toPath :: StartInstanceOnboardingJob -> ByteString
toPath StartInstanceOnboardingJob' {Text
EncryptionConfig
encryptionConfig :: EncryptionConfig
connectInstanceId :: Text
$sel:encryptionConfig:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> EncryptionConfig
$sel:connectInstanceId:StartInstanceOnboardingJob' :: StartInstanceOnboardingJob -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/connect-instance/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
connectInstanceId,
        ByteString
"/onboarding"
      ]

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

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

-- |
-- Create a value of 'StartInstanceOnboardingJobResponse' 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:
--
-- 'connectInstanceOnboardingJobStatus', 'startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus' - Undocumented member.
--
-- 'httpStatus', 'startInstanceOnboardingJobResponse_httpStatus' - The response's http status code.
newStartInstanceOnboardingJobResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  StartInstanceOnboardingJobResponse
newStartInstanceOnboardingJobResponse :: Int -> StartInstanceOnboardingJobResponse
newStartInstanceOnboardingJobResponse Int
pHttpStatus_ =
  StartInstanceOnboardingJobResponse'
    { $sel:connectInstanceOnboardingJobStatus:StartInstanceOnboardingJobResponse' :: Maybe InstanceOnboardingJobStatus
connectInstanceOnboardingJobStatus =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:StartInstanceOnboardingJobResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus :: Lens.Lens' StartInstanceOnboardingJobResponse (Prelude.Maybe InstanceOnboardingJobStatus)
startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus :: Lens'
  StartInstanceOnboardingJobResponse
  (Maybe InstanceOnboardingJobStatus)
startInstanceOnboardingJobResponse_connectInstanceOnboardingJobStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartInstanceOnboardingJobResponse' {Maybe InstanceOnboardingJobStatus
connectInstanceOnboardingJobStatus :: Maybe InstanceOnboardingJobStatus
$sel:connectInstanceOnboardingJobStatus:StartInstanceOnboardingJobResponse' :: StartInstanceOnboardingJobResponse
-> Maybe InstanceOnboardingJobStatus
connectInstanceOnboardingJobStatus} -> Maybe InstanceOnboardingJobStatus
connectInstanceOnboardingJobStatus) (\s :: StartInstanceOnboardingJobResponse
s@StartInstanceOnboardingJobResponse' {} Maybe InstanceOnboardingJobStatus
a -> StartInstanceOnboardingJobResponse
s {$sel:connectInstanceOnboardingJobStatus:StartInstanceOnboardingJobResponse' :: Maybe InstanceOnboardingJobStatus
connectInstanceOnboardingJobStatus = Maybe InstanceOnboardingJobStatus
a} :: StartInstanceOnboardingJobResponse)

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

instance
  Prelude.NFData
    StartInstanceOnboardingJobResponse
  where
  rnf :: StartInstanceOnboardingJobResponse -> ()
rnf StartInstanceOnboardingJobResponse' {Int
Maybe InstanceOnboardingJobStatus
httpStatus :: Int
connectInstanceOnboardingJobStatus :: Maybe InstanceOnboardingJobStatus
$sel:httpStatus:StartInstanceOnboardingJobResponse' :: StartInstanceOnboardingJobResponse -> Int
$sel:connectInstanceOnboardingJobStatus:StartInstanceOnboardingJobResponse' :: StartInstanceOnboardingJobResponse
-> Maybe InstanceOnboardingJobStatus
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceOnboardingJobStatus
connectInstanceOnboardingJobStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus