couchdb-conduit-0.1.0.0: src/Database/CouchDB/Conduit/DB.hs
{- | CouchDB database methods.
/Note about paths./ If you passed a database name to
"Database.CouchDB.Conduit#connection", the path in methods below should be the
'B.empty'. But, if you passed the 'B.empty' to 'CouchConnection', then the
@couchDB@ should be used in these methods.
> runCouch def $ couchPutDb "my_new_db"
> runCouch def {couchDB="another_new_db"} $ couchPutDb ""
-}
module Database.CouchDB.Conduit.DB (
-- * Methods
couchPutDB,
couchPutDB',
couchDeleteDB
) where
import Prelude hiding (catch)
import Control.Exception.Lifted (catch)
import qualified Data.ByteString as B
import Data.Conduit (ResourceT, resourceThrow)
import qualified Network.HTTP.Conduit as H
import qualified Network.HTTP.Types as HT
import Database.CouchDB.Conduit (MonadCouch(..), CouchError(..), Path)
import Database.CouchDB.Conduit.LowLevel (couch, protect')
import Control.Monad.Trans.Class (lift)
-- | Create CouchDB database.
couchPutDB :: MonadCouch m =>
Path -- ^ CouchDB Database name. See note above.
-> ResourceT m ()
couchPutDB p = couch HT.methodPut p [] []
(H.RequestBodyBS B.empty) protect'
>> return ()
-- | Brute force version of couchPutDb. Create CouchDB database regardless
-- of presence. Catches 'CouchError' @412@.
couchPutDB' :: MonadCouch m =>
Path -- ^ CouchDB Database name. See note above.
-> ResourceT m ()
couchPutDB' p =
catch (couchPutDB p) handler
where
handler (CouchError (Just 412) _) = return ()
handler e = lift $ resourceThrow e
-- | Delete a database.
couchDeleteDB :: MonadCouch m =>
Path -- ^ CouchDB Database name. See note above.
-> ResourceT m ()
couchDeleteDB p = couch HT.methodDelete p [] []
(H.RequestBodyBS B.empty) protect'
>> return ()