script-monad-0.0.4: src/Data/Aeson/Extras.hs
{- |
Module : Data.Aeson.Extras
Description : Some stuff not included in Data.Aeson.
Copyright : 2018, Automattic, Inc.
License : BSD3
Maintainer : Nathan Bloomfield (nbloomf@gmail.com)
Stability : experimental
Portability : POSIX
JSON helpers.
-}
module Data.Aeson.Extras (
JsonError(..)
) where
import Data.Aeson
( Value() )
import Data.ByteString.Lazy
( ByteString )
import Data.String
( fromString )
import Data.Text
( Text, pack )
import Test.QuickCheck
( Arbitrary(..), Gen )
-- | Represents the kinds of errors that can occur when parsing and decoding JSON.
data JsonError
-- | A generic JSON error; try not to use this.
= JsonError Text
-- | A failed parse.
| JsonParseError ByteString
-- | An attempt to look up the value of a key that does not exist on an object.
| JsonKeyDoesNotExist Text Value
-- | An attempt to look up the value of a key on something other than an object.
| JsonKeyLookupOffObject Text Value
-- | A failed attempt to convert a `Value` to some other type.
| JsonConstructError String
deriving (Eq, Show)
instance Arbitrary JsonError where
arbitrary = do
let arbText = pack <$> arbitrary
k <- arbitrary :: Gen Int
case k `mod` 5 of
0 -> JsonError <$> arbText
1 -> JsonParseError <$> (fromString <$> arbitrary)
2 -> JsonKeyDoesNotExist <$>
(fromString <$> arbitrary) <*>
(fromString <$> arbitrary)
3 -> JsonKeyLookupOffObject <$>
(fromString <$> arbitrary) <*>
(fromString <$> arbitrary)
_ -> JsonConstructError <$> arbitrary