aws-0.25.3: Aws/S3/Commands/RestoreObject.hs
{-# LANGUAGE CPP #-}
module Aws.S3.Commands.RestoreObject
where
import Aws.Core
import Aws.S3.Core
import qualified Data.ByteString.Lazy.Char8 as B8
import qualified Data.Map as M
import Data.Maybe
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Network.HTTP.Types as HTTP
import qualified Network.HTTP.Conduit as HTTP
import qualified Text.XML as XML
#if !MIN_VERSION_time(1,5,0)
import System.Locale
#endif
import Prelude
data RestoreObject
= RestoreObject { roObjectName :: Object
, roBucket :: Bucket
, roVersionId :: Maybe T.Text
, roTier :: RestoreObjectTier
, roObjectLifetimeDays :: RestoreObjectLifetimeDays
}
deriving (Show)
data RestoreObjectTier
= RestoreObjectTierExpedited
| RestoreObjectTierStandard
| RestoreObjectTierBulk
deriving (Show)
data RestoreObjectLifetimeDays = RestoreObjectLifetimeDays Integer
deriving (Show)
restoreObject :: Bucket -> T.Text -> RestoreObjectTier -> RestoreObjectLifetimeDays -> RestoreObject
restoreObject bucket obj tier lifetime = RestoreObject obj bucket Nothing tier lifetime
data RestoreObjectResponse
= RestoreObjectAccepted
| RestoreObjectAlreadyRestored
| RestoreObjectAlreadyInProgress
deriving (Show)
-- | ServiceConfiguration: 'S3Configuration'
instance SignQuery RestoreObject where
type ServiceConfiguration RestoreObject = S3Configuration
signQuery RestoreObject {..} = s3SignQuery S3Query
{ s3QMethod = Post
, s3QBucket = Just $ T.encodeUtf8 roBucket
, s3QObject = Just $ T.encodeUtf8 roObjectName
, s3QSubresources = HTTP.toQuery
[ Just ( "restore" :: B8.ByteString, Nothing :: Maybe T.Text)
, case roVersionId of
Nothing -> Nothing
Just v -> Just ("versionId" :: B8.ByteString, Just v)
]
, s3QQuery = []
, s3QContentType = Nothing
, s3QContentMd5 = 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/}RestoreRequest"
, XML.elementAttributes = M.empty
, XML.elementNodes =
[ XML.NodeElement (XML.Element
{ XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}Days"
, XML.elementAttributes = M.empty
, XML.elementNodes = case roObjectLifetimeDays of
RestoreObjectLifetimeDays n -> [XML.NodeContent (T.pack (show n))]
})
, XML.NodeElement (XML.Element
{ XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}GlacierJobParameters"
, XML.elementAttributes = M.empty
, XML.elementNodes =
[ XML.NodeElement (XML.Element
{ XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}Tier"
, XML.elementAttributes = M.empty
, XML.elementNodes = case roTier of
RestoreObjectTierExpedited -> [XML.NodeContent "Expedited"]
RestoreObjectTierStandard -> [XML.NodeContent "Standard"]
RestoreObjectTierBulk -> [XML.NodeContent "Bulk"]
})
]
})
]
}
, XML.documentEpilogue = []
}
}
instance ResponseConsumer RestoreObject RestoreObjectResponse where
type ResponseMetadata RestoreObjectResponse = S3Metadata
responseConsumer httpReq _ _ resp
| status == HTTP.status202 = return RestoreObjectAccepted
| status == HTTP.status200 = return RestoreObjectAlreadyRestored
| status == HTTP.status409 = return RestoreObjectAlreadyInProgress
| otherwise = throwStatusCodeException httpReq resp
where
status = HTTP.responseStatus resp
instance Transaction RestoreObject RestoreObjectResponse
instance AsMemoryResponse RestoreObjectResponse where
type MemoryResponse RestoreObjectResponse = RestoreObjectResponse
loadToMemory = return