{-# 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.GlobalAccelerator.DescribeAcceleratorAttributes
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describe the attributes of an accelerator.
module Amazonka.GlobalAccelerator.DescribeAcceleratorAttributes
  ( -- * Creating a Request
    DescribeAcceleratorAttributes (..),
    newDescribeAcceleratorAttributes,

    -- * Request Lenses
    describeAcceleratorAttributes_acceleratorArn,

    -- * Destructuring the Response
    DescribeAcceleratorAttributesResponse (..),
    newDescribeAcceleratorAttributesResponse,

    -- * Response Lenses
    describeAcceleratorAttributesResponse_acceleratorAttributes,
    describeAcceleratorAttributesResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeAcceleratorAttributes' smart constructor.
data DescribeAcceleratorAttributes = DescribeAcceleratorAttributes'
  { -- | The Amazon Resource Name (ARN) of the accelerator with the attributes
    -- that you want to describe.
    DescribeAcceleratorAttributes -> Text
acceleratorArn :: Prelude.Text
  }
  deriving (DescribeAcceleratorAttributes
-> DescribeAcceleratorAttributes -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAcceleratorAttributes
-> DescribeAcceleratorAttributes -> Bool
$c/= :: DescribeAcceleratorAttributes
-> DescribeAcceleratorAttributes -> Bool
== :: DescribeAcceleratorAttributes
-> DescribeAcceleratorAttributes -> Bool
$c== :: DescribeAcceleratorAttributes
-> DescribeAcceleratorAttributes -> Bool
Prelude.Eq, ReadPrec [DescribeAcceleratorAttributes]
ReadPrec DescribeAcceleratorAttributes
Int -> ReadS DescribeAcceleratorAttributes
ReadS [DescribeAcceleratorAttributes]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAcceleratorAttributes]
$creadListPrec :: ReadPrec [DescribeAcceleratorAttributes]
readPrec :: ReadPrec DescribeAcceleratorAttributes
$creadPrec :: ReadPrec DescribeAcceleratorAttributes
readList :: ReadS [DescribeAcceleratorAttributes]
$creadList :: ReadS [DescribeAcceleratorAttributes]
readsPrec :: Int -> ReadS DescribeAcceleratorAttributes
$creadsPrec :: Int -> ReadS DescribeAcceleratorAttributes
Prelude.Read, Int -> DescribeAcceleratorAttributes -> ShowS
[DescribeAcceleratorAttributes] -> ShowS
DescribeAcceleratorAttributes -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAcceleratorAttributes] -> ShowS
$cshowList :: [DescribeAcceleratorAttributes] -> ShowS
show :: DescribeAcceleratorAttributes -> String
$cshow :: DescribeAcceleratorAttributes -> String
showsPrec :: Int -> DescribeAcceleratorAttributes -> ShowS
$cshowsPrec :: Int -> DescribeAcceleratorAttributes -> ShowS
Prelude.Show, forall x.
Rep DescribeAcceleratorAttributes x
-> DescribeAcceleratorAttributes
forall x.
DescribeAcceleratorAttributes
-> Rep DescribeAcceleratorAttributes x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeAcceleratorAttributes x
-> DescribeAcceleratorAttributes
$cfrom :: forall x.
DescribeAcceleratorAttributes
-> Rep DescribeAcceleratorAttributes x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAcceleratorAttributes' 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:
--
-- 'acceleratorArn', 'describeAcceleratorAttributes_acceleratorArn' - The Amazon Resource Name (ARN) of the accelerator with the attributes
-- that you want to describe.
newDescribeAcceleratorAttributes ::
  -- | 'acceleratorArn'
  Prelude.Text ->
  DescribeAcceleratorAttributes
newDescribeAcceleratorAttributes :: Text -> DescribeAcceleratorAttributes
newDescribeAcceleratorAttributes Text
pAcceleratorArn_ =
  DescribeAcceleratorAttributes'
    { $sel:acceleratorArn:DescribeAcceleratorAttributes' :: Text
acceleratorArn =
        Text
pAcceleratorArn_
    }

-- | The Amazon Resource Name (ARN) of the accelerator with the attributes
-- that you want to describe.
describeAcceleratorAttributes_acceleratorArn :: Lens.Lens' DescribeAcceleratorAttributes Prelude.Text
describeAcceleratorAttributes_acceleratorArn :: Lens' DescribeAcceleratorAttributes Text
describeAcceleratorAttributes_acceleratorArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAcceleratorAttributes' {Text
acceleratorArn :: Text
$sel:acceleratorArn:DescribeAcceleratorAttributes' :: DescribeAcceleratorAttributes -> Text
acceleratorArn} -> Text
acceleratorArn) (\s :: DescribeAcceleratorAttributes
s@DescribeAcceleratorAttributes' {} Text
a -> DescribeAcceleratorAttributes
s {$sel:acceleratorArn:DescribeAcceleratorAttributes' :: Text
acceleratorArn = Text
a} :: DescribeAcceleratorAttributes)

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

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

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

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

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

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

-- |
-- Create a value of 'DescribeAcceleratorAttributesResponse' 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:
--
-- 'acceleratorAttributes', 'describeAcceleratorAttributesResponse_acceleratorAttributes' - The attributes of the accelerator.
--
-- 'httpStatus', 'describeAcceleratorAttributesResponse_httpStatus' - The response's http status code.
newDescribeAcceleratorAttributesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeAcceleratorAttributesResponse
newDescribeAcceleratorAttributesResponse :: Int -> DescribeAcceleratorAttributesResponse
newDescribeAcceleratorAttributesResponse Int
pHttpStatus_ =
  DescribeAcceleratorAttributesResponse'
    { $sel:acceleratorAttributes:DescribeAcceleratorAttributesResponse' :: Maybe AcceleratorAttributes
acceleratorAttributes =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeAcceleratorAttributesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The attributes of the accelerator.
describeAcceleratorAttributesResponse_acceleratorAttributes :: Lens.Lens' DescribeAcceleratorAttributesResponse (Prelude.Maybe AcceleratorAttributes)
describeAcceleratorAttributesResponse_acceleratorAttributes :: Lens'
  DescribeAcceleratorAttributesResponse (Maybe AcceleratorAttributes)
describeAcceleratorAttributesResponse_acceleratorAttributes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAcceleratorAttributesResponse' {Maybe AcceleratorAttributes
acceleratorAttributes :: Maybe AcceleratorAttributes
$sel:acceleratorAttributes:DescribeAcceleratorAttributesResponse' :: DescribeAcceleratorAttributesResponse
-> Maybe AcceleratorAttributes
acceleratorAttributes} -> Maybe AcceleratorAttributes
acceleratorAttributes) (\s :: DescribeAcceleratorAttributesResponse
s@DescribeAcceleratorAttributesResponse' {} Maybe AcceleratorAttributes
a -> DescribeAcceleratorAttributesResponse
s {$sel:acceleratorAttributes:DescribeAcceleratorAttributesResponse' :: Maybe AcceleratorAttributes
acceleratorAttributes = Maybe AcceleratorAttributes
a} :: DescribeAcceleratorAttributesResponse)

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

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