{-# 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.SageMaker.DeleteArtifact
-- 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 artifact. Either @ArtifactArn@ or @Source@ must be specified.
module Amazonka.SageMaker.DeleteArtifact
  ( -- * Creating a Request
    DeleteArtifact (..),
    newDeleteArtifact,

    -- * Request Lenses
    deleteArtifact_artifactArn,
    deleteArtifact_source,

    -- * Destructuring the Response
    DeleteArtifactResponse (..),
    newDeleteArtifactResponse,

    -- * Response Lenses
    deleteArtifactResponse_artifactArn,
    deleteArtifactResponse_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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SageMaker.Types

-- | /See:/ 'newDeleteArtifact' smart constructor.
data DeleteArtifact = DeleteArtifact'
  { -- | The Amazon Resource Name (ARN) of the artifact to delete.
    DeleteArtifact -> Maybe Text
artifactArn :: Prelude.Maybe Prelude.Text,
    -- | The URI of the source.
    DeleteArtifact -> Maybe ArtifactSource
source :: Prelude.Maybe ArtifactSource
  }
  deriving (DeleteArtifact -> DeleteArtifact -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteArtifact -> DeleteArtifact -> Bool
$c/= :: DeleteArtifact -> DeleteArtifact -> Bool
== :: DeleteArtifact -> DeleteArtifact -> Bool
$c== :: DeleteArtifact -> DeleteArtifact -> Bool
Prelude.Eq, ReadPrec [DeleteArtifact]
ReadPrec DeleteArtifact
Int -> ReadS DeleteArtifact
ReadS [DeleteArtifact]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteArtifact]
$creadListPrec :: ReadPrec [DeleteArtifact]
readPrec :: ReadPrec DeleteArtifact
$creadPrec :: ReadPrec DeleteArtifact
readList :: ReadS [DeleteArtifact]
$creadList :: ReadS [DeleteArtifact]
readsPrec :: Int -> ReadS DeleteArtifact
$creadsPrec :: Int -> ReadS DeleteArtifact
Prelude.Read, Int -> DeleteArtifact -> ShowS
[DeleteArtifact] -> ShowS
DeleteArtifact -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteArtifact] -> ShowS
$cshowList :: [DeleteArtifact] -> ShowS
show :: DeleteArtifact -> String
$cshow :: DeleteArtifact -> String
showsPrec :: Int -> DeleteArtifact -> ShowS
$cshowsPrec :: Int -> DeleteArtifact -> ShowS
Prelude.Show, forall x. Rep DeleteArtifact x -> DeleteArtifact
forall x. DeleteArtifact -> Rep DeleteArtifact x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteArtifact x -> DeleteArtifact
$cfrom :: forall x. DeleteArtifact -> Rep DeleteArtifact x
Prelude.Generic)

-- |
-- Create a value of 'DeleteArtifact' 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:
--
-- 'artifactArn', 'deleteArtifact_artifactArn' - The Amazon Resource Name (ARN) of the artifact to delete.
--
-- 'source', 'deleteArtifact_source' - The URI of the source.
newDeleteArtifact ::
  DeleteArtifact
newDeleteArtifact :: DeleteArtifact
newDeleteArtifact =
  DeleteArtifact'
    { $sel:artifactArn:DeleteArtifact' :: Maybe Text
artifactArn = forall a. Maybe a
Prelude.Nothing,
      $sel:source:DeleteArtifact' :: Maybe ArtifactSource
source = forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of the artifact to delete.
deleteArtifact_artifactArn :: Lens.Lens' DeleteArtifact (Prelude.Maybe Prelude.Text)
deleteArtifact_artifactArn :: Lens' DeleteArtifact (Maybe Text)
deleteArtifact_artifactArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteArtifact' {Maybe Text
artifactArn :: Maybe Text
$sel:artifactArn:DeleteArtifact' :: DeleteArtifact -> Maybe Text
artifactArn} -> Maybe Text
artifactArn) (\s :: DeleteArtifact
s@DeleteArtifact' {} Maybe Text
a -> DeleteArtifact
s {$sel:artifactArn:DeleteArtifact' :: Maybe Text
artifactArn = Maybe Text
a} :: DeleteArtifact)

-- | The URI of the source.
deleteArtifact_source :: Lens.Lens' DeleteArtifact (Prelude.Maybe ArtifactSource)
deleteArtifact_source :: Lens' DeleteArtifact (Maybe ArtifactSource)
deleteArtifact_source = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteArtifact' {Maybe ArtifactSource
source :: Maybe ArtifactSource
$sel:source:DeleteArtifact' :: DeleteArtifact -> Maybe ArtifactSource
source} -> Maybe ArtifactSource
source) (\s :: DeleteArtifact
s@DeleteArtifact' {} Maybe ArtifactSource
a -> DeleteArtifact
s {$sel:source:DeleteArtifact' :: Maybe ArtifactSource
source = Maybe ArtifactSource
a} :: DeleteArtifact)

instance Core.AWSRequest DeleteArtifact where
  type
    AWSResponse DeleteArtifact =
      DeleteArtifactResponse
  request :: (Service -> Service) -> DeleteArtifact -> Request DeleteArtifact
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 DeleteArtifact
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteArtifact)))
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 Text -> Int -> DeleteArtifactResponse
DeleteArtifactResponse'
            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
