packages feed

git-fmt-0.1.0.2: src/Git/Fmt/Language/Json/Pretty.hs

{-|
Module      : Git.Fmt.Language.Json.Pretty
Description : Pretty instances for the JSON language.

Copyright   : (c) Henry J. Wylde, 2015
License     : BSD3
Maintainer  : public@hjwylde.com

Pretty instances for the JSON language.
-}

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Git.Fmt.Language.Json.Pretty where

import Text.JSON
import Text.PrettyPrint.HughesPJClass


instance Pretty JSValue where
    pPrint (JSArray values)     = cat [char '[', nest 1 (sep $ punctuate (char ',') (map pPrint values)), char ']']
    pPrint (JSObject obj)
        | null keyValues    = text "{}"
        | otherwise         = char '{' $+$ nest 1 (vcat $ punctuate (char ',') keyValueDocs) $+$ char '}'
        where
            keyValueDocs    = map (\(key, value) -> char '"' <> text key <> text "\":" <+> pPrint value) keyValues
            keyValues       = fromJSObject obj
    pPrint value            = text $ showJSValue value ""