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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html

module Stratosphere.Resources.GreengrassGroupVersion where

import Stratosphere.ResourceImports


-- | Full data type definition for GreengrassGroupVersion. See
-- 'greengrassGroupVersion' for a more convenient constructor.
data GreengrassGroupVersion =
  GreengrassGroupVersion
  { _greengrassGroupVersionConnectorDefinitionVersionArn :: Maybe (Val Text)
  , _greengrassGroupVersionCoreDefinitionVersionArn :: Maybe (Val Text)
  , _greengrassGroupVersionDeviceDefinitionVersionArn :: Maybe (Val Text)
  , _greengrassGroupVersionFunctionDefinitionVersionArn :: Maybe (Val Text)
  , _greengrassGroupVersionGroupId :: Val Text
  , _greengrassGroupVersionLoggerDefinitionVersionArn :: Maybe (Val Text)
  , _greengrassGroupVersionResourceDefinitionVersionArn :: Maybe (Val Text)
  , _greengrassGroupVersionSubscriptionDefinitionVersionArn :: Maybe (Val Text)
  } deriving (Show, Eq)

instance ToResourceProperties GreengrassGroupVersion where
  toResourceProperties GreengrassGroupVersion{..} =
    ResourceProperties
    { resourcePropertiesType = "AWS::Greengrass::GroupVersion"
    , resourcePropertiesProperties =
        hashMapFromList $ catMaybes
        [ fmap (("ConnectorDefinitionVersionArn",) . toJSON) _greengrassGroupVersionConnectorDefinitionVersionArn
        , fmap (("CoreDefinitionVersionArn",) . toJSON) _greengrassGroupVersionCoreDefinitionVersionArn
        , fmap (("DeviceDefinitionVersionArn",) . toJSON) _greengrassGroupVersionDeviceDefinitionVersionArn
        , fmap (("FunctionDefinitionVersionArn",) . toJSON) _greengrassGroupVersionFunctionDefinitionVersionArn
        , (Just . ("GroupId",) . toJSON) _greengrassGroupVersionGroupId
        , fmap (("LoggerDefinitionVersionArn",) . toJSON) _greengrassGroupVersionLoggerDefinitionVersionArn
        , fmap (("ResourceDefinitionVersionArn",) . toJSON) _greengrassGroupVersionResourceDefinitionVersionArn
        , fmap (("SubscriptionDefinitionVersionArn",) . toJSON) _greengrassGroupVersionSubscriptionDefinitionVersionArn
        ]
    }

-- | Constructor for 'GreengrassGroupVersion' containing required fields as
-- arguments.
greengrassGroupVersion
  :: Val Text -- ^ 'ggvGroupId'
  -> GreengrassGroupVersion
greengrassGroupVersion groupIdarg =
  GreengrassGroupVersion
  { _greengrassGroupVersionConnectorDefinitionVersionArn = Nothing
  , _greengrassGroupVersionCoreDefinitionVersionArn = Nothing
  , _greengrassGroupVersionDeviceDefinitionVersionArn = Nothing
  , _greengrassGroupVersionFunctionDefinitionVersionArn = Nothing
  , _greengrassGroupVersionGroupId = groupIdarg
  , _greengrassGroupVersionLoggerDefinitionVersionArn = Nothing
  , _greengrassGroupVersionResourceDefinitionVersionArn = Nothing
  , _greengrassGroupVersionSubscriptionDefinitionVersionArn = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-connectordefinitionversionarn
ggvConnectorDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvConnectorDefinitionVersionArn = lens _greengrassGroupVersionConnectorDefinitionVersionArn (\s a -> s { _greengrassGroupVersionConnectorDefinitionVersionArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-coredefinitionversionarn
ggvCoreDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvCoreDefinitionVersionArn = lens _greengrassGroupVersionCoreDefinitionVersionArn (\s a -> s { _greengrassGroupVersionCoreDefinitionVersionArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-devicedefinitionversionarn
ggvDeviceDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvDeviceDefinitionVersionArn = lens _greengrassGroupVersionDeviceDefinitionVersionArn (\s a -> s { _greengrassGroupVersionDeviceDefinitionVersionArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-functiondefinitionversionarn
ggvFunctionDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvFunctionDefinitionVersionArn = lens _greengrassGroupVersionFunctionDefinitionVersionArn (\s a -> s { _greengrassGroupVersionFunctionDefinitionVersionArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-groupid
ggvGroupId :: Lens' GreengrassGroupVersion (Val Text)
ggvGroupId = lens _greengrassGroupVersionGroupId (\s a -> s { _greengrassGroupVersionGroupId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-loggerdefinitionversionarn
ggvLoggerDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvLoggerDefinitionVersionArn = lens _greengrassGroupVersionLoggerDefinitionVersionArn (\s a -> s { _greengrassGroupVersionLoggerDefinitionVersionArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-resourcedefinitionversionarn
ggvResourceDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvResourceDefinitionVersionArn = lens _greengrassGroupVersionResourceDefinitionVersionArn (\s a -> s { _greengrassGroupVersionResourceDefinitionVersionArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrass-groupversion.html#cfn-greengrass-groupversion-subscriptiondefinitionversionarn
ggvSubscriptionDefinitionVersionArn :: Lens' GreengrassGroupVersion (Maybe (Val Text))
ggvSubscriptionDefinitionVersionArn = lens _greengrassGroupVersionSubscriptionDefinitionVersionArn (\s a -> s { _greengrassGroupVersionSubscriptionDefinitionVersionArn = a })