{-# 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.MigrationHubStrategy.GetPortfolioPreferences
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves your migration and modernization preferences.
module Amazonka.MigrationHubStrategy.GetPortfolioPreferences
  ( -- * Creating a Request
    GetPortfolioPreferences (..),
    newGetPortfolioPreferences,

    -- * Destructuring the Response
    GetPortfolioPreferencesResponse (..),
    newGetPortfolioPreferencesResponse,

    -- * Response Lenses
    getPortfolioPreferencesResponse_applicationMode,
    getPortfolioPreferencesResponse_applicationPreferences,
    getPortfolioPreferencesResponse_databasePreferences,
    getPortfolioPreferencesResponse_prioritizeBusinessGoals,
    getPortfolioPreferencesResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'GetPortfolioPreferences' 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.
newGetPortfolioPreferences ::
  GetPortfolioPreferences
newGetPortfolioPreferences :: GetPortfolioPreferences
newGetPortfolioPreferences = GetPortfolioPreferences
GetPortfolioPreferences'

instance Core.AWSRequest GetPortfolioPreferences where
  type
    AWSResponse GetPortfolioPreferences =
      GetPortfolioPreferencesResponse
  request :: (Service -> Service)
-> GetPortfolioPreferences -> Request GetPortfolioPreferences
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetPortfolioPreferences
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetPortfolioPreferences)))
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 ApplicationMode
-> Maybe ApplicationPreferences
-> Maybe DatabasePreferences
-> Maybe PrioritizeBusinessGoals
-> Int
-> GetPortfolioPreferencesResponse
GetPortfolioPreferencesResponse'
            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
"applicationMode")
            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
"applicationPreferences")
            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
"databasePreferences")
            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
"prioritizeBusinessGoals")
            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 GetPortfolioPreferences where
  hashWithSalt :: Int -> GetPortfolioPreferences -> Int
hashWithSalt Int
_salt GetPortfolioPreferences
_ =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ()

instance Prelude.NFData GetPortfolioPreferences where
  rnf :: GetPortfolioPreferences -> ()
rnf GetPortfolioPreferences
_ = ()

instance Data.ToHeaders GetPortfolioPreferences where
  toHeaders :: GetPortfolioPreferences -> 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.ToPath GetPortfolioPreferences where
  toPath :: GetPortfolioPreferences -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/get-portfolio-preferences"

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

