{-# 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.EKS.DescribeAddon
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes an Amazon EKS add-on.
module Amazonka.EKS.DescribeAddon
  ( -- * Creating a Request
    DescribeAddon (..),
    newDescribeAddon,

    -- * Request Lenses
    describeAddon_clusterName,
    describeAddon_addonName,

    -- * Destructuring the Response
    DescribeAddonResponse (..),
    newDescribeAddonResponse,

    -- * Response Lenses
    describeAddonResponse_addon,
    describeAddonResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeAddon' smart constructor.
data DescribeAddon = DescribeAddon'
  { -- | The name of the cluster.
    DescribeAddon -> Text
clusterName :: Prelude.Text,
    -- | The name of the add-on. The name must match one of the names returned by
    -- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
    -- .
    DescribeAddon -> Text
addonName :: Prelude.Text
  }
  deriving (DescribeAddon -> DescribeAddon -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeAddon -> DescribeAddon -> Bool
$c/= :: DescribeAddon -> DescribeAddon -> Bool
== :: DescribeAddon -> DescribeAddon -> Bool
$c== :: DescribeAddon -> DescribeAddon -> Bool
Prelude.Eq, ReadPrec [DescribeAddon]
ReadPrec DescribeAddon
Int -> ReadS DescribeAddon
ReadS [DescribeAddon]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeAddon]
$creadListPrec :: ReadPrec [DescribeAddon]
readPrec :: ReadPrec DescribeAddon
$creadPrec :: ReadPrec DescribeAddon
readList :: ReadS [DescribeAddon]
$creadList :: ReadS [DescribeAddon]
readsPrec :: Int -> ReadS DescribeAddon
$creadsPrec :: Int -> ReadS DescribeAddon
Prelude.Read, Int -> DescribeAddon -> ShowS
[DescribeAddon] -> ShowS
DescribeAddon -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeAddon] -> ShowS
$cshowList :: [DescribeAddon] -> ShowS
show :: DescribeAddon -> String
$cshow :: DescribeAddon -> String
showsPrec :: Int -> DescribeAddon -> ShowS
$cshowsPrec :: Int -> DescribeAddon -> ShowS
Prelude.Show, forall x. Rep DescribeAddon x -> DescribeAddon
forall x. DescribeAddon -> Rep DescribeAddon x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeAddon x -> DescribeAddon
$cfrom :: forall x. DescribeAddon -> Rep DescribeAddon x
Prelude.Generic)

-- |
-- Create a value of 'DescribeAddon' 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:
--
-- 'clusterName', 'describeAddon_clusterName' - The name of the cluster.
--
-- 'addonName', 'describeAddon_addonName' - The name of the add-on. The name must match one of the names returned by
-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
-- .
newDescribeAddon ::
  -- | 'clusterName'
  Prelude.Text ->
  -- | 'addonName'
  Prelude.Text ->
  DescribeAddon
newDescribeAddon :: Text -> Text -> DescribeAddon
newDescribeAddon Text
pClusterName_ Text
pAddonName_ =
  DescribeAddon'
    { $sel:clusterName:DescribeAddon' :: Text
clusterName = Text
pClusterName_,
      $sel:addonName:DescribeAddon' :: Text
addonName = Text
pAddonName_
    }

-- | The name of the cluster.
describeAddon_clusterName :: Lens.Lens' DescribeAddon Prelude.Text
describeAddon_clusterName :: Lens' DescribeAddon Text
describeAddon_clusterName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAddon' {Text
clusterName :: Text
$sel:clusterName:DescribeAddon' :: DescribeAddon -> Text
clusterName} -> Text
clusterName) (\s :: DescribeAddon
s@DescribeAddon' {} Text
a -> DescribeAddon
s {$sel:clusterName:DescribeAddon' :: Text
clusterName = Text
a} :: DescribeAddon)

-- | The name of the add-on. The name must match one of the names returned by
-- <https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html ListAddons>
-- .
describeAddon_addonName :: Lens.Lens' DescribeAddon Prelude.Text
describeAddon_addonName :: Lens' DescribeAddon Text
describeAddon_addonName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAddon' {Text
addonName :: Text
$sel:addonName:DescribeAddon' :: DescribeAddon -> Text
addonName} -> Text
addonName) (\s :: DescribeAddon
s@DescribeAddon' {} Text
a -> DescribeAddon
s {$sel:addonName:DescribeAddon' :: Text
addonName = Text
a} :: DescribeAddon)

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

instance Prelude.NFData DescribeAddon where
  rnf :: DescribeAddon -> ()
rnf DescribeAddon' {Text
addonName :: Text
clusterName :: Text
$sel:addonName:DescribeAddon' :: DescribeAddon -> Text
$sel:clusterName:DescribeAddon' :: DescribeAddon -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
clusterName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
addonName

instance Data.ToHeaders DescribeAddon where
  toHeaders :: DescribeAddon -> 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 DescribeAddon where
  toPath :: DescribeAddon -> ByteString
toPath DescribeAddon' {Text
addonName :: Text
clusterName :: Text
$sel:addonName:DescribeAddon' :: DescribeAddon -> Text
$sel:clusterName:DescribeAddon' :: DescribeAddon -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/clusters/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
clusterName,
        ByteString
"/addons/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
addonName
      ]

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

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

-- |
-- Create a value of 'DescribeAddonResponse' 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:
--
-- 'addon', 'describeAddonResponse_addon' - Undocumented member.
--
-- 'httpStatus', 'describeAddonResponse_httpStatus' - The response's http status code.
newDescribeAddonResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeAddonResponse
newDescribeAddonResponse :: Int -> DescribeAddonResponse
newDescribeAddonResponse Int
pHttpStatus_ =
  DescribeAddonResponse'
    { $sel:addon:DescribeAddonResponse' :: Maybe Addon
addon = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeAddonResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
describeAddonResponse_addon :: Lens.Lens' DescribeAddonResponse (Prelude.Maybe Addon)
describeAddonResponse_addon :: Lens' DescribeAddonResponse (Maybe Addon)
describeAddonResponse_addon = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeAddonResponse' {Maybe Addon
addon :: Maybe Addon
$sel:addon:DescribeAddonResponse' :: DescribeAddonResponse -> Maybe Addon
addon} -> Maybe Addon
addon) (\s :: DescribeAddonResponse
s@DescribeAddonResponse' {} Maybe Addon
a -> DescribeAddonResponse
s {$sel:addon:DescribeAddonResponse' :: Maybe Addon
addon = Maybe Addon
a} :: DescribeAddonResponse)

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

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