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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-managedblockchain-member-memberconfiguration.html

module Stratosphere.ResourceProperties.ManagedBlockchainMemberMemberConfiguration where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.ManagedBlockchainMemberMemberFrameworkConfiguration

-- | Full data type definition for ManagedBlockchainMemberMemberConfiguration.
-- See 'managedBlockchainMemberMemberConfiguration' for a more convenient
-- constructor.
data ManagedBlockchainMemberMemberConfiguration =
  ManagedBlockchainMemberMemberConfiguration
  { _managedBlockchainMemberMemberConfigurationDescription :: Maybe (Val Text)
  , _managedBlockchainMemberMemberConfigurationMemberFrameworkConfiguration :: Maybe ManagedBlockchainMemberMemberFrameworkConfiguration
  , _managedBlockchainMemberMemberConfigurationName :: Val Text
  } deriving (Show, Eq)

instance ToJSON ManagedBlockchainMemberMemberConfiguration where
  toJSON ManagedBlockchainMemberMemberConfiguration{..} =
    object $
    catMaybes
    [ fmap (("Description",) . toJSON) _managedBlockchainMemberMemberConfigurationDescription
    , fmap (("MemberFrameworkConfiguration",) . toJSON) _managedBlockchainMemberMemberConfigurationMemberFrameworkConfiguration
    , (Just . ("Name",) . toJSON) _managedBlockchainMemberMemberConfigurationName
    ]

-- | Constructor for 'ManagedBlockchainMemberMemberConfiguration' containing
-- required fields as arguments.
managedBlockchainMemberMemberConfiguration
  :: Val Text -- ^ 'mbmmcName'
  -> ManagedBlockchainMemberMemberConfiguration
managedBlockchainMemberMemberConfiguration namearg =
  ManagedBlockchainMemberMemberConfiguration
  { _managedBlockchainMemberMemberConfigurationDescription = Nothing
  , _managedBlockchainMemberMemberConfigurationMemberFrameworkConfiguration = Nothing
  , _managedBlockchainMemberMemberConfigurationName = namearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-managedblockchain-member-memberconfiguration.html#cfn-managedblockchain-member-memberconfiguration-description
mbmmcDescription :: Lens' ManagedBlockchainMemberMemberConfiguration (Maybe (Val Text))
mbmmcDescription = lens _managedBlockchainMemberMemberConfigurationDescription (\s a -> s { _managedBlockchainMemberMemberConfigurationDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-managedblockchain-member-memberconfiguration.html#cfn-managedblockchain-member-memberconfiguration-memberframeworkconfiguration
mbmmcMemberFrameworkConfiguration :: Lens' ManagedBlockchainMemberMemberConfiguration (Maybe ManagedBlockchainMemberMemberFrameworkConfiguration)
mbmmcMemberFrameworkConfiguration = lens _managedBlockchainMemberMemberConfigurationMemberFrameworkConfiguration (\s a -> s { _managedBlockchainMemberMemberConfigurationMemberFrameworkConfiguration = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-managedblockchain-member-memberconfiguration.html#cfn-managedblockchain-member-memberconfiguration-name
mbmmcName :: Lens' ManagedBlockchainMemberMemberConfiguration (Val Text)
mbmmcName = lens _managedBlockchainMemberMemberConfigurationName (\s a -> s { _managedBlockchainMemberMemberConfigurationName = a })