packages feed

stratosphere-0.28.1: library-gen/Stratosphere/Resources/EC2TransitGateway.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html

module Stratosphere.Resources.EC2TransitGateway where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.Tag

-- | Full data type definition for EC2TransitGateway. See 'ec2TransitGateway'
-- for a more convenient constructor.
data EC2TransitGateway =
  EC2TransitGateway
  { _eC2TransitGatewayAmazonSideAsn :: Maybe (Val Integer)
  , _eC2TransitGatewayAutoAcceptSharedAttachments :: Maybe (Val Text)
  , _eC2TransitGatewayDefaultRouteTableAssociation :: Maybe (Val Text)
  , _eC2TransitGatewayDefaultRouteTablePropagation :: Maybe (Val Text)
  , _eC2TransitGatewayDescription :: Maybe (Val Text)
  , _eC2TransitGatewayDnsSupport :: Maybe (Val Text)
  , _eC2TransitGatewayTags :: Maybe [Tag]
  , _eC2TransitGatewayVpnEcmpSupport :: Maybe (Val Text)
  } deriving (Show, Eq)

instance ToJSON EC2TransitGateway where
  toJSON EC2TransitGateway{..} =
    object $
    catMaybes
    [ fmap (("AmazonSideAsn",) . toJSON . fmap Integer') _eC2TransitGatewayAmazonSideAsn
    , fmap (("AutoAcceptSharedAttachments",) . toJSON) _eC2TransitGatewayAutoAcceptSharedAttachments
    , fmap (("DefaultRouteTableAssociation",) . toJSON) _eC2TransitGatewayDefaultRouteTableAssociation
    , fmap (("DefaultRouteTablePropagation",) . toJSON) _eC2TransitGatewayDefaultRouteTablePropagation
    , fmap (("Description",) . toJSON) _eC2TransitGatewayDescription
    , fmap (("DnsSupport",) . toJSON) _eC2TransitGatewayDnsSupport
    , fmap (("Tags",) . toJSON) _eC2TransitGatewayTags
    , fmap (("VpnEcmpSupport",) . toJSON) _eC2TransitGatewayVpnEcmpSupport
    ]

instance FromJSON EC2TransitGateway where
  parseJSON (Object obj) =
    EC2TransitGateway <$>
      fmap (fmap (fmap unInteger')) (obj .:? "AmazonSideAsn") <*>
      (obj .:? "AutoAcceptSharedAttachments") <*>
      (obj .:? "DefaultRouteTableAssociation") <*>
      (obj .:? "DefaultRouteTablePropagation") <*>
      (obj .:? "Description") <*>
      (obj .:? "DnsSupport") <*>
      (obj .:? "Tags") <*>
      (obj .:? "VpnEcmpSupport")
  parseJSON _ = mempty

-- | Constructor for 'EC2TransitGateway' containing required fields as
-- arguments.
ec2TransitGateway
  :: EC2TransitGateway
ec2TransitGateway  =
  EC2TransitGateway
  { _eC2TransitGatewayAmazonSideAsn = Nothing
  , _eC2TransitGatewayAutoAcceptSharedAttachments = Nothing
  , _eC2TransitGatewayDefaultRouteTableAssociation = Nothing
  , _eC2TransitGatewayDefaultRouteTablePropagation = Nothing
  , _eC2TransitGatewayDescription = Nothing
  , _eC2TransitGatewayDnsSupport = Nothing
  , _eC2TransitGatewayTags = Nothing
  , _eC2TransitGatewayVpnEcmpSupport = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-amazonsideasn
ectgAmazonSideAsn :: Lens' EC2TransitGateway (Maybe (Val Integer))
ectgAmazonSideAsn = lens _eC2TransitGatewayAmazonSideAsn (\s a -> s { _eC2TransitGatewayAmazonSideAsn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-autoacceptsharedattachments
ectgAutoAcceptSharedAttachments :: Lens' EC2TransitGateway (Maybe (Val Text))
ectgAutoAcceptSharedAttachments = lens _eC2TransitGatewayAutoAcceptSharedAttachments (\s a -> s { _eC2TransitGatewayAutoAcceptSharedAttachments = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-defaultroutetableassociation
ectgDefaultRouteTableAssociation :: Lens' EC2TransitGateway (Maybe (Val Text))
ectgDefaultRouteTableAssociation = lens _eC2TransitGatewayDefaultRouteTableAssociation (\s a -> s { _eC2TransitGatewayDefaultRouteTableAssociation = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-defaultroutetablepropagation
ectgDefaultRouteTablePropagation :: Lens' EC2TransitGateway (Maybe (Val Text))
ectgDefaultRouteTablePropagation = lens _eC2TransitGatewayDefaultRouteTablePropagation (\s a -> s { _eC2TransitGatewayDefaultRouteTablePropagation = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-description
ectgDescription :: Lens' EC2TransitGateway (Maybe (Val Text))
ectgDescription = lens _eC2TransitGatewayDescription (\s a -> s { _eC2TransitGatewayDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-dnssupport
ectgDnsSupport :: Lens' EC2TransitGateway (Maybe (Val Text))
ectgDnsSupport = lens _eC2TransitGatewayDnsSupport (\s a -> s { _eC2TransitGatewayDnsSupport = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-tags
ectgTags :: Lens' EC2TransitGateway (Maybe [Tag])
ectgTags = lens _eC2TransitGatewayTags (\s a -> s { _eC2TransitGatewayTags = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-vpnecmpsupport
ectgVpnEcmpSupport :: Lens' EC2TransitGateway (Maybe (Val Text))
ectgVpnEcmpSupport = lens _eC2TransitGatewayVpnEcmpSupport (\s a -> s { _eC2TransitGatewayVpnEcmpSupport = a })