1-- | This module provides an API for resource providers. Resource providers
2-- allow Hakyll to get content from resources; the type of resource depends on
3-- the concrete instance.
5module Hakyll.Core.ResourceProvider
6 ( ResourceProvider (..)
12import Control.Monad ((<=<))
13import Data.Word (Word8)
15import qualified Data.ByteString.Lazy as LB
16import OpenSSL.Digest.ByteString.Lazy (digest)
17import OpenSSL.Digest (MessageDigest (MD5))
19import Hakyll.Core.Identifier
20import Hakyll.Core.Store
22-- | A value responsible for retrieving and listing resources
24data ResourceProvider = ResourceProvider
25 { -- | A list of all resources this provider is able to provide
26 resourceList :: [Identifier]
27 , -- | Retrieve a certain resource as string
28 resourceString :: Identifier -> IO String
29 , -- | Retrieve a certain resource as lazy bytestring
30 resourceLazyByteString :: Identifier -> IO LB.ByteString
33-- | Check if a given resource exists
35resourceExists :: ResourceProvider -> Identifier -> Bool
36resourceExists provider = flip elem $ resourceList provider
38-- | Retrieve a digest for a given resource
40resourceDigest :: ResourceProvider -> Identifier -> IO [Word8]
41resourceDigest provider = digest MD5 <=< resourceLazyByteString provider
43-- | Check if a resource was modified
45resourceModified :: ResourceProvider -> Identifier -> Store -> IO Bool
46resourceModified provider identifier store = do
47 -- Get the latest seen digest from the store
48 lastDigest <- storeGet store itemName identifier
49 -- Calculate the digest for the resource
50 newDigest <- resourceDigest provider identifier
52 if Just newDigest == lastDigest
53 -- All is fine, not modified
55 -- Resource modified; store new digest
56 else do storeSet store itemName identifier newDigest
59 itemName = "Hakyll.Core.ResourceProvider.resourceModified"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list