{-# 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.Lightsail.GetInstanceSnapshot
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns information about a specific instance snapshot.
module Amazonka.Lightsail.GetInstanceSnapshot
  ( -- * Creating a Request
    GetInstanceSnapshot (..),
    newGetInstanceSnapshot,

    -- * Request Lenses
    getInstanceSnapshot_instanceSnapshotName,

    -- * Destructuring the Response
    GetInstanceSnapshotResponse (..),
    newGetInstanceSnapshotResponse,

    -- * Response Lenses
    getInstanceSnapshotResponse_instanceSnapshot,
    getInstanceSnapshotResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetInstanceSnapshot' smart constructor.
data GetInstanceSnapshot = GetInstanceSnapshot'
  { -- | The name of the snapshot for which you are requesting information.
    GetInstanceSnapshot -> Text
instanceSnapshotName :: Prelude.Text
  }
  deriving (GetInstanceSnapshot -> GetInstanceSnapshot -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetInstanceSnapshot -> GetInstanceSnapshot -> Bool
$c/= :: GetInstanceSnapshot -> GetInstanceSnapshot -> Bool
== :: GetInstanceSnapshot -> GetInstanceSnapshot -> Bool
$c== :: GetInstanceSnapshot -> GetInstanceSnapshot -> Bool
Prelude.Eq, ReadPrec [GetInstanceSnapshot]
ReadPrec GetInstanceSnapshot
Int -> ReadS GetInstanceSnapshot
ReadS [GetInstanceSnapshot]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetInstanceSnapshot]
$creadListPrec :: ReadPrec [GetInstanceSnapshot]
readPrec :: ReadPrec GetInstanceSnapshot
$creadPrec :: ReadPrec GetInstanceSnapshot
readList :: ReadS [GetInstanceSnapshot]
$creadList :: ReadS [GetInstanceSnapshot]
readsPrec :: Int -> ReadS GetInstanceSnapshot
$creadsPrec :: Int -> ReadS GetInstanceSnapshot
Prelude.Read, Int -> GetInstanceSnapshot -> ShowS
[GetInstanceSnapshot] -> ShowS
GetInstanceSnapshot -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetInstanceSnapshot] -> ShowS
$cshowList :: [GetInstanceSnapshot] -> ShowS
show :: GetInstanceSnapshot -> String
$cshow :: GetInstanceSnapshot -> String
showsPrec :: Int -> GetInstanceSnapshot -> ShowS
$cshowsPrec :: Int -> GetInstanceSnapshot -> ShowS
Prelude.Show, forall x. Rep GetInstanceSnapshot x -> GetInstanceSnapshot
forall x. GetInstanceSnapshot -> Rep GetInstanceSnapshot x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetInstanceSnapshot x -> GetInstanceSnapshot
$cfrom :: forall x. GetInstanceSnapshot -> Rep GetInstanceSnapshot x
Prelude.Generic)

-- |
-- Create a value of 'GetInstanceSnapshot' 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:
--
-- 'instanceSnapshotName', 'getInstanceSnapshot_instanceSnapshotName' - The name of the snapshot for which you are requesting information.
newGetInstanceSnapshot ::
  -- | 'instanceSnapshotName'
  Prelude.Text ->
  GetInstanceSnapshot
newGetInstanceSnapshot :: Text -> GetInstanceSnapshot
newGetInstanceSnapshot Text
pInstanceSnapshotName_ =
  GetInstanceSnapshot'
    { $sel:instanceSnapshotName:GetInstanceSnapshot' :: Text
instanceSnapshotName =
        Text
pInstanceSnapshotName_
    }

-- | The name of the snapshot for which you are requesting information.
getInstanceSnapshot_instanceSnapshotName :: Lens.Lens' GetInstanceSnapshot Prelude.Text
getInstanceSnapshot_instanceSnapshotName :: Lens' GetInstanceSnapshot Text
getInstanceSnapshot_instanceSnapshotName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceSnapshot' {Text
instanceSnapshotName :: Text
$sel:instanceSnapshotName:GetInstanceSnapshot' :: GetInstanceSnapshot -> Text
instanceSnapshotName} -> Text
instanceSnapshotName) (\s :: GetInstanceSnapshot
s@GetInstanceSnapshot' {} Text
a -> GetInstanceSnapshot
s {$sel:instanceSnapshotName:GetInstanceSnapshot' :: Text
instanceSnapshotName = Text
a} :: GetInstanceSnapshot)

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

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

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

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

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

