{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} --------------------------------------------------------- -- -- Module : Yesod.Helpers.AtomFeed -- Copyright : Michael Snoyman -- License : BSD3 -- -- Maintainer : Michael Snoyman -- Stability : Stable -- Portability : portable -- -- Generating atom news feeds. -- --------------------------------------------------------- module Yesod.Helpers.AtomFeed ( AtomFeed (..) , AtomFeedEntry (..) ) where import Yesod.Rep import Data.Convertible.Text import Data.Text.Lazy (Text) import qualified Data.Text.Lazy as TL import Data.Time.Clock import Web.Encodings data AtomFeed = AtomFeed { atomTitle :: String , atomLinkSelf :: String , atomLinkHome :: String , atomUpdated :: UTCTime , atomEntries :: [AtomFeedEntry] } instance HasReps AtomFeed where reps = [ (TypeAtom, return . cs) ] data AtomFeedEntry = AtomFeedEntry { atomEntryLink :: String , atomEntryUpdated :: UTCTime , atomEntryTitle :: String , atomEntryContent :: String } instance ConvertSuccess AtomFeed Content where convertSuccess = cs . (cs :: AtomFeed -> Text) instance ConvertSuccess AtomFeed Text where convertSuccess f = TL.concat [ cs "\n" , cs "" , cs "" , encodeHtml $ cs $ atomTitle f , cs "" , cs "" , cs "" , cs "" , cs $ formatW3 $ atomUpdated f , cs "" , cs "" , encodeHtml $ cs $ atomLinkHome f , cs "" , TL.concat $ map cs $ atomEntries f , cs "" ] instance ConvertSuccess AtomFeedEntry Text where convertSuccess e = TL.concat [ cs "" , cs "" , encodeHtml $ cs $ atomEntryLink e , cs "" , cs "" , cs "" , cs $ formatW3 $ atomEntryUpdated e , cs "" , cs "" , encodeHtml $ cs $ atomEntryTitle e , cs "" , cs "" , cs "" ]