{-# 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.ElasticSearch.DescribeVpcEndpoints
-- 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 one or more Amazon OpenSearch Service-managed VPC endpoints.
module Amazonka.ElasticSearch.DescribeVpcEndpoints
  ( -- * Creating a Request
    DescribeVpcEndpoints (..),
    newDescribeVpcEndpoints,

    -- * Request Lenses
    describeVpcEndpoints_vpcEndpointIds,

    -- * Destructuring the Response
    DescribeVpcEndpointsResponse (..),
    newDescribeVpcEndpointsResponse,

    -- * Response Lenses
    describeVpcEndpointsResponse_httpStatus,
    describeVpcEndpointsResponse_vpcEndpoints,
    describeVpcEndpointsResponse_vpcEndpointErrors,
  )
where

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

-- | Container for request parameters to the @DescribeVpcEndpoints@
-- operation. Specifies the list of VPC endpoints to be described.
--
-- /See:/ 'newDescribeVpcEndpoints' smart constructor.
data DescribeVpcEndpoints = DescribeVpcEndpoints'
  { -- | The unique identifiers of the endpoints to get information about.
    DescribeVpcEndpoints -> [Text]
vpcEndpointIds :: [Prelude.Text]
  }
  deriving (DescribeVpcEndpoints -> DescribeVpcEndpoints -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeVpcEndpoints -> DescribeVpcEndpoints -> Bool
$c/= :: DescribeVpcEndpoints -> DescribeVpcEndpoints -> Bool
== :: DescribeVpcEndpoints -> DescribeVpcEndpoints -> Bool
$c== :: DescribeVpcEndpoints -> DescribeVpcEndpoints -> Bool
Prelude.Eq, ReadPrec [DescribeVpcEndpoints]
ReadPrec DescribeVpcEndpoints
Int -> ReadS DescribeVpcEndpoints
ReadS [DescribeVpcEndpoints]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeVpcEndpoints]
$creadListPrec :: ReadPrec [DescribeVpcEndpoints]
readPrec :: ReadPrec DescribeVpcEndpoints
$creadPrec :: ReadPrec DescribeVpcEndpoints
readList :: ReadS [DescribeVpcEndpoints]
$creadList :: ReadS [DescribeVpcEndpoints]
readsPrec :: Int -> ReadS DescribeVpcEndpoints
$creadsPrec :: Int -> ReadS DescribeVpcEndpoints
Prelude.Read, Int -> DescribeVpcEndpoints -> ShowS
[DescribeVpcEndpoints] -> ShowS
DescribeVpcEndpoints -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeVpcEndpoints] -> ShowS
$cshowList :: [DescribeVpcEndpoints] -> ShowS
show :: DescribeVpcEndpoints -> String
$cshow :: DescribeVpcEndpoints -> String
showsPrec :: Int -> DescribeVpcEndpoints -> ShowS
$cshowsPrec :: Int -> DescribeVpcEndpoints -> ShowS
Prelude.Show, forall x. Rep DescribeVpcEndpoints x -> DescribeVpcEndpoints
forall x. DescribeVpcEndpoints -> Rep DescribeVpcEndpoints x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeVpcEndpoints x -> DescribeVpcEndpoints
$cfrom :: forall x. DescribeVpcEndpoints -> Rep DescribeVpcEndpoints x
Prelude.Generic)

-- |
-- Create a value of 'DescribeVpcEndpoints' 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:
--
-- 'vpcEndpointIds', 'describeVpcEndpoints_vpcEndpointIds' - The unique identifiers of the endpoints to get information about.
newDescribeVpcEndpoints ::
  DescribeVpcEndpoints
newDescribeVpcEndpoints :: DescribeVpcEndpoints
newDescribeVpcEndpoints =
  DescribeVpcEndpoints'
    { $sel:vpcEndpointIds:DescribeVpcEndpoints' :: [Text]
vpcEndpointIds =
        forall a. Monoid a => a
Prelude.mempty
    }

-- | The unique identifiers of the endpoints to get information about.
describeVpcEndpoints_vpcEndpointIds :: Lens.Lens' DescribeVpcEndpoints [Prelude.Text]
describeVpcEndpoints_vpcEndpointIds :: Lens' DescribeVpcEndpoints [Text]
describeVpcEndpoints_vpcEndpointIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVpcEndpoints' {[Text]
vpcEndpointIds :: [Text]
$sel:vpcEndpointIds:DescribeVpcEndpoints' :: DescribeVpcEndpoints -> [Text]
vpcEndpointIds} -> [Text]
vpcEndpointIds) (\s :: DescribeVpcEndpoints
s@DescribeVpcEndpoints' {} [Text]
a -> DescribeVpcEndpoints
s {$sel:vpcEndpointIds:DescribeVpcEndpoints' :: [Text]
vpcEndpointIds = [Text]
a} :: DescribeVpcEndpoints) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest DescribeVpcEndpoints where
  type
    AWSResponse DescribeVpcEndpoints =
      DescribeVpcEndpointsResponse
  request :: (Service -> Service)