-- | /See:/ 'newGetPortfolioPreferencesResponse' smart constructor.
data GetPortfolioPreferencesResponse = GetPortfolioPreferencesResponse'
  { -- | The classification for application component types.
    GetPortfolioPreferencesResponse -> Maybe ApplicationMode
applicationMode :: Prelude.Maybe ApplicationMode,
    -- | The transformation preferences for non-database applications.
    GetPortfolioPreferencesResponse -> Maybe ApplicationPreferences
applicationPreferences :: Prelude.Maybe ApplicationPreferences,
    -- | The transformation preferences for database applications.
    GetPortfolioPreferencesResponse -> Maybe DatabasePreferences
databasePreferences :: Prelude.Maybe DatabasePreferences,
    -- | The rank of business goals based on priority.
    GetPortfolioPreferencesResponse -> Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals :: Prelude.Maybe PrioritizeBusinessGoals,
    -- | The response's http status code.
    GetPortfolioPreferencesResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetPortfolioPreferencesResponse
-> GetPortfolioPreferencesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetPortfolioPreferencesResponse
-> GetPortfolioPreferencesResponse -> Bool
$c/= :: GetPortfolioPreferencesResponse
-> GetPortfolioPreferencesResponse -> Bool
== :: GetPortfolioPreferencesResponse
-> GetPortfolioPreferencesResponse -> Bool
$c== :: GetPortfolioPreferencesResponse
-> GetPortfolioPreferencesResponse -> Bool
Prelude.Eq, ReadPrec [GetPortfolioPreferencesResponse]
ReadPrec GetPortfolioPreferencesResponse
Int -> ReadS GetPortfolioPreferencesResponse
ReadS [GetPortfolioPreferencesResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetPortfolioPreferencesResponse]
$creadListPrec :: ReadPrec [GetPortfolioPreferencesResponse]
readPrec :: ReadPrec GetPortfolioPreferencesResponse
$creadPrec :: ReadPrec GetPortfolioPreferencesResponse
readList :: ReadS [GetPortfolioPreferencesResponse]
$creadList :: ReadS [GetPortfolioPreferencesResponse]
readsPrec :: Int -> ReadS GetPortfolioPreferencesResponse
$creadsPrec :: Int -> ReadS GetPortfolioPreferencesResponse
Prelude.Read, Int -> GetPortfolioPreferencesResponse -> ShowS
[GetPortfolioPreferencesResponse] -> ShowS
GetPortfolioPreferencesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetPortfolioPreferencesResponse] -> ShowS
$cshowList :: [GetPortfolioPreferencesResponse] -> ShowS
show :: GetPortfolioPreferencesResponse -> String
$cshow :: GetPortfolioPreferencesResponse -> String
showsPrec :: Int -> GetPortfolioPreferencesResponse -> ShowS
$cshowsPrec :: Int -> GetPortfolioPreferencesResponse -> ShowS
Prelude.Show, forall x.
Rep GetPortfolioPreferencesResponse x
-> GetPortfolioPreferencesResponse
forall x.
GetPortfolioPreferencesResponse
-> Rep GetPortfolioPreferencesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetPortfolioPreferencesResponse x
-> GetPortfolioPreferencesResponse
$cfrom :: forall x.
GetPortfolioPreferencesResponse
-> Rep GetPortfolioPreferencesResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetPortfolioPreferencesResponse' 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:
--
-- 'applicationMode', 'getPortfolioPreferencesResponse_applicationMode' - The classification for application component types.
--
-- 'applicationPreferences', 'getPortfolioPreferencesResponse_applicationPreferences' - The transformation preferences for non-database applications.
--
-- 'databasePreferences', 'getPortfolioPreferencesResponse_databasePreferences' - The transformation preferences for database applications.
--
-- 'prioritizeBusinessGoals', 'getPortfolioPreferencesResponse_prioritizeBusinessGoals' - The rank of business goals based on priority.
--
-- 'httpStatus', 'getPortfolioPreferencesResponse_httpStatus' - The response's http status code.
newGetPortfolioPreferencesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetPortfolioPreferencesResponse
newGetPortfolioPreferencesResponse :: Int -> GetPortfolioPreferencesResponse
newGetPortfolioPreferencesResponse Int
pHttpStatus_ =
  GetPortfolioPreferencesResponse'
    { $sel:applicationMode:GetPortfolioPreferencesResponse' :: Maybe ApplicationMode
applicationMode =
        forall a. Maybe a
Prelude.Nothing,
      $sel:applicationPreferences:GetPortfolioPreferencesResponse' :: Maybe ApplicationPreferences
applicationPreferences = forall a. Maybe a
Prelude.Nothing,
      $sel:databasePreferences:GetPortfolioPreferencesResponse' :: Maybe DatabasePreferences
databasePreferences = forall a. Maybe a
Prelude.Nothing,
      $sel:prioritizeBusinessGoals:GetPortfolioPreferencesResponse' :: Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetPortfolioPreferencesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The classification for application component types.
getPortfolioPreferencesResponse_applicationMode :: Lens.Lens' GetPortfolioPreferencesResponse (Prelude.Maybe ApplicationMode)
getPortfolioPreferencesResponse_applicationMode :: Lens' GetPortfolioPreferencesResponse (Maybe ApplicationMode)
getPortfolioPreferencesResponse_applicationMode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetPortfolioPreferencesResponse' {Maybe ApplicationMode
applicationMode :: Maybe ApplicationMode
$sel:applicationMode:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe ApplicationMode
applicationMode} -> Maybe ApplicationMode
applicationMode) (\s :: GetPortfolioPreferencesResponse
s@GetPortfolioPreferencesResponse' {} Maybe ApplicationMode
a -> GetPortfolioPreferencesResponse
s {$sel:applicationMode:GetPortfolioPreferencesResponse' :: Maybe ApplicationMode
applicationMode = Maybe ApplicationMode
a} :: GetPortfolioPreferencesResponse)

