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

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

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

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

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

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

    instance Transaction DeleteGroup DeleteGroupResponse

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