{-# 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.AppMesh.DeleteVirtualService
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes an existing virtual service.
module Amazonka.AppMesh.DeleteVirtualService
  ( -- * Creating a Request
    DeleteVirtualService (..),
    newDeleteVirtualService,

    -- * Request Lenses
    deleteVirtualService_meshOwner,
    deleteVirtualService_meshName,
    deleteVirtualService_virtualServiceName,

    -- * Destructuring the Response
    DeleteVirtualServiceResponse (..),
    newDeleteVirtualServiceResponse,

    -- * Response Lenses
    deleteVirtualServiceResponse_httpStatus,
    deleteVirtualServiceResponse_virtualService,
  )
where

import Amazonka.AppMesh.Types
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- |
--
-- /See:/ 'newDeleteVirtualService' smart constructor.
data DeleteVirtualService = DeleteVirtualService'
  { -- | The Amazon Web Services IAM account ID of the service mesh owner. If the
    -- account ID is not your own, then it\'s the ID of the account that shared
    -- the mesh with your account. For more information about mesh sharing, see
    -- <https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html Working with shared meshes>.
    DeleteVirtualService -> Maybe Text
meshOwner :: Prelude.Maybe Prelude.Text,
    -- | The name of the service mesh to delete the virtual service in.
    DeleteVirtualService -> Text
meshName :: Prelude.Text,
    -- | The name of the virtual service to delete.
    DeleteVirtualService -> Text
virtualServiceName :: Prelude.Text
  }
  deriving (DeleteVirtualService -> DeleteVirtualService -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteVirtualService -> DeleteVirtualService -> Bool
$c/= :: DeleteVirtualService -> DeleteVirtualService -> Bool
== :: DeleteVirtualService -> DeleteVirtualService -> Bool
$c== :: DeleteVirtualService -> DeleteVirtualService -> Bool
Prelude.Eq, ReadPrec [DeleteVirtualService]
ReadPrec DeleteVirtualService
Int -> ReadS DeleteVirtualService
ReadS [DeleteVirtualService]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteVirtualService]
$creadListPrec :: ReadPrec [DeleteVirtualService]
readPrec :: ReadPrec DeleteVirtualService
$creadPrec :: ReadPrec DeleteVirtualService
readList :: ReadS [DeleteVirtualService]
$creadList :: ReadS [DeleteVirtualService]
readsPrec :: Int -> ReadS DeleteVirtualService
$creadsPrec :: Int -> ReadS DeleteVirtualService
Prelude.Read, Int -> DeleteVirtualService -> ShowS
[DeleteVirtualService] -> ShowS
DeleteVirtualService -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteVirtualService] -> ShowS
$cshowList :: [DeleteVirtualService] -> ShowS
show :: DeleteVirtualService -> String
$cshow :: DeleteVirtualService -> String
showsPrec :: Int -> DeleteVirtualService -> ShowS
$cshowsPrec :: Int -> DeleteVirtualService -> ShowS
Prelude.Show, forall x. Rep DeleteVirtualService x -> DeleteVirtualService
forall x. DeleteVirtualService -> Rep DeleteVirtualService x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteVirtualService x -> DeleteVirtualService
$cfrom :: forall x. DeleteVirtualService -> Rep DeleteVirtualService x
Prelude.Generic)

-- |
-- Create a value of 'DeleteVirtualService' 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:
--
-- 'meshOwner', 'deleteVirtualService_meshOwner' - The Amazon Web Services IAM account ID of the service mesh owner. If the
-- account ID is not your own, then it\'s the ID of the account that shared
-- the mesh with your account. For more information about mesh sharing, see
-- <https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html Working with shared meshes>.
--
-- 'meshName', 'deleteVirtualService_meshName' - The name of the service mesh to delete the virtual service in.
--
-- 'virtualServiceName', 'deleteVirtualService_virtualServiceName' - The name of the virtual service to delete.
newDeleteVirtualService ::
  -- | 'meshName'
  Prelude.Text ->
  -- | 'virtualServiceName'
  Prelude.Text ->
  DeleteVirtualService
newDeleteVirtualService :: Text -> Text -> DeleteVirtualService
newDeleteVirtualService
  Text
pMeshName_
  Text
pVirtualServiceName_ =
    DeleteVirtualService'
      { $sel:meshOwner:DeleteVirtualService' :: Maybe Text
meshOwner = forall a. Maybe a
Prelude.Nothing,
        $sel:meshName:DeleteVirtualService' :: Text
meshName = Text
pMeshName_,
        $sel:virtualServiceName:DeleteVirtualService' :: Text
virtualServiceName = Text
pVirtualServiceName_
      }

