on dac3fac help sign in
hakyll/src/Hakyll/Core/Resource/MetadataCache.hs
61 lines 2.2 kB history raw
1--------------------------------------------------------------------------------
2module Hakyll.Core.Resource.MetadataCache
3 ( resourceMetadata
4 , resourceBody
5 , resourceInvalidateMetadataCache
6 ) where
9--------------------------------------------------------------------------------
10import Hakyll.Core.Resource
11import Hakyll.Core.Resource.Metadata
12import Hakyll.Core.Resource.Provider.Internal
13import qualified Hakyll.Core.Store as Store
16--------------------------------------------------------------------------------
17resourceMetadata :: ResourceProvider -> Resource -> IO Metadata
18resourceMetadata rp r = do
19 load rp r
20 Store.Found md <- Store.get (resourceStore rp)
21 [name, unResource r, "metadata"]
22 return md
25--------------------------------------------------------------------------------
26resourceBody :: ResourceProvider -> Resource -> IO String
27resourceBody rp r = do
28 load rp r
29 Store.Found bd <- Store.get (resourceStore rp)
30 [name, unResource r, "body"]
31 maybe (resourceString r) return bd
34--------------------------------------------------------------------------------
35resourceInvalidateMetadataCache :: ResourceProvider -> Resource -> IO ()
36resourceInvalidateMetadataCache rp r = do
37 Store.delete (resourceStore rp) [name, unResource r, "metadata"]
38 Store.delete (resourceStore rp) [name, unResource r, "body"]
41--------------------------------------------------------------------------------
42load :: ResourceProvider -> Resource -> IO ()
43load rp r = do
44 mmd <- Store.get store mdk :: IO (Store.Result Metadata)
45 case mmd of
46 -- Already loaded
47 Store.Found _ -> return ()
48 -- Not yet loaded
49 _ -> do
50 (metadata, body) <- loadMetadata rp r
51 Store.set store mdk metadata
52 Store.set store bk body
53 where
54 store = resourceStore rp
55 mdk = [name, unResource r, "metadata"]
56 bk = [name, unResource r, "body"]
59--------------------------------------------------------------------------------
60name :: String
61name = "Hakyll.Core.Resource.Provider.MetadataCache"