{-# LANGUAGE TypeSynonymInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Yesod.Json ( defaultLayoutJson , jsonToRepJson ) where import Yesod.Handler (GHandler) import Yesod.Content ( ToContent (toContent), RepHtmlJson (RepHtmlJson), RepHtml (RepHtml) , RepJson (RepJson), Content (ContentBuilder) ) import Yesod.Core (defaultLayout, Yesod) import Yesod.Widget (GWidget) import qualified Data.JSON.Types as J import qualified Text.JSON.Enumerator as J instance ToContent J.Value where toContent = flip ContentBuilder Nothing . J.renderValue -- | Provide both an HTML and JSON representation for a piece of data, using -- the default layout for the HTML output ('defaultLayout'). defaultLayoutJson :: Yesod master => GWidget sub master () -> J.Value -> GHandler sub master RepHtmlJson defaultLayoutJson w json = do RepHtml html' <- defaultLayout w return $ RepHtmlJson html' $ toContent json -- | Wraps the 'Content' generated by 'jsonToContent' in a 'RepJson'. jsonToRepJson :: J.Value -> GHandler sub master RepJson jsonToRepJson = return . RepJson . toContent