{-# LANGUAGE FlexibleContexts #-} module Package.C.Db.Memory ( strictIndex , pkgIndex , globalPkgDir , memIndex ) where import Control.Monad.State.Class import CPkgPrelude import Data.Binary (decode) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL import Package.C.Db.Monad import Package.C.Db.Type pkgIndex :: MonadIO m => m FilePath pkgIndex = ( "index.bin") <$> globalPkgDir globalPkgDir :: MonadIO m => m FilePath globalPkgDir = liftIO (getAppUserDataDirectory "cpkg") memIndex :: MonadDb m => m InstallDb memIndex = get strictIndex :: MonadIO m => m InstallDb strictIndex = do indexFile <- pkgIndex -- Add some proper error handling here existsIndex <- liftIO (doesFileExist indexFile) if existsIndex then decode . BSL.fromStrict <$> liftIO (BS.readFile indexFile) else pure mempty