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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-managedblockchain-node.html

module Stratosphere.Resources.ManagedBlockchainNode where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.ManagedBlockchainNodeNodeConfiguration

-- | Full data type definition for ManagedBlockchainNode. See
-- 'managedBlockchainNode' for a more convenient constructor.
data ManagedBlockchainNode =
  ManagedBlockchainNode
  { _managedBlockchainNodeMemberId :: Val Text
  , _managedBlockchainNodeNetworkId :: Val Text
  , _managedBlockchainNodeNodeConfiguration :: ManagedBlockchainNodeNodeConfiguration
  } deriving (Show, Eq)

instance ToResourceProperties ManagedBlockchainNode where
  toResourceProperties ManagedBlockchainNode{..} =
    ResourceProperties
    { resourcePropertiesType = "AWS::ManagedBlockchain::Node"
    , resourcePropertiesProperties =
        hashMapFromList $ catMaybes
        [ (Just . ("MemberId",) . toJSON) _managedBlockchainNodeMemberId
        , (Just . ("NetworkId",) . toJSON) _managedBlockchainNodeNetworkId
        , (Just . ("NodeConfiguration",) . toJSON) _managedBlockchainNodeNodeConfiguration
        ]
    }

-- | Constructor for 'ManagedBlockchainNode' containing required fields as
-- arguments.
managedBlockchainNode
  :: Val Text -- ^ 'mbnMemberId'
  -> Val Text -- ^ 'mbnNetworkId'
  -> ManagedBlockchainNodeNodeConfiguration -- ^ 'mbnNodeConfiguration'
  -> ManagedBlockchainNode
managedBlockchainNode memberIdarg networkIdarg nodeConfigurationarg =
  ManagedBlockchainNode
  { _managedBlockchainNodeMemberId = memberIdarg
  , _managedBlockchainNodeNetworkId = networkIdarg
  , _managedBlockchainNodeNodeConfiguration = nodeConfigurationarg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-managedblockchain-node.html#cfn-managedblockchain-node-memberid
mbnMemberId :: Lens' ManagedBlockchainNode (Val Text)
mbnMemberId = lens _managedBlockchainNodeMemberId (\s a -> s { _managedBlockchainNodeMemberId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-managedblockchain-node.html#cfn-managedblockchain-node-networkid
mbnNetworkId :: Lens' ManagedBlockchainNode (Val Text)
mbnNetworkId = lens _managedBlockchainNodeNetworkId (\s a -> s { _managedBlockchainNodeNetworkId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-managedblockchain-node.html#cfn-managedblockchain-node-nodeconfiguration
mbnNodeConfiguration :: Lens' ManagedBlockchainNode ManagedBlockchainNodeNodeConfiguration
mbnNodeConfiguration = lens _managedBlockchainNodeNodeConfiguration (\s a -> s { _managedBlockchainNodeNodeConfiguration = a })