-> DescribeVpcEndpoints -> Request DescribeVpcEndpoints
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 DescribeVpcEndpoints
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeVpcEndpoints)))
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 ->
          Int
-> [VpcEndpoint]
-> [VpcEndpointError]
-> DescribeVpcEndpointsResponse
DescribeVpcEndpointsResponse'
            forall (f :: * -> *) a b. Functor 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))
            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
"VpcEndpoints" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
            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
"VpcEndpointErrors"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
      )

instance Prelude.Hashable DescribeVpcEndpoints where
  hashWithSalt :: Int -> DescribeVpcEndpoints -> Int
hashWithSalt Int
_salt DescribeVpcEndpoints' {[Text]
vpcEndpointIds :: [Text]
$sel:vpcEndpointIds:DescribeVpcEndpoints' :: DescribeVpcEndpoints -> [Text]
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [Text]
vpcEndpointIds

instance Prelude.NFData DescribeVpcEndpoints where
  rnf :: DescribeVpcEndpoints -> ()
rnf DescribeVpcEndpoints' {[Text]
vpcEndpointIds :: [Text]
$sel:vpcEndpointIds:DescribeVpcEndpoints' :: DescribeVpcEndpoints -> [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf [Text]
vpcEndpointIds

instance Data.ToHeaders DescribeVpcEndpoints where
  toHeaders :: DescribeVpcEndpoints -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON DescribeVpcEndpoints where
  toJSON :: DescribeVpcEndpoints -> Value
toJSON DescribeVpcEndpoints' {[Text]
vpcEndpointIds :: [Text]
$sel:vpcEndpointIds:DescribeVpcEndpoints' :: DescribeVpcEndpoints -> [Text]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"VpcEndpointIds" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [Text]
vpcEndpointIds)
          ]
      )

instance Data.ToPath DescribeVpcEndpoints where
  toPath :: DescribeVpcEndpoints -> ByteString
toPath =
    forall a b. a -> b -> a
Prelude.const
      ByteString
"/2015-01-01/es/vpcEndpoints/describe"

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

-- | Container for response parameters to the @DescribeVpcEndpoints@
-- operation. Returns a list containing configuration details and status of
-- the VPC Endpoints as well as a list containing error responses of the
-- endpoints that could not be described
--
-- /See:/ 'newDescribeVpcEndpointsResponse' smart constructor.
data DescribeVpcEndpointsResponse = DescribeVpcEndpointsResponse'
  { -- | The response's http status code.
    DescribeVpcEndpointsResponse -> Int
httpStatus :: Prelude.Int,
    -- | Information about each requested VPC endpoint.
    DescribeVpcEndpointsResponse -> [VpcEndpoint]
vpcEndpoints :: [VpcEndpoint],
    -- | Any errors associated with the request.
    DescribeVpcEndpointsResponse -> [VpcEndpointError]
vpcEndpointErrors :: [VpcEndpointError]
  }
  deriving (DescribeVpcEndpointsResponse
-> DescribeVpcEndpointsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeVpcEndpointsResponse
-> DescribeVpcEndpointsResponse -> Bool
$c/= :: DescribeVpcEndpointsResponse
-> DescribeVpcEndpointsResponse -> Bool
== :: DescribeVpcEndpointsResponse
-> DescribeVpcEndpointsResponse -> Bool
$c== :: DescribeVpcEndpointsResponse
-> DescribeVpcEndpointsResponse -> Bool
Prelude.Eq, ReadPrec [DescribeVpcEndpointsResponse]
ReadPrec DescribeVpcEndpointsResponse
Int -> ReadS DescribeVpcEndpointsResponse
ReadS [DescribeVpcEndpointsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeVpcEndpointsResponse]
$creadListPrec :: ReadPrec [DescribeVpcEndpointsResponse]
readPrec :: ReadPrec DescribeVpcEndpointsResponse
$creadPrec :: ReadPrec DescribeVpcEndpointsResponse
readList :: ReadS [DescribeVpcEndpointsResponse]
$creadList :: ReadS [DescribeVpcEndpointsResponse]
readsPrec :: Int -> ReadS DescribeVpcEndpointsResponse
$creadsPrec :: Int -> ReadS DescribeVpcEndpointsResponse
Prelude.Read, Int -> DescribeVpcEndpointsResponse -> ShowS
[DescribeVpcEndpointsResponse] -> ShowS
DescribeVpcEndpointsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeVpcEndpointsResponse] -> ShowS
$cshowList :: [DescribeVpcEndpointsResponse] -> ShowS
show :: DescribeVpcEndpointsResponse -> String
$cshow :: DescribeVpcEndpointsResponse -> String
showsPrec :: Int -> DescribeVpcEndpointsResponse -> ShowS
$cshowsPrec :: Int -> DescribeVpcEndpointsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeVpcEndpointsResponse x -> DescribeVpcEndpointsResponse
forall x.
DescribeVpcEndpointsResponse -> Rep DescribeVpcEndpointsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeVpcEndpointsResponse x -> DescribeVpcEndpointsResponse
$cfrom :: forall x.
DescribeVpcEndpointsResponse -> Rep DescribeVpcEndpointsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeVpcEndpointsResponse' 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:
--
-- 'httpStatus', 'describeVpcEndpointsResponse_httpStatus' - The response's http status code.
--
-- 'vpcEndpoints', 'describeVpcEndpointsResponse_vpcEndpoints' - Information about each requested VPC endpoint.
--
-- 'vpcEndpointErrors', 'describeVpcEndpointsResponse_vpcEndpointErrors' - Any errors associated with the request.
newDescribeVpcEndpointsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeVpcEndpointsResponse
newDescribeVpcEndpointsResponse :: Int -> DescribeVpcEndpointsResponse
newDescribeVpcEndpointsResponse Int
pHttpStatus_ =
  DescribeVpcEndpointsResponse'
    { $sel:httpStatus:DescribeVpcEndpointsResponse' :: Int
httpStatus =
        Int
pHttpStatus_,
      $sel:vpcEndpoints:DescribeVpcEndpointsResponse' :: [VpcEndpoint]
vpcEndpoints = forall a. Monoid a => a
Prelude.mempty,
      $sel:vpcEndpointErrors:DescribeVpcEndpointsResponse' :: [VpcEndpointError]
vpcEndpointErrors = forall a. Monoid a => a
Prelude.mempty
    }

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

