packages feed

text-show-instances-3.9.7: src/TextShow/Data/Aeson.hs

{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS -Wno-orphans #-}
module TextShow.Data.Aeson where

import Data.Aeson (Value(..))
import qualified Data.Aeson.Key as K
import qualified Data.Aeson.KeyMap as KM

import Prelude ()
import Prelude.Compat

import TextShow ( TextShow(..), TextShow1(..)
                , fromText, showbParen, showbPrec1, showtToShowb, singleton )
import TextShow.Data.Scientific ()
import TextShow.Data.Vector ()
import TextShow.Utils (showbUnaryListWith)

instance TextShow K.Key where
    showb = showtToShowb showt
    showt = showt . K.toText

instance TextShow Value where
    showbPrec _ Null = fromText "Null"
    showbPrec d (Bool b) = showbParen (d > 10)
        $ fromText "Bool " <> showbPrec 11 b
    showbPrec d (Number s) = showbParen (d > 10)
        $ fromText "Number " <> showbPrec 11 s
    showbPrec d (String s) = showbParen (d > 10)
        $ fromText "String " <> showbPrec 11 s
    showbPrec d (Array xs) = showbParen (d > 10)
        $ fromText "Array " <> showbPrec 11 xs
    showbPrec d (Object xs) = showbParen (d > 10)
        $ fromText "Object (fromList "
        <> showbPrec 11 (KM.toAscList xs)
        <> singleton ')'

instance TextShow v => TextShow (KM.KeyMap v) where
    showbPrec = showbPrec1

instance TextShow1 KM.KeyMap where
    liftShowbPrec sp sl d xs =
      showbUnaryListWith (liftShowbList sp sl) d (KM.toAscList xs)