{-# 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.IoTFleetWise.DisassociateVehicleFleet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Removes, or disassociates, a vehicle from a fleet. Disassociating a
-- vehicle from a fleet doesn\'t delete the vehicle.
--
-- If the vehicle is successfully dissociated from a fleet, Amazon Web
-- Services IoT FleetWise sends back an HTTP 200 response with an empty
-- body.
module Amazonka.IoTFleetWise.DisassociateVehicleFleet
  ( -- * Creating a Request
    DisassociateVehicleFleet (..),
    newDisassociateVehicleFleet,

    -- * Request Lenses
    disassociateVehicleFleet_vehicleName,
    disassociateVehicleFleet_fleetId,

    -- * Destructuring the Response
    DisassociateVehicleFleetResponse (..),
    newDisassociateVehicleFleetResponse,

    -- * Response Lenses
    disassociateVehicleFleetResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDisassociateVehicleFleet' smart constructor.
data DisassociateVehicleFleet = DisassociateVehicleFleet'
  { -- | The unique ID of the vehicle to disassociate from the fleet.
    DisassociateVehicleFleet -> Text
vehicleName :: Prelude.Text,
    -- | The unique ID of a fleet.
    DisassociateVehicleFleet -> Text
fleetId :: Prelude.Text
  }
  deriving (DisassociateVehicleFleet -> DisassociateVehicleFleet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisassociateVehicleFleet -> DisassociateVehicleFleet -> Bool
$c/= :: DisassociateVehicleFleet -> DisassociateVehicleFleet -> Bool
== :: DisassociateVehicleFleet -> DisassociateVehicleFleet -> Bool
$c== :: DisassociateVehicleFleet -> DisassociateVehicleFleet -> Bool
Prelude.Eq, ReadPrec [DisassociateVehicleFleet]
ReadPrec DisassociateVehicleFleet
Int -> ReadS DisassociateVehicleFleet
ReadS [DisassociateVehicleFleet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DisassociateVehicleFleet]
$creadListPrec :: ReadPrec [DisassociateVehicleFleet]
readPrec :: ReadPrec DisassociateVehicleFleet
$creadPrec :: ReadPrec DisassociateVehicleFleet
readList :: ReadS [DisassociateVehicleFleet]
$creadList :: ReadS [DisassociateVehicleFleet]
readsPrec :: Int -> ReadS DisassociateVehicleFleet
$creadsPrec :: Int -> ReadS DisassociateVehicleFleet
Prelude.Read, Int -> DisassociateVehicleFleet -> ShowS
[DisassociateVehicleFleet] -> ShowS
DisassociateVehicleFleet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisassociateVehicleFleet] -> ShowS
$cshowList :: [DisassociateVehicleFleet] -> ShowS
show :: DisassociateVehicleFleet -> String
$cshow :: DisassociateVehicleFleet -> String
showsPrec :: Int -> DisassociateVehicleFleet -> ShowS
$cshowsPrec :: Int -> DisassociateVehicleFleet -> ShowS
Prelude.Show, forall x.
Rep DisassociateVehicleFleet x -> DisassociateVehicleFleet
forall x.
DisassociateVehicleFleet -> Rep DisassociateVehicleFleet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DisassociateVehicleFleet x -> DisassociateVehicleFleet
$cfrom :: forall x.
DisassociateVehicleFleet -> Rep DisassociateVehicleFleet x
Prelude.Generic)

-- |
-- Create a value of 'DisassociateVehicleFleet' 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:
--
-- 'vehicleName', 'disassociateVehicleFleet_vehicleName' - The unique ID of the vehicle to disassociate from the fleet.
--
-- 'fleetId', 'disassociateVehicleFleet_fleetId' - The unique ID of a fleet.
newDisassociateVehicleFleet ::
  -- | 'vehicleName'
  Prelude.Text ->
  -- | 'fleetId'
  Prelude.Text ->
  DisassociateVehicleFleet
newDisassociateVehicleFleet :: Text -> Text -> DisassociateVehicleFleet
newDisassociateVehicleFleet Text
pVehicleName_ Text
pFleetId_ =
  DisassociateVehicleFleet'
    { $sel:vehicleName:DisassociateVehicleFleet' :: Text
vehicleName =
        Text
pVehicleName_,
      $sel:fleetId:DisassociateVehicleFleet' :: Text
fleetId = Text
pFleetId_
    }

-- | The unique ID of the vehicle to disassociate from the fleet.
disassociateVehicleFleet_vehicleName :: Lens.Lens' DisassociateVehicleFleet Prelude.Text
disassociateVehicleFleet_vehicleName :: Lens' DisassociateVehicleFleet Text
disassociateVehicleFleet_vehicleName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateVehicleFleet' {Text
vehicleName :: Text
$sel:vehicleName:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
vehicleName} -> Text
vehicleName) (\s :: DisassociateVehicleFleet
s@DisassociateVehicleFleet' {} Text
a -> DisassociateVehicleFleet
s {$sel:vehicleName:DisassociateVehicleFleet' :: Text
vehicleName = Text
a} :: DisassociateVehicleFleet)

