module Aws.S3.Commands.GetBucketVersioning ( module Aws.S3.Commands.GetBucketVersioning , VersioningState(..) ) where import Aws.Core import Aws.S3.Commands.PutBucketVersioning (VersioningState(..)) import Aws.S3.Core import Control.Monad.Trans.Resource (throwM) import Network.HTTP.Types (toQuery) import qualified Data.Text.Encoding as T import Text.XML.Cursor (($.//)) import qualified Data.ByteString.Lazy.Char8 as B8 -- | Gets the versioning state of an existing bucket. data GetBucketVersioning = GetBucketVersioning { gbvBucket :: Bucket } deriving (Show) getBucketVersioning :: Bucket -> GetBucketVersioning getBucketVersioning = GetBucketVersioning data GetBucketVersioningResponse = GetBucketVersioningResponse { gbvVersioning :: Maybe VersioningState } -- ^ Nothing when the bucket is not versioned deriving (Show) -- | ServiceConfiguration: 'S3Configuration' instance SignQuery GetBucketVersioning where type ServiceConfiguration GetBucketVersioning = S3Configuration signQuery GetBucketVersioning{..} = s3SignQuery $ S3Query { s3QMethod = Get , s3QBucket = Just $ T.encodeUtf8 gbvBucket , s3QSubresources = toQuery [("versioning" :: B8.ByteString, Nothing :: Maybe B8.ByteString)] , s3QQuery = [] , s3QContentType = Nothing , s3QContentMd5 = Nothing , s3QObject = Nothing , s3QAmzHeaders = [] , s3QOtherHeaders = [] , s3QRequestBody = Nothing } instance ResponseConsumer r GetBucketVersioningResponse where type ResponseMetadata GetBucketVersioningResponse = S3Metadata responseConsumer _ _ = s3XmlResponseConsumer parse where parse cursor = do v <- case cursor $.// elContent "Status" of [] -> return Nothing ("Enabled":[]) -> return (Just VersioningEnabled) ("Suspended":[]) -> return (Just VersioningSuspended) _ -> throwM $ XmlException "Invalid Status" return GetBucketVersioningResponse { gbvVersioning = v } instance Transaction GetBucketVersioning GetBucketVersioningResponse instance AsMemoryResponse GetBucketVersioningResponse where type MemoryResponse GetBucketVersioningResponse = GetBucketVersioningResponse loadToMemory = return