packages feed

pa-json 0.1.0.0 → 0.1.1.0

raw patch · 2 files changed

+42/−1 lines, 2 filesdep +aeson-prettydep +bytestringPVP ok

version bump matches the API change (PVP)

Dependencies added: aeson-pretty, bytestring

API changes (from Hackage documentation)

+ Json.Enc: encToBytesUtf8 :: Enc -> ByteString
+ Json.Enc: encToBytesUtf8Lazy :: Enc -> ByteString
+ Json.Enc: encToTextPretty :: Enc -> Text
+ Json.Enc: encToTextPrettyLazy :: Enc -> Text
+ Json.Enc: instance GHC.Show.Show Json.Enc.Enc

Files

pa-json.cabal view
@@ -1,7 +1,7 @@ cabal-version:      3.0 -- !!! ATTN: file autogenerated from pa-template.cabal.mustache on toplevel !!! name:               pa-json-version:            0.1.0.0+version:            0.1.1.0 synopsis:           Our JSON parsers/encoders description:        The interface of `aeson` is unfortunately extremely … suboptimal. Here’s some wrappers trying to improve the situation, which we use internally. license:            BSD-3-Clause@@ -77,7 +77,9 @@       pa-label,       pa-error-tree,       aeson,+      aeson-pretty,       aeson-better-errors,+      bytestring,       containers,       scientific,       time,
src/Json/Enc.hs view
@@ -4,15 +4,21 @@ module Json.Enc where  import Data.Aeson (Encoding, Value (..))+import Data.Aeson qualified as Json+import Data.Aeson.Encode.Pretty qualified as Aeson.Pretty import Data.Aeson.Encoding qualified as AesonEnc+import Data.Aeson.Encoding qualified as Json.Enc+import Data.Aeson.Encoding qualified as Json.Encoding import Data.Aeson.Key qualified as Key import Data.Aeson.KeyMap (KeyMap) import Data.Aeson.KeyMap qualified as KeyMap+import Data.ByteString.Lazy qualified as LazyBytes import Data.Int (Int64) import Data.Map.Strict qualified as Map import Data.Scientific import Data.String (IsString (fromString)) import Data.Text.Lazy qualified as Lazy+import Data.Text.Lazy.Builder qualified as Text.Builder import Data.Time qualified as Time import Data.Time.Format.ISO8601 qualified as ISO8601 import GHC.TypeLits@@ -25,6 +31,9 @@ newtype Enc = Enc {unEnc :: Encoding}   deriving (Num, Fractional) via (NumLiteralOnly "Enc" Enc) +instance Show Enc where+  show e = e.unEnc & Json.Encoding.encodingToLazyByteString & bytesToTextUtf8UnsafeLazy & show+ -- | You can create an @Enc any@ that renders an 'Aeson.String' value with @OverloadedStrings@. instance IsString Enc where   fromString = Enc . AesonEnc.string@@ -39,6 +48,34 @@ instance RationalLiteral Enc where   rationalLiteral r = Enc $ AesonEnc.scientific (r & fromRational @Scientific) +-- | Convert an 'Enc' to a strict UTF8-bytestring which is valid JSON (minified).+encToBytesUtf8 :: Enc -> ByteString+encToBytesUtf8 enc = enc & encToBytesUtf8Lazy & toStrictBytes++-- | Convert an 'Enc' to a lazy UTF8-bytestring which is valid JSON (minified).+encToBytesUtf8Lazy :: Enc -> LazyBytes.ByteString+encToBytesUtf8Lazy enc = enc.unEnc & Json.Enc.encodingToLazyByteString++-- | Convert an 'Enc' to a strict Text which is valid JSON (prettyfied).+encToTextPretty :: Enc -> Text+encToTextPretty enc =+  enc+    & encToTextPrettyLazy+    & toStrict++-- | Convert an 'Enc' to a lazy Text which is valid JSON (prettyfied).+encToTextPrettyLazy :: Enc -> Lazy.Text+encToTextPrettyLazy enc =+  enc+    & encToBytesUtf8Lazy+    & Json.decode @Json.Value+    & annotate "the json parser can’t parse json encodings??"+    & unwrapError+    & Aeson.Pretty.encodePrettyToTextBuilder+    & Text.Builder.toLazyText++-- | * Encoders+ -- | Embed an 'Encoding' verbatim (it’s a valid JSON value) encoding :: Encoding -> Enc encoding = Enc@@ -184,6 +221,8 @@ utcTime :: Time.UTCTime -> Enc utcTime =   text . stringToText . ISO8601.iso8601Show @Time.UTCTime++-- | * Helpers  -- | Implement this class if you want your type to only implement the part of 'Num' -- that allows creating them from Integer-literals, then derive Num via 'NumLiteralOnly':