-- | The unique ID of a fleet.
disassociateVehicleFleet_fleetId :: Lens.Lens' DisassociateVehicleFleet Prelude.Text
disassociateVehicleFleet_fleetId :: Lens' DisassociateVehicleFleet Text
disassociateVehicleFleet_fleetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisassociateVehicleFleet' {Text
fleetId :: Text
$sel:fleetId:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
fleetId} -> Text
fleetId) (\s :: DisassociateVehicleFleet
s@DisassociateVehicleFleet' {} Text
a -> DisassociateVehicleFleet
s {$sel:fleetId:DisassociateVehicleFleet' :: Text
fleetId = Text
a} :: DisassociateVehicleFleet)

instance Core.AWSRequest DisassociateVehicleFleet where
  type
    AWSResponse DisassociateVehicleFleet =
      DisassociateVehicleFleetResponse
  request :: (Service -> Service)
-> DisassociateVehicleFleet -> Request DisassociateVehicleFleet
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 DisassociateVehicleFleet
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DisassociateVehicleFleet)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DisassociateVehicleFleetResponse
DisassociateVehicleFleetResponse'
            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))
      )

instance Prelude.Hashable DisassociateVehicleFleet where
  hashWithSalt :: Int -> DisassociateVehicleFleet -> Int
hashWithSalt Int
_salt DisassociateVehicleFleet' {Text
fleetId :: Text
vehicleName :: Text
$sel:fleetId:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
$sel:vehicleName:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
vehicleName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
fleetId

instance Prelude.NFData DisassociateVehicleFleet where
  rnf :: DisassociateVehicleFleet -> ()
rnf DisassociateVehicleFleet' {Text
fleetId :: Text
vehicleName :: Text
$sel:fleetId:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
$sel:vehicleName:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
vehicleName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
fleetId

instance Data.ToHeaders DisassociateVehicleFleet where
  toHeaders :: DisassociateVehicleFleet -> 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
"IoTAutobahnControlPlane.DisassociateVehicleFleet" ::
                          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 DisassociateVehicleFleet where
  toJSON :: DisassociateVehicleFleet -> Value
toJSON DisassociateVehicleFleet' {Text
fleetId :: Text
vehicleName :: Text
$sel:fleetId:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
$sel:vehicleName:DisassociateVehicleFleet' :: DisassociateVehicleFleet -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"vehicleName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
vehicleName),
            forall a. a -> Maybe a
Prelude.Just (Key
"fleetId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
fleetId)
          ]
      )

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

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

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

-- |
-- Create a value of 'DisassociateVehicleFleetResponse' 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', 'disassociateVehicleFleetResponse_httpStatus' - The response's http status code.
newDisassociateVehicleFleetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DisassociateVehicleFleetResponse
newDisassociateVehicleFleetResponse :: Int -> DisassociateVehicleFleetResponse
newDisassociateVehicleFleetResponse Int
pHttpStatus_ =
  DisassociateVehicleFleetResponse'
    { $sel:httpStatus:DisassociateVehicleFleetResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

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

instance
  Prelude.NFData
    DisassociateVehicleFleetResponse
  where
  rnf :: DisassociateVehicleFleetResponse -> ()
rnf DisassociateVehicleFleetResponse' {Int
httpStatus :: Int
$sel:httpStatus:DisassociateVehicleFleetResponse' :: DisassociateVehicleFleetResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus