module Hoogle.DataBase.Serialise(
saveDataBase, loadDataBase
) where
import Hoogle.Store.All
import General.Base
import General.System
import Hoogle.DataBase.Type
import Paths_hoogle(version)
import Data.Version
hooVersion = take 4 $ map fromIntegral (versionBranch version) ++ [0..]
hooString = "HOOG"
data Identity = Identity deriving (Show, Typeable)
instance Store Identity where
put Identity = mapM_ put hooString >> mapM_ putByte hooVersion
get = do
cs <- replicateM 4 get
vr <- replicateM 4 getByte
when (cs /= hooString) $
error $ "Not a hoogle database"
let showVer = intercalate "." . map show
when (vr /= hooVersion) $
error $ "Wrong hoogle database version: found " ++ showVer vr ++ ", " ++
"expected " ++ showVer hooVersion
return Identity
saveDataBase :: FilePath -> DataBase -> IO ()
saveDataBase file db = runSPut file $ put (Identity, db)
loadDataBase :: FilePath -> IO DataBase
loadDataBase file = do
sz <- withFile file ReadMode hFileSize
when (sz < 12) $
error $ "Not a hoogle database: " ++ file
(Identity,db) <- runSGet file get
return db