{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} module Aws.Iam.Commands.GetGroupPolicy ( GetGroupPolicy(..) , GetGroupPolicyResponse(..) ) where import Aws.Core import Aws.Iam.Core import Aws.Iam.Internal import Control.Applicative import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import Data.Typeable import qualified Network.HTTP.Types as HTTP import Text.XML.Cursor (($//)) import Prelude -- | Retreives the specified policy document for the specified group. -- -- data GetGroupPolicy = GetGroupPolicy { ggpPolicyName :: Text -- ^ Name of the policy. , ggpGroupName :: Text -- ^ Name of the group with whom the policy is associated. } deriving (Eq, Ord, Show, Typeable) instance SignQuery GetGroupPolicy where type ServiceConfiguration GetGroupPolicy = IamConfiguration signQuery GetGroupPolicy{..} = iamAction "GetGroupPolicy" [ ("PolicyName", ggpPolicyName) , ("GroupName", ggpGroupName) ] data GetGroupPolicyResponse = GetGroupPolicyResponse { ggprPolicyDocument :: Text -- ^ The policy document. , ggprPolicyName :: Text -- ^ Name of the policy. , ggprGroupName :: Text -- ^ Name of the group with whom the policy is associated. } deriving (Eq, Ord, Show, Typeable) instance ResponseConsumer GetGroupPolicy GetGroupPolicyResponse where type ResponseMetadata GetGroupPolicyResponse = IamMetadata responseConsumer _ _ = iamResponseConsumer $ \cursor -> do let attr name = force ("Missing " ++ Text.unpack name) $ cursor $// elContent name ggprPolicyDocument <- decodePolicy <$> attr "PolicyDocument" ggprPolicyName <- attr "PolicyName" ggprGroupName <- attr "GroupName" return GetGroupPolicyResponse{..} where decodePolicy = Text.decodeUtf8 . HTTP.urlDecode False . Text.encodeUtf8 instance Transaction GetGroupPolicy GetGroupPolicyResponse instance AsMemoryResponse GetGroupPolicyResponse where type MemoryResponse GetGroupPolicyResponse = GetGroupPolicyResponse loadToMemory = return