From c1ff403387064ff0027b9e762cc6f6a8fa20c8d9 Mon Sep 17 00:00:00 2001 From: Alexander Foremny Date: Thu, 7 Dec 2023 03:58:21 +0100 Subject: chore: move remaining `History.*` modules outside of `History` --- app/Cache.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 app/Cache.hs (limited to 'app/Cache.hs') diff --git a/app/Cache.hs b/app/Cache.hs new file mode 100644 index 0000000..52d18ca --- /dev/null +++ b/app/Cache.hs @@ -0,0 +1,33 @@ +module Cache + ( cached, + cachedMaybe, + ) +where + +import Data.Binary (Binary, decodeFileOrFail, encodeFile) +import Data.Text qualified as T +import Debug +import Git qualified +import System.Directory (createDirectoryIfMissing, doesFileExist) +import System.FilePath (()) + +cached :: Binary a => T.Text -> IO a -> IO a +cached key func = do + root <- Git.getRootDir + createDirectoryIfMissing True (root ".anissue") + let file = (root ".anissue" T.unpack key) + doesFileExist file >>= \case + True -> + decodeFileOrFail file >>= \case + Left e -> debug "e" e `seq` generate file + Right blob -> pure blob + False -> generate file + where + generate file = do + blob <- func + encodeFile (debug "cache miss" file) blob + pure blob + +cachedMaybe :: Binary a => Maybe T.Text -> IO a -> IO a +cachedMaybe Nothing func = func +cachedMaybe (Just key) func = cached key func -- cgit v1.2.3