module Network.AWS.S3.PutBucketVersioning
    (
    
      PutBucketVersioning
    
    , putBucketVersioning
    
    , pbvBucket
    , pbvContentMD5
    , pbvMFA
    , pbvVersioningConfiguration
    
    , PutBucketVersioningResponse
    
    , putBucketVersioningResponse
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.S3
import Network.AWS.S3.Types
import qualified GHC.Exts
data PutBucketVersioning = PutBucketVersioning
    { _pbvBucket                  :: Text
    , _pbvContentMD5              :: Maybe Text
    , _pbvMFA                     :: Maybe Text
    , _pbvVersioningConfiguration :: VersioningConfiguration
    } deriving (Eq, Show)
putBucketVersioning :: Text 
                    -> VersioningConfiguration 
                    -> PutBucketVersioning
putBucketVersioning p1 p2 = PutBucketVersioning
    { _pbvBucket                  = p1
    , _pbvVersioningConfiguration = p2
    , _pbvContentMD5              = Nothing
    , _pbvMFA                     = Nothing
    }
pbvBucket :: Lens' PutBucketVersioning Text
pbvBucket = lens _pbvBucket (\s a -> s { _pbvBucket = a })
pbvContentMD5 :: Lens' PutBucketVersioning (Maybe Text)
pbvContentMD5 = lens _pbvContentMD5 (\s a -> s { _pbvContentMD5 = a })
pbvMFA :: Lens' PutBucketVersioning (Maybe Text)
pbvMFA = lens _pbvMFA (\s a -> s { _pbvMFA = a })
pbvVersioningConfiguration :: Lens' PutBucketVersioning VersioningConfiguration
pbvVersioningConfiguration =
    lens _pbvVersioningConfiguration
        (\s a -> s { _pbvVersioningConfiguration = a })
data PutBucketVersioningResponse = PutBucketVersioningResponse
    deriving (Eq, Ord, Show, Generic)
putBucketVersioningResponse :: PutBucketVersioningResponse
putBucketVersioningResponse = PutBucketVersioningResponse
instance ToPath PutBucketVersioning where
    toPath PutBucketVersioning{..} = mconcat
        [ "/"
        , toText _pbvBucket
        ]
instance ToQuery PutBucketVersioning where
    toQuery = const "versioning"
instance ToHeaders PutBucketVersioning where
    toHeaders PutBucketVersioning{..} = mconcat
        [ "Content-MD5" =: _pbvContentMD5
        , "x-amz-mfa"   =: _pbvMFA
        ]
instance ToXMLRoot PutBucketVersioning where
    toXMLRoot PutBucketVersioning{..} = namespaced ns "PutBucketVersioning"
        [ "VersioningConfiguration" =@ _pbvVersioningConfiguration
        ]
instance ToXML PutBucketVersioning
instance AWSRequest PutBucketVersioning where
    type Sv PutBucketVersioning = S3
    type Rs PutBucketVersioning = PutBucketVersioningResponse
    request  = put
    response = nullResponse PutBucketVersioningResponse