module Aws.S3.Commands.PutBucketVersioning where import Aws.Core import Aws.S3.Core import Network.HTTP.Types (toQuery) import qualified Data.Map as M import qualified Data.Text.Encoding as T import qualified Network.HTTP.Conduit as HTTP import qualified Text.XML as XML import qualified Data.ByteString.Lazy.Char8 as B8 data VersioningState = VersioningSuspended | VersioningEnabled deriving (Show) -- | Sets the versioning state of an existing bucket. data PutBucketVersioning = PutBucketVersioning { pbvBucket :: Bucket , pbvVersioningConfiguration :: VersioningState } deriving (Show) putBucketVersioning :: Bucket -> VersioningState -> PutBucketVersioning putBucketVersioning = PutBucketVersioning data PutBucketVersioningResponse = PutBucketVersioningResponse deriving (Show) -- | ServiceConfiguration: 'S3Configuration' instance SignQuery PutBucketVersioning where type ServiceConfiguration PutBucketVersioning = S3Configuration signQuery PutBucketVersioning{..} = s3SignQuery $ S3Query { s3QMethod = Put , s3QBucket = Just $ T.encodeUtf8 pbvBucket , s3QSubresources = toQuery [("versioning" :: B8.ByteString, Nothing :: Maybe B8.ByteString)] , s3QQuery = [] , s3QContentType = Nothing , s3QContentMd5 = Nothing , s3QObject = Nothing , s3QAmzHeaders = [] , s3QOtherHeaders = [] , s3QRequestBody = (Just . HTTP.RequestBodyLBS . XML.renderLBS XML.def) XML.Document { XML.documentPrologue = XML.Prologue [] Nothing [] , XML.documentRoot = XML.Element { XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}VersioningConfiguration" , XML.elementAttributes = M.empty , XML.elementNodes = [ XML.NodeElement (XML.Element { XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}Status" , XML.elementAttributes = M.empty , XML.elementNodes = case pbvVersioningConfiguration of VersioningSuspended -> [XML.NodeContent "Suspended"] VersioningEnabled -> [XML.NodeContent "Enabled"] })] } , XML.documentEpilogue = [] } } instance ResponseConsumer r PutBucketVersioningResponse where type ResponseMetadata PutBucketVersioningResponse = S3Metadata responseConsumer _ _ = s3ResponseConsumer $ \_ -> return PutBucketVersioningResponse instance Transaction PutBucketVersioning PutBucketVersioningResponse instance AsMemoryResponse PutBucketVersioningResponse where type MemoryResponse PutBucketVersioningResponse = PutBucketVersioningResponse loadToMemory = return