aws-0.0.4: Aws/S3/Commands/GetService.hs
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances, OverloadedStrings #-}
module Aws.S3.Commands.GetService
where
import Aws.Response
import Aws.S3.Info
import Aws.S3.Metadata
import Aws.S3.Model
import Aws.S3.Query
import Aws.S3.Response
import Aws.Signature
import Aws.Transaction
import Aws.Xml
import Data.Maybe
import Data.Time.Format
import System.Locale
import Text.XML.Enumerator.Cursor (($/), ($//), (&|))
import qualified Text.XML.Enumerator.Cursor as Cu
data GetService = GetService
data GetServiceResponse
= GetServiceResponse {
gsrOwner :: UserInfo
, gsrBuckets :: [BucketInfo]
}
deriving (Show)
instance ResponseIteratee GetServiceResponse where
type ResponseMetadata GetServiceResponse = S3Metadata
responseIteratee = s3XmlResponseIteratee parse
where
parse el = do
owner <- forceM "Missing Owner" $ el $/ Cu.laxElement "Owner" &| parseUserInfo
buckets <- sequence $ el $// Cu.laxElement "Bucket" &| parseBucket
return GetServiceResponse { gsrOwner = owner, gsrBuckets = buckets }
parseBucket el = do
name <- force "Missing owner Name" $ el $/ elCont "Name"
creationDateString <- force "Missing owner CreationDate" $ el $/ elCont "CreationDate"
creationDate <- force "Invalid CreationDate" . maybeToList $ parseTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%QZ" creationDateString
return BucketInfo { bucketName = name, bucketCreationDate = creationDate }
instance SignQuery GetService where
type Info GetService = S3Info
signQuery GetService = s3SignQuery S3Query { s3QBucket = Nothing, s3QSubresources = [], s3QQuery = [] }
instance Transaction GetService GetServiceResponse