-- | The Amazon Web Services IAM account ID of the service mesh owner. If the
-- account ID is not your own, then it\'s the ID of the account that shared
-- the mesh with your account. For more information about mesh sharing, see
-- <https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html Working with shared meshes>.
deleteVirtualService_meshOwner :: Lens.Lens' DeleteVirtualService (Prelude.Maybe Prelude.Text)
deleteVirtualService_meshOwner :: Lens' DeleteVirtualService (Maybe Text)
deleteVirtualService_meshOwner = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteVirtualService' {Maybe Text
meshOwner :: Maybe Text
$sel:meshOwner:DeleteVirtualService' :: DeleteVirtualService -> Maybe Text
meshOwner} -> Maybe Text
meshOwner) (\s :: DeleteVirtualService
s@DeleteVirtualService' {} Maybe Text
a -> DeleteVirtualService
s {$sel:meshOwner:DeleteVirtualService' :: Maybe Text
meshOwner = Maybe Text
a} :: DeleteVirtualService)

-- | The name of the service mesh to delete the virtual service in.
deleteVirtualService_meshName :: Lens.Lens' DeleteVirtualService Prelude.Text
deleteVirtualService_meshName :: Lens' DeleteVirtualService Text
deleteVirtualService_meshName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteVirtualService' {Text
meshName :: Text
$sel:meshName:DeleteVirtualService' :: DeleteVirtualService -> Text
meshName} -> Text
meshName) (\s :: DeleteVirtualService
s@DeleteVirtualService' {} Text
a -> DeleteVirtualService
s {$sel:meshName:DeleteVirtualService' :: Text
meshName = Text
a} :: DeleteVirtualService)

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

instance Core.AWSRequest DeleteVirtualService where
  type
    AWSResponse DeleteVirtualService =
      DeleteVirtualServiceResponse
  request :: (Service -> Service)
-> DeleteVirtualService -> Request DeleteVirtualService
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteVirtualService
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteVirtualService)))
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 ->
          Int -> VirtualServiceData -> DeleteVirtualServiceResponse
DeleteVirtualServiceResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)
      )

instance Prelude.Hashable DeleteVirtualService where
  hashWithSalt :: Int -> DeleteVirtualService -> Int
hashWithSalt Int
_salt DeleteVirtualService' {Maybe Text
Text
virtualServiceName :: Text
meshName :: Text
meshOwner :: Maybe Text
$sel:virtualServiceName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshOwner:DeleteVirtualService' :: DeleteVirtualService -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
meshOwner
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
meshName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
virtualServiceName

instance Prelude.NFData DeleteVirtualService where
  rnf :: DeleteVirtualService -> ()
rnf DeleteVirtualService' {Maybe Text
Text
virtualServiceName :: Text
meshName :: Text
meshOwner :: Maybe Text
$sel:virtualServiceName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshOwner:DeleteVirtualService' :: DeleteVirtualService -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
meshOwner
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
meshName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
virtualServiceName

instance Data.ToHeaders DeleteVirtualService where
  toHeaders :: DeleteVirtualService -> 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 DeleteVirtualService where
  toPath :: DeleteVirtualService -> ByteString
toPath DeleteVirtualService' {Maybe Text
Text
virtualServiceName :: Text
meshName :: Text
meshOwner :: Maybe Text
$sel:virtualServiceName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshOwner:DeleteVirtualService' :: DeleteVirtualService -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/v20190125/meshes/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
meshName,
        ByteString
"/virtualServices/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
virtualServiceName
      ]

instance Data.ToQuery DeleteVirtualService where
  toQuery :: DeleteVirtualService -> QueryString
toQuery DeleteVirtualService' {Maybe Text
Text
virtualServiceName :: Text
meshName :: Text
meshOwner :: Maybe Text
$sel:virtualServiceName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshName:DeleteVirtualService' :: DeleteVirtualService -> Text
$sel:meshOwner:DeleteVirtualService' :: DeleteVirtualService -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"meshOwner" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
meshOwner]

