{-# 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.RDS.DescribeDBSnapshotAttributes
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns a list of DB snapshot attribute names and values for a manual DB snapshot.
--
-- When sharing snapshots with other AWS accounts, 'DescribeDBSnapshotAttributes' returns the 'restore' attribute and a list of the AWS account ids that are authorized to copy or restore the manual DB snapshot. If 'all' is included in the list of values for the 'restore' attribute, then the manual DB snapshot is public and can be copied or restored by all AWS accounts.
--
-- To add or remove access for an AWS account to copy or restore a manual DB snapshot, or to make the manual DB snapshot public or private, use the < ModifyDBSnapshotAttribute> API.
module Network.AWS.RDS.DescribeDBSnapshotAttributes
    (
    -- * Creating a Request
      describeDBSnapshotAttributes
    , DescribeDBSnapshotAttributes
    -- * Request Lenses
    , ddsaDBSnapshotIdentifier

    -- * Destructuring the Response
    , describeDBSnapshotAttributesResponse
    , DescribeDBSnapshotAttributesResponse
    -- * Response Lenses
    , ddsarsDBSnapshotAttributesResult
    , ddsarsResponseStatus
    ) where

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

-- | /See:/ 'describeDBSnapshotAttributes' smart constructor.
newtype DescribeDBSnapshotAttributes = DescribeDBSnapshotAttributes'
    { _ddsaDBSnapshotIdentifier :: Maybe Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'DescribeDBSnapshotAttributes' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'ddsaDBSnapshotIdentifier'
describeDBSnapshotAttributes
    :: DescribeDBSnapshotAttributes
describeDBSnapshotAttributes =
    DescribeDBSnapshotAttributes'
    { _ddsaDBSnapshotIdentifier = Nothing
    }

-- | The identifier for the DB snapshot to modify the attributes for.
ddsaDBSnapshotIdentifier :: Lens' DescribeDBSnapshotAttributes (Maybe Text)
ddsaDBSnapshotIdentifier = lens _ddsaDBSnapshotIdentifier (\ s a -> s{_ddsaDBSnapshotIdentifier = a});

instance AWSRequest DescribeDBSnapshotAttributes
         where
        type Rs DescribeDBSnapshotAttributes =
             DescribeDBSnapshotAttributesResponse
        request = postQuery rds
        response
          = receiveXMLWrapper
              "DescribeDBSnapshotAttributesResult"
              (\ s h x ->
                 DescribeDBSnapshotAttributesResponse' <$>
                   (x .@? "DBSnapshotAttributesResult") <*>
                     (pure (fromEnum s)))

instance Hashable DescribeDBSnapshotAttributes

instance NFData DescribeDBSnapshotAttributes

instance ToHeaders DescribeDBSnapshotAttributes where
        toHeaders = const mempty

instance ToPath DescribeDBSnapshotAttributes where
        toPath = const "/"

instance ToQuery DescribeDBSnapshotAttributes where
        toQuery DescribeDBSnapshotAttributes'{..}
          = mconcat
              ["Action" =:
                 ("DescribeDBSnapshotAttributes" :: ByteString),
               "Version" =: ("2014-10-31" :: ByteString),
               "DBSnapshotIdentifier" =: _ddsaDBSnapshotIdentifier]

-- | /See:/ 'describeDBSnapshotAttributesResponse' smart constructor.
data DescribeDBSnapshotAttributesResponse = DescribeDBSnapshotAttributesResponse'
    { _ddsarsDBSnapshotAttributesResult :: !(Maybe DBSnapshotAttributesResult)
    , _ddsarsResponseStatus             :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'DescribeDBSnapshotAttributesResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'ddsarsDBSnapshotAttributesResult'
--
-- * 'ddsarsResponseStatus'
describeDBSnapshotAttributesResponse
    :: Int -- ^ 'ddsarsResponseStatus'
    -> DescribeDBSnapshotAttributesResponse
describeDBSnapshotAttributesResponse pResponseStatus_ =
    DescribeDBSnapshotAttributesResponse'
    { _ddsarsDBSnapshotAttributesResult = Nothing
    , _ddsarsResponseStatus = pResponseStatus_
    }

-- | Undocumented member.
ddsarsDBSnapshotAttributesResult :: Lens' DescribeDBSnapshotAttributesResponse (Maybe DBSnapshotAttributesResult)
ddsarsDBSnapshotAttributesResult = lens _ddsarsDBSnapshotAttributesResult (\ s a -> s{_ddsarsDBSnapshotAttributesResult = a});

-- | The response status code.
ddsarsResponseStatus :: Lens' DescribeDBSnapshotAttributesResponse Int
ddsarsResponseStatus = lens _ddsarsResponseStatus (\ s a -> s{_ddsarsResponseStatus = a});

instance NFData DescribeDBSnapshotAttributesResponse