{-# 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.AlexaBusiness.GetAddressBook
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets address the book details by the address book ARN.
module Amazonka.AlexaBusiness.GetAddressBook
  ( -- * Creating a Request
    GetAddressBook (..),
    newGetAddressBook,

    -- * Request Lenses
    getAddressBook_addressBookArn,

    -- * Destructuring the Response
    GetAddressBookResponse (..),
    newGetAddressBookResponse,

    -- * Response Lenses
    getAddressBookResponse_addressBook,
    getAddressBookResponse_httpStatus,
  )
where

import Amazonka.AlexaBusiness.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

-- | /See:/ 'newGetAddressBook' smart constructor.
data GetAddressBook = GetAddressBook'
  { -- | The ARN of the address book for which to request details.
    GetAddressBook -> Text
addressBookArn :: Prelude.Text
  }
  deriving (GetAddressBook -> GetAddressBook -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAddressBook -> GetAddressBook -> Bool
$c/= :: GetAddressBook -> GetAddressBook -> Bool
== :: GetAddressBook -> GetAddressBook -> Bool
$c== :: GetAddressBook -> GetAddressBook -> Bool
Prelude.Eq, ReadPrec [GetAddressBook]
ReadPrec GetAddressBook
Int -> ReadS GetAddressBook
ReadS [GetAddressBook]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAddressBook]
$creadListPrec :: ReadPrec [GetAddressBook]
readPrec :: ReadPrec GetAddressBook
$creadPrec :: ReadPrec GetAddressBook
readList :: ReadS [GetAddressBook]
$creadList :: ReadS [GetAddressBook]
readsPrec :: Int -> ReadS GetAddressBook
$creadsPrec :: Int -> ReadS GetAddressBook
Prelude.Read, Int -> GetAddressBook -> ShowS
[GetAddressBook] -> ShowS
GetAddressBook -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAddressBook] -> ShowS
$cshowList :: [GetAddressBook] -> ShowS
show :: GetAddressBook -> String
$cshow :: GetAddressBook -> String
showsPrec :: Int -> GetAddressBook -> ShowS
$cshowsPrec :: Int -> GetAddressBook -> ShowS
Prelude.Show, forall x. Rep GetAddressBook x -> GetAddressBook
forall x. GetAddressBook -> Rep GetAddressBook x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetAddressBook x -> GetAddressBook
$cfrom :: forall x. GetAddressBook -> Rep GetAddressBook x
Prelude.Generic)

-- |
-- Create a value of 'GetAddressBook' 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:
--
-- 'addressBookArn', 'getAddressBook_addressBookArn' - The ARN of the address book for which to request details.
newGetAddressBook ::
  -- | 'addressBookArn'
  Prelude.Text ->
  GetAddressBook
newGetAddressBook :: Text -> GetAddressBook
newGetAddressBook Text
pAddressBookArn_ =
  GetAddressBook' {$sel:addressBookArn:GetAddressBook' :: Text
addressBookArn = Text
pAddressBookArn_}

-- | The ARN of the address book for which to request details.
getAddressBook_addressBookArn :: Lens.Lens' GetAddressBook Prelude.Text
getAddressBook_addressBookArn :: Lens' GetAddressBook Text
getAddressBook_addressBookArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAddressBook' {Text
addressBookArn :: Text
$sel:addressBookArn:GetAddressBook' :: GetAddressBook -> Text
addressBookArn} -> Text
addressBookArn) (\s :: GetAddressBook
s@GetAddressBook' {} Text
a -> GetAddressBook
s {$sel:addressBookArn:GetAddressBook' :: Text
addressBookArn = Text
a} :: GetAddressBook)

instance Core.AWSRequest GetAddressBook where
  type
    AWSResponse GetAddressBook =
      GetAddressBookResponse
  request :: (Service -> Service) -> GetAddressBook -> Request GetAddressBook
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 GetAddressBook
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetAddressBook)))
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 AddressBook -> Int -> GetAddressBookResponse
GetAddressBookResponse'
            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
"AddressBook")
            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 GetAddressBook where
  hashWithSalt :: Int -> GetAddressBook -> Int
hashWithSalt Int
_salt GetAddressBook' {Text
addressBookArn :: Text
$sel:addressBookArn:GetAddressBook' :: GetAddressBook -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
addressBookArn

instance Prelude.NFData GetAddressBook where
  rnf :: GetAddressBook -> ()
rnf GetAddressBook' {Text
addressBookArn :: Text
$sel:addressBookArn:GetAddressBook' :: GetAddressBook -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
addressBookArn

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

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

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

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

-- |
-- Create a value of 'GetAddressBookResponse' 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:
--
-- 'addressBook', 'getAddressBookResponse_addressBook' - The details of the requested address book.
--
-- 'httpStatus', 'getAddressBookResponse_httpStatus' - The response's http status code.
newGetAddressBookResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetAddressBookResponse
newGetAddressBookResponse :: Int -> GetAddressBookResponse
newGetAddressBookResponse Int
pHttpStatus_ =
  GetAddressBookResponse'
    { $sel:addressBook:GetAddressBookResponse' :: Maybe AddressBook
addressBook =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetAddressBookResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The details of the requested address book.
getAddressBookResponse_addressBook :: Lens.Lens' GetAddressBookResponse (Prelude.Maybe AddressBook)
getAddressBookResponse_addressBook :: Lens' GetAddressBookResponse (Maybe AddressBook)
getAddressBookResponse_addressBook = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAddressBookResponse' {Maybe AddressBook
addressBook :: Maybe AddressBook
$sel:addressBook:GetAddressBookResponse' :: GetAddressBookResponse -> Maybe AddressBook
addressBook} -> Maybe AddressBook
addressBook) (\s :: GetAddressBookResponse
s@GetAddressBookResponse' {} Maybe AddressBook
a -> GetAddressBookResponse
s {$sel:addressBook:GetAddressBookResponse' :: Maybe AddressBook
addressBook = Maybe AddressBook
a} :: GetAddressBookResponse)

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

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