module Scion.Browser
( saveDatabase
, loadDatabase
, singletonDatabase
, module Scion.Browser.Types
, module Scion.Browser.Instances.Json
, module Scion.Browser.Instances.Serialize
) where
import Control.DeepSeq
import qualified Data.ByteString as BS
import qualified Data.Map as M
import Data.Serialize
import Scion.Browser.Types
import Scion.Browser.Instances.Json
import Scion.Browser.Instances.NFData ()
import Scion.Browser.Instances.Serialize
import System.IO
saveDatabase :: FilePath -> Database -> IO ()
saveDatabase fpath db = withFile fpath WriteMode $
\hnd -> do BS.hPut hnd (encode db)
hFlush hnd
loadDatabase :: FilePath -> IO (Maybe Database)
loadDatabase fpath = withFile fpath ReadMode $
\hnd -> do s <- BS.hGetContents hnd
return $ case decode s of
Left _ -> Nothing
Right p -> p `deepseq` Just p
singletonDatabase :: Documented Package -> Database
singletonDatabase pkg@(Package _ pid _) = M.singleton pid pkg