{-# 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.ImageBuilder.GetImage
-- 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 an image.
module Amazonka.ImageBuilder.GetImage
  ( -- * Creating a Request
    GetImage (..),
    newGetImage,

    -- * Request Lenses
    getImage_imageBuildVersionArn,

    -- * Destructuring the Response
    GetImageResponse (..),
    newGetImageResponse,

    -- * Response Lenses
    getImageResponse_image,
    getImageResponse_requestId,
    getImageResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'GetImage' 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:
--
-- 'imageBuildVersionArn', 'getImage_imageBuildVersionArn' - The Amazon Resource Name (ARN) of the image that you want to retrieve.
newGetImage ::
  -- | 'imageBuildVersionArn'
  Prelude.Text ->
  GetImage
newGetImage :: Text -> GetImage
newGetImage Text
pImageBuildVersionArn_ =
  GetImage'
    { $sel:imageBuildVersionArn:GetImage' :: Text
imageBuildVersionArn =
        Text
pImageBuildVersionArn_
    }

-- | The Amazon Resource Name (ARN) of the image that you want to retrieve.
getImage_imageBuildVersionArn :: Lens.Lens' GetImage Prelude.Text
getImage_imageBuildVersionArn :: Lens' GetImage Text
getImage_imageBuildVersionArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetImage' {Text
imageBuildVersionArn :: Text
$sel:imageBuildVersionArn:GetImage' :: GetImage -> Text
imageBuildVersionArn} -> Text
imageBuildVersionArn) (\s :: GetImage
s@GetImage' {} Text
a -> GetImage
s {$sel:imageBuildVersionArn:GetImage' :: Text
imageBuildVersionArn = Text
a} :: GetImage)

instance Core.AWSRequest GetImage where
  type AWSResponse GetImage = GetImageResponse
  request :: (Service -> Service) -> GetImage -> Request GetImage
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 GetImage
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetImage)))
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 Image -> Maybe Text -> Int -> GetImageResponse
GetImageResponse'
            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
"image")
            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
"requestId")
            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 GetImage where
  hashWithSalt :: Int -> GetImage -> Int
hashWithSalt Int
_salt GetImage' {Text
imageBuildVersionArn :: Text
$sel:imageBuildVersionArn:GetImage' :: GetImage -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
imageBuildVersionArn

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

instance Data.ToHeaders GetImage where
  toHeaders :: GetImage -> 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 GetImage where
  toPath :: GetImage -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/GetImage"

instance Data.ToQuery GetImage where
  toQuery :: GetImage -> QueryString
toQuery GetImage' {Text
imageBuildVersionArn :: Text
$sel:imageBuildVersionArn:GetImage' :: GetImage -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"imageBuildVersionArn" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
imageBuildVersionArn]

-- | /See:/ 'newGetImageResponse' smart constructor.
data GetImageResponse = GetImageResponse'
  { -- | The image object.
    GetImageResponse -> Maybe Image
image :: Prelude.Maybe Image,
    -- | The request ID that uniquely identifies this request.
    GetImageResponse -> Maybe Text
requestId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetImageResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetImageResponse -> GetImageResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetImageResponse -> GetImageResponse -> Bool
$c/= :: GetImageResponse -> GetImageResponse -> Bool
== :: GetImageResponse -> GetImageResponse -> Bool
$c== :: GetImageResponse -> GetImageResponse -> Bool
Prelude.Eq, ReadPrec [GetImageResponse]
ReadPrec GetImageResponse
Int -> ReadS GetImageResponse
ReadS [GetImageResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetImageResponse]
$creadListPrec :: ReadPrec [GetImageResponse]
readPrec :: ReadPrec GetImageResponse
$creadPrec :: ReadPrec GetImageResponse
readList :: ReadS [GetImageResponse]
$creadList :: ReadS [GetImageResponse]
readsPrec :: Int -> ReadS GetImageResponse
$creadsPrec :: Int -> ReadS GetImageResponse
Prelude.Read, Int -> GetImageResponse -> ShowS
[GetImageResponse] -> ShowS
GetImageResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetImageResponse] -> ShowS
$cshowList :: [GetImageResponse] -> ShowS
show :: GetImageResponse -> String
$cshow :: GetImageResponse -> String
showsPrec :: Int -> GetImageResponse -> ShowS
$cshowsPrec :: Int -> GetImageResponse -> ShowS
Prelude.Show, forall x. Rep GetImageResponse x -> GetImageResponse
forall x. GetImageResponse -> Rep GetImageResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetImageResponse x -> GetImageResponse
$cfrom :: forall x. GetImageResponse -> Rep GetImageResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetImageResponse' 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:
--
-- 'image', 'getImageResponse_image' - The image object.
--
-- 'requestId', 'getImageResponse_requestId' - The request ID that uniquely identifies this request.
--
-- 'httpStatus', 'getImageResponse_httpStatus' - The response's http status code.
newGetImageResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetImageResponse
newGetImageResponse :: Int -> GetImageResponse
newGetImageResponse Int
pHttpStatus_ =
  GetImageResponse'
    { $sel:image:GetImageResponse' :: Maybe Image
image = forall a. Maybe a
Prelude.Nothing,
      $sel:requestId:GetImageResponse' :: Maybe Text
requestId = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetImageResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The image object.
getImageResponse_image :: Lens.Lens' GetImageResponse (Prelude.Maybe Image)
getImageResponse_image :: Lens' GetImageResponse (Maybe Image)
getImageResponse_image = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetImageResponse' {Maybe Image
image :: Maybe Image
$sel:image:GetImageResponse' :: GetImageResponse -> Maybe Image
image} -> Maybe Image
image) (\s :: GetImageResponse
s@GetImageResponse' {} Maybe Image
a -> GetImageResponse
s {$sel:image:GetImageResponse' :: Maybe Image
image = Maybe Image
a} :: GetImageResponse)

-- | The request ID that uniquely identifies this request.
getImageResponse_requestId :: Lens.Lens' GetImageResponse (Prelude.Maybe Prelude.Text)
getImageResponse_requestId :: Lens' GetImageResponse (Maybe Text)
getImageResponse_requestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetImageResponse' {Maybe Text
requestId :: Maybe Text
$sel:requestId:GetImageResponse' :: GetImageResponse -> Maybe Text
requestId} -> Maybe Text
requestId) (\s :: GetImageResponse
s@GetImageResponse' {} Maybe Text
a -> GetImageResponse
s {$sel:requestId:GetImageResponse' :: Maybe Text
requestId = Maybe Text
a} :: GetImageResponse)

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

instance Prelude.NFData GetImageResponse where
  rnf :: GetImageResponse -> ()
rnf GetImageResponse' {Int
Maybe Text
Maybe Image
httpStatus :: Int
requestId :: Maybe Text
image :: Maybe Image
$sel:httpStatus:GetImageResponse' :: GetImageResponse -> Int
$sel:requestId:GetImageResponse' :: GetImageResponse -> Maybe Text
$sel:image:GetImageResponse' :: GetImageResponse -> Maybe Image
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Image
image
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
requestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus