{-# 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.S3.PutBucketLogging
-- Copyright   : (c) 2013-2015 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)
--
-- Set the logging parameters for a bucket and to specify permissions for
-- who can view and modify the logging parameters. To set the logging
-- status of a bucket, you must be the bucket owner.
--
-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketLogging.html AWS API Reference> for PutBucketLogging.
module Network.AWS.S3.PutBucketLogging
    (
    -- * Creating a Request
      putBucketLogging
    , PutBucketLogging
    -- * Request Lenses
    , pblContentMD5
    , pblBucket
    , pblBucketLoggingStatus

    -- * Destructuring the Response
    , putBucketLoggingResponse
    , PutBucketLoggingResponse
    ) where

import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
import           Network.AWS.S3.Types
import           Network.AWS.S3.Types.Product

-- | /See:/ 'putBucketLogging' smart constructor.
data PutBucketLogging = PutBucketLogging'
    { _pblContentMD5          :: !(Maybe Text)
    , _pblBucket              :: !BucketName
    , _pblBucketLoggingStatus :: !BucketLoggingStatus
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'PutBucketLogging' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'pblContentMD5'
--
-- * 'pblBucket'
--
-- * 'pblBucketLoggingStatus'
putBucketLogging
    :: BucketName -- ^ 'pblBucket'
    -> BucketLoggingStatus -- ^ 'pblBucketLoggingStatus'
    -> PutBucketLogging
putBucketLogging pBucket_ pBucketLoggingStatus_ =
    PutBucketLogging'
    { _pblContentMD5 = Nothing
    , _pblBucket = pBucket_
    , _pblBucketLoggingStatus = pBucketLoggingStatus_
    }

-- | Undocumented member.
pblContentMD5 :: Lens' PutBucketLogging (Maybe Text)
pblContentMD5 = lens _pblContentMD5 (\ s a -> s{_pblContentMD5 = a});

-- | Undocumented member.
pblBucket :: Lens' PutBucketLogging BucketName
pblBucket = lens _pblBucket (\ s a -> s{_pblBucket = a});

-- | Undocumented member.
pblBucketLoggingStatus :: Lens' PutBucketLogging BucketLoggingStatus
pblBucketLoggingStatus = lens _pblBucketLoggingStatus (\ s a -> s{_pblBucketLoggingStatus = a});

instance AWSRequest PutBucketLogging where
        type Rs PutBucketLogging = PutBucketLoggingResponse
        request = putXML s3
        response = receiveNull PutBucketLoggingResponse'

instance ToElement PutBucketLogging where
        toElement
          = mkElement
              "{http://s3.amazonaws.com/doc/2006-03-01/}BucketLoggingStatus"
              .
              _pblBucketLoggingStatus

instance ToHeaders PutBucketLogging where
        toHeaders PutBucketLogging'{..}
          = mconcat ["Content-MD5" =# _pblContentMD5]

instance ToPath PutBucketLogging where
        toPath PutBucketLogging'{..}
          = mconcat ["/", toBS _pblBucket]

instance ToQuery PutBucketLogging where
        toQuery = const (mconcat ["logging"])

-- | /See:/ 'putBucketLoggingResponse' smart constructor.
data PutBucketLoggingResponse =
    PutBucketLoggingResponse'
    deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'PutBucketLoggingResponse' with the minimum fields required to make a request.
--
putBucketLoggingResponse
    :: PutBucketLoggingResponse
putBucketLoggingResponse = PutBucketLoggingResponse'