yesod/Yesod/Json.hs
Michael Snoyman 31a1b31481 Code import
2010-12-25 23:30:42 +02:00

34 lines
1.1 KiB
Haskell

{-# 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