{-|
Module      : Hakyll.Images.Metadata
Description : Handling image metadata
Copyright   : (c) Laurent P René de Cotret, 2019
License     : BSD3
Maintainer  : laurent.decotret@outlook.com
Stability   : unstable
Portability : portable
-}
module Hakyll.Images.Metadata
    ( module Codec.Picture.Metadata
    , imageMetadata
    , metadata
    ) where

import Codec.Picture                    (decodeImageWithMetadata)
import Codec.Picture.Metadata

import Hakyll.Core.Compiler             (Compiler)
import Hakyll.Core.Item                 (Item, itemBody)

import Hakyll.Images.Common             (Image(..))

-- | Extract metadata from an image. This function will throw an 
-- error in case of a problem.
--
-- This function is for testing purposes.
metadata :: Image -> Metadatas
metadata im = either error snd (decodeImageWithMetadata (image im))


-- | Extract metadata from an image.
--
-- @
-- match "*.jpg" $ do
--     route idRoute
--     compile $ do
--         im <- loadImage
--         meta <- imageMetadata
--         doSomethingWithMetadata meta
--         ...
-- @
imageMetadata :: Item Image -> Compiler Metadatas
imageMetadata = return . metadata . itemBody