Holumbus-Searchengine-1.2.0: src/Holumbus/Index/Common/LoadStore.hs
{-# OPTIONS #-}
-- ----------------------------------------------------------------------------
{- |
Module : Holumbus.Index.Common.LoadStore
Copyright : Copyright (C) 2011 Sebastian M. Schlatt, Timo B. Huebel, UweSchmidt
License : MIT
Maintainer : Timo B. Huebel (tbh@holumbus.org)
Stability : experimental
Portability: none portable
Load and store indexes
-}
-- ----------------------------------------------------------------------------
module Holumbus.Index.Common.LoadStore
where
import Data.Binary ( Binary (..) )
import qualified
Data.Binary as B
import qualified
Data.List as L
import Text.XML.HXT.Core
-- ------------------------------------------------------------
-- | Try to determine the file type automatically. The file is loaded as XML if the filename
-- ends with \".xml\" and otherwise is loaded as binary file.
loadFromFile :: (XmlPickler a, Binary a) => FilePath -> IO a
loadFromFile f = if L.isSuffixOf ".xml" f then loadFromXmlFile f else loadFromBinFile f
-- | Load from XML file.
loadFromXmlFile :: XmlPickler a => FilePath -> IO a
loadFromXmlFile f = do
r <- runX (xunpickleDocument xpickle options f)
return $! head r
where
options = [ withRemoveWS yes, withInputEncoding utf8, withValidate no ]
-- | Write to XML file.
writeToXmlFile :: XmlPickler a => FilePath -> a -> IO ()
writeToXmlFile f i = do
runX (constA i >>> xpickleDocument xpickle options f)
>> return ()
where
options = [ withIndent yes, withOutputEncoding utf8 ]
-- | Load from a binary file.
loadFromBinFile :: Binary a => FilePath -> IO a
loadFromBinFile = B.decodeFile
-- | Write to a binary file.
writeToBinFile :: Binary a => FilePath -> a -> IO ()
writeToBinFile = B.encodeFile
-- ------------------------------------------------------------