{-# LANGUAGE FlexibleContexts, RecordWildCards #-} module AWS.EC2.Route ( createRoute , deleteRoute , replaceRoute ) where import Data.ByteString (ByteString) import Data.Conduit (MonadBaseControl, MonadResource) import Data.IP (AddrRange, IPv4) import Data.Text (Text) import AWS.EC2.Internal (EC2) import AWS.EC2.Query (ec2Query, (|=)) import AWS.EC2.Types (CreateRouteRequest(..)) import AWS.Lib.Parser (getT) import AWS.Util (toText) createRoute :: (MonadResource m, MonadBaseControl IO m) => CreateRouteRequest -> EC2 m Bool createRoute = routeRequest "CreateRoute" deleteRoute :: (MonadResource m, MonadBaseControl IO m) => Text -- ^ The ID of the route table. -> AddrRange IPv4 -- ^ The CIDR range of the destination for the route to delete. -> EC2 m Bool deleteRoute tableId cidrBlock = ec2Query "DeleteRoute" [ "RouteTableId" |= tableId , "DestinationCidrBlock" |= toText cidrBlock ] $ getT "return" replaceRoute :: (MonadResource m, MonadBaseControl IO m) => CreateRouteRequest -> EC2 m Bool replaceRoute = routeRequest "ReplaceRoute" routeRequest :: (MonadResource m, MonadBaseControl IO m) => ByteString -> CreateRouteRequest -> EC2 m Bool routeRequest action (CreateRouteToGateway{..}) = routeRequest' action createRouteTableId createRouteDestinationCidrBlock "GatewayId" createRouteGatewayId routeRequest action (CreateRouteToInstance{..}) = routeRequest' action createRouteTableId createRouteDestinationCidrBlock "InstanceId" createRouteInstanceId routeRequest action (CreateRouteToNetworkInterface{..}) = routeRequest' action createRouteTableId createRouteDestinationCidrBlock "NetworkInterfaceId" createRouteNetworkInterfaceId routeRequest' :: (MonadResource m, MonadBaseControl IO m) => ByteString -> Text -> AddrRange IPv4 -> Text -> Text -> EC2 m Bool routeRequest' action tableId cidrBlock targetName targetId = ec2Query action [ "RouteTableId" |= tableId , "DestinationCidrBlock" |= toText cidrBlock , targetName |= targetId ] $ getT "return"