{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}
{-# LANGUAGE RecordWildCards    #-}
{-# LANGUAGE TypeFamilies       #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.MediaLive.DescribeInputSecurityGroup
-- Copyright   : (c) 2013-2018 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Produces a summary of an Input Security Group
module Network.AWS.MediaLive.DescribeInputSecurityGroup
    (
    -- * Creating a Request
      describeInputSecurityGroup
    , DescribeInputSecurityGroup
    -- * Request Lenses
    , disgInputSecurityGroupId

    -- * Destructuring the Response
    , describeInputSecurityGroupResponse
    , DescribeInputSecurityGroupResponse
    -- * Response Lenses
    , desrsState
    , desrsARN
    , desrsInputs
    , desrsId
    , desrsWhitelistRules
    , desrsResponseStatus
    ) where

import Network.AWS.Lens
import Network.AWS.MediaLive.Types
import Network.AWS.MediaLive.Types.Product
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response

-- | Placeholder documentation for DescribeInputSecurityGroupRequest
--
-- /See:/ 'describeInputSecurityGroup' smart constructor.
newtype DescribeInputSecurityGroup = DescribeInputSecurityGroup'
  { _disgInputSecurityGroupId :: Text
  } deriving (Eq, Read, Show, Data, Typeable, Generic)


-- | Creates a value of 'DescribeInputSecurityGroup' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'disgInputSecurityGroupId' - The id of the Input Security Group to describe
describeInputSecurityGroup
    :: Text -- ^ 'disgInputSecurityGroupId'
    -> DescribeInputSecurityGroup
describeInputSecurityGroup pInputSecurityGroupId_ =
  DescribeInputSecurityGroup'
    {_disgInputSecurityGroupId = pInputSecurityGroupId_}


-- | The id of the Input Security Group to describe
disgInputSecurityGroupId :: Lens' DescribeInputSecurityGroup Text
disgInputSecurityGroupId = lens _disgInputSecurityGroupId (\ s a -> s{_disgInputSecurityGroupId = a})

instance AWSRequest DescribeInputSecurityGroup where
        type Rs DescribeInputSecurityGroup =
             DescribeInputSecurityGroupResponse
        request = get mediaLive
        response
          = receiveJSON
              (\ s h x ->
                 DescribeInputSecurityGroupResponse' <$>
                   (x .?> "state") <*> (x .?> "arn") <*>
                     (x .?> "inputs" .!@ mempty)
                     <*> (x .?> "id")
                     <*> (x .?> "whitelistRules" .!@ mempty)
                     <*> (pure (fromEnum s)))

instance Hashable DescribeInputSecurityGroup where

instance NFData DescribeInputSecurityGroup where

instance ToHeaders DescribeInputSecurityGroup where
        toHeaders
          = const
              (mconcat
                 ["Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])

instance ToPath DescribeInputSecurityGroup where
        toPath DescribeInputSecurityGroup'{..}
          = mconcat
              ["/prod/inputSecurityGroups/",
               toBS _disgInputSecurityGroupId]

instance ToQuery DescribeInputSecurityGroup where
        toQuery = const mempty

-- | Placeholder documentation for DescribeInputSecurityGroupResponse
--
-- /See:/ 'describeInputSecurityGroupResponse' smart constructor.
data DescribeInputSecurityGroupResponse = DescribeInputSecurityGroupResponse'
  { _desrsState          :: !(Maybe InputSecurityGroupState)
  , _desrsARN            :: !(Maybe Text)
  , _desrsInputs         :: !(Maybe [Text])
  , _desrsId             :: !(Maybe Text)
  , _desrsWhitelistRules :: !(Maybe [InputWhitelistRule])
  , _desrsResponseStatus :: !Int
  } deriving (Eq, Read, Show, Data, Typeable, Generic)


-- | Creates a value of 'DescribeInputSecurityGroupResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'desrsState' - The current state of the Input Security Group.
--
-- * 'desrsARN' - Unique ARN of Input Security Group
--
-- * 'desrsInputs' - The list of inputs currently using this Input Security Group.
--
-- * 'desrsId' - The Id of the Input Security Group
--
-- * 'desrsWhitelistRules' - Whitelist rules and their sync status
--
-- * 'desrsResponseStatus' - -- | The response status code.
describeInputSecurityGroupResponse
    :: Int -- ^ 'desrsResponseStatus'
    -> DescribeInputSecurityGroupResponse
describeInputSecurityGroupResponse pResponseStatus_ =
  DescribeInputSecurityGroupResponse'
    { _desrsState = Nothing
    , _desrsARN = Nothing
    , _desrsInputs = Nothing
    , _desrsId = Nothing
    , _desrsWhitelistRules = Nothing
    , _desrsResponseStatus = pResponseStatus_
    }


-- | The current state of the Input Security Group.
desrsState :: Lens' DescribeInputSecurityGroupResponse (Maybe InputSecurityGroupState)
desrsState = lens _desrsState (\ s a -> s{_desrsState = a})

-- | Unique ARN of Input Security Group
desrsARN :: Lens' DescribeInputSecurityGroupResponse (Maybe Text)
desrsARN = lens _desrsARN (\ s a -> s{_desrsARN = a})

-- | The list of inputs currently using this Input Security Group.
desrsInputs :: Lens' DescribeInputSecurityGroupResponse [Text]
desrsInputs = lens _desrsInputs (\ s a -> s{_desrsInputs = a}) . _Default . _Coerce

-- | The Id of the Input Security Group
desrsId :: Lens' DescribeInputSecurityGroupResponse (Maybe Text)
desrsId = lens _desrsId (\ s a -> s{_desrsId = a})

-- | Whitelist rules and their sync status
desrsWhitelistRules :: Lens' DescribeInputSecurityGroupResponse [InputWhitelistRule]
desrsWhitelistRules = lens _desrsWhitelistRules (\ s a -> s{_desrsWhitelistRules = a}) . _Default . _Coerce

-- | -- | The response status code.
desrsResponseStatus :: Lens' DescribeInputSecurityGroupResponse Int
desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a})

instance NFData DescribeInputSecurityGroupResponse
         where