-- |
--
-- /See:/ 'newDeleteVirtualServiceResponse' smart constructor.
data DeleteVirtualServiceResponse = DeleteVirtualServiceResponse'
  { -- | The response's http status code.
    DeleteVirtualServiceResponse -> Int
httpStatus :: Prelude.Int,
    -- | The virtual service that was deleted.
    DeleteVirtualServiceResponse -> VirtualServiceData
virtualService :: VirtualServiceData
  }
  deriving (DeleteVirtualServiceResponse
-> DeleteVirtualServiceResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteVirtualServiceResponse
-> DeleteVirtualServiceResponse -> Bool
$c/= :: DeleteVirtualServiceResponse
-> DeleteVirtualServiceResponse -> Bool
== :: DeleteVirtualServiceResponse
-> DeleteVirtualServiceResponse -> Bool
$c== :: DeleteVirtualServiceResponse
-> DeleteVirtualServiceResponse -> Bool
Prelude.Eq, ReadPrec [DeleteVirtualServiceResponse]
ReadPrec DeleteVirtualServiceResponse
Int -> ReadS DeleteVirtualServiceResponse
ReadS [DeleteVirtualServiceResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteVirtualServiceResponse]
$creadListPrec :: ReadPrec [DeleteVirtualServiceResponse]
readPrec :: ReadPrec DeleteVirtualServiceResponse
$creadPrec :: ReadPrec DeleteVirtualServiceResponse
readList :: ReadS [DeleteVirtualServiceResponse]
$creadList :: ReadS [DeleteVirtualServiceResponse]
readsPrec :: Int -> ReadS DeleteVirtualServiceResponse
$creadsPrec :: Int -> ReadS DeleteVirtualServiceResponse
Prelude.Read, Int -> DeleteVirtualServiceResponse -> ShowS
[DeleteVirtualServiceResponse] -> ShowS
DeleteVirtualServiceResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteVirtualServiceResponse] -> ShowS
$cshowList :: [DeleteVirtualServiceResponse] -> ShowS
show :: DeleteVirtualServiceResponse -> String
$cshow :: DeleteVirtualServiceResponse -> String
showsPrec :: Int -> DeleteVirtualServiceResponse -> ShowS
$cshowsPrec :: Int -> DeleteVirtualServiceResponse -> ShowS
Prelude.Show, forall x.
Rep DeleteVirtualServiceResponse x -> DeleteVirtualServiceResponse
forall x.
DeleteVirtualServiceResponse -> Rep DeleteVirtualServiceResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteVirtualServiceResponse x -> DeleteVirtualServiceResponse
$cfrom :: forall x.
DeleteVirtualServiceResponse -> Rep DeleteVirtualServiceResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteVirtualServiceResponse' 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:
--
-- 'httpStatus', 'deleteVirtualServiceResponse_httpStatus' - The response's http status code.
--
-- 'virtualService', 'deleteVirtualServiceResponse_virtualService' - The virtual service that was deleted.
newDeleteVirtualServiceResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'virtualService'
  VirtualServiceData ->
  DeleteVirtualServiceResponse
newDeleteVirtualServiceResponse :: Int -> VirtualServiceData -> DeleteVirtualServiceResponse
newDeleteVirtualServiceResponse
  Int
pHttpStatus_
  VirtualServiceData
pVirtualService_ =
    DeleteVirtualServiceResponse'
      { $sel:httpStatus:DeleteVirtualServiceResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:virtualService:DeleteVirtualServiceResponse' :: VirtualServiceData
virtualService = VirtualServiceData
pVirtualService_
      }

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

-- | The virtual service that was deleted.
deleteVirtualServiceResponse_virtualService :: Lens.Lens' DeleteVirtualServiceResponse VirtualServiceData
deleteVirtualServiceResponse_virtualService :: Lens' DeleteVirtualServiceResponse VirtualServiceData
deleteVirtualServiceResponse_virtualService = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteVirtualServiceResponse' {VirtualServiceData
virtualService :: VirtualServiceData
$sel:virtualService:DeleteVirtualServiceResponse' :: DeleteVirtualServiceResponse -> VirtualServiceData
virtualService} -> VirtualServiceData
virtualService) (\s :: DeleteVirtualServiceResponse
s@DeleteVirtualServiceResponse' {} VirtualServiceData
a -> DeleteVirtualServiceResponse
s {$sel:virtualService:DeleteVirtualServiceResponse' :: VirtualServiceData
virtualService = VirtualServiceData
a} :: DeleteVirtualServiceResponse)

instance Prelude.NFData DeleteVirtualServiceResponse where
  rnf :: DeleteVirtualServiceResponse -> ()
rnf DeleteVirtualServiceResponse' {Int
VirtualServiceData
virtualService :: VirtualServiceData
httpStatus :: Int
$sel:virtualService:DeleteVirtualServiceResponse' :: DeleteVirtualServiceResponse -> VirtualServiceData
$sel:httpStatus:DeleteVirtualServiceResponse' :: DeleteVirtualServiceResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VirtualServiceData
virtualService