34 lines
1.1 KiB
Haskell
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
|