{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html module Stratosphere.Resources.ElasticsearchDomain 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.ElasticsearchDomainEBSOptions import Stratosphere.ResourceProperties.ElasticsearchDomainElasticsearchClusterConfig import Stratosphere.ResourceProperties.ElasticsearchDomainSnapshotOptions import Stratosphere.ResourceProperties.Tag -- | Full data type definition for ElasticsearchDomain. See -- 'elasticsearchDomain' for a more convenient constructor. data ElasticsearchDomain = ElasticsearchDomain { _elasticsearchDomainAccessPolicies :: Maybe Object , _elasticsearchDomainAdvancedOptions :: Maybe Object , _elasticsearchDomainDomainName :: Maybe (Val Text) , _elasticsearchDomainEBSOptions :: Maybe ElasticsearchDomainEBSOptions , _elasticsearchDomainElasticsearchClusterConfig :: Maybe ElasticsearchDomainElasticsearchClusterConfig , _elasticsearchDomainElasticsearchVersion :: Maybe (Val Text) , _elasticsearchDomainSnapshotOptions :: Maybe ElasticsearchDomainSnapshotOptions , _elasticsearchDomainTags :: Maybe [Tag] } deriving (Show, Eq) instance ToJSON ElasticsearchDomain where toJSON ElasticsearchDomain{..} = object $ catMaybes [ ("AccessPolicies" .=) <$> _elasticsearchDomainAccessPolicies , ("AdvancedOptions" .=) <$> _elasticsearchDomainAdvancedOptions , ("DomainName" .=) <$> _elasticsearchDomainDomainName , ("EBSOptions" .=) <$> _elasticsearchDomainEBSOptions , ("ElasticsearchClusterConfig" .=) <$> _elasticsearchDomainElasticsearchClusterConfig , ("ElasticsearchVersion" .=) <$> _elasticsearchDomainElasticsearchVersion , ("SnapshotOptions" .=) <$> _elasticsearchDomainSnapshotOptions , ("Tags" .=) <$> _elasticsearchDomainTags ] instance FromJSON ElasticsearchDomain where parseJSON (Object obj) = ElasticsearchDomain <$> obj .:? "AccessPolicies" <*> obj .:? "AdvancedOptions" <*> obj .:? "DomainName" <*> obj .:? "EBSOptions" <*> obj .:? "ElasticsearchClusterConfig" <*> obj .:? "ElasticsearchVersion" <*> obj .:? "SnapshotOptions" <*> obj .:? "Tags" parseJSON _ = mempty -- | Constructor for 'ElasticsearchDomain' containing required fields as -- arguments. elasticsearchDomain :: ElasticsearchDomain elasticsearchDomain = ElasticsearchDomain { _elasticsearchDomainAccessPolicies = Nothing , _elasticsearchDomainAdvancedOptions = Nothing , _elasticsearchDomainDomainName = Nothing , _elasticsearchDomainEBSOptions = Nothing , _elasticsearchDomainElasticsearchClusterConfig = Nothing , _elasticsearchDomainElasticsearchVersion = Nothing , _elasticsearchDomainSnapshotOptions = Nothing , _elasticsearchDomainTags = Nothing } -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-accesspolicies edAccessPolicies :: Lens' ElasticsearchDomain (Maybe Object) edAccessPolicies = lens _elasticsearchDomainAccessPolicies (\s a -> s { _elasticsearchDomainAccessPolicies = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-advancedoptions edAdvancedOptions :: Lens' ElasticsearchDomain (Maybe Object) edAdvancedOptions = lens _elasticsearchDomainAdvancedOptions (\s a -> s { _elasticsearchDomainAdvancedOptions = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-domainname edDomainName :: Lens' ElasticsearchDomain (Maybe (Val Text)) edDomainName = lens _elasticsearchDomainDomainName (\s a -> s { _elasticsearchDomainDomainName = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-ebsoptions edEBSOptions :: Lens' ElasticsearchDomain (Maybe ElasticsearchDomainEBSOptions) edEBSOptions = lens _elasticsearchDomainEBSOptions (\s a -> s { _elasticsearchDomainEBSOptions = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-elasticsearchclusterconfig edElasticsearchClusterConfig :: Lens' ElasticsearchDomain (Maybe ElasticsearchDomainElasticsearchClusterConfig) edElasticsearchClusterConfig = lens _elasticsearchDomainElasticsearchClusterConfig (\s a -> s { _elasticsearchDomainElasticsearchClusterConfig = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-elasticsearchversion edElasticsearchVersion :: Lens' ElasticsearchDomain (Maybe (Val Text)) edElasticsearchVersion = lens _elasticsearchDomainElasticsearchVersion (\s a -> s { _elasticsearchDomainElasticsearchVersion = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-snapshotoptions edSnapshotOptions :: Lens' ElasticsearchDomain (Maybe ElasticsearchDomainSnapshotOptions) edSnapshotOptions = lens _elasticsearchDomainSnapshotOptions (\s a -> s { _elasticsearchDomainSnapshotOptions = a }) -- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-tags edTags :: Lens' ElasticsearchDomain (Maybe [Tag]) edTags = lens _elasticsearchDomainTags (\s a -> s { _elasticsearchDomainTags = a })