parseJsonBody_

This commit is contained in:
Michael Snoyman 2012-01-11 00:17:47 +02:00
parent 4d45bfeb13
commit d64ab7482e

View File

@ -8,6 +8,7 @@ module Yesod.Json
-- * Convert to a JSON value -- * Convert to a JSON value
, parseJsonBody , parseJsonBody
, parseJsonBody_
-- * Produce JSON values -- * Produce JSON values
, J.Value (..) , J.Value (..)
@ -15,7 +16,7 @@ module Yesod.Json
, array , array
) where ) where
import Yesod.Handler (GHandler, waiRequest, lift) import Yesod.Handler (GHandler, waiRequest, lift, invalidArgs)
import Yesod.Content import Yesod.Content
( ToContent (toContent), RepHtmlJson (RepHtmlJson), RepHtml (RepHtml) ( ToContent (toContent), RepHtmlJson (RepHtmlJson), RepHtml (RepHtml)
, RepJson (RepJson), Content (ContentBuilder) , RepJson (RepJson), Content (ContentBuilder)
@ -27,7 +28,7 @@ import qualified Data.Aeson as J
import qualified Data.Aeson.Encode as JE import qualified Data.Aeson.Encode as JE
import Data.Aeson.Encode (fromValue) import Data.Aeson.Encode (fromValue)
import Data.Conduit.Attoparsec (sinkParser) import Data.Conduit.Attoparsec (sinkParser)
import Data.Text (Text) import Data.Text (Text, pack)
import qualified Data.Vector as V import qualified Data.Vector as V
import Text.Julius (ToJavascript (..)) import Text.Julius (ToJavascript (..))
import Data.Text.Lazy.Builder (fromLazyText) import Data.Text.Lazy.Builder (fromLazyText)
@ -74,6 +75,15 @@ parseJsonBody = do
req <- waiRequest req <- waiRequest
fmap J.fromJSON $ lift $ requestBody req $$ sinkParser J.json' fmap J.fromJSON $ lift $ requestBody req $$ sinkParser J.json'
-- | Same as 'parseJsonBody', but return an invalid args response on a parse
-- error.
parseJsonBody_ :: J.FromJSON a => GHandler sub master a
parseJsonBody_ = do
ra <- parseJsonBody
case ra of
J.Error s -> invalidArgs [pack s]
J.Success a -> return a
instance ToJavascript J.Value where instance ToJavascript J.Value where
toJavascript = fromLazyText . decodeUtf8 . JE.encode toJavascript = fromLazyText . decodeUtf8 . JE.encode