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

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

module Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualServiceProvider where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualNodeServiceProvider
import Stratosphere.ResourceProperties.AppMeshVirtualServiceVirtualRouterServiceProvider

-- | Full data type definition for
-- AppMeshVirtualServiceVirtualServiceProvider. See
-- 'appMeshVirtualServiceVirtualServiceProvider' for a more convenient
-- constructor.
data AppMeshVirtualServiceVirtualServiceProvider =
  AppMeshVirtualServiceVirtualServiceProvider
  { _appMeshVirtualServiceVirtualServiceProviderVirtualNode :: Maybe AppMeshVirtualServiceVirtualNodeServiceProvider
  , _appMeshVirtualServiceVirtualServiceProviderVirtualRouter :: Maybe AppMeshVirtualServiceVirtualRouterServiceProvider
  } deriving (Show, Eq)

instance ToJSON AppMeshVirtualServiceVirtualServiceProvider where
  toJSON AppMeshVirtualServiceVirtualServiceProvider{..} =
    object $
    catMaybes
    [ fmap (("VirtualNode",) . toJSON) _appMeshVirtualServiceVirtualServiceProviderVirtualNode
    , fmap (("VirtualRouter",) . toJSON) _appMeshVirtualServiceVirtualServiceProviderVirtualRouter
    ]

-- | Constructor for 'AppMeshVirtualServiceVirtualServiceProvider' containing
-- required fields as arguments.
appMeshVirtualServiceVirtualServiceProvider
  :: AppMeshVirtualServiceVirtualServiceProvider
appMeshVirtualServiceVirtualServiceProvider  =
  AppMeshVirtualServiceVirtualServiceProvider
  { _appMeshVirtualServiceVirtualServiceProviderVirtualNode = Nothing
  , _appMeshVirtualServiceVirtualServiceProviderVirtualRouter = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualserviceprovider.html#cfn-appmesh-virtualservice-virtualserviceprovider-virtualnode
amvsvspVirtualNode :: Lens' AppMeshVirtualServiceVirtualServiceProvider (Maybe AppMeshVirtualServiceVirtualNodeServiceProvider)
amvsvspVirtualNode = lens _appMeshVirtualServiceVirtualServiceProviderVirtualNode (\s a -> s { _appMeshVirtualServiceVirtualServiceProviderVirtualNode = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-virtualservice-virtualserviceprovider.html#cfn-appmesh-virtualservice-virtualserviceprovider-virtualrouter
amvsvspVirtualRouter :: Lens' AppMeshVirtualServiceVirtualServiceProvider (Maybe AppMeshVirtualServiceVirtualRouterServiceProvider)
amvsvspVirtualRouter = lens _appMeshVirtualServiceVirtualServiceProviderVirtualRouter (\s a -> s { _appMeshVirtualServiceVirtualServiceProviderVirtualRouter = a })