packages feed

stratosphere 0.2.0 → 0.2.1

raw patch · 35 files changed

+2043/−233 lines, 35 filesdep +hashablenew-component:exe:apigw-lambda-dynamodbnew-component:exe:apigw-lambda-s3

Dependencies added: hashable

Files

CHANGELOG.md view
@@ -1,6 +1,14 @@ # Change Log -## Unreleased+## 0.2.1++* Added Dynamo DB table resources (@ababkin)+* Fix the Python docs scraper mishandling the `required` value in some cases,+  and also missing some properties of resources (@amar47shah)+* Added a ton of SNS and SQS resources (@ababkin)+* Added a experimental checker for duplicate resource names (@amar47shah)++## 0.2.0  * Breaking change: The `DependsOn` property previously allowed lists of `Val   Text`, when in fact CloudFormation only accepts literal `Text` values. The
− examples/api-gateway-lambda.hs
@@ -1,193 +0,0 @@-{-# LANGUAGE OverloadedLists   #-}-{-# LANGUAGE OverloadedStrings #-}--module Main where--import           Control.Lens-import           Data.Aeson                 (Value (Array), object)-import qualified Data.ByteString.Lazy.Char8 as B-import           Data.Text                  (Text)-import           Stratosphere----- to curl the endpoint: (substitute your APIGW deployment URL)--- curl -v -X POST -H "Content-Type: application/json" -d "{\"description\": \"test task\"}" "https://t04rmwbtgj.execute-api.us-east-1.amazonaws.com/v1/stack"--main :: IO ()-main = B.putStrLn $ encodeTemplate myTemplate--myTemplate :: Template-myTemplate = template-  [ role-  , incomingS3Bucket-  , lambda-  , permission-  , apiGWRestApi-  , apiGWResource-  , apiGWMethod-  , apiGWDeployment-  ]-  & description ?~ "Simple api gateway attached to a lambda that writes the request body to a S3 object"-  & formatVersion ?~ "2010-09-09"--apiGWRestApi :: Resource-apiGWRestApi = (resource "ApiGWRestApi" $-  ApiGatewayRestApiProperties $-  apiGatewayRestApi-    "myApi"-  )--apiGWResource :: Resource-apiGWResource = (resource "ApiGWResource" $-  ApiGatewayResourceProperties $-  apiGatewayResource-    (GetAtt "ApiGWRestApi" "RootResourceId")-    "stack"-    (toRef apiGWRestApi)-  )-  & dependsOn ?~ deps [ apiGWRestApi ]--apiGWMethod :: Resource-apiGWMethod = (resource "ApiGWMethod" $-  ApiGatewayMethodProperties $-  apiGatewayMethod-    "NONE"-    "POST"-    (toRef apiGWResource)-    (toRef apiGWRestApi)-    & agmeIntegration ?~ integration-    & agmeMethodResponses ?~ [ methodResponse ]-  )-  & dependsOn ?~ deps [-      apiGWRestApi-    , apiGWResource-    , lambda-    ]--  where-    integration = apiGatewayIntegration "AWS"-      & agiIntegrationHttpMethod ?~ "POST"-      & agiUri ?~ (Join "" [-          "arn:aws:apigateway:"-        , Ref "AWS::Region"-        , ":lambda:path/2015-03-31/functions/"-        , GetAtt "WriteS3ObjectLambda" "Arn"-        , "/invocations"])-      & agiIntegrationResponses ?~ [ integrationResponse ]-      & agiPassthroughBehavior ?~ "NEVER"-      & agiRequestTemplates ?~ [ ("application/json", "{\"body\": $input.body}") ]--    integrationResponse = apiGatewayIntegrationResponse-      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]-      & agirStatusCode ?~ "200"--    methodResponse = apiGatewayMethodResponse "200"--apiGWDeployment :: Resource-apiGWDeployment = (resource "ApiGWDeployment" $-  ApiGatewayDeploymentProperties $-  apiGatewayDeployment-    (toRef apiGWRestApi)-    & agdStageName ?~ "v1"-  )-  & dependsOn ?~ deps [-      apiGWRestApi-    , apiGWMethod-    ]--lambda :: Resource-lambda = (resource "WriteS3ObjectLambda" $-  LambdaFunctionProperties $-  lambdaFunction-    lambdaCode-    "index.handler"-    (GetAtt "IAMRole" "Arn")-    "nodejs4.3"-    & lfFunctionName ?~ "writeS3Object"-  )-  & dependsOn ?~ deps [ role ]--  where-    lambdaCode :: LambdaFunctionCode-    lambdaCode = lambdaFunctionCode-      & lfcZipFile ?~ code--    code :: Val Text-    code = "\-    \ var AWS = require('aws-sdk');\n\-    \ var s3 = new AWS.S3({apiVersion: '2006-03-01'});\n\-    \ exports.handler = function(event, context, callback) {\n\-    \   console.log(JSON.stringify(event));\n\-    \   s3.putObject({Bucket: \"stratosphere-api-gateway-lambda-incoming\", Key: \"content.json\", ContentType: \"application/json\", Body: JSON.stringify(event.body)}, function(err){\n\-    \     if (err) { \n\-    \       console.log(\"Error:\", err); \n\-    \       callback(err) \n\-    \     } else { \n\-    \       callback(null, {\"body\": event.body});\n\-    \     } \n\-    \   });\n\-    \ }\n\-    \ "--role :: Resource-role = resource "IAMRole" $-  IAMRoleProperties $-  iamRole rolePolicyDocumentObject-  & iamrPolicies ?~ [ executePolicy ]-  & iamrRoleName ?~ "MyLambdaBasicExecutionRole"-  & iamrPath ?~ "/"--  where-    executePolicy =-      iamPolicies-      [ ("Version", "2012-10-17")-      , ("Statement", statement)-      ]-      "MyLambdaExecutionPolicy"--      where-        statement = object-          [ ("Effect", "Allow")-          , ("Action", actions)-          , ("Resource", "*")-          ]--        actions = Array-          [ "logs:CreateLogGroup"-          , "logs:CreateLogStream"-          , "logs:PutLogEvents"-          , "s3:PutObject"-          ]---    rolePolicyDocumentObject =-      [ ("Version", "2012-10-17")-      , ("Statement", statement)-      ]--      where-        statement = object-          [ ("Effect", "Allow")-          , ("Principal", principal)-          , ("Action", "sts:AssumeRole")-          ]--        principal = object-          [ ("Service", "lambda.amazonaws.com") ]--incomingS3Bucket :: Resource-incomingS3Bucket = resource "IncomingBucket" $-  BucketProperties $-  bucket-  & bBucketName ?~ "stratosphere-api-gateway-lambda-incoming"--permission :: Resource-permission = resource "LambdaPermission" $-  LambdaPermissionProperties $-  lambdaPermission-    "lambda:*"-    (GetAtt "WriteS3ObjectLambda" "Arn")-    "apigateway.amazonaws.com"--deps :: [Resource] -> [Text]-deps = map (\d -> d ^. resName)
+ examples/apigw-lambda-dynamodb.hs view
@@ -0,0 +1,338 @@+{-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE OverloadedStrings #-}++module Main where++import Control.Lens+import Data.Aeson (Value (Array), object)+import qualified Data.ByteString.Lazy.Char8 as B+import Data.Text (Text)+import Stratosphere+++-- to curl the endpoints: (substitute your APIGW deployment URL)+-- curl -v -X POST -H "Content-Type: application/json" -d "{\"property\": 3}" "https://k99jn3an8a.execute-api.us-east-1.amazonaws.com/v1/thing"+-- curl -v "https://k99jn3an8a.execute-api.us-east-1.amazonaws.com/v1/thing"++main :: IO ()+main = B.putStrLn $ encodeTemplate myTemplate++myTemplate :: Template+myTemplate = template+  [ readLambdaRole+  , writeLambdaRole+  , readLambda+  , writeLambda+  , readLambdaPermission+  , writeLambdaPermission+  , dynamoDbTable+  , apiGWRestApi+  , apiGWResource+  , getMethod+  , postMethod+  , apiGWDeployment+  ]+  & description ?~ "Simple restful API gateway attached to a Lambda that reads from and writes the request body to a DynamoDB table"+  & formatVersion ?~ "2010-09-09"++apiGWRestApi :: Resource+apiGWRestApi = (resource "ApiGWRestApi" $+  ApiGatewayRestApiProperties $+  apiGatewayRestApi+    "myApi"+  )++apiGWResource :: Resource+apiGWResource = (resource "ApiGWResource" $+  ApiGatewayResourceProperties $+  apiGatewayResource+    (GetAtt "ApiGWRestApi" "RootResourceId")+    "thing"+    (toRef apiGWRestApi)+  )++getMethod :: Resource+getMethod = (resource "ApiGWGetMethod" $+  ApiGatewayMethodProperties $+  apiGatewayMethod+    NONE+    GET+    (toRef apiGWResource)+    (toRef apiGWRestApi)+    & agmeIntegration ?~ integration+    & agmeMethodResponses ?~ [ methodResponse ]+  )+  & dependsOn ?~ deps [+      readLambdaPermission+    ]++  where+    integration = apiGatewayIntegration AWS+      & agiIntegrationHttpMethod ?~ POST+      & agiUri ?~ (Join "" [+          "arn:aws:apigateway:"+        , Ref "AWS::Region"+        , ":lambda:path/2015-03-31/functions/"+        , GetAtt "ReadTableLambda" "Arn"+        , "/invocations"])+      & agiIntegrationResponses ?~ [ integrationResponse ]+      & agiPassthroughBehavior ?~ WHEN_NO_TEMPLATES+      & agiRequestTemplates ?~ [ ]++    integrationResponse = apiGatewayIntegrationResponse+      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]+      & agirStatusCode ?~ "200"++    methodResponse = apiGatewayMethodResponse "200"+++postMethod :: Resource+postMethod = (resource "ApiGWPutMethod" $+  ApiGatewayMethodProperties $+  apiGatewayMethod+    NONE+    POST+    (toRef apiGWResource)+    (toRef apiGWRestApi)+    & agmeIntegration ?~ integration+    & agmeMethodResponses ?~ [ methodResponse ]+  )+  & dependsOn ?~ deps [+      writeLambdaPermission+    ]++  where+    integration = apiGatewayIntegration AWS+      & agiIntegrationHttpMethod ?~ POST+      & agiUri ?~ (Join "" [+          "arn:aws:apigateway:"+        , Ref "AWS::Region"+        , ":lambda:path/2015-03-31/functions/"+        , GetAtt "WriteTableLambda" "Arn"+        , "/invocations"])+      & agiIntegrationResponses ?~ [ integrationResponse ]+      & agiPassthroughBehavior ?~ WHEN_NO_TEMPLATES+      & agiRequestTemplates ?~ [ ("application/json", "{\"body\": $input.body}") ]++    integrationResponse = apiGatewayIntegrationResponse+      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]+      & agirStatusCode ?~ "200"++    methodResponse = apiGatewayMethodResponse "200"++apiGWDeployment :: Resource+apiGWDeployment = (resource "ApiGWDeployment" $+  ApiGatewayDeploymentProperties $+  apiGatewayDeployment+    (toRef apiGWRestApi)+    & agdStageName ?~ "v1"+  )+  & dependsOn ?~ deps [+      apiGWResource+    , getMethod+    , postMethod+    ]++readLambda :: Resource+readLambda = (resource "ReadTableLambda" $+  LambdaFunctionProperties $+  lambdaFunction+    lambdaCode+    "index.handler"+    (GetAtt "ReadLambdaRole" "Arn")+    NodeJS43+    & lfFunctionName ?~ "readTable"+  )++  where+    lambdaCode :: LambdaFunctionCode+    lambdaCode = lambdaFunctionCode+      & lfcZipFile ?~ code++    code :: Val Text+    code = "\+    \ var AWS = require('aws-sdk');\n\+    \ var awsConfig = { region: 'us-east-1' }; \n\+    \ AWS.config.apiVersions = { dynamodb: '2012-08-10' }; \n\+    \ var dynamoDoc = new AWS.DynamoDB.DocumentClient(awsConfig); \n\+    \ exports.handler = function(event, context, callback) {\n\+    \   console.log(JSON.stringify(event));\n\+    \   var params = { TableName : 'stratosphere-dynamodb-table', Key: { Id: 'abc123' } }; \n\+    \   dynamoDoc.get(params, function(err, data) { \n\+    \     if (err) { \n\+    \       console.log(\"Error:\", err); \n\+    \       callback(err) \n\+    \     } else { \n\+    \       callback(null, {\"body\": data.Item.Data});\n\+    \     } \n\+    \   });\n\+    \ }\n\+    \ "+++writeLambda :: Resource+writeLambda = (resource "WriteTableLambda" $+  LambdaFunctionProperties $+  lambdaFunction+    lambdaCode+    "index.handler"+    (GetAtt "WriteLambdaRole" "Arn")+    NodeJS43+    & lfFunctionName ?~ "writeTable"+  )++  where+    lambdaCode :: LambdaFunctionCode+    lambdaCode = lambdaFunctionCode+      & lfcZipFile ?~ code++    code :: Val Text+    code = "\+    \ var AWS = require('aws-sdk');\n\+    \ var awsConfig = { region: 'us-east-1' }; \n\+    \ AWS.config.apiVersions = { dynamodb: '2012-08-10' }; \n\+    \ var dynamoDoc = new AWS.DynamoDB.DocumentClient(awsConfig); \n\+    \ exports.handler = function(event, context, callback) {\n\+    \   console.log(JSON.stringify(event));\n\+    \   var params = { TableName : 'stratosphere-dynamodb-table', Item: { Id: 'abc123', Data: event.body } }; \n\+    \   dynamoDoc.put(params, function(err, data) { \n\+    \     if (err) { \n\+    \       console.log(\"Error:\", err); \n\+    \       callback(err) \n\+    \     } else { \n\+    \       callback(null, {\"body\": 'success!'});\n\+    \     } \n\+    \   });\n\+    \ }\n\+    \ "++readLambdaRole :: Resource+readLambdaRole = resource "ReadLambdaRole" $+  IAMRoleProperties $+  iamRole rolePolicyDocumentObject+  & iamrPolicies ?~ [ executePolicy ]+  & iamrRoleName ?~ "ReadLambdaRole"+  & iamrPath ?~ "/"++  where+    executePolicy =+      iamPolicies+      [ ("Version", "2012-10-17")+      , ("Statement", statement)+      ]+      "MyLambdaExecutionPolicy"++      where+        statement = object+          [ ("Effect", "Allow")+          , ("Action", actions)+          , ("Resource", "*")+          ]++        actions = Array+          [ "logs:CreateLogGroup"+          , "logs:CreateLogStream"+          , "logs:PutLogEvents"+          , "dynamodb:GetItem"+          ]+++    rolePolicyDocumentObject =+      [ ("Version", "2012-10-17")+      , ("Statement", statement)+      ]++      where+        statement = object+          [ ("Effect", "Allow")+          , ("Principal", principal)+          , ("Action", "sts:AssumeRole")+          ]++        principal = object+          [ ("Service", "lambda.amazonaws.com") ]++writeLambdaRole :: Resource+writeLambdaRole = resource "WriteLambdaRole" $+  IAMRoleProperties $+  iamRole rolePolicyDocumentObject+  & iamrPolicies ?~ [ executePolicy ]+  & iamrRoleName ?~ "WriteLambdaRole"+  & iamrPath ?~ "/"++  where+    executePolicy =+      iamPolicies+      [ ("Version", "2012-10-17")+      , ("Statement", statement)+      ]+      "MyLambdaExecutionPolicy"++      where+        statement = object+          [ ("Effect", "Allow")+          , ("Action", actions)+          , ("Resource", "*")+          ]++        actions = Array+          [ "logs:CreateLogGroup"+          , "logs:CreateLogStream"+          , "logs:PutLogEvents"+          , "dynamodb:PutItem"+          ]+++    rolePolicyDocumentObject =+      [ ("Version", "2012-10-17")+      , ("Statement", statement)+      ]++      where+        statement = object+          [ ("Effect", "Allow")+          , ("Principal", principal)+          , ("Action", "sts:AssumeRole")+          ]++        principal = object+          [ ("Service", "lambda.amazonaws.com") ]++readLambdaPermission :: Resource+readLambdaPermission = resource "ReadLambdaPermission" $+  LambdaPermissionProperties $+  lambdaPermission+    "lambda:*"+    (GetAtt "ReadTableLambda" "Arn")+    "apigateway.amazonaws.com"++writeLambdaPermission :: Resource+writeLambdaPermission = resource "WriteLambdaPermission" $+  LambdaPermissionProperties $+  lambdaPermission+    "lambda:*"+    (GetAtt "WriteTableLambda" "Arn")+    "apigateway.amazonaws.com"++dynamoDbTable :: Resource+dynamoDbTable = resource "Table" $+  DynamoDBTableProperties $+  dynamoDBTable+    attributeDefinitions+    keySchema+    provisionedThroughput+  & ddbtTableName ?~ "stratosphere-dynamodb-table"++  where+    attributeDefinitions = [+        dynamoDBAttributeDefinition "Id" S+      ]+    keySchema = [+        dynamoDBKeySchema "Id" HASH+      ]+    provisionedThroughput =+      dynamoDBProvisionedThroughput (Literal 1) (Literal 1)++deps :: [Resource] -> [Text]+deps = map (\d -> d ^. resName)+
+ examples/apigw-lambda-s3.hs view
@@ -0,0 +1,189 @@+{-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE OverloadedStrings #-}++module Main where++import Control.Lens+import Data.Aeson (Value (Array), object)+import qualified Data.ByteString.Lazy.Char8 as B+import Data.Text (Text)+import Stratosphere+++-- to curl the endpoint: (substitute your APIGW deployment URL)+-- curl -v -X POST -H "Content-Type: application/json" -d "{\"property\": 3}" "https://t04rmwbtgj.execute-api.us-east-1.amazonaws.com/v1/thing"++main :: IO ()+main = B.putStrLn $ encodeTemplate myTemplate++myTemplate :: Template+myTemplate = template+  [ role+  , incomingS3Bucket+  , lambda+  , permission+  , apiGWRestApi+  , apiGWResource+  , apiGWMethod+  , apiGWDeployment+  ]+  & description ?~ "Simple api gateway attached to a lambda that writes the request body to a S3 object"+  & formatVersion ?~ "2010-09-09"++apiGWRestApi :: Resource+apiGWRestApi = (resource "ApiGWRestApi" $+  ApiGatewayRestApiProperties $+  apiGatewayRestApi+    "myApi"+  )++apiGWResource :: Resource+apiGWResource = (resource "ApiGWResource" $+  ApiGatewayResourceProperties $+  apiGatewayResource+    (GetAtt "ApiGWRestApi" "RootResourceId")+    "thing"+    (toRef apiGWRestApi)+  )++apiGWMethod :: Resource+apiGWMethod = (resource "ApiGWMethod" $+  ApiGatewayMethodProperties $+  apiGatewayMethod+    NONE+    POST+    (toRef apiGWResource)+    (toRef apiGWRestApi)+    & agmeIntegration ?~ integration+    & agmeMethodResponses ?~ [ methodResponse ]+  )+  & dependsOn ?~ deps [+      permission+    ]++  where+    integration = apiGatewayIntegration AWS+      & agiIntegrationHttpMethod ?~ POST+      & agiUri ?~ (Join "" [+          "arn:aws:apigateway:"+        , Ref "AWS::Region"+        , ":lambda:path/2015-03-31/functions/"+        , GetAtt "WriteS3ObjectLambda" "Arn"+        , "/invocations"])+      & agiIntegrationResponses ?~ [ integrationResponse ]+      & agiPassthroughBehavior ?~ WHEN_NO_TEMPLATES+      & agiRequestTemplates ?~ [ ("application/json", "{\"body\": $input.body}") ]++    integrationResponse = apiGatewayIntegrationResponse+      & agirResponseTemplates ?~ [ ("application/json", "$input.json('$.body')") ]+      & agirStatusCode ?~ "200"++    methodResponse = apiGatewayMethodResponse "200"++apiGWDeployment :: Resource+apiGWDeployment = (resource "ApiGWDeployment" $+  ApiGatewayDeploymentProperties $+  apiGatewayDeployment+    (toRef apiGWRestApi)+    & agdStageName ?~ "v1"+  )+  & dependsOn ?~ deps [+      apiGWResource+    , apiGWMethod+    ]++lambda :: Resource+lambda = (resource "WriteS3ObjectLambda" $+  LambdaFunctionProperties $+  lambdaFunction+    lambdaCode+    "index.handler"+    (GetAtt "IAMRole" "Arn")+    NodeJS43+    & lfFunctionName ?~ "writeS3Object"+  )++  where+    lambdaCode :: LambdaFunctionCode+    lambdaCode = lambdaFunctionCode+      & lfcZipFile ?~ code++    code :: Val Text+    code = "\+    \ var AWS = require('aws-sdk');\n\+    \ var s3 = new AWS.S3({apiVersion: '2006-03-01'});\n\+    \ exports.handler = function(event, context, callback) {\n\+    \   console.log(JSON.stringify(event));\n\+    \   s3.putObject({Bucket: \"stratosphere-api-gateway-lambda-incoming\", Key: \"content.json\", ContentType: \"application/json\", Body: JSON.stringify(event.body)}, function(err){\n\+    \     if (err) { \n\+    \       console.log(\"Error:\", err); \n\+    \       callback(err) \n\+    \     } else { \n\+    \       callback(null, {\"body\": event.body});\n\+    \     } \n\+    \   });\n\+    \ }\n\+    \ "++role :: Resource+role = resource "IAMRole" $+  IAMRoleProperties $+  iamRole rolePolicyDocumentObject+  & iamrPolicies ?~ [ executePolicy ]+  & iamrRoleName ?~ "MyLambdaBasicExecutionRole"+  & iamrPath ?~ "/"++  where+    executePolicy =+      iamPolicies+      [ ("Version", "2012-10-17")+      , ("Statement", statement)+      ]+      "MyLambdaExecutionPolicy"++      where+        statement = object+          [ ("Effect", "Allow")+          , ("Action", actions)+          , ("Resource", "*")+          ]++        actions = Array+          [ "logs:CreateLogGroup"+          , "logs:CreateLogStream"+          , "logs:PutLogEvents"+          , "s3:PutObject"+          ]+++    rolePolicyDocumentObject =+      [ ("Version", "2012-10-17")+      , ("Statement", statement)+      ]++      where+        statement = object+          [ ("Effect", "Allow")+          , ("Principal", principal)+          , ("Action", "sts:AssumeRole")+          ]++        principal = object+          [ ("Service", "lambda.amazonaws.com") ]++incomingS3Bucket :: Resource+incomingS3Bucket = resource "IncomingBucket" $+  BucketProperties $+  bucket+  & bBucketName ?~ "stratosphere-api-gateway-lambda-incoming"++permission :: Resource+permission = resource "LambdaPermission" $+  LambdaPermissionProperties $+  lambdaPermission+    "lambda:*"+    (GetAtt "WriteS3ObjectLambda" "Arn")+    "apigateway.amazonaws.com"++deps :: [Resource] -> [Text]+deps = map (\d -> d ^. resName)
examples/s3-copy.hs view
@@ -4,11 +4,12 @@ module Main where  import Control.Lens+import Data.Aeson (Value (Array), object) import qualified Data.ByteString.Lazy.Char8 as B import Data.Text (Text) import Stratosphere-import Data.Aeson (object, Value(Array)) + main :: IO () main = B.putStrLn $ encodeTemplate myTemplate @@ -25,7 +26,7 @@     lambdaCode     "index.handler"     (GetAtt "IAMRole" "Arn")-    "nodejs4.3"+    NodeJS43     & lfFunctionName ?~ "copyS3Object"   )   & dependsOn ?~ [ role ^. resName ]
examples/simple-lambda.hs view
@@ -4,11 +4,12 @@ module Main where  import Control.Lens+import Data.Aeson (Value (Array), object) import qualified Data.ByteString.Lazy.Char8 as B import Data.Text (Text) import Stratosphere-import Data.Aeson (object, Value(Array)) + main :: IO () main = B.putStrLn $ encodeTemplate myTemplate @@ -27,7 +28,7 @@     lambdaCode     "index.handler"     (GetAtt "IAMRole" "Arn")-    "nodejs4.3"+    NodeJS43   )   & dependsOn ?~ [ role ^. resName ] 
library-gen/Stratosphere/ResourceProperties/APIGatewayDeploymentStageDescriptionMethodSetting.hs view
@@ -14,7 +14,7 @@ import GHC.Generics  import Stratosphere.Values-+import Stratosphere.Types  -- | Full data type definition for -- APIGatewayDeploymentStageDescriptionMethodSetting. See@@ -26,8 +26,8 @@   , _aPIGatewayDeploymentStageDescriptionMethodSettingCacheTtlInSeconds :: Maybe (Val Integer')   , _aPIGatewayDeploymentStageDescriptionMethodSettingCachingEnabled :: Maybe (Val Bool')   , _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled :: Maybe (Val Bool')-  , _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod :: Maybe (Val Text)-  , _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel :: Maybe (Val Text)+  , _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod :: Maybe HttpMethod+  , _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel :: Maybe LoggingLevel   , _aPIGatewayDeploymentStageDescriptionMethodSettingMetricsEnabled :: Maybe (Val Bool')   , _aPIGatewayDeploymentStageDescriptionMethodSettingResourcePath :: Maybe (Val Text)   , _aPIGatewayDeploymentStageDescriptionMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')@@ -80,12 +80,12 @@ apigdsdmsDataTraceEnabled = lens _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingDataTraceEnabled = a })  -- | The HTTP method.-apigdsdmsHttpMethod :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Text))+apigdsdmsHttpMethod :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe HttpMethod) apigdsdmsHttpMethod = lens _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingHttpMethod = a })  -- | The logging level for this method. For valid values, see the loggingLevel -- property of the Stage resource in the Amazon API Gateway API Reference.-apigdsdmsLoggingLevel :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe (Val Text))+apigdsdmsLoggingLevel :: Lens' APIGatewayDeploymentStageDescriptionMethodSetting (Maybe LoggingLevel) apigdsdmsLoggingLevel = lens _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel (\s a -> s { _aPIGatewayDeploymentStageDescriptionMethodSettingLoggingLevel = a })  -- | Indicates whether Amazon CloudWatch metrics are enabled for methods in
library-gen/Stratosphere/ResourceProperties/ApiGatewayIntegration.hs view
@@ -15,6 +15,7 @@  import Stratosphere.Values import Stratosphere.ResourceProperties.ApiGatewayIntegrationResponse+import Stratosphere.Types  -- | Full data type definition for ApiGatewayIntegration. See -- 'apiGatewayIntegration' for a more convenient constructor.@@ -23,12 +24,12 @@   { _apiGatewayIntegrationCacheKeyParameters :: Maybe [Val Text]   , _apiGatewayIntegrationCacheNamespace :: Maybe (Val Text)   , _apiGatewayIntegrationCredentials :: Maybe (Val Text)-  , _apiGatewayIntegrationIntegrationHttpMethod :: Maybe (Val Text)+  , _apiGatewayIntegrationIntegrationHttpMethod :: Maybe HttpMethod   , _apiGatewayIntegrationIntegrationResponses :: Maybe [ApiGatewayIntegrationResponse]-  , _apiGatewayIntegrationPassthroughBehavior :: Maybe (Val Text)+  , _apiGatewayIntegrationPassthroughBehavior :: Maybe PassthroughBehavior   , _apiGatewayIntegrationRequestParameters :: Maybe Object   , _apiGatewayIntegrationRequestTemplates :: Maybe Object-  , _apiGatewayIntegrationType :: Val Text+  , _apiGatewayIntegrationType :: ApiBackendType   , _apiGatewayIntegrationUri :: Maybe (Val Text)   } deriving (Show, Generic) @@ -41,7 +42,7 @@ -- | Constructor for 'ApiGatewayIntegration' containing required fields as -- arguments. apiGatewayIntegration-  :: Val Text -- ^ 'agiType'+  :: ApiBackendType -- ^ 'agiType'   -> ApiGatewayIntegration apiGatewayIntegration typearg =   ApiGatewayIntegration@@ -77,7 +78,7 @@ agiCredentials = lens _apiGatewayIntegrationCredentials (\s a -> s { _apiGatewayIntegrationCredentials = a })  -- | The integration's HTTP method type.-agiIntegrationHttpMethod :: Lens' ApiGatewayIntegration (Maybe (Val Text))+agiIntegrationHttpMethod :: Lens' ApiGatewayIntegration (Maybe HttpMethod) agiIntegrationHttpMethod = lens _apiGatewayIntegrationIntegrationHttpMethod (\s a -> s { _apiGatewayIntegrationIntegrationHttpMethod = a })  -- | The response that API Gateway provides after a method's back end@@ -92,7 +93,7 @@ -- behavior depends on the request's Content-Type header and whether you -- defined a mapping template for it. For more information and valid values, -- see the passthroughBehavior field in the API Gateway API Reference.-agiPassthroughBehavior :: Lens' ApiGatewayIntegration (Maybe (Val Text))+agiPassthroughBehavior :: Lens' ApiGatewayIntegration (Maybe PassthroughBehavior) agiPassthroughBehavior = lens _apiGatewayIntegrationPassthroughBehavior (\s a -> s { _apiGatewayIntegrationPassthroughBehavior = a })  -- | The request parameters that API Gateway sends with the back-end request.@@ -119,7 +120,7 @@ -- | The type of back end your method is running, such as HTTP, AWS, or MOCK. -- For valid values, see the type property in the Amazon API Gateway REST API -- Reference.-agiType :: Lens' ApiGatewayIntegration (Val Text)+agiType :: Lens' ApiGatewayIntegration ApiBackendType agiType = lens _apiGatewayIntegrationType (\s a -> s { _apiGatewayIntegrationType = a })  -- | The integration's Uniform Resource Identifier (URI). If you specify HTTP
library-gen/Stratosphere/ResourceProperties/ApiGatewayStageMethodSetting.hs view
@@ -14,7 +14,7 @@ import GHC.Generics  import Stratosphere.Values-+import Stratosphere.Types  -- | Full data type definition for ApiGatewayStageMethodSetting. See -- 'apiGatewayStageMethodSetting' for a more convenient constructor.@@ -24,8 +24,8 @@   , _apiGatewayStageMethodSettingCacheTtlInSeconds :: Maybe (Val Integer')   , _apiGatewayStageMethodSettingCachingEnabled :: Maybe (Val Bool')   , _apiGatewayStageMethodSettingDataTraceEnabled :: Maybe (Val Bool')-  , _apiGatewayStageMethodSettingHttpMethod :: Val Text-  , _apiGatewayStageMethodSettingLoggingLevel :: Maybe (Val Text)+  , _apiGatewayStageMethodSettingHttpMethod :: HttpMethod+  , _apiGatewayStageMethodSettingLoggingLevel :: Maybe LoggingLevel   , _apiGatewayStageMethodSettingMetricsEnabled :: Maybe (Val Bool')   , _apiGatewayStageMethodSettingResourcePath :: Val Text   , _apiGatewayStageMethodSettingThrottlingBurstLimit :: Maybe (Val Integer')@@ -41,7 +41,7 @@ -- | Constructor for 'ApiGatewayStageMethodSetting' containing required fields -- as arguments. apiGatewayStageMethodSetting-  :: Val Text -- ^ 'agsmsHttpMethod'+  :: HttpMethod -- ^ 'agsmsHttpMethod'   -> Val Text -- ^ 'agsmsResourcePath'   -> ApiGatewayStageMethodSetting apiGatewayStageMethodSetting httpMethodarg resourcePatharg =@@ -78,12 +78,12 @@ agsmsDataTraceEnabled = lens _apiGatewayStageMethodSettingDataTraceEnabled (\s a -> s { _apiGatewayStageMethodSettingDataTraceEnabled = a })  -- | The HTTP method.-agsmsHttpMethod :: Lens' ApiGatewayStageMethodSetting (Val Text)+agsmsHttpMethod :: Lens' ApiGatewayStageMethodSetting HttpMethod agsmsHttpMethod = lens _apiGatewayStageMethodSettingHttpMethod (\s a -> s { _apiGatewayStageMethodSettingHttpMethod = a })  -- | The logging level for this method. For valid values, see the loggingLevel -- property of the Stage resource in the Amazon API Gateway API Reference.-agsmsLoggingLevel :: Lens' ApiGatewayStageMethodSetting (Maybe (Val Text))+agsmsLoggingLevel :: Lens' ApiGatewayStageMethodSetting (Maybe LoggingLevel) agsmsLoggingLevel = lens _apiGatewayStageMethodSettingLoggingLevel (\s a -> s { _apiGatewayStageMethodSettingLoggingLevel = a })  -- | Indicates whether Amazon CloudWatch metrics are enabled for methods in
library-gen/Stratosphere/ResourceProperties/ApiGatewayUsagePlanQuotaSettings.hs view
@@ -14,7 +14,7 @@ import GHC.Generics  import Stratosphere.Values-+import Stratosphere.Types  -- | Full data type definition for ApiGatewayUsagePlanQuotaSettings. See -- 'apiGatewayUsagePlanQuotaSettings' for a more convenient constructor.@@ -22,7 +22,7 @@   ApiGatewayUsagePlanQuotaSettings   { _apiGatewayUsagePlanQuotaSettingsLimit :: Maybe (Val Integer')   , _apiGatewayUsagePlanQuotaSettingsOffset :: Maybe (Val Integer')-  , _apiGatewayUsagePlanQuotaSettingsPeriod :: Maybe (Val Text)+  , _apiGatewayUsagePlanQuotaSettingsPeriod :: Maybe Period   } deriving (Show, Generic)  instance ToJSON ApiGatewayUsagePlanQuotaSettings where@@ -57,5 +57,5 @@ -- | The time period for which the maximum limit of requests applies, such as -- DAY or WEEK. For valid values, see the period property for the UsagePlan -- resource in the Amazon API Gateway REST API Reference.-agupqsPeriod :: Lens' ApiGatewayUsagePlanQuotaSettings (Maybe (Val Text))+agupqsPeriod :: Lens' ApiGatewayUsagePlanQuotaSettings (Maybe Period) agupqsPeriod = lens _apiGatewayUsagePlanQuotaSettingsPeriod (\s a -> s { _apiGatewayUsagePlanQuotaSettingsPeriod = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBAttributeDefinition.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | A list of attribute definitions for the AWS::DynamoDB::Table resource.+-- Each element is composed of an AttributeName and AttributeType.++module Stratosphere.ResourceProperties.DynamoDBAttributeDefinition where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for DynamoDBAttributeDefinition. See+-- 'dynamoDBAttributeDefinition' for a more convenient constructor.+data DynamoDBAttributeDefinition =+  DynamoDBAttributeDefinition+  { _dynamoDBAttributeDefinitionAttributeName :: Val Text+  , _dynamoDBAttributeDefinitionAttributeType :: AttributeType+  } deriving (Show, Generic)++instance ToJSON DynamoDBAttributeDefinition where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }++instance FromJSON DynamoDBAttributeDefinition where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }++-- | Constructor for 'DynamoDBAttributeDefinition' containing required fields+-- as arguments.+dynamoDBAttributeDefinition+  :: Val Text -- ^ 'ddbadAttributeName'+  -> AttributeType -- ^ 'ddbadAttributeType'+  -> DynamoDBAttributeDefinition+dynamoDBAttributeDefinition attributeNamearg attributeTypearg =+  DynamoDBAttributeDefinition+  { _dynamoDBAttributeDefinitionAttributeName = attributeNamearg+  , _dynamoDBAttributeDefinitionAttributeType = attributeTypearg+  }++-- | The name of an attribute. Attribute names can be 1 – 255 characters long+-- and have no character restrictions.+ddbadAttributeName :: Lens' DynamoDBAttributeDefinition (Val Text)+ddbadAttributeName = lens _dynamoDBAttributeDefinitionAttributeName (\s a -> s { _dynamoDBAttributeDefinitionAttributeName = a })++-- | The data type for the attribute. You can specify S for string data, N for+-- numeric data, or B for binary data.+ddbadAttributeType :: Lens' DynamoDBAttributeDefinition AttributeType+ddbadAttributeType = lens _dynamoDBAttributeDefinitionAttributeType (\s a -> s { _dynamoDBAttributeDefinitionAttributeType = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBGlobalSecondaryIndex.hs view
@@ -0,0 +1,69 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Describes global secondary indexes for the AWS::DynamoDB::Table resource.++module Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.ResourceProperties.DynamoDBKeySchema+import Stratosphere.ResourceProperties.DynamoDBProjectionObject+import Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput++-- | Full data type definition for DynamoDBGlobalSecondaryIndex. See+-- 'dynamoDBGlobalSecondaryIndex' for a more convenient constructor.+data DynamoDBGlobalSecondaryIndex =+  DynamoDBGlobalSecondaryIndex+  { _dynamoDBGlobalSecondaryIndexIndexName :: Val Text+  , _dynamoDBGlobalSecondaryIndexKeySchema :: [DynamoDBKeySchema]+  , _dynamoDBGlobalSecondaryIndexProjection :: DynamoDBProjectionObject+  , _dynamoDBGlobalSecondaryIndexProvisionedThroughput :: DynamoDBProvisionedThroughput+  } deriving (Show, Generic)++instance ToJSON DynamoDBGlobalSecondaryIndex where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }++instance FromJSON DynamoDBGlobalSecondaryIndex where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 29, omitNothingFields = True }++-- | Constructor for 'DynamoDBGlobalSecondaryIndex' containing required fields+-- as arguments.+dynamoDBGlobalSecondaryIndex+  :: Val Text -- ^ 'ddbgsiIndexName'+  -> [DynamoDBKeySchema] -- ^ 'ddbgsiKeySchema'+  -> DynamoDBProjectionObject -- ^ 'ddbgsiProjection'+  -> DynamoDBProvisionedThroughput -- ^ 'ddbgsiProvisionedThroughput'+  -> DynamoDBGlobalSecondaryIndex+dynamoDBGlobalSecondaryIndex indexNamearg keySchemaarg projectionarg provisionedThroughputarg =+  DynamoDBGlobalSecondaryIndex+  { _dynamoDBGlobalSecondaryIndexIndexName = indexNamearg+  , _dynamoDBGlobalSecondaryIndexKeySchema = keySchemaarg+  , _dynamoDBGlobalSecondaryIndexProjection = projectionarg+  , _dynamoDBGlobalSecondaryIndexProvisionedThroughput = provisionedThroughputarg+  }++-- | The name of the global secondary index. The index name can be 3 – 255+-- characters long and have no character restrictions.+ddbgsiIndexName :: Lens' DynamoDBGlobalSecondaryIndex (Val Text)+ddbgsiIndexName = lens _dynamoDBGlobalSecondaryIndexIndexName (\s a -> s { _dynamoDBGlobalSecondaryIndexIndexName = a })++-- | The complete index key schema for the global secondary index, which+-- consists of one or more pairs of attribute names and key types.+ddbgsiKeySchema :: Lens' DynamoDBGlobalSecondaryIndex [DynamoDBKeySchema]+ddbgsiKeySchema = lens _dynamoDBGlobalSecondaryIndexKeySchema (\s a -> s { _dynamoDBGlobalSecondaryIndexKeySchema = a })++-- | Attributes that are copied (projected) from the source table into the+-- index. These attributes are in addition to the primary key attributes and+-- index key attributes, which are automatically projected.+ddbgsiProjection :: Lens' DynamoDBGlobalSecondaryIndex DynamoDBProjectionObject+ddbgsiProjection = lens _dynamoDBGlobalSecondaryIndexProjection (\s a -> s { _dynamoDBGlobalSecondaryIndexProjection = a })++-- | The provisioned throughput settings for the index.+ddbgsiProvisionedThroughput :: Lens' DynamoDBGlobalSecondaryIndex DynamoDBProvisionedThroughput+ddbgsiProvisionedThroughput = lens _dynamoDBGlobalSecondaryIndexProvisionedThroughput (\s a -> s { _dynamoDBGlobalSecondaryIndexProvisionedThroughput = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBKeySchema.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Describes a primary key for the AWS::DynamoDB::Table resource or a key+-- schema for an index. Each element is composed of an AttributeName and+-- KeyType. For the primary key of an Amazon DynamoDB table that consists of+-- only a hash attribute, specify one element with a KeyType of HASH. For the+-- primary key of an Amazon DynamoDB table that consists of a hash and range+-- attributes, specify two elements: one with a KeyType of HASH and one with a+-- KeyType of RANGE. For a complete discussion of DynamoDB primary keys, see+-- Primary Key in the Amazon DynamoDB Developer Guide.++module Stratosphere.ResourceProperties.DynamoDBKeySchema where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for DynamoDBKeySchema. See 'dynamoDBKeySchema'+-- for a more convenient constructor.+data DynamoDBKeySchema =+  DynamoDBKeySchema+  { _dynamoDBKeySchemaAttributeName :: Val Text+  , _dynamoDBKeySchemaKeyType :: KeyType+  } deriving (Show, Generic)++instance ToJSON DynamoDBKeySchema where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }++instance FromJSON DynamoDBKeySchema where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 18, omitNothingFields = True }++-- | Constructor for 'DynamoDBKeySchema' containing required fields as+-- arguments.+dynamoDBKeySchema+  :: Val Text -- ^ 'ddbksAttributeName'+  -> KeyType -- ^ 'ddbksKeyType'+  -> DynamoDBKeySchema+dynamoDBKeySchema attributeNamearg keyTypearg =+  DynamoDBKeySchema+  { _dynamoDBKeySchemaAttributeName = attributeNamearg+  , _dynamoDBKeySchemaKeyType = keyTypearg+  }++-- | The attribute name that is used as the primary key for this table.+-- Primary key element names can be 1 – 255 characters long and have no+-- character restrictions.+ddbksAttributeName :: Lens' DynamoDBKeySchema (Val Text)+ddbksAttributeName = lens _dynamoDBKeySchemaAttributeName (\s a -> s { _dynamoDBKeySchemaAttributeName = a })++-- | Represents the attribute data, consisting of the data type and the+-- attribute value itself. You can specify HASH or RANGE.+ddbksKeyType :: Lens' DynamoDBKeySchema KeyType+ddbksKeyType = lens _dynamoDBKeySchemaKeyType (\s a -> s { _dynamoDBKeySchemaKeyType = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBLocalSecondaryIndex.hs view
@@ -0,0 +1,66 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Describes local secondary indexes for the AWS::DynamoDB::Table resource.+-- Each index is scoped to a given hash key value. Tables with one or more+-- local secondary indexes are subject to an item collection size limit, where+-- the amount of data within a given item collection cannot exceed 10 GB.++module Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.ResourceProperties.DynamoDBKeySchema+import Stratosphere.ResourceProperties.DynamoDBProjectionObject++-- | Full data type definition for DynamoDBLocalSecondaryIndex. See+-- 'dynamoDBLocalSecondaryIndex' for a more convenient constructor.+data DynamoDBLocalSecondaryIndex =+  DynamoDBLocalSecondaryIndex+  { _dynamoDBLocalSecondaryIndexIndexName :: Val Text+  , _dynamoDBLocalSecondaryIndexKeySchema :: [DynamoDBKeySchema]+  , _dynamoDBLocalSecondaryIndexProjection :: DynamoDBProjectionObject+  } deriving (Show, Generic)++instance ToJSON DynamoDBLocalSecondaryIndex where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }++instance FromJSON DynamoDBLocalSecondaryIndex where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }++-- | Constructor for 'DynamoDBLocalSecondaryIndex' containing required fields+-- as arguments.+dynamoDBLocalSecondaryIndex+  :: Val Text -- ^ 'ddblsiIndexName'+  -> [DynamoDBKeySchema] -- ^ 'ddblsiKeySchema'+  -> DynamoDBProjectionObject -- ^ 'ddblsiProjection'+  -> DynamoDBLocalSecondaryIndex+dynamoDBLocalSecondaryIndex indexNamearg keySchemaarg projectionarg =+  DynamoDBLocalSecondaryIndex+  { _dynamoDBLocalSecondaryIndexIndexName = indexNamearg+  , _dynamoDBLocalSecondaryIndexKeySchema = keySchemaarg+  , _dynamoDBLocalSecondaryIndexProjection = projectionarg+  }++-- | The name of the local secondary index. The index name can be 3 – 255+-- characters long and have no character restrictions.+ddblsiIndexName :: Lens' DynamoDBLocalSecondaryIndex (Val Text)+ddblsiIndexName = lens _dynamoDBLocalSecondaryIndexIndexName (\s a -> s { _dynamoDBLocalSecondaryIndexIndexName = a })++-- | The complete index key schema for the local secondary index, which+-- consists of one or more pairs of attribute names and key types. For local+-- secondary indexes, the hash key must be the same as that of the source+-- table.+ddblsiKeySchema :: Lens' DynamoDBLocalSecondaryIndex [DynamoDBKeySchema]+ddblsiKeySchema = lens _dynamoDBLocalSecondaryIndexKeySchema (\s a -> s { _dynamoDBLocalSecondaryIndexKeySchema = a })++-- | Attributes that are copied (projected) from the source table into the+-- index. These attributes are additions to the primary key attributes and+-- index key attributes, which are automatically projected.+ddblsiProjection :: Lens' DynamoDBLocalSecondaryIndex DynamoDBProjectionObject+ddblsiProjection = lens _dynamoDBLocalSecondaryIndexProjection (\s a -> s { _dynamoDBLocalSecondaryIndexProjection = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBProjectionObject.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Attributes that are copied (projected) from the source table into the+-- index. These attributes are additions to the primary key attributes and+-- index key attributes, which are automatically projected.++module Stratosphere.ResourceProperties.DynamoDBProjectionObject where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for DynamoDBProjectionObject. See+-- 'dynamoDBProjectionObject' for a more convenient constructor.+data DynamoDBProjectionObject =+  DynamoDBProjectionObject+  { _dynamoDBProjectionObjectNonKeyAttributes :: Maybe [Val Text]+  , _dynamoDBProjectionObjectProjectionType :: Maybe ProjectionType+  } deriving (Show, Generic)++instance ToJSON DynamoDBProjectionObject where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }++instance FromJSON DynamoDBProjectionObject where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 25, omitNothingFields = True }++-- | Constructor for 'DynamoDBProjectionObject' containing required fields as+-- arguments.+dynamoDBProjectionObject+  :: DynamoDBProjectionObject+dynamoDBProjectionObject  =+  DynamoDBProjectionObject+  { _dynamoDBProjectionObjectNonKeyAttributes = Nothing+  , _dynamoDBProjectionObjectProjectionType = Nothing+  }++-- | The non-key attribute names that are projected into the index. For local+-- secondary indexes, the total count of NonKeyAttributes summed across all of+-- the local secondary indexes must not exceed 20. If you project the same+-- attribute into two different indexes, this counts as two distinct+-- attributes in determining the total.+ddbpoNonKeyAttributes :: Lens' DynamoDBProjectionObject (Maybe [Val Text])+ddbpoNonKeyAttributes = lens _dynamoDBProjectionObjectNonKeyAttributes (\s a -> s { _dynamoDBProjectionObjectNonKeyAttributes = a })++-- | The set of attributes that are projected into the index: Only the index+-- and primary keys are projected into the index. Only the specified table+-- attributes are projected into the index. The list of projected attributes+-- are in NonKeyAttributes. All of the table attributes are projected into the+-- index.+ddbpoProjectionType :: Lens' DynamoDBProjectionObject (Maybe ProjectionType)+ddbpoProjectionType = lens _dynamoDBProjectionObjectProjectionType (\s a -> s { _dynamoDBProjectionObjectProjectionType = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBProvisionedThroughput.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Describes a set of provisioned throughput values for an+-- AWS::DynamoDB::Table resource. DynamoDB uses these capacity units to+-- allocate sufficient resources to provide the requested throughput. For a+-- complete discussion of DynamoDB provisioned throughput values, see+-- Specifying Read and Write Requirements in the DynamoDB Developer Guide.++module Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+++-- | Full data type definition for DynamoDBProvisionedThroughput. See+-- 'dynamoDBProvisionedThroughput' for a more convenient constructor.+data DynamoDBProvisionedThroughput =+  DynamoDBProvisionedThroughput+  { _dynamoDBProvisionedThroughputReadCapacityUnits :: Val Integer'+  , _dynamoDBProvisionedThroughputWriteCapacityUnits :: Val Integer'+  } deriving (Show, Generic)++instance ToJSON DynamoDBProvisionedThroughput where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }++instance FromJSON DynamoDBProvisionedThroughput where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 30, omitNothingFields = True }++-- | Constructor for 'DynamoDBProvisionedThroughput' containing required+-- fields as arguments.+dynamoDBProvisionedThroughput+  :: Val Integer' -- ^ 'ddbptReadCapacityUnits'+  -> Val Integer' -- ^ 'ddbptWriteCapacityUnits'+  -> DynamoDBProvisionedThroughput+dynamoDBProvisionedThroughput readCapacityUnitsarg writeCapacityUnitsarg =+  DynamoDBProvisionedThroughput+  { _dynamoDBProvisionedThroughputReadCapacityUnits = readCapacityUnitsarg+  , _dynamoDBProvisionedThroughputWriteCapacityUnits = writeCapacityUnitsarg+  }++-- | Sets the desired minimum number of consistent reads of items (up to 1KB+-- in size) per second for the specified table before Amazon DynamoDB balances+-- the load.+ddbptReadCapacityUnits :: Lens' DynamoDBProvisionedThroughput (Val Integer')+ddbptReadCapacityUnits = lens _dynamoDBProvisionedThroughputReadCapacityUnits (\s a -> s { _dynamoDBProvisionedThroughputReadCapacityUnits = a })++-- | Sets the desired minimum number of consistent writes of items (up to 1KB+-- in size) per second for the specified table before Amazon DynamoDB balances+-- the load.+ddbptWriteCapacityUnits :: Lens' DynamoDBProvisionedThroughput (Val Integer')+ddbptWriteCapacityUnits = lens _dynamoDBProvisionedThroughputWriteCapacityUnits (\s a -> s { _dynamoDBProvisionedThroughputWriteCapacityUnits = a })
+ library-gen/Stratosphere/ResourceProperties/DynamoDBStreamSpecification.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | StreamSpecification is a property of the AWS::DynamoDB::Table resource+-- that defines the settings of a DynamoDB table's stream.++module Stratosphere.ResourceProperties.DynamoDBStreamSpecification where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for DynamoDBStreamSpecification. See+-- 'dynamoDBStreamSpecification' for a more convenient constructor.+data DynamoDBStreamSpecification =+  DynamoDBStreamSpecification+  { _dynamoDBStreamSpecificationStreamViewType :: StreamViewType+  } deriving (Show, Generic)++instance ToJSON DynamoDBStreamSpecification where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }++instance FromJSON DynamoDBStreamSpecification where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 28, omitNothingFields = True }++-- | Constructor for 'DynamoDBStreamSpecification' containing required fields+-- as arguments.+dynamoDBStreamSpecification+  :: StreamViewType -- ^ 'ddbssStreamViewType'+  -> DynamoDBStreamSpecification+dynamoDBStreamSpecification streamViewTypearg =+  DynamoDBStreamSpecification+  { _dynamoDBStreamSpecificationStreamViewType = streamViewTypearg+  }++-- | Determines the information that the stream captures when an item in the+-- table is modified. For valid values, see StreamSpecification in the Amazon+-- DynamoDB API Reference.+ddbssStreamViewType :: Lens' DynamoDBStreamSpecification StreamViewType+ddbssStreamViewType = lens _dynamoDBStreamSpecificationStreamViewType (\s a -> s { _dynamoDBStreamSpecificationStreamViewType = a })
+ library-gen/Stratosphere/ResourceProperties/SNSTopicSubscription.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Subscription is an embedded property of the AWS::SNS::Topic resource that+-- describes the subscription endpoints for an Amazon Simple Notification+-- Service (Amazon SNS) topic.++module Stratosphere.ResourceProperties.SNSTopicSubscription where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for SNSTopicSubscription. See+-- 'snsTopicSubscription' for a more convenient constructor.+data SNSTopicSubscription =+  SNSTopicSubscription+  { _sNSTopicSubscriptionEndpoint :: Val Text+  , _sNSTopicSubscriptionProtocol :: SNSProtocol+  } deriving (Show, Generic)++instance ToJSON SNSTopicSubscription where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }++instance FromJSON SNSTopicSubscription where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 21, omitNothingFields = True }++-- | Constructor for 'SNSTopicSubscription' containing required fields as+-- arguments.+snsTopicSubscription+  :: Val Text -- ^ 'snstsEndpoint'+  -> SNSProtocol -- ^ 'snstsProtocol'+  -> SNSTopicSubscription+snsTopicSubscription endpointarg protocolarg =+  SNSTopicSubscription+  { _sNSTopicSubscriptionEndpoint = endpointarg+  , _sNSTopicSubscriptionProtocol = protocolarg+  }++-- | The subscription's endpoint (format depends on the protocol). For more+-- information, see the Subscribe Endpoint parameter in the Amazon Simple+-- Notification Service API Reference.+snstsEndpoint :: Lens' SNSTopicSubscription (Val Text)+snstsEndpoint = lens _sNSTopicSubscriptionEndpoint (\s a -> s { _sNSTopicSubscriptionEndpoint = a })++-- | The subscription's protocol. For more information, see the Subscribe+-- Protocol parameter in the Amazon Simple Notification Service API Reference.+snstsProtocol :: Lens' SNSTopicSubscription SNSProtocol+snstsProtocol = lens _sNSTopicSubscriptionProtocol (\s a -> s { _sNSTopicSubscriptionProtocol = a })
+ library-gen/Stratosphere/ResourceProperties/SQSRedrivePolicy.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The RedrivePolicy type is a property of the AWS::SQS::Queue resource.++module Stratosphere.ResourceProperties.SQSRedrivePolicy where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+++-- | Full data type definition for SQSRedrivePolicy. See 'sqsRedrivePolicy'+-- for a more convenient constructor.+data SQSRedrivePolicy =+  SQSRedrivePolicy+  { _sQSRedrivePolicydeadLetterTargetArn :: Val Text+  , _sQSRedrivePolicymaxReceiveCount :: Maybe (Val Integer')+  } deriving (Show, Generic)++instance ToJSON SQSRedrivePolicy where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }++instance FromJSON SQSRedrivePolicy where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 17, omitNothingFields = True }++-- | Constructor for 'SQSRedrivePolicy' containing required fields as+-- arguments.+sqsRedrivePolicy+  :: Val Text -- ^ 'sqsrpdeadLetterTargetArn'+  -> SQSRedrivePolicy+sqsRedrivePolicy deadLetterTargetArnarg =+  SQSRedrivePolicy+  { _sQSRedrivePolicydeadLetterTargetArn = deadLetterTargetArnarg+  , _sQSRedrivePolicymaxReceiveCount = Nothing+  }++-- | The Amazon Resource Name (ARN) of the dead letter queue to which the+-- messages are sent to after the maxReceiveCount value has been exceeded.+sqsrpdeadLetterTargetArn :: Lens' SQSRedrivePolicy (Val Text)+sqsrpdeadLetterTargetArn = lens _sQSRedrivePolicydeadLetterTargetArn (\s a -> s { _sQSRedrivePolicydeadLetterTargetArn = a })++-- | The number of times a message is delivered to the source queue before+-- being sent to the dead letter queue.+sqsrpmaxReceiveCount :: Lens' SQSRedrivePolicy (Maybe (Val Integer'))+sqsrpmaxReceiveCount = lens _sQSRedrivePolicymaxReceiveCount (\s a -> s { _sQSRedrivePolicymaxReceiveCount = a })
library-gen/Stratosphere/Resources.hs view
@@ -59,16 +59,20 @@ import Stratosphere.Resources.DBSecurityGroupIngress as X import Stratosphere.Resources.DBSubnetGroup as X import Stratosphere.Resources.DeliveryStream as X+import Stratosphere.Resources.DynamoDBTable as X import Stratosphere.Resources.EC2Instance as X import Stratosphere.Resources.EIP as X import Stratosphere.Resources.EIPAssociation as X+import Stratosphere.Resources.EventsRule as X import Stratosphere.Resources.Group as X import Stratosphere.Resources.IAMRole as X import Stratosphere.Resources.InstanceProfile as X import Stratosphere.Resources.InternetGateway as X import Stratosphere.Resources.KinesisStream as X+import Stratosphere.Resources.LambdaAlias as X import Stratosphere.Resources.LambdaFunction as X import Stratosphere.Resources.LambdaPermission as X+import Stratosphere.Resources.LambdaVersion as X import Stratosphere.Resources.LaunchConfiguration as X import Stratosphere.Resources.LifecycleHook as X import Stratosphere.Resources.LoadBalancer as X@@ -82,6 +86,11 @@ import Stratosphere.Resources.Route as X import Stratosphere.Resources.RouteTable as X import Stratosphere.Resources.S3BucketPolicy as X+import Stratosphere.Resources.SNSSubscription as X+import Stratosphere.Resources.SNSTopic as X+import Stratosphere.Resources.SNSTopicPolicy as X+import Stratosphere.Resources.SQSQueue as X+import Stratosphere.Resources.SQSQueuePolicy as X import Stratosphere.Resources.ScalingPolicy as X import Stratosphere.Resources.ScheduledAction as X import Stratosphere.Resources.SecurityGroup as X@@ -119,6 +128,13 @@ import Stratosphere.ResourceProperties.AutoScalingTags as X import Stratosphere.ResourceProperties.ConnectionDrainingPolicy as X import Stratosphere.ResourceProperties.ConnectionSettings as X+import Stratosphere.ResourceProperties.DynamoDBAttributeDefinition as X+import Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex as X+import Stratosphere.ResourceProperties.DynamoDBKeySchema as X+import Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex as X+import Stratosphere.ResourceProperties.DynamoDBProjectionObject as X+import Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput as X+import Stratosphere.ResourceProperties.DynamoDBStreamSpecification as X import Stratosphere.ResourceProperties.EBSBlockDevice as X import Stratosphere.ResourceProperties.EC2BlockDeviceMapping as X import Stratosphere.ResourceProperties.EC2MountPoint as X@@ -169,6 +185,8 @@ import Stratosphere.ResourceProperties.S3WebsiteRedirectRule as X import Stratosphere.ResourceProperties.S3WebsiteRoutingRuleCondition as X import Stratosphere.ResourceProperties.S3WebsiteRoutingRules as X+import Stratosphere.ResourceProperties.SNSTopicSubscription as X+import Stratosphere.ResourceProperties.SQSRedrivePolicy as X import Stratosphere.ResourceProperties.SecurityGroupEgressRule as X import Stratosphere.ResourceProperties.SecurityGroupIngressRule as X import Stratosphere.ResourceProperties.StepAdjustments as X@@ -204,16 +222,20 @@   | DBSecurityGroupIngressProperties DBSecurityGroupIngress   | DBSubnetGroupProperties DBSubnetGroup   | DeliveryStreamProperties DeliveryStream+  | DynamoDBTableProperties DynamoDBTable   | EC2InstanceProperties EC2Instance   | EIPProperties EIP   | EIPAssociationProperties EIPAssociation+  | EventsRuleProperties EventsRule   | GroupProperties Group   | IAMRoleProperties IAMRole   | InstanceProfileProperties InstanceProfile   | InternetGatewayProperties InternetGateway   | KinesisStreamProperties KinesisStream+  | LambdaAliasProperties LambdaAlias   | LambdaFunctionProperties LambdaFunction   | LambdaPermissionProperties LambdaPermission+  | LambdaVersionProperties LambdaVersion   | LaunchConfigurationProperties LaunchConfiguration   | LifecycleHookProperties LifecycleHook   | LoadBalancerProperties LoadBalancer@@ -227,6 +249,11 @@   | RouteProperties Route   | RouteTableProperties RouteTable   | S3BucketPolicyProperties S3BucketPolicy+  | SNSSubscriptionProperties SNSSubscription+  | SNSTopicProperties SNSTopic+  | SNSTopicPolicyProperties SNSTopicPolicy+  | SQSQueueProperties SQSQueue+  | SQSQueuePolicyProperties SQSQueuePolicy   | ScalingPolicyProperties ScalingPolicy   | ScheduledActionProperties ScheduledAction   | SecurityGroupProperties SecurityGroup@@ -333,12 +360,16 @@   [ "Type" .= ("AWS::RDS::DBSubnetGroup" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (DeliveryStreamProperties x) =   [ "Type" .= ("AWS::KinesisFirehose::DeliveryStream" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (DynamoDBTableProperties x) =+  [ "Type" .= ("AWS::DynamoDB::Table" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (EC2InstanceProperties x) =   [ "Type" .= ("AWS::EC2::Instance" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (EIPProperties x) =   [ "Type" .= ("AWS::EC2::EIP" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (EIPAssociationProperties x) =   [ "Type" .= ("AWS::EC2::EIPAssociation" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (EventsRuleProperties x) =+  [ "Type" .= ("AWS::Events::Rule" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (GroupProperties x) =   [ "Type" .= ("AWS::IAM::Group" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (IAMRoleProperties x) =@@ -349,10 +380,14 @@   [ "Type" .= ("AWS::EC2::InternetGateway" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (KinesisStreamProperties x) =   [ "Type" .= ("AWS::Kinesis::Stream" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (LambdaAliasProperties x) =+  [ "Type" .= ("AWS::Lambda::Alias" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (LambdaFunctionProperties x) =   [ "Type" .= ("AWS::Lambda::Function" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (LambdaPermissionProperties x) =   [ "Type" .= ("AWS::Lambda::Permission" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (LambdaVersionProperties x) =+  [ "Type" .= ("AWS::Lambda::Version" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (LaunchConfigurationProperties x) =   [ "Type" .= ("AWS::AutoScaling::LaunchConfiguration" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (LifecycleHookProperties x) =@@ -379,6 +414,16 @@   [ "Type" .= ("AWS::EC2::RouteTable" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (S3BucketPolicyProperties x) =   [ "Type" .= ("AWS::S3::BucketPolicy" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (SNSSubscriptionProperties x) =+  [ "Type" .= ("AWS::SNS::Subscription" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (SNSTopicProperties x) =+  [ "Type" .= ("AWS::SNS::Topic" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (SNSTopicPolicyProperties x) =+  [ "Type" .= ("AWS::SNS::TopicPolicy" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (SQSQueueProperties x) =+  [ "Type" .= ("AWS::SQS::Queue" :: String), "Properties" .= toJSON x]+resourcePropertiesJSON (SQSQueuePolicyProperties x) =+  [ "Type" .= ("AWS::SQS::QueuePolicy" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (ScalingPolicyProperties x) =   [ "Type" .= ("AWS::AutoScaling::ScalingPolicy" :: String), "Properties" .= toJSON x] resourcePropertiesJSON (ScheduledActionProperties x) =@@ -436,16 +481,20 @@          "AWS::RDS::DBSecurityGroupIngress" -> DBSecurityGroupIngressProperties <$> (o .: "Properties")          "AWS::RDS::DBSubnetGroup" -> DBSubnetGroupProperties <$> (o .: "Properties")          "AWS::KinesisFirehose::DeliveryStream" -> DeliveryStreamProperties <$> (o .: "Properties")+         "AWS::DynamoDB::Table" -> DynamoDBTableProperties <$> (o .: "Properties")          "AWS::EC2::Instance" -> EC2InstanceProperties <$> (o .: "Properties")          "AWS::EC2::EIP" -> EIPProperties <$> (o .: "Properties")          "AWS::EC2::EIPAssociation" -> EIPAssociationProperties <$> (o .: "Properties")+         "AWS::Events::Rule" -> EventsRuleProperties <$> (o .: "Properties")          "AWS::IAM::Group" -> GroupProperties <$> (o .: "Properties")          "AWS::IAM::Role" -> IAMRoleProperties <$> (o .: "Properties")          "AWS::IAM::InstanceProfile" -> InstanceProfileProperties <$> (o .: "Properties")          "AWS::EC2::InternetGateway" -> InternetGatewayProperties <$> (o .: "Properties")          "AWS::Kinesis::Stream" -> KinesisStreamProperties <$> (o .: "Properties")+         "AWS::Lambda::Alias" -> LambdaAliasProperties <$> (o .: "Properties")          "AWS::Lambda::Function" -> LambdaFunctionProperties <$> (o .: "Properties")          "AWS::Lambda::Permission" -> LambdaPermissionProperties <$> (o .: "Properties")+         "AWS::Lambda::Version" -> LambdaVersionProperties <$> (o .: "Properties")          "AWS::AutoScaling::LaunchConfiguration" -> LaunchConfigurationProperties <$> (o .: "Properties")          "AWS::AutoScaling::LifecycleHook" -> LifecycleHookProperties <$> (o .: "Properties")          "AWS::ElasticLoadBalancing::LoadBalancer" -> LoadBalancerProperties <$> (o .: "Properties")@@ -459,6 +508,11 @@          "AWS::EC2::Route" -> RouteProperties <$> (o .: "Properties")          "AWS::EC2::RouteTable" -> RouteTableProperties <$> (o .: "Properties")          "AWS::S3::BucketPolicy" -> S3BucketPolicyProperties <$> (o .: "Properties")+         "AWS::SNS::Subscription" -> SNSSubscriptionProperties <$> (o .: "Properties")+         "AWS::SNS::Topic" -> SNSTopicProperties <$> (o .: "Properties")+         "AWS::SNS::TopicPolicy" -> SNSTopicPolicyProperties <$> (o .: "Properties")+         "AWS::SQS::Queue" -> SQSQueueProperties <$> (o .: "Properties")+         "AWS::SQS::QueuePolicy" -> SQSQueuePolicyProperties <$> (o .: "Properties")          "AWS::AutoScaling::ScalingPolicy" -> ScalingPolicyProperties <$> (o .: "Properties")          "AWS::AutoScaling::ScheduledAction" -> ScheduledActionProperties <$> (o .: "Properties")          "AWS::EC2::SecurityGroup" -> SecurityGroupProperties <$> (o .: "Properties")
library-gen/Stratosphere/Resources/ApiGatewayMethod.hs view
@@ -16,15 +16,16 @@ import Stratosphere.Values import Stratosphere.ResourceProperties.ApiGatewayIntegration import Stratosphere.ResourceProperties.ApiGatewayMethodResponse+import Stratosphere.Types  -- | Full data type definition for ApiGatewayMethod. See 'apiGatewayMethod' -- for a more convenient constructor. data ApiGatewayMethod =   ApiGatewayMethod   { _apiGatewayMethodApiKeyRequired :: Maybe (Val Bool')-  , _apiGatewayMethodAuthorizationType :: Val Text+  , _apiGatewayMethodAuthorizationType :: AuthorizationType   , _apiGatewayMethodAuthorizerId :: Maybe (Val Text)-  , _apiGatewayMethodHttpMethod :: Val Text+  , _apiGatewayMethodHttpMethod :: HttpMethod   , _apiGatewayMethodIntegration :: Maybe ApiGatewayIntegration   , _apiGatewayMethodMethodResponses :: Maybe [ApiGatewayMethodResponse]   , _apiGatewayMethodRequestModels :: Maybe Object@@ -42,8 +43,8 @@ -- | Constructor for 'ApiGatewayMethod' containing required fields as -- arguments. apiGatewayMethod-  :: Val Text -- ^ 'agmeAuthorizationType'-  -> Val Text -- ^ 'agmeHttpMethod'+  :: AuthorizationType -- ^ 'agmeAuthorizationType'+  -> HttpMethod -- ^ 'agmeHttpMethod'   -> Val Text -- ^ 'agmeResourceId'   -> Val Text -- ^ 'agmeRestApiId'   -> ApiGatewayMethod@@ -66,7 +67,7 @@ agmeApiKeyRequired = lens _apiGatewayMethodApiKeyRequired (\s a -> s { _apiGatewayMethodApiKeyRequired = a })  -- | The method's authorization type.-agmeAuthorizationType :: Lens' ApiGatewayMethod (Val Text)+agmeAuthorizationType :: Lens' ApiGatewayMethod AuthorizationType agmeAuthorizationType = lens _apiGatewayMethodAuthorizationType (\s a -> s { _apiGatewayMethodAuthorizationType = a })  -- | The identifier of the authorizer to use on this method. If you specify@@ -75,7 +76,7 @@ agmeAuthorizerId = lens _apiGatewayMethodAuthorizerId (\s a -> s { _apiGatewayMethodAuthorizerId = a })  -- | The HTTP method that clients will use to call this method.-agmeHttpMethod :: Lens' ApiGatewayMethod (Val Text)+agmeHttpMethod :: Lens' ApiGatewayMethod HttpMethod agmeHttpMethod = lens _apiGatewayMethodHttpMethod (\s a -> s { _apiGatewayMethodHttpMethod = a })  -- | The back-end system that the method calls when it receives a request.
+ library-gen/Stratosphere/Resources/DynamoDBTable.hs view
@@ -0,0 +1,108 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Creates a DynamoDB table.++module Stratosphere.Resources.DynamoDBTable where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.ResourceProperties.DynamoDBAttributeDefinition+import Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex+import Stratosphere.ResourceProperties.DynamoDBKeySchema+import Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex+import Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput+import Stratosphere.ResourceProperties.DynamoDBStreamSpecification++-- | Full data type definition for DynamoDBTable. See 'dynamoDBTable' for a+-- more convenient constructor.+data DynamoDBTable =+  DynamoDBTable+  { _dynamoDBTableAttributeDefinitions :: [DynamoDBAttributeDefinition]+  , _dynamoDBTableGlobalSecondaryIndexes :: Maybe [DynamoDBGlobalSecondaryIndex]+  , _dynamoDBTableKeySchema :: [DynamoDBKeySchema]+  , _dynamoDBTableLocalSecondaryIndexes :: Maybe [DynamoDBLocalSecondaryIndex]+  , _dynamoDBTableProvisionedThroughput :: DynamoDBProvisionedThroughput+  , _dynamoDBTableStreamSpecification :: Maybe DynamoDBStreamSpecification+  , _dynamoDBTableTableName :: Maybe (Val Text)+  } deriving (Show, Generic)++instance ToJSON DynamoDBTable where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }++instance FromJSON DynamoDBTable where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }++-- | Constructor for 'DynamoDBTable' containing required fields as arguments.+dynamoDBTable+  :: [DynamoDBAttributeDefinition] -- ^ 'ddbtAttributeDefinitions'+  -> [DynamoDBKeySchema] -- ^ 'ddbtKeySchema'+  -> DynamoDBProvisionedThroughput -- ^ 'ddbtProvisionedThroughput'+  -> DynamoDBTable+dynamoDBTable attributeDefinitionsarg keySchemaarg provisionedThroughputarg =+  DynamoDBTable+  { _dynamoDBTableAttributeDefinitions = attributeDefinitionsarg+  , _dynamoDBTableGlobalSecondaryIndexes = Nothing+  , _dynamoDBTableKeySchema = keySchemaarg+  , _dynamoDBTableLocalSecondaryIndexes = Nothing+  , _dynamoDBTableProvisionedThroughput = provisionedThroughputarg+  , _dynamoDBTableStreamSpecification = Nothing+  , _dynamoDBTableTableName = Nothing+  }++-- | A list of AttributeName and AttributeType objects that describe the key+-- schema for the table and indexes.+ddbtAttributeDefinitions :: Lens' DynamoDBTable [DynamoDBAttributeDefinition]+ddbtAttributeDefinitions = lens _dynamoDBTableAttributeDefinitions (\s a -> s { _dynamoDBTableAttributeDefinitions = a })++-- | Global secondary indexes to be created on the table. You can create up to+-- 5 global secondary indexes. Important If you update a table to include a+-- new global secondary index, AWS CloudFormation initiates the index creation+-- and then proceeds with the stack update. AWS CloudFormation doesn't wait+-- for the index to complete creation because the backfilling phase can take a+-- long time, depending on the size of the table. You cannot use the index or+-- update the table until the index's status is ACTIVE. You can track its+-- status by using the DynamoDB DescribeTable command. If you add or delete an+-- index during an update, we recommend that you don't update any other+-- resources. If your stack fails to update and is rolled back while adding a+-- new index, you must manually delete the index.+ddbtGlobalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBGlobalSecondaryIndex])+ddbtGlobalSecondaryIndexes = lens _dynamoDBTableGlobalSecondaryIndexes (\s a -> s { _dynamoDBTableGlobalSecondaryIndexes = a })++-- | Specifies the attributes that make up the primary key for the table. The+-- attributes in the KeySchema property must also be defined in the+-- AttributeDefinitions property.+ddbtKeySchema :: Lens' DynamoDBTable [DynamoDBKeySchema]+ddbtKeySchema = lens _dynamoDBTableKeySchema (\s a -> s { _dynamoDBTableKeySchema = a })++-- | Local secondary indexes to be created on the table. You can create up to+-- 5 local secondary indexes. Each index is scoped to a given hash key value.+-- The size of each hash key can be up to 10 gigabytes.+ddbtLocalSecondaryIndexes :: Lens' DynamoDBTable (Maybe [DynamoDBLocalSecondaryIndex])+ddbtLocalSecondaryIndexes = lens _dynamoDBTableLocalSecondaryIndexes (\s a -> s { _dynamoDBTableLocalSecondaryIndexes = a })++-- | Throughput for the specified table, consisting of values for+-- ReadCapacityUnits and WriteCapacityUnits. For more information about the+-- contents of a provisioned throughput structure, see DynamoDB Provisioned+-- Throughput.+ddbtProvisionedThroughput :: Lens' DynamoDBTable DynamoDBProvisionedThroughput+ddbtProvisionedThroughput = lens _dynamoDBTableProvisionedThroughput (\s a -> s { _dynamoDBTableProvisionedThroughput = a })++-- | The settings for the DynamoDB table stream, which capture changes to+-- items stored in the table.+ddbtStreamSpecification :: Lens' DynamoDBTable (Maybe DynamoDBStreamSpecification)+ddbtStreamSpecification = lens _dynamoDBTableStreamSpecification (\s a -> s { _dynamoDBTableStreamSpecification = a })++-- | A name for the table. If you don't specify a name, AWS CloudFormation+-- generates a unique physical ID and uses that ID for the table name. For+-- more information, see Name Type. Important If you specify a name, you+-- cannot do updates that require this resource to be replaced. You can still+-- do updates that require no or some interruption. If you must replace the+-- resource, specify a new name.+ddbtTableName :: Lens' DynamoDBTable (Maybe (Val Text))+ddbtTableName = lens _dynamoDBTableTableName (\s a -> s { _dynamoDBTableTableName = a })
+ library-gen/Stratosphere/Resources/EventsRule.hs view
@@ -0,0 +1,95 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::Events::Rule resource creates a rule that matches incoming+-- Amazon CloudWatch Events (CloudWatch Events) events and routes them to one+-- or more targets for processing. For more information, see Using CloudWatch+-- Events in the Amazon CloudWatch User Guide.++module Stratosphere.Resources.EventsRule where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for EventsRule. See 'eventsRule' for a more+-- convenient constructor.+data EventsRule =+  EventsRule+  { _eventsRuleDescription :: Maybe (Val Text)+  , _eventsRuleEventPattern :: Maybe Object+  , _eventsRuleName :: Maybe (Val Text)+  , _eventsRuleRoleArn :: Maybe (Val Text)+  , _eventsRuleScheduleExpression :: Maybe (Val Text)+  , _eventsRuleState :: Maybe EnabledState+  , _eventsRuleTargets :: Maybe [Object]+  } deriving (Show, Generic)++instance ToJSON EventsRule where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }++instance FromJSON EventsRule where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 11, omitNothingFields = True }++-- | Constructor for 'EventsRule' containing required fields as arguments.+eventsRule+  :: EventsRule+eventsRule  =+  EventsRule+  { _eventsRuleDescription = Nothing+  , _eventsRuleEventPattern = Nothing+  , _eventsRuleName = Nothing+  , _eventsRuleRoleArn = Nothing+  , _eventsRuleScheduleExpression = Nothing+  , _eventsRuleState = Nothing+  , _eventsRuleTargets = Nothing+  }++-- | A description of the rule's purpose.+erDescription :: Lens' EventsRule (Maybe (Val Text))+erDescription = lens _eventsRuleDescription (\s a -> s { _eventsRuleDescription = a })++-- | Describes which events CloudWatch Events routes to the specified target.+-- These routed events are matched events. For more information, see Events+-- and Event Patterns in the Amazon CloudWatch User Guide.+erEventPattern :: Lens' EventsRule (Maybe Object)+erEventPattern = lens _eventsRuleEventPattern (\s a -> s { _eventsRuleEventPattern = a })++-- | A name for the rule. If you don't specify a name, AWS CloudFormation+-- generates a unique physical ID and uses that ID for the rule name. For more+-- information, see Name Type. Important If you specify a name, you cannot do+-- updates that require this resource to be replaced. You can still do updates+-- that require no or some interruption. If you must replace the resource,+-- specify a new name.+erName :: Lens' EventsRule (Maybe (Val Text))+erName = lens _eventsRuleName (\s a -> s { _eventsRuleName = a })++-- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management+-- (IAM) role that grants CloudWatch Events permission to make calls to target+-- services, such as AWS Lambda (Lambda) or Amazon Kinesis streams.+erRoleArn :: Lens' EventsRule (Maybe (Val Text))+erRoleArn = lens _eventsRuleRoleArn (\s a -> s { _eventsRuleRoleArn = a })++-- | The schedule or rate (frequency) that determines when CloudWatch Events+-- runs the rule. For more information, see Schedule Expression Syntax for+-- Rules in the Amazon CloudWatch User Guide.+erScheduleExpression :: Lens' EventsRule (Maybe (Val Text))+erScheduleExpression = lens _eventsRuleScheduleExpression (\s a -> s { _eventsRuleScheduleExpression = a })++-- | Indicates whether the rule is enabled. For valid values, see the State+-- parameter for the PutRule action in the Amazon CloudWatch Events API+-- Reference.+erState :: Lens' EventsRule (Maybe EnabledState)+erState = lens _eventsRuleState (\s a -> s { _eventsRuleState = a })++-- | The resources, such as Lambda functions or Amazon Kinesis streams, that+-- CloudWatch Events routes events to and invokes when the rule is triggered.+-- For information about valid targets, see the PutTargets action in the+-- Amazon CloudWatch Events API Reference.+erTargets :: Lens' EventsRule (Maybe [Object])+erTargets = lens _eventsRuleTargets (\s a -> s { _eventsRuleTargets = a })
+ library-gen/Stratosphere/Resources/LambdaAlias.hs view
@@ -0,0 +1,70 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::Lambda::Alias resource creates an alias that points to the+-- version of an AWS Lambda (Lambda) function that you specify. Use aliases+-- when you want to control which version of your function other services or+-- applications invoke. Those services or applications can use your function's+-- alias so that they don't need to be updated whenever you release a new+-- version of your function. For more information, see Introduction to AWS+-- Lambda Aliases in the AWS Lambda Developer Guide.++module Stratosphere.Resources.LambdaAlias where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+++-- | Full data type definition for LambdaAlias. See 'lambdaAlias' for a more+-- convenient constructor.+data LambdaAlias =+  LambdaAlias+  { _lambdaAliasDescription :: Maybe (Val Text)+  , _lambdaAliasFunctionName :: Val Text+  , _lambdaAliasFunctionVersion :: Val Text+  , _lambdaAliasName :: Val Text+  } deriving (Show, Generic)++instance ToJSON LambdaAlias where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }++instance FromJSON LambdaAlias where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 12, omitNothingFields = True }++-- | Constructor for 'LambdaAlias' containing required fields as arguments.+lambdaAlias+  :: Val Text -- ^ 'laFunctionName'+  -> Val Text -- ^ 'laFunctionVersion'+  -> Val Text -- ^ 'laName'+  -> LambdaAlias+lambdaAlias functionNamearg functionVersionarg namearg =+  LambdaAlias+  { _lambdaAliasDescription = Nothing+  , _lambdaAliasFunctionName = functionNamearg+  , _lambdaAliasFunctionVersion = functionVersionarg+  , _lambdaAliasName = namearg+  }++-- | Information about the alias, such as its purpose or the Lambda function+-- that is associated with it.+laDescription :: Lens' LambdaAlias (Maybe (Val Text))+laDescription = lens _lambdaAliasDescription (\s a -> s { _lambdaAliasDescription = a })++-- | The Lambda function that you want to associate with this alias. You can+-- specify the function's name or its Amazon Resource Name (ARN).+laFunctionName :: Lens' LambdaAlias (Val Text)+laFunctionName = lens _lambdaAliasFunctionName (\s a -> s { _lambdaAliasFunctionName = a })++-- | The version of the Lambda function that you want to associate with this+-- alias.+laFunctionVersion :: Lens' LambdaAlias (Val Text)+laFunctionVersion = lens _lambdaAliasFunctionVersion (\s a -> s { _lambdaAliasFunctionVersion = a })++-- | A name for the alias.+laName :: Lens' LambdaAlias (Val Text)+laName = lens _lambdaAliasName (\s a -> s { _lambdaAliasName = a })
library-gen/Stratosphere/Resources/LambdaFunction.hs view
@@ -16,6 +16,7 @@ import Stratosphere.Values import Stratosphere.ResourceProperties.LambdaFunctionCode import Stratosphere.ResourceProperties.LambdaFunctionVPCConfig+import Stratosphere.Types  -- | Full data type definition for LambdaFunction. See 'lambdaFunction' for a -- more convenient constructor.@@ -27,7 +28,7 @@   , _lambdaFunctionHandler :: Val Text   , _lambdaFunctionMemorySize :: Maybe (Val Integer')   , _lambdaFunctionRole :: Val Text-  , _lambdaFunctionRuntime :: Val Text+  , _lambdaFunctionRuntime :: Runtime   , _lambdaFunctionTimeout :: Maybe (Val Integer')   , _lambdaFunctionVpcConfig :: Maybe LambdaFunctionVPCConfig   } deriving (Show, Generic)@@ -43,7 +44,7 @@   :: LambdaFunctionCode -- ^ 'lfCode'   -> Val Text -- ^ 'lfHandler'   -> Val Text -- ^ 'lfRole'-  -> Val Text -- ^ 'lfRuntime'+  -> Runtime -- ^ 'lfRuntime'   -> LambdaFunction lambdaFunction codearg handlerarg rolearg runtimearg =   LambdaFunction@@ -105,7 +106,7 @@ -- | The runtime environment for the Lambda function that you are uploading. -- For valid values, see the Runtime property in the AWS Lambda Developer -- Guide.-lfRuntime :: Lens' LambdaFunction (Val Text)+lfRuntime :: Lens' LambdaFunction Runtime lfRuntime = lens _lambdaFunctionRuntime (\s a -> s { _lambdaFunctionRuntime = a })  -- | The function execution time (in seconds) after which Lambda terminates
+ library-gen/Stratosphere/Resources/LambdaVersion.hs view
@@ -0,0 +1,63 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::Lambda::Version resource publishes a specified version of an AWS+-- Lambda (Lambda) function. When publishing a new version of your function,+-- Lambda copies the latest version of your function. For more information,+-- see Introduction to AWS Lambda Versioning in the AWS Lambda Developer+-- Guide.++module Stratosphere.Resources.LambdaVersion where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+++-- | Full data type definition for LambdaVersion. See 'lambdaVersion' for a+-- more convenient constructor.+data LambdaVersion =+  LambdaVersion+  { _lambdaVersionCodeSha256 :: Maybe (Val Text)+  , _lambdaVersionDescription :: Maybe (Val Text)+  , _lambdaVersionFunctionName :: Val Text+  } deriving (Show, Generic)++instance ToJSON LambdaVersion where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }++instance FromJSON LambdaVersion where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 14, omitNothingFields = True }++-- | Constructor for 'LambdaVersion' containing required fields as arguments.+lambdaVersion+  :: Val Text -- ^ 'lvFunctionName'+  -> LambdaVersion+lambdaVersion functionNamearg =+  LambdaVersion+  { _lambdaVersionCodeSha256 = Nothing+  , _lambdaVersionDescription = Nothing+  , _lambdaVersionFunctionName = functionNamearg+  }++-- | The SHA-256 hash of the deployment package that you want to publish. This+-- value must match the SHA-256 hash of the $LATEST version of the function.+-- Specify this property to validate that you are publishing the correct+-- package.+lvCodeSha256 :: Lens' LambdaVersion (Maybe (Val Text))+lvCodeSha256 = lens _lambdaVersionCodeSha256 (\s a -> s { _lambdaVersionCodeSha256 = a })++-- | A description of the version you are publishing. If you don't specify a+-- value, Lambda copies the description from the $LATEST version of the+-- function.+lvDescription :: Lens' LambdaVersion (Maybe (Val Text))+lvDescription = lens _lambdaVersionDescription (\s a -> s { _lambdaVersionDescription = a })++-- | The Lambda function for which you want to publish a version. You can+-- specify the function's name or its Amazon Resource Name (ARN).+lvFunctionName :: Lens' LambdaVersion (Val Text)+lvFunctionName = lens _lambdaVersionFunctionName (\s a -> s { _lambdaVersionFunctionName = a })
+ library-gen/Stratosphere/Resources/SNSSubscription.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::SNS::Subscription resource subscribes an endpoint to an Amazon+-- Simple Notification Service (Amazon SNS) topic. The owner of the endpoint+-- must confirm the subscription before Amazon SNS creates the subscription.++module Stratosphere.Resources.SNSSubscription where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.Types++-- | Full data type definition for SNSSubscription. See 'snsSubscription' for+-- a more convenient constructor.+data SNSSubscription =+  SNSSubscription+  { _sNSSubscriptionEndpoint :: Maybe (Val Text)+  , _sNSSubscriptionProtocol :: Maybe SNSProtocol+  , _sNSSubscriptionTopicArn :: Maybe (Val Text)+  } deriving (Show, Generic)++instance ToJSON SNSSubscription where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }++instance FromJSON SNSSubscription where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 16, omitNothingFields = True }++-- | Constructor for 'SNSSubscription' containing required fields as+-- arguments.+snsSubscription+  :: SNSSubscription+snsSubscription  =+  SNSSubscription+  { _sNSSubscriptionEndpoint = Nothing+  , _sNSSubscriptionProtocol = Nothing+  , _sNSSubscriptionTopicArn = Nothing+  }++-- | The endpoint that receives notifications from the Amazon SNS topic. The+-- endpoint value depends on the protocol that you specify. For more+-- information, see the Subscribe Endpoint parameter in the Amazon Simple+-- Notification Service API Reference.+snssEndpoint :: Lens' SNSSubscription (Maybe (Val Text))+snssEndpoint = lens _sNSSubscriptionEndpoint (\s a -> s { _sNSSubscriptionEndpoint = a })++-- | The subscription's protocol. For more information, see the Subscribe+-- Protocol parameter in the Amazon Simple Notification Service API Reference.+snssProtocol :: Lens' SNSSubscription (Maybe SNSProtocol)+snssProtocol = lens _sNSSubscriptionProtocol (\s a -> s { _sNSSubscriptionProtocol = a })++-- | The Amazon Resource Name (ARN) of the topic to subscribe to.+snssTopicArn :: Lens' SNSSubscription (Maybe (Val Text))+snssTopicArn = lens _sNSSubscriptionTopicArn (\s a -> s { _sNSSubscriptionTopicArn = a })
+ library-gen/Stratosphere/Resources/SNSTopic.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::SNS::Topic type creates an Amazon Simple Notification Service+-- (Amazon SNS) topic.++module Stratosphere.Resources.SNSTopic where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.ResourceProperties.SNSTopicSubscription++-- | Full data type definition for SNSTopic. See 'snsTopic' for a more+-- convenient constructor.+data SNSTopic =+  SNSTopic+  { _sNSTopicDisplayName :: Maybe (Val Text)+  , _sNSTopicSubscription :: Maybe [SNSTopicSubscription]+  , _sNSTopicTopicName :: Maybe (Val Text)+  } deriving (Show, Generic)++instance ToJSON SNSTopic where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }++instance FromJSON SNSTopic where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }++-- | Constructor for 'SNSTopic' containing required fields as arguments.+snsTopic+  :: SNSTopic+snsTopic  =+  SNSTopic+  { _sNSTopicDisplayName = Nothing+  , _sNSTopicSubscription = Nothing+  , _sNSTopicTopicName = Nothing+  }++-- | A developer-defined string that can be used to identify this SNS topic.+snstDisplayName :: Lens' SNSTopic (Maybe (Val Text))+snstDisplayName = lens _sNSTopicDisplayName (\s a -> s { _sNSTopicDisplayName = a })++-- | The SNS subscriptions (endpoints) for this topic.+snstSubscription :: Lens' SNSTopic (Maybe [SNSTopicSubscription])+snstSubscription = lens _sNSTopicSubscription (\s a -> s { _sNSTopicSubscription = a })++-- | A name for the topic. If you don't specify a name, AWS CloudFormation+-- generates a unique physical ID and uses that ID for the topic name. For+-- more information, see Name Type. Important If you specify a name, you+-- cannot do updates that require this resource to be replaced. You can still+-- do updates that require no or some interruption. If you must replace the+-- resource, specify a new name.+snstTopicName :: Lens' SNSTopic (Maybe (Val Text))+snstTopicName = lens _sNSTopicTopicName (\s a -> s { _sNSTopicTopicName = a })
+ library-gen/Stratosphere/Resources/SNSTopicPolicy.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::SNS::TopicPolicy resource associates Amazon SNS topics with a+-- policy.++module Stratosphere.Resources.SNSTopicPolicy where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+++-- | Full data type definition for SNSTopicPolicy. See 'snsTopicPolicy' for a+-- more convenient constructor.+data SNSTopicPolicy =+  SNSTopicPolicy+  { _sNSTopicPolicyPolicyDocument :: Object+  , _sNSTopicPolicyTopics :: [String]+  } deriving (Show, Generic)++instance ToJSON SNSTopicPolicy where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }++instance FromJSON SNSTopicPolicy where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }++-- | Constructor for 'SNSTopicPolicy' containing required fields as arguments.+snsTopicPolicy+  :: Object -- ^ 'snstpPolicyDocument'+  -> [String] -- ^ 'snstpTopics'+  -> SNSTopicPolicy+snsTopicPolicy policyDocumentarg topicsarg =+  SNSTopicPolicy+  { _sNSTopicPolicyPolicyDocument = policyDocumentarg+  , _sNSTopicPolicyTopics = topicsarg+  }++-- | A policy document that contains permissions to add to the specified SNS+-- topics.+snstpPolicyDocument :: Lens' SNSTopicPolicy Object+snstpPolicyDocument = lens _sNSTopicPolicyPolicyDocument (\s a -> s { _sNSTopicPolicyPolicyDocument = a })++-- | The Amazon Resource Names (ARN) of the topics to which you want to add+-- the policy. You can use the Ref function to specify an AWS::SNS::Topic+-- resource.+snstpTopics :: Lens' SNSTopicPolicy [String]+snstpTopics = lens _sNSTopicPolicyTopics (\s a -> s { _sNSTopicPolicyTopics = a })
+ library-gen/Stratosphere/Resources/SQSQueue.hs view
@@ -0,0 +1,101 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::SQS::Queue type creates an Amazon SQS queue.++module Stratosphere.Resources.SQSQueue where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+import Stratosphere.ResourceProperties.SQSRedrivePolicy++-- | Full data type definition for SQSQueue. See 'sqsQueue' for a more+-- convenient constructor.+data SQSQueue =+  SQSQueue+  { _sQSQueueDelaySeconds :: Maybe (Val Integer')+  , _sQSQueueMaximumMessageSize :: Maybe (Val Integer')+  , _sQSQueueMessageRetentionPeriod :: Maybe (Val Integer')+  , _sQSQueueQueueName :: Maybe (Val Text)+  , _sQSQueueReceiveMessageWaitTimeSeconds :: Maybe (Val Integer')+  , _sQSQueueRedrivePolicy :: Maybe SQSRedrivePolicy+  , _sQSQueueVisibilityTimeout :: Maybe (Val Integer')+  } deriving (Show, Generic)++instance ToJSON SQSQueue where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }++instance FromJSON SQSQueue where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 9, omitNothingFields = True }++-- | Constructor for 'SQSQueue' containing required fields as arguments.+sqsQueue+  :: SQSQueue+sqsQueue  =+  SQSQueue+  { _sQSQueueDelaySeconds = Nothing+  , _sQSQueueMaximumMessageSize = Nothing+  , _sQSQueueMessageRetentionPeriod = Nothing+  , _sQSQueueQueueName = Nothing+  , _sQSQueueReceiveMessageWaitTimeSeconds = Nothing+  , _sQSQueueRedrivePolicy = Nothing+  , _sQSQueueVisibilityTimeout = Nothing+  }++-- | The time in seconds that the delivery of all messages in the queue will+-- be delayed. You can specify an integer value of 0 to 900 (15 minutes). The+-- default value is 0.+sqsqDelaySeconds :: Lens' SQSQueue (Maybe (Val Integer'))+sqsqDelaySeconds = lens _sQSQueueDelaySeconds (\s a -> s { _sQSQueueDelaySeconds = a })++-- | The limit of how many bytes a message can contain before Amazon SQS+-- rejects it. You can specify an integer value from 1024 bytes (1 KiB) to+-- 262144 bytes (256 KiB). The default value is 262144 (256 KiB).+sqsqMaximumMessageSize :: Lens' SQSQueue (Maybe (Val Integer'))+sqsqMaximumMessageSize = lens _sQSQueueMaximumMessageSize (\s a -> s { _sQSQueueMaximumMessageSize = a })++-- | The number of seconds Amazon SQS retains a message. You can specify an+-- integer value from 60 seconds (1 minute) to 1209600 seconds (14 days). The+-- default value is 345600 seconds (4 days).+sqsqMessageRetentionPeriod :: Lens' SQSQueue (Maybe (Val Integer'))+sqsqMessageRetentionPeriod = lens _sQSQueueMessageRetentionPeriod (\s a -> s { _sQSQueueMessageRetentionPeriod = a })++-- | A name for the queue. If you don't specify a name, AWS CloudFormation+-- generates a unique physical ID and uses that ID for the queue name. For+-- more information, see Name Type. Important If you specify a name, you+-- cannot do updates that require this resource to be replaced. You can still+-- do updates that require no or some interruption. If you must replace the+-- resource, specify a new name.+sqsqQueueName :: Lens' SQSQueue (Maybe (Val Text))+sqsqQueueName = lens _sQSQueueQueueName (\s a -> s { _sQSQueueQueueName = a })++-- | Specifies the duration, in seconds, that the ReceiveMessage action call+-- waits until a message is in the queue in order to include it in the+-- response, as opposed to returning an empty response if a message is not yet+-- available. You can specify an integer from 1 to 20. The short polling is+-- used as the default or when you specify 0 for this property. For more+-- information, see Amazon SQS Long Poll.+sqsqReceiveMessageWaitTimeSeconds :: Lens' SQSQueue (Maybe (Val Integer'))+sqsqReceiveMessageWaitTimeSeconds = lens _sQSQueueReceiveMessageWaitTimeSeconds (\s a -> s { _sQSQueueReceiveMessageWaitTimeSeconds = a })++-- | Specifies an existing dead letter queue to receive messages after the+-- source queue (this queue) fails to process a message a specified number of+-- times.+sqsqRedrivePolicy :: Lens' SQSQueue (Maybe SQSRedrivePolicy)+sqsqRedrivePolicy = lens _sQSQueueRedrivePolicy (\s a -> s { _sQSQueueRedrivePolicy = a })++-- | The length of time during which a message will be unavailable once a+-- message is delivered from the queue. This blocks other components from+-- receiving the same message and gives the initial component time to process+-- and delete the message from the queue. Values must be from 0 to 43200+-- seconds (12 hours). If no value is specified, the default value of 30+-- seconds will be used. For more information about SQS Queue visibility+-- timeouts, see Visibility Timeout in the Amazon Simple Queue Service+-- Developer Guide.+sqsqVisibilityTimeout :: Lens' SQSQueue (Maybe (Val Integer'))+sqsqVisibilityTimeout = lens _sQSQueueVisibilityTimeout (\s a -> s { _sQSQueueVisibilityTimeout = a })
+ library-gen/Stratosphere/Resources/SQSQueuePolicy.hs view
@@ -0,0 +1,51 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++-- | The AWS::SQS::QueuePolicy type applies a policy to SQS queues.+-- AWS::SQS::QueuePolicy Snippet: Declaring an Amazon SQS Policy++module Stratosphere.Resources.SQSQueuePolicy where++import Control.Lens+import Data.Aeson+import Data.Aeson.Types+import Data.Text+import GHC.Generics++import Stratosphere.Values+++-- | Full data type definition for SQSQueuePolicy. See 'sqsQueuePolicy' for a+-- more convenient constructor.+data SQSQueuePolicy =+  SQSQueuePolicy+  { _sQSQueuePolicyPolicyDocument :: Object+  , _sQSQueuePolicyQueues :: [Val Text]+  } deriving (Show, Generic)++instance ToJSON SQSQueuePolicy where+  toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }++instance FromJSON SQSQueuePolicy where+  parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 15, omitNothingFields = True }++-- | Constructor for 'SQSQueuePolicy' containing required fields as arguments.+sqsQueuePolicy+  :: Object -- ^ 'sqsqpPolicyDocument'+  -> [Val Text] -- ^ 'sqsqpQueues'+  -> SQSQueuePolicy+sqsQueuePolicy policyDocumentarg queuesarg =+  SQSQueuePolicy+  { _sQSQueuePolicyPolicyDocument = policyDocumentarg+  , _sQSQueuePolicyQueues = queuesarg+  }++-- | A policy document containing permissions to add to the specified SQS+-- queues.+sqsqpPolicyDocument :: Lens' SQSQueuePolicy Object+sqsqpPolicyDocument = lens _sQSQueuePolicyPolicyDocument (\s a -> s { _sQSQueuePolicyPolicyDocument = a })++-- | The URLs of the queues to which you want to add the policy. You can use+-- the Ref function to specify an AWS::SQS::Queue resource.+sqsqpQueues :: Lens' SQSQueuePolicy [Val Text]+sqsqpQueues = lens _sQSQueuePolicyQueues (\s a -> s { _sQSQueuePolicyQueues = a })
library/Stratosphere.hs view
@@ -22,6 +22,7 @@        , module Stratosphere.Template        , module Stratosphere.Values        , module Stratosphere.Types+       , module Stratosphere.Check        , module Control.Lens        ) where @@ -32,6 +33,7 @@ import Stratosphere.Template import Stratosphere.Values import Stratosphere.Types+import Stratosphere.Check  {-# ANN module "HLint: ignore Use import/export shortcut" #-} 
+ library/Stratosphere/Check.hs view
@@ -0,0 +1,34 @@+-- | `Stratosphere.Check` exports functions to catch errors+-- that would be too expensive or unwieldy to encode in types.+--+-- Stability: Experimental++module Stratosphere.Check+     ( duplicateProperties+     ) where++import Data.Hashable (Hashable)+import qualified Data.HashMap.Strict as HM+import qualified Data.Text as T++import Stratosphere.Resources (resourceResName, unResources)+import Stratosphere.Template (Template, templateResources)++data DuplicateProperty = DuplicateProperty T.Text deriving Show++duplicateProperties :: Template -> [DuplicateProperty]+duplicateProperties =+    map DuplicateProperty+  . duplicates+  . map resourceResName+  . unResources+  . templateResources++duplicates :: (Foldable f, Eq a, Hashable a) => f a -> [a]+duplicates =+  HM.keys . HM.filter (> one) . foldr (insertByAdding one) HM.empty+  where one :: Int+        one = 1++insertByAdding :: (Eq k, Hashable k, Num v) => v -> k -> HM.HashMap k v -> HM.HashMap k v+insertByAdding = flip $ HM.insertWith (+)
library/Stratosphere/Types.hs view
@@ -5,7 +5,20 @@ -- | Module for hand-written types that are used in generated modules.  module Stratosphere.Types-  ( CannedACL (..)+  ( EnabledState (..)+  , AuthorizationType (..)+  , HttpMethod (..)+  , LoggingLevel (..)+  , ApiBackendType (..)+  , Period (..)+  , AttributeType (..)+  , KeyType (..)+  , ProjectionType (..)+  , StreamViewType (..)+  , SNSProtocol (..)+  , Runtime (..)+  , PassthroughBehavior (..)+  , CannedACL (..)   , KinesisFirehoseS3CompressionFormat(..)   , KinesisFirehoseElasticsearchS3BackupMode(..)   , KinesisFirehoseNoEncryptionConfig(..)@@ -15,6 +28,153 @@ import Data.Text (unpack) import GHC.Generics ++data EnabledState+  = ENABLED+  | DISABLED+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data AuthorizationType+  = NONE+  | AWS_IAM+  | CUSTOM+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data HttpMethod+  = GET+  | POST+  | PUT+  | HEAD+  | DELETE+  | OPTIONS+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data LoggingLevel+  = OFF+  | ERROR+  | INFO+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data ApiBackendType+  = HTTP+  | AWS+  | MOCK+  | HTTP_PROXY+  | AWS_PROXY+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data Period+  = DAY+  | WEEK+  | MONTH+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data AttributeType+  = S+  | N+  | B+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data KeyType+  = HASH+  | RANGE+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)+++data ProjectionType+  = ProjectKeysOnly+  | ProjectIncluded+  | ProjectAll+  deriving (Show, Read, Eq, Generic)++instance FromJSON ProjectionType where+  parseJSON = withText "ProjectionType" parse+    where+      parse "KEYS_ONLY"     = pure ProjectKeysOnly+      parse "INCLUDE"       = pure ProjectIncluded+      parse "ALL"           = pure ProjectAll+      parse projectionType  = fail ("Unexpected projection type " ++ unpack projectionType)++instance ToJSON ProjectionType where+  toJSON ProjectKeysOnly = String "KEYS_ONLY"+  toJSON ProjectIncluded = String "INCLUDE"+  toJSON ProjectAll      = String "ALL"+++data StreamViewType+  = KEYS_ONLY+  | NEW_IMAGE+  | OLD_IMAGE+  | NEW_AND_OLD_IMAGES+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)++data SNSProtocol+  = SnsHttp+  | SnsHttps+  | SnsEmail+  | SnsEmailJson+  | SnsSms+  | SnsSqs+  | SnsApplication+  | SnsLambda+  deriving (Show, Read, Eq, Generic)+++instance FromJSON SNSProtocol where+  parseJSON = withText "SNSProtocol" parse+    where+      parse "http"        = pure SnsHttp+      parse "https"       = pure SnsHttps+      parse "email"       = pure SnsEmail+      parse "email-json"  = pure SnsEmailJson+      parse "sms"         = pure SnsSms+      parse "sqs"         = pure SnsSqs+      parse "application" = pure SnsApplication+      parse "lambda"      = pure SnsLambda+      parse protocol = fail ("Unexpected SNS protocol " ++ unpack protocol)++instance ToJSON SNSProtocol where+  toJSON SnsHttp        = String "http"+  toJSON SnsHttps       = String "https"+  toJSON SnsEmail       = String "email"+  toJSON SnsEmailJson   = String "email-json"+  toJSON SnsSms         = String "sms"+  toJSON SnsSqs         = String "sqs"+  toJSON SnsApplication = String "application"+  toJSON SnsLambda      = String "lambda"+++data Runtime+  = NodeJS+  | NodeJS43+  | Java8+  | Python27+  deriving (Show, Read, Eq, Generic)++instance FromJSON Runtime where+  parseJSON = withText "Runtime" parse+    where+      parse "nodejs"    = pure NodeJS+      parse "nodejs4.3" = pure NodeJS43+      parse "java8"     = pure Java8+      parse "python2.7" = pure Python27+      parse runtime     = fail ("Unexpected Runtime " ++ unpack runtime)++instance ToJSON Runtime where+  toJSON NodeJS   = String "nodejs"+  toJSON NodeJS43 = String "nodejs4.3"+  toJSON Java8    = String "java8"+  toJSON Python27 = String "python2.7"+++-- | See:+-- https://docs.aws.amazon.com/apigateway/api-reference/link-relation/integration-put/#passthroughBehavior+data PassthroughBehavior+  = WHEN_NO_MATCH+  | WHEN_NO_TEMPLATES+  | NEVER+  deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)+ -- | Amazon S3 supports a set of predefined grants, known as canned ACLs. Each -- canned ACL has a predefined a set of grantees and permissions. The following -- table lists the set of canned ACLs and the associated predefined grants.@@ -30,7 +190,6 @@   | PublicRead   | PublicReadWrite   deriving (Show, Read, Eq, Generic, FromJSON, ToJSON)-  -- | See: -- http://docs.aws.amazon.com/firehose/latest/APIReference/API_S3DestinationConfiguration.html
stratosphere.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           stratosphere-version:        0.2.0+version:        0.2.1 synopsis:       EDSL for AWS CloudFormation description:    EDSL for AWS CloudFormation category:       AWS, Cloud@@ -40,12 +40,14 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1     , unordered-containers >= 0.2   exposed-modules:       Stratosphere+      Stratosphere.Check       Stratosphere.Helpers       Stratosphere.Outputs       Stratosphere.Parameters@@ -78,6 +80,13 @@       Stratosphere.ResourceProperties.AutoScalingTags       Stratosphere.ResourceProperties.ConnectionDrainingPolicy       Stratosphere.ResourceProperties.ConnectionSettings+      Stratosphere.ResourceProperties.DynamoDBAttributeDefinition+      Stratosphere.ResourceProperties.DynamoDBGlobalSecondaryIndex+      Stratosphere.ResourceProperties.DynamoDBKeySchema+      Stratosphere.ResourceProperties.DynamoDBLocalSecondaryIndex+      Stratosphere.ResourceProperties.DynamoDBProjectionObject+      Stratosphere.ResourceProperties.DynamoDBProvisionedThroughput+      Stratosphere.ResourceProperties.DynamoDBStreamSpecification       Stratosphere.ResourceProperties.EBSBlockDevice       Stratosphere.ResourceProperties.EC2BlockDeviceMapping       Stratosphere.ResourceProperties.EC2MountPoint@@ -130,6 +139,8 @@       Stratosphere.ResourceProperties.S3WebsiteRoutingRules       Stratosphere.ResourceProperties.SecurityGroupEgressRule       Stratosphere.ResourceProperties.SecurityGroupIngressRule+      Stratosphere.ResourceProperties.SNSTopicSubscription+      Stratosphere.ResourceProperties.SQSRedrivePolicy       Stratosphere.ResourceProperties.StepAdjustments       Stratosphere.ResourceProperties.UserLoginProfile       Stratosphere.Resources@@ -152,16 +163,20 @@       Stratosphere.Resources.DBSecurityGroupIngress       Stratosphere.Resources.DBSubnetGroup       Stratosphere.Resources.DeliveryStream+      Stratosphere.Resources.DynamoDBTable       Stratosphere.Resources.EC2Instance       Stratosphere.Resources.EIP       Stratosphere.Resources.EIPAssociation+      Stratosphere.Resources.EventsRule       Stratosphere.Resources.Group       Stratosphere.Resources.IAMRole       Stratosphere.Resources.InstanceProfile       Stratosphere.Resources.InternetGateway       Stratosphere.Resources.KinesisStream+      Stratosphere.Resources.LambdaAlias       Stratosphere.Resources.LambdaFunction       Stratosphere.Resources.LambdaPermission+      Stratosphere.Resources.LambdaVersion       Stratosphere.Resources.LaunchConfiguration       Stratosphere.Resources.LifecycleHook       Stratosphere.Resources.LoadBalancer@@ -180,6 +195,11 @@       Stratosphere.Resources.SecurityGroup       Stratosphere.Resources.SecurityGroupEgress       Stratosphere.Resources.SecurityGroupIngress+      Stratosphere.Resources.SNSSubscription+      Stratosphere.Resources.SNSTopic+      Stratosphere.Resources.SNSTopicPolicy+      Stratosphere.Resources.SQSQueue+      Stratosphere.Resources.SQSQueuePolicy       Stratosphere.Resources.Stack       Stratosphere.Resources.Subnet       Stratosphere.Resources.SubnetRouteTableAssociation@@ -193,8 +213,8 @@       Stratosphere.Resources.VPCGatewayAttachment   default-language: Haskell2010 -executable api-gateway-lambda-  main-is: api-gateway-lambda.hs+executable apigw-lambda-dynamodb+  main-is: apigw-lambda-dynamodb.hs   hs-source-dirs:       examples   ghc-options: -Wall@@ -203,6 +223,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -212,6 +233,26 @@     buildable: False   default-language: Haskell2010 +executable apigw-lambda-s3+  main-is: apigw-lambda-s3.hs+  hs-source-dirs:+      examples+  ghc-options: -Wall+  build-depends:+      base >= 4.8 && < 5+    , aeson >= 0.11+    , aeson-pretty >= 0.8+    , bytestring+    , hashable+    , lens >= 4.5+    , template-haskell >= 2.0+    , text >= 1.1+    , unordered-containers >= 0.2+    , stratosphere+  if flag(library-only)+    buildable: False+  default-language: Haskell2010+ executable auto-scaling-group   main-is: auto-scaling-group.hs   hs-source-dirs:@@ -222,6 +263,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -241,6 +283,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -260,6 +303,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -279,6 +323,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -298,6 +343,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -317,6 +363,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1@@ -338,6 +385,7 @@     , aeson >= 0.11     , aeson-pretty >= 0.8     , bytestring+    , hashable     , lens >= 4.5     , template-haskell >= 2.0     , text >= 1.1