diff options
author | Alexander Foremny <aforemny@posteo.de> | 2023-10-17 14:14:48 +0200 |
---|---|---|
committer | Alexander Foremny <aforemny@posteo.de> | 2023-11-07 09:50:51 +0100 |
commit | ea1236f2cf6d3ef4b739b2ca28f47a3bbed42295 (patch) | |
tree | 3b1801ad9654e657ed0c0b202e316dc42244c56d /app/History/Cache.hs | |
parent | 4521eb7a4b0d4a4ff8cf9153484d0596c5143170 (diff) |
refactor history
Diffstat (limited to 'app/History/Cache.hs')
-rw-r--r-- | app/History/Cache.hs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/app/History/Cache.hs b/app/History/Cache.hs new file mode 100644 index 0000000..af40a84 --- /dev/null +++ b/app/History/Cache.hs @@ -0,0 +1,26 @@ +module History.Cache (cached) where + +import Data.Binary (Binary, decodeFileOrFail, encodeFile) +import Data.Text qualified as T +import System.Directory (createDirectoryIfMissing, doesFileExist, getCurrentDirectory) + +cached :: Binary a => T.Text -> (T.Text -> IO a) -> IO a +cached hash func = do + -- FIXME Cache inside Git root + -- + -- The cache location should not be dependant on the current directory, but + -- should be placed alongside the `.git` directory. + cwd <- getCurrentDirectory + createDirectoryIfMissing True (cwd ++ "/.anissue") + let file = (cwd ++ "/.anissue/" ++ T.unpack hash) + doesFileExist file >>= \case + True -> + decodeFileOrFail file >>= \case + Left _ -> generate file + Right blob -> pure blob + False -> generate file + where + generate file = do + blob <- func hash + encodeFile file blob + pure blob |