{-# 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.ManagedBlockChain.GetAccessor
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- The token based access feature is in preview release for Ethereum on
-- Amazon Managed Blockchain and is subject to change. We recommend that
-- you use this feature only with test scenarios, and not in production
-- environments.
--
-- Returns detailed information about an accessor. An accessor object is a
-- container that has the information required for token based access to
-- your Ethereum nodes.
module Amazonka.ManagedBlockChain.GetAccessor
  ( -- * Creating a Request
    GetAccessor (..),
    newGetAccessor,

    -- * Request Lenses
    getAccessor_accessorId,

    -- * Destructuring the Response
    GetAccessorResponse (..),
    newGetAccessorResponse,

    -- * Response Lenses
    getAccessorResponse_accessor,
    getAccessorResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'GetAccessor' 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:
--
-- 'accessorId', 'getAccessor_accessorId' - The unique identifier of the accessor.
newGetAccessor ::
  -- | 'accessorId'
  Prelude.Text ->
  GetAccessor
newGetAccessor :: Text -> GetAccessor
newGetAccessor Text
pAccessorId_ =
  GetAccessor' {$sel:accessorId:GetAccessor' :: Text
accessorId = Text
pAccessorId_}

-- | The unique identifier of the accessor.
getAccessor_accessorId :: Lens.Lens' GetAccessor Prelude.Text
getAccessor_accessorId :: Lens' GetAccessor Text
getAccessor_accessorId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessor' {Text
accessorId :: Text
$sel:accessorId:GetAccessor' :: GetAccessor -> Text
accessorId} -> Text
accessorId) (\s :: GetAccessor
s@GetAccessor' {} Text
a -> GetAccessor
s {$sel:accessorId:GetAccessor' :: Text
accessorId = Text
a} :: GetAccessor)

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

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

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

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

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

-- |
-- Create a value of 'GetAccessorResponse' 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:
--
-- 'accessor', 'getAccessorResponse_accessor' - The properties of the accessor.
--
-- 'httpStatus', 'getAccessorResponse_httpStatus' - The response's http status code.
newGetAccessorResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetAccessorResponse
newGetAccessorResponse :: Int -> GetAccessorResponse
newGetAccessorResponse Int
pHttpStatus_ =
  GetAccessorResponse'
    { $sel:accessor:GetAccessorResponse' :: Maybe Accessor
accessor = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetAccessorResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The properties of the accessor.
getAccessorResponse_accessor :: Lens.Lens' GetAccessorResponse (Prelude.Maybe Accessor)
getAccessorResponse_accessor :: Lens' GetAccessorResponse (Maybe Accessor)
getAccessorResponse_accessor = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAccessorResponse' {Maybe Accessor
accessor :: Maybe Accessor
$sel:accessor:GetAccessorResponse' :: GetAccessorResponse -> Maybe Accessor
accessor} -> Maybe Accessor
accessor) (\s :: GetAccessorResponse
s@GetAccessorResponse' {} Maybe Accessor
a -> GetAccessorResponse
s {$sel:accessor:GetAccessorResponse' :: Maybe Accessor
accessor = Maybe Accessor
a} :: GetAccessorResponse)

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

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