hoogle-4.0: src/Hoogle/DataBase/Serialise.hs
module Hoogle.DataBase.Serialise(
saveDataBase, loadDataBase
) where
import Data.Binary.Defer
import Data.Binary.Raw
import General.Code
import Hoogle.DataBase.Type
hooVersion = 1 :: Int
hooString = "HOOG"
saveDataBase :: FilePath -> DataBase -> IO ()
saveDataBase file db = do
h <- openBinaryFile file WriteMode
mapM_ (hPutChar h) hooString
hPutInt h hooVersion
runDeferPut h $ put db
hClose h
loadDataBase :: FilePath -> IO DataBase
loadDataBase file = do
h <- openBinaryFile file ReadMode
size <- hFileSize h
when (size < 8) $
error $ "Not a hoogle database: " ++ file
str <- replicateM 4 (hGetChar h)
when (str /= hooString) $
error $ "Not a hoogle database: " ++ file
ver <- hGetInt h
when (ver /= hooVersion) $
error $ "Wrong hoogle database version: " ++ show ver ++
" found, expected " ++ show hooVersion
runDeferGet h get