1module Aws.S3.Commands.PutBucketVersioning where 2 3import Aws.Core 4import Aws.S3.Core 5import Network.HTTP.Types (toQuery) 6import qualified Data.Map as M 7import qualified Data.Text.Encoding as T 8import qualified Network.HTTP.Conduit as HTTP 9import qualified Text.XML as XML 10import qualified Data.ByteString.Lazy.Char8 as B8 11 12data VersioningState = VersioningSuspended | VersioningEnabled 13 deriving (Show) 14 15-- | Sets the versioning state of an existing bucket. 16data PutBucketVersioning 17 = PutBucketVersioning 18 { pbvBucket :: Bucket 19 , pbvVersioningConfiguration :: VersioningState 20 } 21 deriving (Show) 22 23putBucketVersioning :: Bucket -> VersioningState -> PutBucketVersioning 24putBucketVersioning = PutBucketVersioning 25 26data PutBucketVersioningResponse 27 = PutBucketVersioningResponse 28 deriving (Show) 29 30-- | ServiceConfiguration: 'S3Configuration' 31instance SignQuery PutBucketVersioning where 32 type ServiceConfiguration PutBucketVersioning = S3Configuration 33 34 signQuery PutBucketVersioning{..} = s3SignQuery $ S3Query 35 { s3QMethod = Put 36 , s3QBucket = Just $ T.encodeUtf8 pbvBucket 37 , s3QSubresources = toQuery [("versioning" :: B8.ByteString, Nothing :: Maybe B8.ByteString)] 38 , s3QQuery = [] 39 , s3QContentType = Nothing 40 , s3QContentMd5 = Nothing 41 , s3QObject = Nothing 42 , s3QAmzHeaders = [] 43 , s3QOtherHeaders = [] 44 , s3QRequestBody = (Just . HTTP.RequestBodyLBS . XML.renderLBS XML.def) 45 XML.Document 46 { XML.documentPrologue = XML.Prologue [] Nothing [] 47 , XML.documentRoot = XML.Element 48 { XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}VersioningConfiguration" 49 , XML.elementAttributes = M.empty 50 , XML.elementNodes = [ XML.NodeElement (XML.Element 51 { XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}Status" 52 , XML.elementAttributes = M.empty 53 , XML.elementNodes = case pbvVersioningConfiguration of 54 VersioningSuspended -> [XML.NodeContent "Suspended"] 55 VersioningEnabled -> [XML.NodeContent "Enabled"] 56 })] 57 } 58 , XML.documentEpilogue = [] 59 } 60 } 61 62instance ResponseConsumer r PutBucketVersioningResponse where 63 type ResponseMetadata PutBucketVersioningResponse = S3Metadata 64 65 responseConsumer _ _ = s3ResponseConsumer $ \_ -> return PutBucketVersioningResponse 66 67instance Transaction PutBucketVersioning PutBucketVersioningResponse 68 69instance AsMemoryResponse PutBucketVersioningResponse where 70 type MemoryResponse PutBucketVersioningResponse = PutBucketVersioningResponse 71 loadToMemory = return 72