{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html module Stratosphere.Resources.EC2NetworkAclEntry where import Control.Lens hiding ((.=)) import Data.Aeson import Data.Maybe (catMaybes) import Data.Monoid (mempty) import Data.Text import Stratosphere.Values import Stratosphere.ResourceProperties.EC2NetworkAclEntryIcmp import Stratosphere.ResourceProperties.EC2NetworkAclEntryPortRange -- | Full data type definition for EC2NetworkAclEntry. See -- 'ec2NetworkAclEntry' for a more convenient constructor. data EC2NetworkAclEntry = EC2NetworkAclEntry { _eC2NetworkAclEntryCidrBlock :: Val Text , _eC2NetworkAclEntryEgress :: Maybe (Val Bool') , _eC2NetworkAclEntryIcmp :: Maybe EC2NetworkAclEntryIcmp , _eC2NetworkAclEntryIpv6CidrBlock :: Maybe (Val Text) , _eC2NetworkAclEntryNetworkAclId :: Val Text , _eC2NetworkAclEntryPortRange :: Maybe EC2NetworkAclEntryPortRange , _eC2NetworkAclEntryProtocol :: Val Integer' , _eC2NetworkAclEntryRuleAction :: Val Text , _eC2NetworkAclEntryRuleNumber :: Val Integer' } deriving (Show, Eq) instance ToJSON EC2NetworkAclEntry where toJSON EC2NetworkAclEntry{..} = object $ catMaybes [ Just ("CidrBlock" .= _eC2NetworkAclEntryCidrBlock) , ("Egress" .=) <$> _eC2NetworkAclEntryEgress , ("Icmp" .=) <$> _eC2NetworkAclEntryIcmp , ("Ipv6CidrBlock" .=) <$> _eC2NetworkAclEntryIpv6CidrBlock , Just ("NetworkAclId" .= _eC2NetworkAclEntryNetworkAclId) , ("PortRange" .=) <$> _eC2NetworkAclEntryPortRange , Just ("Protocol" .= _eC2NetworkAclEntryProtocol) , Just ("RuleAction" .= _eC2NetworkAclEntryRuleAction) , Just ("RuleNumber" .= _eC2NetworkAclEntryRuleNumber) ] instance FromJSON EC2NetworkAclEntry where parseJSON (Object obj) = EC2NetworkAclEntry <$> obj .: "CidrBlock" <*> obj .:? "Egress" <*> obj .:? "Icmp" <*> obj .:? "Ipv6CidrBlock" <*> obj .: "NetworkAclId" <*> obj .:? "PortRange" <*> obj .: "Protocol" <*> obj .: "RuleAction" <*> obj .: "RuleNumber" parseJSON _ = mempty -- | Constructor for 'EC2NetworkAclEntry' containing required fields as -- arguments. ec2NetworkAclEntry :: Val Text -- ^ 'ecnaeCidrBlock' -> Val Text -- ^ 'ecnaeNetworkAclId' -> Val Integer' -- ^ 'ecnaeProtocol' -> Val Text -- ^ 'ecnaeRuleAction' -> Val Integer' -- ^ 'ecnaeRuleNumber' -> EC2NetworkAclEntry ec2NetworkAclEntry cidrBlockarg networkAclIdarg protocolarg ruleActionarg ruleNumberarg = EC2NetworkAclEntry { _eC2NetworkAclEntryCidrBlock = cidrBlockarg , _eC2NetworkAclEntryEgress = Nothing , _eC2NetworkAclEntryIcmp = Nothing , _eC2NetworkAclEntryIpv6CidrBlock = Nothing , _eC2NetworkAclEntryNetworkAclId = networkAclIdarg , _eC2NetworkAclEntryPortRange = Nothing , _eC2NetworkAclEntryProtocol = protocolarg , _eC2NetworkAclEntryRuleAction = ruleActionarg , _eC2NetworkAclEntryRuleNumber = ruleNumberarg } -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-cidrblock ecnaeCidrBlock :: Lens' EC2NetworkAclEntry (Val Text) ecnaeCidrBlock = lens _eC2NetworkAclEntryCidrBlock (\s a -> s { _eC2NetworkAclEntryCidrBlock = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-egress ecnaeEgress :: Lens' EC2NetworkAclEntry (Maybe (Val Bool')) ecnaeEgress = lens _eC2NetworkAclEntryEgress (\s a -> s { _eC2NetworkAclEntryEgress = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-icmp ecnaeIcmp :: Lens' EC2NetworkAclEntry (Maybe EC2NetworkAclEntryIcmp) ecnaeIcmp = lens _eC2NetworkAclEntryIcmp (\s a -> s { _eC2NetworkAclEntryIcmp = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-ipv6cidrblock ecnaeIpv6CidrBlock :: Lens' EC2NetworkAclEntry (Maybe (Val Text)) ecnaeIpv6CidrBlock = lens _eC2NetworkAclEntryIpv6CidrBlock (\s a -> s { _eC2NetworkAclEntryIpv6CidrBlock = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-networkaclid ecnaeNetworkAclId :: Lens' EC2NetworkAclEntry (Val Text) ecnaeNetworkAclId = lens _eC2NetworkAclEntryNetworkAclId (\s a -> s { _eC2NetworkAclEntryNetworkAclId = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-portrange ecnaePortRange :: Lens' EC2NetworkAclEntry (Maybe EC2NetworkAclEntryPortRange) ecnaePortRange = lens _eC2NetworkAclEntryPortRange (\s a -> s { _eC2NetworkAclEntryPortRange = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-protocol ecnaeProtocol :: Lens' EC2NetworkAclEntry (Val Integer') ecnaeProtocol = lens _eC2NetworkAclEntryProtocol (\s a -> s { _eC2NetworkAclEntryProtocol = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-ruleaction ecnaeRuleAction :: Lens' EC2NetworkAclEntry (Val Text) ecnaeRuleAction = lens _eC2NetworkAclEntryRuleAction (\s a -> s { _eC2NetworkAclEntryRuleAction = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-acl-entry.html#cfn-ec2-networkaclentry-rulenumber ecnaeRuleNumber :: Lens' EC2NetworkAclEntry (Val Integer') ecnaeRuleNumber = lens _eC2NetworkAclEntryRuleNumber (\s a -> s { _eC2NetworkAclEntryRuleNumber = a })