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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-portmapping.html

module Stratosphere.ResourceProperties.AppMeshVirtualRouterPortMapping where

import Stratosphere.ResourceImports


-- | Full data type definition for AppMeshVirtualRouterPortMapping. See
-- 'appMeshVirtualRouterPortMapping' for a more convenient constructor.
data AppMeshVirtualRouterPortMapping =
  AppMeshVirtualRouterPortMapping
  { _appMeshVirtualRouterPortMappingPort :: Val Integer
  , _appMeshVirtualRouterPortMappingProtocol :: Val Text
  } deriving (Show, Eq)

instance ToJSON AppMeshVirtualRouterPortMapping where
  toJSON AppMeshVirtualRouterPortMapping{..} =
    object $
    catMaybes
    [ (Just . ("Port",) . toJSON) _appMeshVirtualRouterPortMappingPort
    , (Just . ("Protocol",) . toJSON) _appMeshVirtualRouterPortMappingProtocol
    ]

-- | Constructor for 'AppMeshVirtualRouterPortMapping' containing required
-- fields as arguments.
appMeshVirtualRouterPortMapping
  :: Val Integer -- ^ 'amvrpmPort'
  -> Val Text -- ^ 'amvrpmProtocol'
  -> AppMeshVirtualRouterPortMapping
appMeshVirtualRouterPortMapping portarg protocolarg =
  AppMeshVirtualRouterPortMapping
  { _appMeshVirtualRouterPortMappingPort = portarg
  , _appMeshVirtualRouterPortMappingProtocol = protocolarg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-portmapping.html#cfn-appmesh-virtualrouter-portmapping-port
amvrpmPort :: Lens' AppMeshVirtualRouterPortMapping (Val Integer)
amvrpmPort = lens _appMeshVirtualRouterPortMappingPort (\s a -> s { _appMeshVirtualRouterPortMappingPort = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualrouter-portmapping.html#cfn-appmesh-virtualrouter-portmapping-protocol
amvrpmProtocol :: Lens' AppMeshVirtualRouterPortMapping (Val Text)
amvrpmProtocol = lens _appMeshVirtualRouterPortMappingProtocol (\s a -> s { _appMeshVirtualRouterPortMappingProtocol = a })