module Lucienne.ConnectionReader (Connection, ConnectionReader, accessDb, runConnectionReader) where import Control.Monad.Reader (ReaderT,ask,liftIO,runReaderT) import Data.Char (toLower) import qualified Data.CompactString.UTF8 as CS import Database.MongoDB (Pipe,Action,Database) import qualified Database.MongoDB as M import Lucienne.Constant (programName) type Connection = Pipe type ConnectionReader = ReaderT Connection IO database :: Database database = CS.pack $ map toLower programName accessDb :: Action IO a -> ConnectionReader a accessDb action = do connection <- ask result <- liftIO $ M.access connection M.master database action case result of Right r -> return r Left l -> error $ "while accessing database: " ++ show l runConnectionReader :: Connection -> ConnectionReader a -> IO a runConnectionReader connection reader = runReaderT reader connection