{-# 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.CloudDirectory.DetachFromIndex
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Detaches the specified object from the specified index.
module Amazonka.CloudDirectory.DetachFromIndex
  ( -- * Creating a Request
    DetachFromIndex (..),
    newDetachFromIndex,

    -- * Request Lenses
    detachFromIndex_directoryArn,
    detachFromIndex_indexReference,
    detachFromIndex_targetReference,

    -- * Destructuring the Response
    DetachFromIndexResponse (..),
    newDetachFromIndexResponse,

    -- * Response Lenses
    detachFromIndexResponse_detachedObjectIdentifier,
    detachFromIndexResponse_httpStatus,
  )
where

import Amazonka.CloudDirectory.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:/ 'newDetachFromIndex' smart constructor.
data DetachFromIndex = DetachFromIndex'
  { -- | The Amazon Resource Name (ARN) of the directory the index and object
    -- exist in.
    DetachFromIndex -> Text
directoryArn :: Prelude.Text,
    -- | A reference to the index object.
    DetachFromIndex -> ObjectReference
indexReference :: ObjectReference,
    -- | A reference to the object being detached from the index.
    DetachFromIndex -> ObjectReference
targetReference :: ObjectReference
  }
  deriving (DetachFromIndex -> DetachFromIndex -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DetachFromIndex -> DetachFromIndex -> Bool
$c/= :: DetachFromIndex -> DetachFromIndex -> Bool
== :: DetachFromIndex -> DetachFromIndex -> Bool
$c== :: DetachFromIndex -> DetachFromIndex -> Bool
Prelude.Eq, ReadPrec [DetachFromIndex]
ReadPrec DetachFromIndex
Int -> ReadS DetachFromIndex
ReadS [DetachFromIndex]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DetachFromIndex]
$creadListPrec :: ReadPrec [DetachFromIndex]
readPrec :: ReadPrec DetachFromIndex
$creadPrec :: ReadPrec DetachFromIndex
readList :: ReadS [DetachFromIndex]
$creadList :: ReadS [DetachFromIndex]
readsPrec :: Int -> ReadS DetachFromIndex
$creadsPrec :: Int -> ReadS DetachFromIndex
Prelude.Read, Int -> DetachFromIndex -> ShowS
[DetachFromIndex] -> ShowS
DetachFromIndex -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DetachFromIndex] -> ShowS
$cshowList :: [DetachFromIndex] -> ShowS
show :: DetachFromIndex -> String
$cshow :: DetachFromIndex -> String
showsPrec :: Int -> DetachFromIndex -> ShowS
$cshowsPrec :: Int -> DetachFromIndex -> ShowS
Prelude.Show, forall x. Rep DetachFromIndex x -> DetachFromIndex
forall x. DetachFromIndex -> Rep DetachFromIndex x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DetachFromIndex x -> DetachFromIndex
$cfrom :: forall x. DetachFromIndex -> Rep DetachFromIndex x
Prelude.Generic)

-- |
-- Create a value of 'DetachFromIndex' 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:
--
-- 'directoryArn', 'detachFromIndex_directoryArn' - The Amazon Resource Name (ARN) of the directory the index and object
-- exist in.
--
-- 'indexReference', 'detachFromIndex_indexReference' - A reference to the index object.
--
-- 'targetReference', 'detachFromIndex_targetReference' - A reference to the object being detached from the index.
newDetachFromIndex ::
  -- | 'directoryArn'
  Prelude.Text ->
  -- | 'indexReference'
  ObjectReference ->
  -- | 'targetReference'
  ObjectReference ->
  DetachFromIndex
newDetachFromIndex :: Text -> ObjectReference -> ObjectReference -> DetachFromIndex
newDetachFromIndex
  Text
pDirectoryArn_
  ObjectReference
pIndexReference_
  ObjectReference
pTargetReference_ =
    DetachFromIndex'
      { $sel:directoryArn:DetachFromIndex' :: Text
directoryArn = Text
pDirectoryArn_,
        $sel:indexReference:DetachFromIndex' :: ObjectReference
indexReference = ObjectReference
pIndexReference_,
        $sel:targetReference:DetachFromIndex' :: ObjectReference
targetReference = ObjectReference
pTargetReference_
      }

