aws-0.0.6: Aws/S3/Commands/PutObject.hs
{-# LANGUAGE TypeFamilies, RecordWildCards, TupleSections, OverloadedStrings, MultiParamTypeClasses, FlexibleInstances, UndecidableInstances, GADTs, RankNTypes #-}
module Aws.S3.Commands.PutObject
where
import Aws.Http
import Aws.Response
import Aws.S3.Info
import Aws.S3.Metadata
import Aws.S3.Model
import Aws.S3.Query
import Aws.Signature
import Aws.Transaction
import Control.Applicative
import Control.Arrow (second)
import Data.ByteString.Char8 ({- IsString -})
import Data.Maybe
import qualified Data.CaseInsensitive as CI
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Network.HTTP.Enumerator as HTTP
import qualified Network.HTTP.Types as HTTP
data PutObject = PutObject {
poObjectName :: T.Text,
poBucket :: Bucket,
poContentType :: Maybe T.Text,
poCacheControl :: Maybe T.Text,
poContentDisposition :: Maybe T.Text,
poContentEncoding :: Maybe T.Text,
poContentMD5 :: Maybe T.Text,
poExpires :: Maybe Int,
poAcl :: Maybe CannedAcl,
poStorageClass :: Maybe StorageClass,
poRequestBody :: HTTP.RequestBody IO,
poMetadata :: [(T.Text,T.Text)]
}
data PutObjectResponse = PutObjectResponse{
porVersionId :: Maybe T.Text
}
instance SignQuery PutObject where
type Info PutObject = S3Info
signQuery PutObject {..} = s3SignQuery S3Query {
s3QMethod = Put
, s3QBucket = Just $ T.encodeUtf8 poBucket
, s3QSubresources = []
, s3QQuery = HTTP.simpleQueryToQuery $ map (second T.encodeUtf8) $ catMaybes [
("Content-Type",) <$> poContentType
, ("Expires",) <$> case poExpires of
Just x -> Just $ T.pack $ show x
Nothing -> Nothing
, ("Cache-Control",) <$> poCacheControl
, ("Content-Disposition",) <$> poContentDisposition
, ("Content-Encoding",) <$> poContentEncoding
, ("Content-MD5",) <$> poContentMD5
]
, s3QAmzHeaders = catMaybes [
(CI.mk $ T.encodeUtf8 "x-amz-acl",) <$> case poAcl of
Just x -> Just $ T.encodeUtf8 $ writeCannedAcl x
Nothing -> Nothing
, ("x-amz-storage-class",) <$> case poStorageClass of
Just x -> Just $ T.encodeUtf8 $ writeStorageClass x
Nothing -> Nothing
] ++ map( \x -> (CI.mk . T.encodeUtf8 $ T.concat ["x-amz-meta-", fst x], T.encodeUtf8 $ snd x)) poMetadata
, s3QRequestBody = Just poRequestBody
, s3QObject = Just $ T.encodeUtf8 poObjectName
}
instance ResponseIteratee PutObject PutObjectResponse where
type ResponseMetadata PutObjectResponse = S3Metadata
responseIteratee _ _ _ _ = do return $ PutObjectResponse Nothing
instance Transaction PutObject PutObjectResponse