ffc82fc97e
M Setup.hs M main/Repl.hs M src/Nix/Builtins.hs M src/Nix/Cache.hs M src/Nix/Cited.hs M src/Nix/Cited/Basic.hs M src/Nix/Convert.hs M src/Nix/Exec.hs M src/Nix/Expr/Types.hs M src/Nix/Expr/Types/Annotated.hs M src/Nix/Lint.hs M src/Nix/Normal.hs M src/Nix/Pretty.hs M src/Nix/Render/Frame.hs M src/Nix/Scope.hs M src/Nix/TH.hs M src/Nix/Thunk.hs M src/Nix/Thunk/Basic.hs M src/Nix/Utils.hs M src/Nix/Value.hs M src/Nix/Value/Equal.hs
48 lines
1.2 KiB
Haskell
48 lines
1.2 KiB
Haskell
{-# LANGUAGE CPP #-}
|
|
|
|
module Nix.Cache where
|
|
|
|
import qualified Data.ByteString.Lazy as BS
|
|
import Nix.Expr.Types.Annotated
|
|
|
|
#if defined (__linux__)
|
|
#define USE_COMPACT 1
|
|
#endif
|
|
|
|
#ifdef USE_COMPACT
|
|
import qualified Data.Compact as C
|
|
import qualified Data.Compact.Serialize as C
|
|
#endif
|
|
#ifdef MIN_VERSION_serialise
|
|
import qualified Codec.Serialise as S
|
|
#endif
|
|
|
|
readCache :: FilePath -> IO NExprLoc
|
|
readCache path = do
|
|
#if USE_COMPACT
|
|
eres <- C.unsafeReadCompact path
|
|
case eres of
|
|
Left err -> error $ "Error reading cache file: " ++ err
|
|
Right expr -> return $ C.getCompact expr
|
|
#else
|
|
#ifdef MIN_VERSION_serialise
|
|
eres <- S.deserialiseOrFail <$> BS.readFile path
|
|
case eres of
|
|
Left err -> error $ "Error reading cache file: " ++ show err
|
|
Right expr -> return expr
|
|
#else
|
|
error "readCache not implemented for this platform"
|
|
#endif
|
|
#endif
|
|
|
|
writeCache :: FilePath -> NExprLoc -> IO ()
|
|
writeCache path expr =
|
|
#ifdef USE_COMPACT
|
|
C.writeCompact path =<< C.compact expr
|
|
#else
|
|
#ifdef MIN_VERSION_serialise
|
|
BS.writeFile path (S.serialise expr)
|
|
#else
|
|
error "writeCache not implemented for this platform"
|
|
#endif
|
|
#endif |