{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RecordWildCards       #-}
{-# LANGUAGE TupleSections         #-}
{-# LANGUAGE TypeFamilies          #-}
module Aws.Iam.Commands.DeleteAccessKey
    ( DeleteAccessKey(..)
    , DeleteAccessKeyResponse(..)
    ) where

import           Aws.Core
import           Aws.Iam.Core
import           Aws.Iam.Internal
import           Control.Applicative
import           Data.Text           (Text)
import           Data.Typeable

-- | Deletes the access key associated with the specified user.
--
-- <http://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html>
data DeleteAccessKey
    = DeleteAccessKey {
        dakAccessKeyId :: Text
      -- ^ ID of the access key to be deleted.
      , dakUserName    :: Maybe Text
      -- ^ User name with which the access key is associated.
      }
    deriving (Eq, Ord, Show, Typeable)

instance SignQuery DeleteAccessKey where
    type ServiceConfiguration DeleteAccessKey = IamConfiguration
    signQuery DeleteAccessKey{..}
        = iamAction' "DeleteAccessKey" [
              Just ("AccessKeyId", dakAccessKeyId)
            , ("UserName",) <$> dakUserName
            ]

data DeleteAccessKeyResponse = DeleteAccessKeyResponse
    deriving (Eq, Ord, Show, Typeable)

instance ResponseConsumer DeleteAccessKey DeleteAccessKeyResponse where
    type ResponseMetadata DeleteAccessKeyResponse = IamMetadata
    responseConsumer _ = iamResponseConsumer (const $ return DeleteAccessKeyResponse)

instance Transaction DeleteAccessKey DeleteAccessKeyResponse

instance AsMemoryResponse DeleteAccessKeyResponse where
    type MemoryResponse DeleteAccessKeyResponse = DeleteAccessKeyResponse
    loadToMemory = return