-- | /See:/ 'newGetInstanceSnapshotResponse' smart constructor.
data GetInstanceSnapshotResponse = GetInstanceSnapshotResponse'
  { -- | An array of key-value pairs containing information about the results of
    -- your get instance snapshot request.
    GetInstanceSnapshotResponse -> Maybe InstanceSnapshot
instanceSnapshot :: Prelude.Maybe InstanceSnapshot,
    -- | The response's http status code.
    GetInstanceSnapshotResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetInstanceSnapshotResponse -> GetInstanceSnapshotResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetInstanceSnapshotResponse -> GetInstanceSnapshotResponse -> Bool
$c/= :: GetInstanceSnapshotResponse -> GetInstanceSnapshotResponse -> Bool
== :: GetInstanceSnapshotResponse -> GetInstanceSnapshotResponse -> Bool
$c== :: GetInstanceSnapshotResponse -> GetInstanceSnapshotResponse -> Bool
Prelude.Eq, ReadPrec [GetInstanceSnapshotResponse]
ReadPrec GetInstanceSnapshotResponse
Int -> ReadS GetInstanceSnapshotResponse
ReadS [GetInstanceSnapshotResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetInstanceSnapshotResponse]
$creadListPrec :: ReadPrec [GetInstanceSnapshotResponse]
readPrec :: ReadPrec GetInstanceSnapshotResponse
$creadPrec :: ReadPrec GetInstanceSnapshotResponse
readList :: ReadS [GetInstanceSnapshotResponse]
$creadList :: ReadS [GetInstanceSnapshotResponse]
readsPrec :: Int -> ReadS GetInstanceSnapshotResponse
$creadsPrec :: Int -> ReadS GetInstanceSnapshotResponse
Prelude.Read, Int -> GetInstanceSnapshotResponse -> ShowS
[GetInstanceSnapshotResponse] -> ShowS
GetInstanceSnapshotResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetInstanceSnapshotResponse] -> ShowS
$cshowList :: [GetInstanceSnapshotResponse] -> ShowS
show :: GetInstanceSnapshotResponse -> String
$cshow :: GetInstanceSnapshotResponse -> String
showsPrec :: Int -> GetInstanceSnapshotResponse -> ShowS
$cshowsPrec :: Int -> GetInstanceSnapshotResponse -> ShowS
Prelude.Show, forall x.
Rep GetInstanceSnapshotResponse x -> GetInstanceSnapshotResponse
forall x.
GetInstanceSnapshotResponse -> Rep GetInstanceSnapshotResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetInstanceSnapshotResponse x -> GetInstanceSnapshotResponse
$cfrom :: forall x.
GetInstanceSnapshotResponse -> Rep GetInstanceSnapshotResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetInstanceSnapshotResponse' 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:
--
-- 'instanceSnapshot', 'getInstanceSnapshotResponse_instanceSnapshot' - An array of key-value pairs containing information about the results of
-- your get instance snapshot request.
--
-- 'httpStatus', 'getInstanceSnapshotResponse_httpStatus' - The response's http status code.
newGetInstanceSnapshotResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetInstanceSnapshotResponse
newGetInstanceSnapshotResponse :: Int -> GetInstanceSnapshotResponse
newGetInstanceSnapshotResponse Int
pHttpStatus_ =
  GetInstanceSnapshotResponse'
    { $sel:instanceSnapshot:GetInstanceSnapshotResponse' :: Maybe InstanceSnapshot
instanceSnapshot =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetInstanceSnapshotResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An array of key-value pairs containing information about the results of
-- your get instance snapshot request.
getInstanceSnapshotResponse_instanceSnapshot :: Lens.Lens' GetInstanceSnapshotResponse (Prelude.Maybe InstanceSnapshot)
getInstanceSnapshotResponse_instanceSnapshot :: Lens' GetInstanceSnapshotResponse (Maybe InstanceSnapshot)
getInstanceSnapshotResponse_instanceSnapshot = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceSnapshotResponse' {Maybe InstanceSnapshot
instanceSnapshot :: Maybe InstanceSnapshot
$sel:instanceSnapshot:GetInstanceSnapshotResponse' :: GetInstanceSnapshotResponse -> Maybe InstanceSnapshot
instanceSnapshot} -> Maybe InstanceSnapshot
instanceSnapshot) (\s :: GetInstanceSnapshotResponse
s@GetInstanceSnapshotResponse' {} Maybe InstanceSnapshot
a -> GetInstanceSnapshotResponse
s {$sel:instanceSnapshot:GetInstanceSnapshotResponse' :: Maybe InstanceSnapshot
instanceSnapshot = Maybe InstanceSnapshot
a} :: GetInstanceSnapshotResponse)

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

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