module MathiasSM.Context.Feeds (feedsContext) where
import Hakyll (Context, Item (Item, itemBody), field, fromFilePath, listField)
import MathiasSM.Config (SiteConfig)
import MathiasSM.Feeds (Feed (..), feedHref, feeds)
feedsContext :: SiteConfig -> Context a
feedsContext :: forall a. SiteConfig -> Context a
feedsContext SiteConfig
cfg = String -> Context Feed -> Compiler [Item Feed] -> Context a
forall a b. String -> Context a -> Compiler [Item a] -> Context b
listField String
"feeds" Context Feed
feedContext (Compiler [Item Feed] -> Context a)
-> Compiler [Item Feed] -> Context a
forall a b. (a -> b) -> a -> b
$ do
found <- SiteConfig -> Compiler (Either [String] [Feed])
forall (m :: * -> *).
MonadMetadata m =>
SiteConfig -> m (Either [String] [Feed])
feeds SiteConfig
cfg
either (fail . unlines) (pure . map (\Feed
feed -> Identifier -> Feed -> Item Feed
forall a. Identifier -> a -> Item a
Item (String -> Identifier
fromFilePath (String -> Identifier) -> String -> Identifier
forall a b. (a -> b) -> a -> b
$ Feed -> String
feedFile Feed
feed) Feed
feed)) found
where
feedContext :: Context Feed
feedContext =
String -> (Item Feed -> Compiler String) -> Context Feed
forall a. String -> (Item a -> Compiler String) -> Context a
field String
"title" (String -> Compiler String
forall a. a -> Compiler a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Compiler String)
-> (Item Feed -> String) -> Item Feed -> Compiler String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Feed -> String
feedTitle (Feed -> String) -> (Item Feed -> Feed) -> Item Feed -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Item Feed -> Feed
forall a. Item a -> a
itemBody)
Context Feed -> Context Feed -> Context Feed
forall a. Semigroup a => a -> a -> a
<> String -> (Item Feed -> Compiler String) -> Context Feed
forall a. String -> (Item a -> Compiler String) -> Context a
field String
"href" (String -> Compiler String
forall a. a -> Compiler a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Compiler String)
-> (Item Feed -> String) -> Item Feed -> Compiler String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Feed -> String
feedHref (Feed -> String) -> (Item Feed -> Feed) -> Item Feed -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Item Feed -> Feed
forall a. Item a -> a
itemBody)