-- | The Amazon Resource Name (ARN) of the directory the index and object
-- exist in.
detachFromIndex_directoryArn :: Lens.Lens' DetachFromIndex Prelude.Text
detachFromIndex_directoryArn :: Lens' DetachFromIndex Text
detachFromIndex_directoryArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DetachFromIndex' {Text
directoryArn :: Text
$sel:directoryArn:DetachFromIndex' :: DetachFromIndex -> Text
directoryArn} -> Text
directoryArn) (\s :: DetachFromIndex
s@DetachFromIndex' {} Text
a -> DetachFromIndex
s {$sel:directoryArn:DetachFromIndex' :: Text
directoryArn = Text
a} :: DetachFromIndex)

-- | A reference to the index object.
detachFromIndex_indexReference :: Lens.Lens' DetachFromIndex ObjectReference
detachFromIndex_indexReference :: Lens' DetachFromIndex ObjectReference
detachFromIndex_indexReference = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DetachFromIndex' {ObjectReference
indexReference :: ObjectReference
$sel:indexReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
indexReference} -> ObjectReference
indexReference) (\s :: DetachFromIndex
s@DetachFromIndex' {} ObjectReference
a -> DetachFromIndex
s {$sel:indexReference:DetachFromIndex' :: ObjectReference
indexReference = ObjectReference
a} :: DetachFromIndex)

-- | A reference to the object being detached from the index.
detachFromIndex_targetReference :: Lens.Lens' DetachFromIndex ObjectReference
detachFromIndex_targetReference :: Lens' DetachFromIndex ObjectReference
detachFromIndex_targetReference = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DetachFromIndex' {ObjectReference
targetReference :: ObjectReference
$sel:targetReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
targetReference} -> ObjectReference
targetReference) (\s :: DetachFromIndex
s@DetachFromIndex' {} ObjectReference
a -> DetachFromIndex
s {$sel:targetReference:DetachFromIndex' :: ObjectReference
targetReference = ObjectReference
a} :: DetachFromIndex)

instance Core.AWSRequest DetachFromIndex where
  type
    AWSResponse DetachFromIndex =
      DetachFromIndexResponse
  request :: (Service -> Service) -> DetachFromIndex -> Request DetachFromIndex
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DetachFromIndex
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DetachFromIndex)))
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 -> DetachFromIndexResponse
DetachFromIndexResponse'
            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
"DetachedObjectIdentifier")
            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 DetachFromIndex where
  hashWithSalt :: Int -> DetachFromIndex -> Int
hashWithSalt Int
_salt DetachFromIndex' {Text
ObjectReference
targetReference :: ObjectReference
indexReference :: ObjectReference
directoryArn :: Text
$sel:targetReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:indexReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:directoryArn:DetachFromIndex' :: DetachFromIndex -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
directoryArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ObjectReference
indexReference
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ObjectReference
targetReference

instance Prelude.NFData DetachFromIndex where
  rnf :: DetachFromIndex -> ()
rnf DetachFromIndex' {Text
ObjectReference
targetReference :: ObjectReference
indexReference :: ObjectReference
directoryArn :: Text
$sel:targetReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:indexReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:directoryArn:DetachFromIndex' :: DetachFromIndex -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
directoryArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ObjectReference
indexReference
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ObjectReference
targetReference

instance Data.ToHeaders DetachFromIndex where
  toHeaders :: DetachFromIndex -> ResponseHeaders
toHeaders DetachFromIndex' {Text
ObjectReference
targetReference :: ObjectReference
indexReference :: ObjectReference
directoryArn :: Text
$sel:targetReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:indexReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:directoryArn:DetachFromIndex' :: DetachFromIndex -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [HeaderName
"x-amz-data-partition" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Text
directoryArn]

instance Data.ToJSON DetachFromIndex where
  toJSON :: DetachFromIndex -> Value
toJSON DetachFromIndex' {Text
ObjectReference
targetReference :: ObjectReference
indexReference :: ObjectReference
directoryArn :: Text
$sel:targetReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:indexReference:DetachFromIndex' :: DetachFromIndex -> ObjectReference
$sel:directoryArn:DetachFromIndex' :: DetachFromIndex -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"IndexReference" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ObjectReference
indexReference),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"TargetReference" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ObjectReference
targetReference)
          ]
      )

