@@ -2,6 +2,8 @@
22module Hakyll.Core.Metadata
33 ( Metadata
44 , MonadMetadata (..)
5+ , getMetadataField
6+ , getMetadataField'
57 , makePatternDependency
68 ) where
79
@@ -9,6 +11,7 @@ module Hakyll.Core.Metadata
911--------------------------------------------------------------------------------
1012import Control.Monad (forM)
1113import Data.Map (Map)
14+import qualified Data.Map as M
1215
1316
1417--------------------------------------------------------------------------------
@@ -34,6 +37,25 @@ class Monad m => MonadMetadata m where
3437 return (id', metadata)
3538
3639
40+--------------------------------------------------------------------------------
41+getMetadataField :: MonadMetadata m => Identifier -> String -> m (Maybe String)
42+getMetadataField identifier key = do
43+ metadata <- getMetadata identifier
44+ return $ M.lookup key metadata
45+
46+
47+--------------------------------------------------------------------------------
48+-- | Version of 'getMetadataField' which throws an error if the field does not
49+-- exist.
50+getMetadataField' :: MonadMetadata m => Identifier -> String -> m String
51+getMetadataField' identifier key = do
52+ field <- getMetadataField identifier key
53+ case field of
54+ Just v -> return v
55+ Nothing -> fail $ "Hakyll.Core.Metadata.getMetadataField': " ++
56+ "Item " ++ show identifier ++ " has no metadata field " ++ show key
57+
58+
3759--------------------------------------------------------------------------------
3860makePatternDependency :: MonadMetadata m => Pattern -> m Dependency
3961makePatternDependency pattern = do