    {-# LANGUAGE MultiParamTypeClasses #-}
    {-# LANGUAGE TypeFamilies          #-}
    module Aws.Iam.Commands.DeleteUser
        ( DeleteUser(..)
        , DeleteUserResponse(..)
        ) where

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

    -- | Deletes the specified user.
    --
    -- <http://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteUser.html>
    data DeleteUser = DeleteUser Text
        deriving (DeleteUser -> DeleteUser -> Bool
    (DeleteUser -> DeleteUser -> Bool)
    -> (DeleteUser -> DeleteUser -> Bool) -> Eq DeleteUser
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DeleteUser -> DeleteUser -> Bool
    == :: DeleteUser -> DeleteUser -> Bool
    $c/= :: DeleteUser -> DeleteUser -> Bool
    /= :: DeleteUser -> DeleteUser -> Bool
    Eq, Eq DeleteUser
    Eq DeleteUser =>
    (DeleteUser -> DeleteUser -> Ordering)
    -> (DeleteUser -> DeleteUser -> Bool)
    -> (DeleteUser -> DeleteUser -> Bool)
    -> (DeleteUser -> DeleteUser -> Bool)
    -> (DeleteUser -> DeleteUser -> Bool)
    -> (DeleteUser -> DeleteUser -> DeleteUser)
    -> (DeleteUser -> DeleteUser -> DeleteUser)
    -> Ord DeleteUser
    DeleteUser -> DeleteUser -> Bool
    DeleteUser -> DeleteUser -> Ordering
    DeleteUser -> DeleteUser -> DeleteUser
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DeleteUser -> DeleteUser -> Ordering
    compare :: DeleteUser -> DeleteUser -> Ordering
    $c< :: DeleteUser -> DeleteUser -> Bool
    < :: DeleteUser -> DeleteUser -> Bool
    $c<= :: DeleteUser -> DeleteUser -> Bool
    <= :: DeleteUser -> DeleteUser -> Bool
    $c> :: DeleteUser -> DeleteUser -> Bool
    > :: DeleteUser -> DeleteUser -> Bool
    $c>= :: DeleteUser -> DeleteUser -> Bool
    >= :: DeleteUser -> DeleteUser -> Bool
    $cmax :: DeleteUser -> DeleteUser -> DeleteUser
    max :: DeleteUser -> DeleteUser -> DeleteUser
    $cmin :: DeleteUser -> DeleteUser -> DeleteUser
    min :: DeleteUser -> DeleteUser -> DeleteUser
    Ord, Int -> DeleteUser -> ShowS
    [DeleteUser] -> ShowS
    DeleteUser -> String
    (Int -> DeleteUser -> ShowS)
    -> (DeleteUser -> String)
    -> ([DeleteUser] -> ShowS)
    -> Show DeleteUser
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DeleteUser -> ShowS
    showsPrec :: Int -> DeleteUser -> ShowS
    $cshow :: DeleteUser -> String
    show :: DeleteUser -> String
    $cshowList :: [DeleteUser] -> ShowS
    showList :: [DeleteUser] -> ShowS
    Show, Typeable)

    instance SignQuery DeleteUser where
        type ServiceConfiguration DeleteUser = IamConfiguration
        signQuery :: forall queryType.
    DeleteUser
    -> ServiceConfiguration DeleteUser queryType
    -> SignatureData
    -> SignedQuery
    signQuery (DeleteUser Text
    userName)
            = ByteString
    -> [(ByteString, Text)]
    -> IamConfiguration queryType
    -> SignatureData
    -> SignedQuery
    forall qt.
    ByteString
    -> [(ByteString, Text)]
    -> IamConfiguration qt
    -> SignatureData
    -> SignedQuery
    iamAction ByteString
    "DeleteUser" [(ByteString
    "UserName", Text
    userName)]

    data DeleteUserResponse = DeleteUserResponse
        deriving (DeleteUserResponse -> DeleteUserResponse -> Bool
    (DeleteUserResponse -> DeleteUserResponse -> Bool)
    -> (DeleteUserResponse -> DeleteUserResponse -> Bool)
    -> Eq DeleteUserResponse
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DeleteUserResponse -> DeleteUserResponse -> Bool
    == :: DeleteUserResponse -> DeleteUserResponse -> Bool
    $c/= :: DeleteUserResponse -> DeleteUserResponse -> Bool
    /= :: DeleteUserResponse -> DeleteUserResponse -> Bool
    Eq, Eq DeleteUserResponse
    Eq DeleteUserResponse =>
    (DeleteUserResponse -> DeleteUserResponse -> Ordering)
    -> (DeleteUserResponse -> DeleteUserResponse -> Bool)
    -> (DeleteUserResponse -> DeleteUserResponse -> Bool)
    -> (DeleteUserResponse -> DeleteUserResponse -> Bool)
    -> (DeleteUserResponse -> DeleteUserResponse -> Bool)
    -> (DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse)
    -> (DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse)
    -> Ord DeleteUserResponse
    DeleteUserResponse -> DeleteUserResponse -> Bool
    DeleteUserResponse -> DeleteUserResponse -> Ordering
    DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DeleteUserResponse -> DeleteUserResponse -> Ordering
    compare :: DeleteUserResponse -> DeleteUserResponse -> Ordering
    $c< :: DeleteUserResponse -> DeleteUserResponse -> Bool
    < :: DeleteUserResponse -> DeleteUserResponse -> Bool
    $c<= :: DeleteUserResponse -> DeleteUserResponse -> Bool
    <= :: DeleteUserResponse -> DeleteUserResponse -> Bool
    $c> :: DeleteUserResponse -> DeleteUserResponse -> Bool
    > :: DeleteUserResponse -> DeleteUserResponse -> Bool
    $c>= :: DeleteUserResponse -> DeleteUserResponse -> Bool
    >= :: DeleteUserResponse -> DeleteUserResponse -> Bool
    $cmax :: DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse
    max :: DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse
    $cmin :: DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse
    min :: DeleteUserResponse -> DeleteUserResponse -> DeleteUserResponse
    Ord, Int -> DeleteUserResponse -> ShowS
    [DeleteUserResponse] -> ShowS
    DeleteUserResponse -> String
    (Int -> DeleteUserResponse -> ShowS)
    -> (DeleteUserResponse -> String)
    -> ([DeleteUserResponse] -> ShowS)
    -> Show DeleteUserResponse
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DeleteUserResponse -> ShowS
    showsPrec :: Int -> DeleteUserResponse -> ShowS
    $cshow :: DeleteUserResponse -> String
    show :: DeleteUserResponse -> String
    $cshowList :: [DeleteUserResponse] -> ShowS
    showList :: [DeleteUserResponse] -> ShowS
    Show, Typeable)

    instance ResponseConsumer DeleteUser DeleteUserResponse where
        type ResponseMetadata DeleteUserResponse = IamMetadata
        responseConsumer :: Request
    -> DeleteUser
    -> IORef (ResponseMetadata DeleteUserResponse)
    -> HTTPResponseConsumer DeleteUserResponse
    responseConsumer Request
    _ DeleteUser
    _
            = (Cursor -> Response IamMetadata DeleteUserResponse)
    -> IORef IamMetadata -> HTTPResponseConsumer DeleteUserResponse
    forall a.
    (Cursor -> Response IamMetadata a)
    -> IORef IamMetadata -> HTTPResponseConsumer a
    iamResponseConsumer (Response IamMetadata DeleteUserResponse
    -> Cursor -> Response IamMetadata DeleteUserResponse
    forall a b. a -> b -> a
    const (Response IamMetadata DeleteUserResponse
     -> Cursor -> Response IamMetadata DeleteUserResponse)
    -> Response IamMetadata DeleteUserResponse
    -> Cursor
    -> Response IamMetadata DeleteUserResponse
    forall a b. (a -> b) -> a -> b
    $ DeleteUserResponse -> Response IamMetadata DeleteUserResponse
    forall a. a -> Response IamMetadata a
    forall (m :: * -> *) a. Monad m => a -> m a
    return DeleteUserResponse
    DeleteUserResponse)

    instance Transaction DeleteUser DeleteUserResponse

    instance AsMemoryResponse DeleteUserResponse where
        type MemoryResponse DeleteUserResponse = DeleteUserResponse
        loadToMemory :: DeleteUserResponse
    -> ResourceT IO (MemoryResponse DeleteUserResponse)
    loadToMemory = DeleteUserResponse
    -> ResourceT IO (MemoryResponse DeleteUserResponse)
    DeleteUserResponse -> ResourceT IO DeleteUserResponse
    forall a. a -> ResourceT IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return