packages feed

do-spaces-0.2: src/Network/DO/Spaces/Actions/DeleteBucket.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}

-- |
-- Module      : Network.DO.Spaces.Actions.DeleteBucket
-- Copyright   : (c) 2021 Rory Tyler Hayford
-- License     : BSD-3-Clause
-- Maintainer  : rory.hayford@protonmail.com
-- Stability   : experimental
-- Portability : GHC
--
module Network.DO.Spaces.Actions.DeleteBucket
    ( DeleteBucket(..)
    , DeleteBucketResponse
    ) where

import           Control.Monad.Reader    ( MonadReader(ask) )

import           GHC.Generics            ( Generic )

import           Network.DO.Spaces.Types

-- | Delete a single 'Bucket'. Note that it must be empty
newtype DeleteBucket = DeleteBucket
    { bucket :: Bucket -- ^ The name of the 'Bucket' to delete
    }
    deriving stock ( Show, Generic )
    deriving newtype ( Eq )

type DeleteBucketResponse = ()

instance MonadSpaces m => Action m DeleteBucket where
    type ConsumedResponse DeleteBucket = DeleteBucketResponse

    buildRequest DeleteBucket { .. } = do
        spaces <- ask
        pure SpacesRequestBuilder
             { method         = Just DELETE
             , bucket         = Just bucket
             , body           = Nothing
             , object         = Nothing
             , queryString    = Nothing
             , subresources   = Nothing
             , headers        = mempty
             , overrideRegion = Nothing
             , ..
             }

    consumeResponse _ = pure ()