packages feed

stratosphere-0.15.2: library-gen/Stratosphere/ResourceProperties/ECSServiceAwsVpcConfiguration.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html

module Stratosphere.ResourceProperties.ECSServiceAwsVpcConfiguration where

import Stratosphere.ResourceImports


-- | Full data type definition for ECSServiceAwsVpcConfiguration. See
-- 'ecsServiceAwsVpcConfiguration' for a more convenient constructor.
data ECSServiceAwsVpcConfiguration =
  ECSServiceAwsVpcConfiguration
  { _eCSServiceAwsVpcConfigurationAssignPublicIp :: Maybe (Val Text)
  , _eCSServiceAwsVpcConfigurationSecurityGroups :: Maybe (ValList Text)
  , _eCSServiceAwsVpcConfigurationSubnets :: ValList Text
  } deriving (Show, Eq)

instance ToJSON ECSServiceAwsVpcConfiguration where
  toJSON ECSServiceAwsVpcConfiguration{..} =
    object $
    catMaybes
    [ fmap (("AssignPublicIp",) . toJSON) _eCSServiceAwsVpcConfigurationAssignPublicIp
    , fmap (("SecurityGroups",) . toJSON) _eCSServiceAwsVpcConfigurationSecurityGroups
    , (Just . ("Subnets",) . toJSON) _eCSServiceAwsVpcConfigurationSubnets
    ]

instance FromJSON ECSServiceAwsVpcConfiguration where
  parseJSON (Object obj) =
    ECSServiceAwsVpcConfiguration <$>
      (obj .:? "AssignPublicIp") <*>
      (obj .:? "SecurityGroups") <*>
      (obj .: "Subnets")
  parseJSON _ = mempty

-- | Constructor for 'ECSServiceAwsVpcConfiguration' containing required
-- fields as arguments.
ecsServiceAwsVpcConfiguration
  :: ValList Text -- ^ 'ecssavcSubnets'
  -> ECSServiceAwsVpcConfiguration
ecsServiceAwsVpcConfiguration subnetsarg =
  ECSServiceAwsVpcConfiguration
  { _eCSServiceAwsVpcConfigurationAssignPublicIp = Nothing
  , _eCSServiceAwsVpcConfigurationSecurityGroups = Nothing
  , _eCSServiceAwsVpcConfigurationSubnets = subnetsarg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-assignpublicip
ecssavcAssignPublicIp :: Lens' ECSServiceAwsVpcConfiguration (Maybe (Val Text))
ecssavcAssignPublicIp = lens _eCSServiceAwsVpcConfigurationAssignPublicIp (\s a -> s { _eCSServiceAwsVpcConfigurationAssignPublicIp = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-securitygroups
ecssavcSecurityGroups :: Lens' ECSServiceAwsVpcConfiguration (Maybe (ValList Text))
ecssavcSecurityGroups = lens _eCSServiceAwsVpcConfigurationSecurityGroups (\s a -> s { _eCSServiceAwsVpcConfigurationSecurityGroups = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-subnets
ecssavcSubnets :: Lens' ECSServiceAwsVpcConfiguration (ValList Text)
ecssavcSubnets = lens _eCSServiceAwsVpcConfigurationSubnets (\s a -> s { _eCSServiceAwsVpcConfigurationSubnets = a })