{-# 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.FIS.GetExperimentTemplate
-- 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 information about the specified experiment template.
module Amazonka.FIS.GetExperimentTemplate
  ( -- * Creating a Request
    GetExperimentTemplate (..),
    newGetExperimentTemplate,

    -- * Request Lenses
    getExperimentTemplate_id,

    -- * Destructuring the Response
    GetExperimentTemplateResponse (..),
    newGetExperimentTemplateResponse,

    -- * Response Lenses
    getExperimentTemplateResponse_experimentTemplate,
    getExperimentTemplateResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'GetExperimentTemplate' 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:
--
-- 'id', 'getExperimentTemplate_id' - The ID of the experiment template.
newGetExperimentTemplate ::
  -- | 'id'
  Prelude.Text ->
  GetExperimentTemplate
newGetExperimentTemplate :: Text -> GetExperimentTemplate
newGetExperimentTemplate Text
pId_ =
  GetExperimentTemplate' {$sel:id:GetExperimentTemplate' :: Text
id = Text
pId_}

-- | The ID of the experiment template.
getExperimentTemplate_id :: Lens.Lens' GetExperimentTemplate Prelude.Text
getExperimentTemplate_id :: Lens' GetExperimentTemplate Text
getExperimentTemplate_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetExperimentTemplate' {Text
id :: Text
$sel:id:GetExperimentTemplate' :: GetExperimentTemplate -> Text
id} -> Text
id) (\s :: GetExperimentTemplate
s@GetExperimentTemplate' {} Text
a -> GetExperimentTemplate
s {$sel:id:GetExperimentTemplate' :: Text
id = Text
a} :: GetExperimentTemplate)

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

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

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

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

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

-- |
-- Create a value of 'GetExperimentTemplateResponse' 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:
--
-- 'experimentTemplate', 'getExperimentTemplateResponse_experimentTemplate' - Information about the experiment template.
--
-- 'httpStatus', 'getExperimentTemplateResponse_httpStatus' - The response's http status code.
newGetExperimentTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetExperimentTemplateResponse
newGetExperimentTemplateResponse :: Int -> GetExperimentTemplateResponse
newGetExperimentTemplateResponse Int
pHttpStatus_ =
  GetExperimentTemplateResponse'
    { $sel:experimentTemplate:GetExperimentTemplateResponse' :: Maybe ExperimentTemplate
experimentTemplate =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetExperimentTemplateResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the experiment template.
getExperimentTemplateResponse_experimentTemplate :: Lens.Lens' GetExperimentTemplateResponse (Prelude.Maybe ExperimentTemplate)
getExperimentTemplateResponse_experimentTemplate :: Lens' GetExperimentTemplateResponse (Maybe ExperimentTemplate)
getExperimentTemplateResponse_experimentTemplate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetExperimentTemplateResponse' {Maybe ExperimentTemplate
experimentTemplate :: Maybe ExperimentTemplate
$sel:experimentTemplate:GetExperimentTemplateResponse' :: GetExperimentTemplateResponse -> Maybe ExperimentTemplate
experimentTemplate} -> Maybe ExperimentTemplate
experimentTemplate) (\s :: GetExperimentTemplateResponse
s@GetExperimentTemplateResponse' {} Maybe ExperimentTemplate
a -> GetExperimentTemplateResponse
s {$sel:experimentTemplate:GetExperimentTemplateResponse' :: Maybe ExperimentTemplate
experimentTemplate = Maybe ExperimentTemplate
a} :: GetExperimentTemplateResponse)

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

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