packages feed

aws-sdk-0.1.1.0: AWS/EC2/Snapshot.hs

{-# LANGUAGE FlexibleContexts #-}

module AWS.EC2.Snapshot
    ( describeSnapshots
    ) where

import Data.Text (Text)

import Data.XML.Types (Event)
import Data.Conduit
import Control.Monad.Trans.Control (MonadBaseControl)
import Control.Applicative

import AWS.EC2.Types
import AWS.EC2.Class
import AWS.EC2.Query
import AWS.EC2.Parser
import AWS.Util

describeSnapshots
    :: (MonadResource m, MonadBaseControl IO m)
    => [Text] -- ^ SnapshotIds
    -> [Text] -- ^ Owners (UserId)
    -> [Text] -- ^ RestorableBy (UserId)
    -> [Filter] -- ^ Filters
    -> EC2 m (Source m Snapshot)
describeSnapshots ssids owners restby filters =
    ec2QuerySource "DescribeSnapshots" params snapshotSet
  where
    params =
        [ ArrayParams "SnapshotId" ssids
        , ArrayParams "Owner" owners
        , ArrayParams "RestorableBy" restby
        , FilterParams filters
        ]
    snapshotSet :: MonadThrow m
        => GLConduit Event m Snapshot
    snapshotSet = itemConduit "snapshotSet" $
        snapshot
        <$> getT "snapshotId"
        <*> getT "volumeId"
        <*> getF "status" snapshotStatus
        <*> getF "startTime" textToTime
        <*> getT "progress"
        <*> getT "ownerId"
        <*> getF "volumeSize" textToInt
        <*> getT "description"
        <*> getMT "ownerAlias"
        <*> resourceTagSink