module AWS.EC2.Params ( blockDeviceMappingsParam , privateIpAddressesParam , volumeTypeParams ) where import Control.Applicative import Data.Text (Text) import Data.IP (IPv4) import AWS.EC2.Types import AWS.Lib.Query import AWS.Util blockDeviceMappingsParam :: [BlockDeviceMappingParam] -> QueryParam blockDeviceMappingsParam = ("BlockDeviceMapping" |.#.) . map blockDeviceMappingParams blockDeviceMappingParams :: BlockDeviceMappingParam -> [QueryParam] blockDeviceMappingParams (BlockDeviceMappingParamEbs dn nd s dot vt) = [ "DeviceName" |= dn , "NoDevice" |=? boolToText <$> nd , "Ebs" |. ebsSourceParams s ++ ["DeleteOnTermination" |=? boolToText <$> dot] ++ maybe [] volumeTypeParams vt ] where ebsSourceParams (EbsSourceSnapshotId sid) = ["SnapshotId" |= sid] ebsSourceParams (EbsSourceVolumeSize size) = ["VolumeSize" |= toText size] blockDeviceMappingParams (BlockDeviceMappingParamInstanceStore dn nd vn) = [ "DeviceName"|= dn , "NoDevice" |=? boolToText <$> nd , "VirtualName" |=? vn ] volumeTypeParams :: VolumeType -> [QueryParam] volumeTypeParams VolumeTypeStandard = ["VolumeType" |= "standard"] volumeTypeParams (VolumeTypeIO1 iops) = [ "VolumeType" |= "io1" , "Iops" |= toText iops ] privateIpAddressesParam :: Text -> [IPv4] -> QueryParam privateIpAddressesParam name = (name |.#.) . map (\a -> ["PrivateIpAddress" |= toText a])