    {-# LANGUAGE MultiParamTypeClasses #-}
    {-# LANGUAGE RecordWildCards       #-}
    {-# LANGUAGE TypeFamilies          #-}
    module Aws.Iam.Commands.RemoveUserFromGroup
        ( RemoveUserFromGroup(..)
        , RemoveUserFromGroupResponse(..)
        ) where

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

    -- | Removes the specified user from the specified group.
    --
    -- <http://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveUserFromGroup.html>
    data RemoveUserFromGroup
        = RemoveUserFromGroup {
            RemoveUserFromGroup -> Text
    rufgGroupName :: Text
          -- ^ Name of the group to update.
          , RemoveUserFromGroup -> Text
    rufgUserName  :: Text
          -- ^ The of the user to add.
          }
        deriving (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool)
    -> (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool)
    -> Eq RemoveUserFromGroup
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    == :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    $c/= :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    /= :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    Eq, Eq RemoveUserFromGroup
    Eq RemoveUserFromGroup =>
    (RemoveUserFromGroup -> RemoveUserFromGroup -> Ordering)
    -> (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool)
    -> (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool)
    -> (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool)
    -> (RemoveUserFromGroup -> RemoveUserFromGroup -> Bool)
    -> (RemoveUserFromGroup
        -> RemoveUserFromGroup -> RemoveUserFromGroup)
    -> (RemoveUserFromGroup
        -> RemoveUserFromGroup -> RemoveUserFromGroup)
    -> Ord RemoveUserFromGroup
    RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    RemoveUserFromGroup -> RemoveUserFromGroup -> Ordering
    RemoveUserFromGroup -> RemoveUserFromGroup -> RemoveUserFromGroup
    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 :: RemoveUserFromGroup -> RemoveUserFromGroup -> Ordering
    compare :: RemoveUserFromGroup -> RemoveUserFromGroup -> Ordering
    $c< :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    < :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    $c<= :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    <= :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    $c> :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    > :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    $c>= :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    >= :: RemoveUserFromGroup -> RemoveUserFromGroup -> Bool
    $cmax :: RemoveUserFromGroup -> RemoveUserFromGroup -> RemoveUserFromGroup
    max :: RemoveUserFromGroup -> RemoveUserFromGroup -> RemoveUserFromGroup
    $cmin :: RemoveUserFromGroup -> RemoveUserFromGroup -> RemoveUserFromGroup
    min :: RemoveUserFromGroup -> RemoveUserFromGroup -> RemoveUserFromGroup
    Ord, Int -> RemoveUserFromGroup -> ShowS
    [RemoveUserFromGroup] -> ShowS
    RemoveUserFromGroup -> String
    (Int -> RemoveUserFromGroup -> ShowS)
    -> (RemoveUserFromGroup -> String)
    -> ([RemoveUserFromGroup] -> ShowS)
    -> Show RemoveUserFromGroup
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> RemoveUserFromGroup -> ShowS
    showsPrec :: Int -> RemoveUserFromGroup -> ShowS
    $cshow :: RemoveUserFromGroup -> String
    show :: RemoveUserFromGroup -> String
    $cshowList :: [RemoveUserFromGroup] -> ShowS
    showList :: [RemoveUserFromGroup] -> ShowS
    Show, Typeable)

    instance SignQuery RemoveUserFromGroup where
        type ServiceConfiguration RemoveUserFromGroup = IamConfiguration
        signQuery :: forall queryType.
    RemoveUserFromGroup
    -> ServiceConfiguration RemoveUserFromGroup queryType
    -> SignatureData
    -> SignedQuery
    signQuery RemoveUserFromGroup{Text
    rufgGroupName :: RemoveUserFromGroup -> Text
    rufgUserName :: RemoveUserFromGroup -> Text
    rufgGroupName :: Text
    rufgUserName :: Text
    ..}
            = ByteString
    -> [(ByteString, Text)]
    -> IamConfiguration queryType
    -> SignatureData
    -> SignedQuery
    forall qt.
    ByteString
    -> [(ByteString, Text)]
    -> IamConfiguration qt
    -> SignatureData
    -> SignedQuery
    iamAction ByteString
    "RemoveUserFromGroup" [
                  (ByteString
    "GroupName"     , Text
    rufgGroupName)
                , (ByteString
    "UserName"      , Text
    rufgUserName)
                ]

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

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

    instance Transaction RemoveUserFromGroup RemoveUserFromGroupResponse

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