{-# 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 { RestoreObject -> Object
roObjectName :: Object
, RestoreObject -> Object
roBucket :: Bucket
, RestoreObject -> Maybe Object
roVersionId :: Maybe T.Text
, RestoreObject -> RestoreObjectTier
roTier :: RestoreObjectTier
, RestoreObject -> RestoreObjectLifetimeDays
roObjectLifetimeDays :: RestoreObjectLifetimeDays
}
deriving (Int -> RestoreObject -> ShowS
[RestoreObject] -> ShowS
RestoreObject -> String
(Int -> RestoreObject -> ShowS)
-> (RestoreObject -> String)
-> ([RestoreObject] -> ShowS)
-> Show RestoreObject
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RestoreObject -> ShowS
showsPrec :: Int -> RestoreObject -> ShowS
$cshow :: RestoreObject -> String
show :: RestoreObject -> String
$cshowList :: [RestoreObject] -> ShowS
showList :: [RestoreObject] -> ShowS
Show)
data RestoreObjectTier
= RestoreObjectTierExpedited
| RestoreObjectTierStandard
| RestoreObjectTierBulk
deriving (Int -> RestoreObjectTier -> ShowS
[RestoreObjectTier] -> ShowS
RestoreObjectTier -> String
(Int -> RestoreObjectTier -> ShowS)
-> (RestoreObjectTier -> String)
-> ([RestoreObjectTier] -> ShowS)
-> Show RestoreObjectTier
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RestoreObjectTier -> ShowS
showsPrec :: Int -> RestoreObjectTier -> ShowS
$cshow :: RestoreObjectTier -> String
show :: RestoreObjectTier -> String
$cshowList :: [RestoreObjectTier] -> ShowS
showList :: [RestoreObjectTier] -> ShowS
Show)
data RestoreObjectLifetimeDays = RestoreObjectLifetimeDays Integer
deriving (Int -> RestoreObjectLifetimeDays -> ShowS
[RestoreObjectLifetimeDays] -> ShowS
RestoreObjectLifetimeDays -> String
(Int -> RestoreObjectLifetimeDays -> ShowS)
-> (RestoreObjectLifetimeDays -> String)
-> ([RestoreObjectLifetimeDays] -> ShowS)
-> Show RestoreObjectLifetimeDays
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RestoreObjectLifetimeDays -> ShowS
showsPrec :: Int -> RestoreObjectLifetimeDays -> ShowS
$cshow :: RestoreObjectLifetimeDays -> String
show :: RestoreObjectLifetimeDays -> String
$cshowList :: [RestoreObjectLifetimeDays] -> ShowS
showList :: [RestoreObjectLifetimeDays] -> ShowS
Show)
restoreObject :: Bucket -> T.Text -> RestoreObjectTier -> RestoreObjectLifetimeDays -> RestoreObject
restoreObject :: Object
-> Object
-> RestoreObjectTier
-> RestoreObjectLifetimeDays
-> RestoreObject
restoreObject Object
bucket Object
obj RestoreObjectTier
tier RestoreObjectLifetimeDays
lifetime = Object
-> Object
-> Maybe Object
-> RestoreObjectTier
-> RestoreObjectLifetimeDays
-> RestoreObject
RestoreObject Object
obj Object
bucket Maybe Object
forall a. Maybe a
Nothing RestoreObjectTier
tier RestoreObjectLifetimeDays
lifetime
data RestoreObjectResponse
= RestoreObjectAccepted
| RestoreObjectAlreadyRestored
| RestoreObjectAlreadyInProgress
deriving (Int -> RestoreObjectResponse -> ShowS
[RestoreObjectResponse] -> ShowS
RestoreObjectResponse -> String
(Int -> RestoreObjectResponse -> ShowS)
-> (RestoreObjectResponse -> String)
-> ([RestoreObjectResponse] -> ShowS)
-> Show RestoreObjectResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RestoreObjectResponse -> ShowS
showsPrec :: Int -> RestoreObjectResponse -> ShowS
$cshow :: RestoreObjectResponse -> String
show :: RestoreObjectResponse -> String
$cshowList :: [RestoreObjectResponse] -> ShowS
showList :: [RestoreObjectResponse] -> ShowS
Show)
instance SignQuery RestoreObject where
type ServiceConfiguration RestoreObject = S3Configuration
signQuery :: forall queryType.
RestoreObject
-> ServiceConfiguration RestoreObject queryType
-> SignatureData
-> SignedQuery
signQuery RestoreObject {Maybe Object
Object
RestoreObjectLifetimeDays
RestoreObjectTier
roObjectName :: RestoreObject -> Object
roBucket :: RestoreObject -> Object
roVersionId :: RestoreObject -> Maybe Object
roTier :: RestoreObject -> RestoreObjectTier
roObjectLifetimeDays :: RestoreObject -> RestoreObjectLifetimeDays
roObjectName :: Object
roBucket :: Object
roVersionId :: Maybe Object
roTier :: RestoreObjectTier
roObjectLifetimeDays :: RestoreObjectLifetimeDays
..} = S3Query
-> S3Configuration queryType -> SignatureData -> SignedQuery
forall qt.
S3Query -> S3Configuration qt -> SignatureData -> SignedQuery
s3SignQuery S3Query
{ s3QMethod :: Method
s3QMethod = Method
Post
, s3QBucket :: Maybe ByteString
s3QBucket = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString
forall a b. (a -> b) -> a -> b
$ Object -> ByteString
T.encodeUtf8 Object
roBucket
, s3QObject :: Maybe ByteString
s3QObject = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString
forall a b. (a -> b) -> a -> b
$ Object -> ByteString
T.encodeUtf8 Object
roObjectName
, s3QSubresources :: Query
s3QSubresources = [Maybe (ByteString, Maybe Object)] -> Query
forall a. QueryLike a => a -> Query
HTTP.toQuery
[ (ByteString, Maybe Object) -> Maybe (ByteString, Maybe Object)
forall a. a -> Maybe a
Just ( ByteString
"restore" :: B8.ByteString, Maybe Object
forall a. Maybe a
Nothing :: Maybe T.Text)
, case Maybe Object
roVersionId of
Maybe Object
Nothing -> Maybe (ByteString, Maybe Object)
forall a. Maybe a
Nothing
Just Object
v -> (ByteString, Maybe Object) -> Maybe (ByteString, Maybe Object)
forall a. a -> Maybe a
Just (ByteString
"versionId" :: B8.ByteString, Object -> Maybe Object
forall a. a -> Maybe a
Just Object
v)
]
, s3QQuery :: Query
s3QQuery = []
, s3QContentType :: Maybe ByteString
s3QContentType = Maybe ByteString
forall a. Maybe a
Nothing
, s3QContentMd5 :: Maybe (Digest MD5)
s3QContentMd5 = Maybe (Digest MD5)
forall a. Maybe a
Nothing
, s3QAmzHeaders :: RequestHeaders
s3QAmzHeaders = []
, s3QOtherHeaders :: RequestHeaders
s3QOtherHeaders = []
, s3QRequestBody :: Maybe RequestBody
s3QRequestBody = (RequestBody -> Maybe RequestBody
forall a. a -> Maybe a
Just (RequestBody -> Maybe RequestBody)
-> (Document -> RequestBody) -> Document -> Maybe RequestBody
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> RequestBody
HTTP.RequestBodyLBS (ByteString -> RequestBody)
-> (Document -> ByteString) -> Document -> RequestBody
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RenderSettings -> Document -> ByteString
XML.renderLBS RenderSettings
forall a. Default a => a
XML.def)
XML.Document
{ documentPrologue :: Prologue
XML.documentPrologue = [Miscellaneous] -> Maybe Doctype -> [Miscellaneous] -> Prologue
XML.Prologue [] Maybe Doctype
forall a. Maybe a
Nothing []
, documentRoot :: Element
XML.documentRoot = XML.Element
{ elementName :: Name
XML.elementName = Name
"{http://s3.amazonaws.com/doc/2006-03-01/}RestoreRequest"
, elementAttributes :: Map Name Object
XML.elementAttributes = Map Name Object
forall k a. Map k a
M.empty
, elementNodes :: [Node]
XML.elementNodes =
[ Element -> Node
XML.NodeElement (XML.Element
{ elementName :: Name
XML.elementName = Name
"{http://s3.amazonaws.com/doc/2006-03-01/}Days"
, elementAttributes :: Map Name Object
XML.elementAttributes = Map Name Object
forall k a. Map k a
M.empty
, elementNodes :: [Node]
XML.elementNodes = case RestoreObjectLifetimeDays
roObjectLifetimeDays of
RestoreObjectLifetimeDays Integer
n -> [Object -> Node
XML.NodeContent (String -> Object
T.pack (Integer -> String
forall a. Show a => a -> String
show Integer
n))]
})
, Element -> Node
XML.NodeElement (XML.Element
{ elementName :: Name
XML.elementName = Name
"{http://s3.amazonaws.com/doc/2006-03-01/}GlacierJobParameters"
, elementAttributes :: Map Name Object
XML.elementAttributes = Map Name Object
forall k a. Map k a
M.empty
, elementNodes :: [Node]
XML.elementNodes =
[ Element -> Node
XML.NodeElement (XML.Element
{ elementName :: Name
XML.elementName = Name
"{http://s3.amazonaws.com/doc/2006-03-01/}Tier"
, elementAttributes :: Map Name Object
XML.elementAttributes = Map Name Object
forall k a. Map k a
M.empty
, elementNodes :: [Node]
XML.elementNodes = case RestoreObjectTier
roTier of
RestoreObjectTier
RestoreObjectTierExpedited -> [Object -> Node
XML.NodeContent Object
"Expedited"]
RestoreObjectTier
RestoreObjectTierStandard -> [Object -> Node
XML.NodeContent Object
"Standard"]
RestoreObjectTier
RestoreObjectTierBulk -> [Object -> Node
XML.NodeContent Object
"Bulk"]
})
]
})
]
}
, documentEpilogue :: [Miscellaneous]
XML.documentEpilogue = []
}
}
instance ResponseConsumer RestoreObject RestoreObjectResponse where
type ResponseMetadata RestoreObjectResponse = S3Metadata
responseConsumer :: Request
-> RestoreObject
-> IORef (ResponseMetadata RestoreObjectResponse)
-> HTTPResponseConsumer RestoreObjectResponse
responseConsumer Request
httpReq RestoreObject
_ IORef (ResponseMetadata RestoreObjectResponse)
_ Response (ConduitM () ByteString (ResourceT IO) ())
resp
| Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
HTTP.status202 = RestoreObjectResponse -> ResourceT IO RestoreObjectResponse
forall a. a -> ResourceT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return RestoreObjectResponse
RestoreObjectAccepted
| Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
HTTP.status200 = RestoreObjectResponse -> ResourceT IO RestoreObjectResponse
forall a. a -> ResourceT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return RestoreObjectResponse
RestoreObjectAlreadyRestored
| Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
HTTP.status409 = RestoreObjectResponse -> ResourceT IO RestoreObjectResponse
forall a. a -> ResourceT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return RestoreObjectResponse
RestoreObjectAlreadyInProgress
| Bool
otherwise = Request -> HTTPResponseConsumer RestoreObjectResponse
forall (m :: * -> *) a.
MonadThrow m =>
Request -> Response (ConduitM () ByteString m ()) -> m a
throwStatusCodeException Request
httpReq Response (ConduitM () ByteString (ResourceT IO) ())
resp
where
status :: Status
status = Response (ConduitM () ByteString (ResourceT IO) ()) -> Status
forall body. Response body -> Status
HTTP.responseStatus Response (ConduitM () ByteString (ResourceT IO) ())
resp
instance Transaction RestoreObject RestoreObjectResponse
instance AsMemoryResponse RestoreObjectResponse where
type MemoryResponse RestoreObjectResponse = RestoreObjectResponse
loadToMemory :: RestoreObjectResponse
-> ResourceT IO (MemoryResponse RestoreObjectResponse)
loadToMemory = RestoreObjectResponse
-> ResourceT IO (MemoryResponse RestoreObjectResponse)
RestoreObjectResponse -> ResourceT IO RestoreObjectResponse
forall a. a -> ResourceT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return