-- | The transformation preferences for non-database applications.
getPortfolioPreferencesResponse_applicationPreferences :: Lens.Lens' GetPortfolioPreferencesResponse (Prelude.Maybe ApplicationPreferences)
getPortfolioPreferencesResponse_applicationPreferences :: Lens'
  GetPortfolioPreferencesResponse (Maybe ApplicationPreferences)
getPortfolioPreferencesResponse_applicationPreferences = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetPortfolioPreferencesResponse' {Maybe ApplicationPreferences
applicationPreferences :: Maybe ApplicationPreferences
$sel:applicationPreferences:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe ApplicationPreferences
applicationPreferences} -> Maybe ApplicationPreferences
applicationPreferences) (\s :: GetPortfolioPreferencesResponse
s@GetPortfolioPreferencesResponse' {} Maybe ApplicationPreferences
a -> GetPortfolioPreferencesResponse
s {$sel:applicationPreferences:GetPortfolioPreferencesResponse' :: Maybe ApplicationPreferences
applicationPreferences = Maybe ApplicationPreferences
a} :: GetPortfolioPreferencesResponse)

-- | The transformation preferences for database applications.
getPortfolioPreferencesResponse_databasePreferences :: Lens.Lens' GetPortfolioPreferencesResponse (Prelude.Maybe DatabasePreferences)
getPortfolioPreferencesResponse_databasePreferences :: Lens' GetPortfolioPreferencesResponse (Maybe DatabasePreferences)
getPortfolioPreferencesResponse_databasePreferences = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetPortfolioPreferencesResponse' {Maybe DatabasePreferences
databasePreferences :: Maybe DatabasePreferences
$sel:databasePreferences:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe DatabasePreferences
databasePreferences} -> Maybe DatabasePreferences
databasePreferences) (\s :: GetPortfolioPreferencesResponse
s@GetPortfolioPreferencesResponse' {} Maybe DatabasePreferences
a -> GetPortfolioPreferencesResponse
s {$sel:databasePreferences:GetPortfolioPreferencesResponse' :: Maybe DatabasePreferences
databasePreferences = Maybe DatabasePreferences
a} :: GetPortfolioPreferencesResponse)

-- | The rank of business goals based on priority.
getPortfolioPreferencesResponse_prioritizeBusinessGoals :: Lens.Lens' GetPortfolioPreferencesResponse (Prelude.Maybe PrioritizeBusinessGoals)
getPortfolioPreferencesResponse_prioritizeBusinessGoals :: Lens'
  GetPortfolioPreferencesResponse (Maybe PrioritizeBusinessGoals)
getPortfolioPreferencesResponse_prioritizeBusinessGoals = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetPortfolioPreferencesResponse' {Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals :: Maybe PrioritizeBusinessGoals
$sel:prioritizeBusinessGoals:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals} -> Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals) (\s :: GetPortfolioPreferencesResponse
s@GetPortfolioPreferencesResponse' {} Maybe PrioritizeBusinessGoals
a -> GetPortfolioPreferencesResponse
s {$sel:prioritizeBusinessGoals:GetPortfolioPreferencesResponse' :: Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals = Maybe PrioritizeBusinessGoals
a} :: GetPortfolioPreferencesResponse)

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

instance
  Prelude.NFData
    GetPortfolioPreferencesResponse
  where
  rnf :: GetPortfolioPreferencesResponse -> ()
rnf GetPortfolioPreferencesResponse' {Int
Maybe ApplicationMode
Maybe PrioritizeBusinessGoals
Maybe ApplicationPreferences
Maybe DatabasePreferences
httpStatus :: Int
prioritizeBusinessGoals :: Maybe PrioritizeBusinessGoals
databasePreferences :: Maybe DatabasePreferences
applicationPreferences :: Maybe ApplicationPreferences
applicationMode :: Maybe ApplicationMode
$sel:httpStatus:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Int
$sel:prioritizeBusinessGoals:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe PrioritizeBusinessGoals
$sel:databasePreferences:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe DatabasePreferences
$sel:applicationPreferences:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe ApplicationPreferences
$sel:applicationMode:GetPortfolioPreferencesResponse' :: GetPortfolioPreferencesResponse -> Maybe ApplicationMode
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ApplicationMode
applicationMode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ApplicationPreferences
applicationPreferences
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DatabasePreferences
databasePreferences
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PrioritizeBusinessGoals
prioritizeBusinessGoals
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus