module Aws.S3.Commands.DeleteObjectVersion
where

import           Aws.Core
import           Aws.S3.Core
import           Data.ByteString.Char8      ({- IsString -})
import qualified Data.Text                  as T
import qualified Data.Text.Encoding         as T

data DeleteObjectVersion = DeleteObjectVersion {
  dovObjectName :: T.Text,
  dovBucket :: Bucket,
  dovVersionId :: T.Text
} deriving (Show)

deleteObjectVersion :: Bucket -> T.Text -> T.Text -> DeleteObjectVersion
deleteObjectVersion bucket object version
    = DeleteObjectVersion {
          dovObjectName = object
        , dovBucket = bucket
        , dovVersionId = version
        }

data DeleteObjectVersionResponse = DeleteObjectVersionResponse {
} deriving (Show)

-- | ServiceConfiguration: 'S3Configuration'
instance SignQuery DeleteObjectVersion where
    type ServiceConfiguration DeleteObjectVersion = S3Configuration
    signQuery DeleteObjectVersion {..} = s3SignQuery S3Query {
                                 s3QMethod = Delete
                               , s3QBucket = Just $ T.encodeUtf8 dovBucket
                               , s3QSubresources = [ ("versionId", Just $ T.encodeUtf8 dovVersionId) ]
                               , s3QQuery = []
                               , s3QContentType = Nothing
                               , s3QContentMd5 = Nothing
                               , s3QAmzHeaders = []
                               , s3QOtherHeaders = []
                               , s3QRequestBody = Nothing
                               , s3QObject = Just $ T.encodeUtf8 dovObjectName
                               }

instance ResponseConsumer DeleteObjectVersion DeleteObjectVersionResponse where
    type ResponseMetadata DeleteObjectVersionResponse = S3Metadata
    responseConsumer _ _
        = s3ResponseConsumer $ \_ -> return DeleteObjectVersionResponse

instance Transaction DeleteObjectVersion DeleteObjectVersionResponse

instance AsMemoryResponse DeleteObjectVersionResponse where
    type MemoryResponse DeleteObjectVersionResponse = DeleteObjectVersionResponse
    loadToMemory = return