aws-0.25.3: Aws/S3/Commands/GetBucketVersioning.hs
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