packages feed

postgresql-types-0.1: src/jsonifier-aeson/JsonifierAeson.hs

-- | Extension of \"jsonifier\" integrating it with \"aeson\".
--
-- Can be imported in the same namespace as "Jsonifier" itself.
module JsonifierAeson where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Key as Aeson.Key
import qualified Data.Aeson.KeyMap as Aeson.KeyMap
import Data.Bifunctor (bimap)
import Jsonifier
import Prelude hiding (null)

aesonValue :: Aeson.Value -> Json
aesonValue = \case
  Aeson.Null -> null
  Aeson.Bool b -> bool b
  Aeson.Number n -> scientificNumber n
  Aeson.String s -> textString s
  Aeson.Array a -> aesonArray a
  Aeson.Object o -> aesonObject o

aesonArray :: Aeson.Array -> Json
aesonArray = array . fmap aesonValue

aesonObject :: Aeson.Object -> Json
aesonObject = object . fmap (bimap Aeson.Key.toText aesonValue) . Aeson.KeyMap.toList