{-# 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.Proton.DeleteServiceTemplate
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- If no other major or minor versions of the service template exist,
-- delete the service template.
module Amazonka.Proton.DeleteServiceTemplate
  ( -- * Creating a Request
    DeleteServiceTemplate (..),
    newDeleteServiceTemplate,

    -- * Request Lenses
    deleteServiceTemplate_name,

    -- * Destructuring the Response
    DeleteServiceTemplateResponse (..),
    newDeleteServiceTemplateResponse,

    -- * Response Lenses
    deleteServiceTemplateResponse_serviceTemplate,
    deleteServiceTemplateResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'DeleteServiceTemplate' 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:
--
-- 'name', 'deleteServiceTemplate_name' - The name of the service template to delete.
newDeleteServiceTemplate ::
  -- | 'name'
  Prelude.Text ->
  DeleteServiceTemplate
newDeleteServiceTemplate :: Text -> DeleteServiceTemplate
newDeleteServiceTemplate Text
pName_ =
  DeleteServiceTemplate' {$sel:name:DeleteServiceTemplate' :: Text
name = Text
pName_}

-- | The name of the service template to delete.
deleteServiceTemplate_name :: Lens.Lens' DeleteServiceTemplate Prelude.Text
deleteServiceTemplate_name :: Lens' DeleteServiceTemplate Text
deleteServiceTemplate_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteServiceTemplate' {Text
name :: Text
$sel:name:DeleteServiceTemplate' :: DeleteServiceTemplate -> Text
name} -> Text
name) (\s :: DeleteServiceTemplate
s@DeleteServiceTemplate' {} Text
a -> DeleteServiceTemplate
s {$sel:name:DeleteServiceTemplate' :: Text
name = Text
a} :: DeleteServiceTemplate)

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

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

instance Data.ToHeaders DeleteServiceTemplate where
  toHeaders :: DeleteServiceTemplate -> 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
"AwsProton20200720.DeleteServiceTemplate" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

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

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

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

-- | /See:/ 'newDeleteServiceTemplateResponse' smart constructor.
data DeleteServiceTemplateResponse = DeleteServiceTemplateResponse'
  { -- | The detailed data of the service template being deleted.
    DeleteServiceTemplateResponse -> Maybe ServiceTemplate
serviceTemplate :: Prelude.Maybe ServiceTemplate,
    -- | The response's http status code.
    DeleteServiceTemplateResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteServiceTemplateResponse
-> DeleteServiceTemplateResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteServiceTemplateResponse
-> DeleteServiceTemplateResponse -> Bool
$c/= :: DeleteServiceTemplateResponse
-> DeleteServiceTemplateResponse -> Bool
== :: DeleteServiceTemplateResponse
-> DeleteServiceTemplateResponse -> Bool
$c== :: DeleteServiceTemplateResponse
-> DeleteServiceTemplateResponse -> Bool
Prelude.Eq, Int -> DeleteServiceTemplateResponse -> ShowS
[DeleteServiceTemplateResponse] -> ShowS
DeleteServiceTemplateResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteServiceTemplateResponse] -> ShowS
$cshowList :: [DeleteServiceTemplateResponse] -> ShowS
show :: DeleteServiceTemplateResponse -> String
$cshow :: DeleteServiceTemplateResponse -> String
showsPrec :: Int -> DeleteServiceTemplateResponse -> ShowS
$cshowsPrec :: Int -> DeleteServiceTemplateResponse -> ShowS
Prelude.Show, forall x.
Rep DeleteServiceTemplateResponse x
-> DeleteServiceTemplateResponse
forall x.
DeleteServiceTemplateResponse
-> Rep DeleteServiceTemplateResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteServiceTemplateResponse x
-> DeleteServiceTemplateResponse
$cfrom :: forall x.
DeleteServiceTemplateResponse
-> Rep DeleteServiceTemplateResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteServiceTemplateResponse' 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:
--
-- 'serviceTemplate', 'deleteServiceTemplateResponse_serviceTemplate' - The detailed data of the service template being deleted.
--
-- 'httpStatus', 'deleteServiceTemplateResponse_httpStatus' - The response's http status code.
newDeleteServiceTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteServiceTemplateResponse
newDeleteServiceTemplateResponse :: Int -> DeleteServiceTemplateResponse
newDeleteServiceTemplateResponse Int
pHttpStatus_ =
  DeleteServiceTemplateResponse'
    { $sel:serviceTemplate:DeleteServiceTemplateResponse' :: Maybe ServiceTemplate
serviceTemplate =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteServiceTemplateResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The detailed data of the service template being deleted.
deleteServiceTemplateResponse_serviceTemplate :: Lens.Lens' DeleteServiceTemplateResponse (Prelude.Maybe ServiceTemplate)
deleteServiceTemplateResponse_serviceTemplate :: Lens' DeleteServiceTemplateResponse (Maybe ServiceTemplate)
deleteServiceTemplateResponse_serviceTemplate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteServiceTemplateResponse' {Maybe ServiceTemplate
serviceTemplate :: Maybe ServiceTemplate
$sel:serviceTemplate:DeleteServiceTemplateResponse' :: DeleteServiceTemplateResponse -> Maybe ServiceTemplate
serviceTemplate} -> Maybe ServiceTemplate
serviceTemplate) (\s :: DeleteServiceTemplateResponse
s@DeleteServiceTemplateResponse' {} Maybe ServiceTemplate
a -> DeleteServiceTemplateResponse
s {$sel:serviceTemplate:DeleteServiceTemplateResponse' :: Maybe ServiceTemplate
serviceTemplate = Maybe ServiceTemplate
a} :: DeleteServiceTemplateResponse)

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

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