"ArtifactArn")
            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 DeleteArtifact where
  hashWithSalt :: Int -> DeleteArtifact -> Int
hashWithSalt Int
_salt DeleteArtifact' {Maybe Text
Maybe ArtifactSource
source :: Maybe ArtifactSource
artifactArn :: Maybe Text
$sel:source:DeleteArtifact' :: DeleteArtifact -> Maybe ArtifactSource
$sel:artifactArn:DeleteArtifact' :: DeleteArtifact -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
artifactArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ArtifactSource
source

instance Prelude.NFData DeleteArtifact where
  rnf :: DeleteArtifact -> ()
rnf DeleteArtifact' {Maybe Text
Maybe ArtifactSource
source :: Maybe ArtifactSource
artifactArn :: Maybe Text
$sel:source:DeleteArtifact' :: DeleteArtifact -> Maybe ArtifactSource
$sel:artifactArn:DeleteArtifact' :: DeleteArtifact -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
artifactArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ArtifactSource
source

instance Data.ToHeaders DeleteArtifact where
  toHeaders :: DeleteArtifact -> 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
"SageMaker.DeleteArtifact" :: 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 DeleteArtifact where
  toJSON :: DeleteArtifact -> Value
toJSON DeleteArtifact' {Maybe Text
Maybe ArtifactSource
source :: Maybe ArtifactSource
artifactArn :: Maybe Text
$sel:source:DeleteArtifact' :: DeleteArtifact -> Maybe ArtifactSource
$sel:artifactArn:DeleteArtifact' :: DeleteArtifact -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ArtifactArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
artifactArn,
            (Key
"Source" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ArtifactSource
source
          ]
      )

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

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

-- | /See:/ 'newDeleteArtifactResponse' smart constructor.
data DeleteArtifactResponse = DeleteArtifactResponse'
  { -- | The Amazon Resource Name (ARN) of the artifact.
    DeleteArtifactResponse -> Maybe Text
artifactArn :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DeleteArtifactResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteArtifactResponse -> DeleteArtifactResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteArtifactResponse -> DeleteArtifactResponse -> Bool
$c/= :: DeleteArtifactResponse -> DeleteArtifactResponse -> Bool
== :: DeleteArtifactResponse -> DeleteArtifactResponse -> Bool
$c== :: DeleteArtifactResponse -> DeleteArtifactResponse -> Bool
Prelude.Eq, ReadPrec [DeleteArtifactResponse]
ReadPrec DeleteArtifactResponse
Int -> ReadS DeleteArtifactResponse
ReadS [DeleteArtifactResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteArtifactResponse]
$creadListPrec :: ReadPrec [DeleteArtifactResponse]
readPrec :: ReadPrec DeleteArtifactResponse
$creadPrec :: ReadPrec DeleteArtifactResponse
readList :: ReadS [DeleteArtifactResponse]
$creadList :: ReadS [DeleteArtifactResponse]
readsPrec :: Int -> ReadS DeleteArtifactResponse
$creadsPrec :: Int -> ReadS DeleteArtifactResponse
Prelude.Read, Int -> DeleteArtifactResponse -> ShowS
[DeleteArtifactResponse] -> ShowS
DeleteArtifactResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteArtifactResponse] -> ShowS
$cshowList :: [DeleteArtifactResponse] -> ShowS
show :: DeleteArtifactResponse -> String
$cshow :: DeleteArtifactResponse -> String
showsPrec :: Int -> DeleteArtifactResponse -> ShowS
$cshowsPrec :: Int -> DeleteArtifactResponse -> ShowS
Prelude.Show, forall x. Rep DeleteArtifactResponse x -> DeleteArtifactResponse
forall x. DeleteArtifactResponse -> Rep DeleteArtifactResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteArtifactResponse x -> DeleteArtifactResponse
$cfrom :: forall x. DeleteArtifactResponse -> Rep DeleteArtifactResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteArtifactResponse' 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:
--
-- 'artifactArn', 'deleteArtifactResponse_artifactArn' - The Amazon Resource Name (ARN) of the artifact.
--
-- 'httpStatus', 'deleteArtifactResponse_httpStatus' - The response's http status code.
newDeleteArtifactResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteArtifactResponse
newDeleteArtifactResponse :: Int -> DeleteArtifactResponse
newDeleteArtifactResponse Int
pHttpStatus_ =
  DeleteArtifactResponse'
    { $sel:artifactArn:DeleteArtifactResponse' :: Maybe Text
artifactArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteArtifactResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the artifact.
deleteArtifactResponse_artifactArn :: Lens.Lens' DeleteArtifactResponse (Prelude.Maybe Prelude.Text)
deleteArtifactResponse_artifactArn :: Lens' DeleteArtifactResponse (Maybe Text)
deleteArtifactResponse_artifactArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteArtifactResponse' {Maybe Text
artifactArn :: Maybe Text
$sel:artifactArn:DeleteArtifactResponse' :: DeleteArtifactResponse -> Maybe Text
artifactArn} -> Maybe Text
artifactArn) (\s :: DeleteArtifactResponse
s@DeleteArtifactResponse' {} Maybe Text
a -> DeleteArtifactResponse
s {$sel:artifactArn:DeleteArtifactResponse' :: Maybe Text
artifactArn = Maybe Text
a} :: DeleteArtifactResponse)

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

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