-- | Information about each requested VPC endpoint.
describeVpcEndpointsResponse_vpcEndpoints :: Lens.Lens' DescribeVpcEndpointsResponse [VpcEndpoint]
describeVpcEndpointsResponse_vpcEndpoints :: Lens' DescribeVpcEndpointsResponse [VpcEndpoint]
describeVpcEndpointsResponse_vpcEndpoints = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVpcEndpointsResponse' {[VpcEndpoint]
vpcEndpoints :: [VpcEndpoint]
$sel:vpcEndpoints:DescribeVpcEndpointsResponse' :: DescribeVpcEndpointsResponse -> [VpcEndpoint]
vpcEndpoints} -> [VpcEndpoint]
vpcEndpoints) (\s :: DescribeVpcEndpointsResponse
s@DescribeVpcEndpointsResponse' {} [VpcEndpoint]
a -> DescribeVpcEndpointsResponse
s {$sel:vpcEndpoints:DescribeVpcEndpointsResponse' :: [VpcEndpoint]
vpcEndpoints = [VpcEndpoint]
a} :: DescribeVpcEndpointsResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Any errors associated with the request.
describeVpcEndpointsResponse_vpcEndpointErrors :: Lens.Lens' DescribeVpcEndpointsResponse [VpcEndpointError]
describeVpcEndpointsResponse_vpcEndpointErrors :: Lens' DescribeVpcEndpointsResponse [VpcEndpointError]
describeVpcEndpointsResponse_vpcEndpointErrors = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeVpcEndpointsResponse' {[VpcEndpointError]
vpcEndpointErrors :: [VpcEndpointError]
$sel:vpcEndpointErrors:DescribeVpcEndpointsResponse' :: DescribeVpcEndpointsResponse -> [VpcEndpointError]
vpcEndpointErrors} -> [VpcEndpointError]
vpcEndpointErrors) (\s :: DescribeVpcEndpointsResponse
s@DescribeVpcEndpointsResponse' {} [VpcEndpointError]
a -> DescribeVpcEndpointsResponse
s {$sel:vpcEndpointErrors:DescribeVpcEndpointsResponse' :: [VpcEndpointError]
vpcEndpointErrors = [VpcEndpointError]
a} :: DescribeVpcEndpointsResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Prelude.NFData DescribeVpcEndpointsResponse where
  rnf :: DescribeVpcEndpointsResponse -> ()
rnf DescribeVpcEndpointsResponse' {Int
[VpcEndpointError]
[VpcEndpoint]
vpcEndpointErrors :: [VpcEndpointError]
vpcEndpoints :: [VpcEndpoint]
httpStatus :: Int
$sel:vpcEndpointErrors:DescribeVpcEndpointsResponse' :: DescribeVpcEndpointsResponse -> [VpcEndpointError]
$sel:vpcEndpoints:DescribeVpcEndpointsResponse' :: DescribeVpcEndpointsResponse -> [VpcEndpoint]
$sel:httpStatus:DescribeVpcEndpointsResponse' :: DescribeVpcEndpointsResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [VpcEndpoint]
vpcEndpoints
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [VpcEndpointError]
vpcEndpointErrors