instance Data.ToPath DetachFromIndex where
  toPath :: DetachFromIndex -> ByteString
toPath =
    forall a b. a -> b -> a
Prelude.const
      ByteString
"/amazonclouddirectory/2017-01-11/index/detach"

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

-- | /See:/ 'newDetachFromIndexResponse' smart constructor.
data DetachFromIndexResponse = DetachFromIndexResponse'
  { -- | The @ObjectIdentifier@ of the object that was detached from the index.
    DetachFromIndexResponse -> Maybe Text
detachedObjectIdentifier :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DetachFromIndexResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DetachFromIndexResponse -> DetachFromIndexResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DetachFromIndexResponse -> DetachFromIndexResponse -> Bool
$c/= :: DetachFromIndexResponse -> DetachFromIndexResponse -> Bool
== :: DetachFromIndexResponse -> DetachFromIndexResponse -> Bool
$c== :: DetachFromIndexResponse -> DetachFromIndexResponse -> Bool
Prelude.Eq, ReadPrec [DetachFromIndexResponse]
ReadPrec DetachFromIndexResponse
Int -> ReadS DetachFromIndexResponse
ReadS [DetachFromIndexResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DetachFromIndexResponse]
$creadListPrec :: ReadPrec [DetachFromIndexResponse]
readPrec :: ReadPrec DetachFromIndexResponse
$creadPrec :: ReadPrec DetachFromIndexResponse
readList :: ReadS [DetachFromIndexResponse]
$creadList :: ReadS [DetachFromIndexResponse]
readsPrec :: Int -> ReadS DetachFromIndexResponse
$creadsPrec :: Int -> ReadS DetachFromIndexResponse
Prelude.Read, Int -> DetachFromIndexResponse -> ShowS
[DetachFromIndexResponse] -> ShowS
DetachFromIndexResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DetachFromIndexResponse] -> ShowS
$cshowList :: [DetachFromIndexResponse] -> ShowS
show :: DetachFromIndexResponse -> String
$cshow :: DetachFromIndexResponse -> String
showsPrec :: Int -> DetachFromIndexResponse -> ShowS
$cshowsPrec :: Int -> DetachFromIndexResponse -> ShowS
Prelude.Show, forall x. Rep DetachFromIndexResponse x -> DetachFromIndexResponse
forall x. DetachFromIndexResponse -> Rep DetachFromIndexResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DetachFromIndexResponse x -> DetachFromIndexResponse
$cfrom :: forall x. DetachFromIndexResponse -> Rep DetachFromIndexResponse x
Prelude.Generic)

-- |
-- Create a value of 'DetachFromIndexResponse' 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:
--
-- 'detachedObjectIdentifier', 'detachFromIndexResponse_detachedObjectIdentifier' - The @ObjectIdentifier@ of the object that was detached from the index.
--
-- 'httpStatus', 'detachFromIndexResponse_httpStatus' - The response's http status code.
newDetachFromIndexResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DetachFromIndexResponse
newDetachFromIndexResponse :: Int -> DetachFromIndexResponse
newDetachFromIndexResponse Int
pHttpStatus_ =
  DetachFromIndexResponse'
    { $sel:detachedObjectIdentifier:DetachFromIndexResponse' :: Maybe Text
detachedObjectIdentifier =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DetachFromIndexResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The @ObjectIdentifier@ of the object that was detached from the index.
detachFromIndexResponse_detachedObjectIdentifier :: Lens.Lens' DetachFromIndexResponse (Prelude.Maybe Prelude.Text)
detachFromIndexResponse_detachedObjectIdentifier :: Lens' DetachFromIndexResponse (Maybe Text)
detachFromIndexResponse_detachedObjectIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DetachFromIndexResponse' {Maybe Text
detachedObjectIdentifier :: Maybe Text
$sel:detachedObjectIdentifier:DetachFromIndexResponse' :: DetachFromIndexResponse -> Maybe Text
detachedObjectIdentifier} -> Maybe Text
detachedObjectIdentifier) (\s :: DetachFromIndexResponse
s@DetachFromIndexResponse' {} Maybe Text
a -> DetachFromIndexResponse
s {$sel:detachedObjectIdentifier:DetachFromIndexResponse' :: Maybe Text
detachedObjectIdentifier = Maybe Text
a} :: DetachFromIndexResponse)

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

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