packages feed

aeson-modern-tojson 0.1.1.0 → 0.2.0.0

raw patch · 5 files changed

+74/−20 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.Aeson.ToJSON.Deriving: ModernToJSON :: a -> ModernToJSON a
- Data.Aeson.ToJSON.Deriving: [unModernToJSON] :: ModernToJSON a -> a
- Data.Aeson.ToJSON.Deriving: instance (GHC.Generics.Generic a, Data.Aeson.Types.ToJSON.ToJSON a, Data.Aeson.Types.ToJSON.GToJSON' Data.Aeson.Types.Internal.Value Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a), Data.Aeson.Types.ToJSON.GToJSON' Data.Aeson.Encoding.Internal.Encoding Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Data.Aeson.Types.ToJSON.ToJSON (Data.Aeson.ToJSON.Deriving.ModernToJSON a)
- Data.Aeson.ToJSON.Deriving: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Aeson.ToJSON.Deriving.ModernToJSON a)
- Data.Aeson.ToJSON.Deriving: instance GHC.Generics.Generic (Data.Aeson.ToJSON.Deriving.ModernToJSON a)
- Data.Aeson.ToJSON.Deriving: instance GHC.Show.Show a => GHC.Show.Show (Data.Aeson.ToJSON.Deriving.ModernToJSON a)
- Data.Aeson.ToJSON.Deriving: newtype ModernToJSON a
+ Data.Aeson.ToJSON.Deriving: GenericallyToEncoding :: a -> GenericallyToEncoding a
+ Data.Aeson.ToJSON.Deriving: GenericallyToJSONToEncoding :: a -> GenericallyToJSONToEncoding a
+ Data.Aeson.ToJSON.Deriving: [unGenericallyToEncoding] :: GenericallyToEncoding a -> a
+ Data.Aeson.ToJSON.Deriving: [unGenericallyToJSONToEncoding] :: GenericallyToJSONToEncoding a -> a
+ Data.Aeson.ToJSON.Deriving: instance (GHC.Generics.Generic a, Data.Aeson.Types.ToJSON.ToJSON a, Data.Aeson.Types.ToJSON.GToJSON' Data.Aeson.Encoding.Internal.Encoding Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Data.Aeson.Types.ToJSON.ToJSON (Data.Aeson.ToJSON.Deriving.GenericallyToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance (GHC.Generics.Generic a, Data.Aeson.Types.ToJSON.ToJSON a, Data.Aeson.Types.ToJSON.GToJSON' Data.Aeson.Types.Internal.Value Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a), Data.Aeson.Types.ToJSON.GToJSON' Data.Aeson.Encoding.Internal.Encoding Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Data.Aeson.Types.ToJSON.ToJSON (Data.Aeson.ToJSON.Deriving.GenericallyToJSONToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Aeson.ToJSON.Deriving.GenericallyToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Aeson.ToJSON.Deriving.GenericallyToJSONToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance GHC.Generics.Generic (Data.Aeson.ToJSON.Deriving.GenericallyToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance GHC.Generics.Generic (Data.Aeson.ToJSON.Deriving.GenericallyToJSONToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance GHC.Show.Show a => GHC.Show.Show (Data.Aeson.ToJSON.Deriving.GenericallyToEncoding a)
+ Data.Aeson.ToJSON.Deriving: instance GHC.Show.Show a => GHC.Show.Show (Data.Aeson.ToJSON.Deriving.GenericallyToJSONToEncoding a)
+ Data.Aeson.ToJSON.Deriving: newtype GenericallyToEncoding a
+ Data.Aeson.ToJSON.Deriving: newtype GenericallyToJSONToEncoding a

Files

ChangeLog.md view
@@ -2,6 +2,10 @@  ## Unreleased changes +## 0.2.0.0+ * Drop `ModernToJSON`, use `GenericallyToJSONToEncoding` instead+ * Introduce `GenericallyToEncoding`+ ## 0.1.1.0  * Set aeson 2 compatibility 
README.md view
@@ -1,11 +1,17 @@ # aeson-modern-tojson-Provide a newtype to be used with DerivingVia to correctly derive [ToJSON](https://hackage.haskell.org/package/aeson-1.5.6.0/docs/Data-Aeson.html#g:7).+Provide a newtype to be used with DerivingVia to correctly derive [ToJSON](https://hackage.haskell.org/package/aeson-2.1.0.0/docs/Data-Aeson.html#g:7).  As simple as:   ``` data W = W Int Int-deriving stock (Generic)-deriving (ToJSON) via (ModernToJSON W)+    deriving stock (Generic)+    deriving (ToJSON) via (GenericallyToJSONToEncoding W)+```++```+data X = X Int Int+    deriving stock (Generic)+    deriving (ToJSON) via (GenericallyToEncoding X) ```
aeson-modern-tojson.cabal view
@@ -5,9 +5,9 @@ -- see: https://github.com/sol/hpack  name:           aeson-modern-tojson-version:        0.1.1.0+version:        0.2.0.0 synopsis:       Provide a handy way for derving ToJSON proprely.-description:    Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-1.5.6.0/docs/Data-Aeson.html#g:7 ToJSON>.+description:    Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-2.1.0.0/docs/Data-Aeson.html#g:7 ToJSON>.                 .                 As simple as:                 .@@ -15,7 +15,7 @@                 @                 data W = W Int Int                   deriving stock (Generic)-                  deriving (ToJSON) via (ModernToJSON W)+                  deriving (ToJSON) via (GenericallyToJSONToEncoding W)                 @ category:       Text, Web, JSON homepage:       https://github.com/blackheaven/aeson-modern-tojson#readme
src/Data/Aeson/ToJSON/Deriving.hs view
@@ -6,13 +6,13 @@  -- | -- Module:      Data.Time.Format.Typed--- Copyright:   (c) 20021 Gautier DI FOLCO+-- Copyright:   (c) 2021-2022 Gautier DI FOLCO -- License:     ISC -- Maintainer:  Gautier DI FOLCO <gautier.difolco@gmail.com> -- Stability:   experimental -- Portability: GHC ----- Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-1.5.6.0/docs/Data-Aeson.html#g:7 ToJSON>.+-- Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-2.1.0.0/docs/Data-Aeson.html#g:7 ToJSON>. -- -- As simple as: --@@ -20,18 +20,27 @@ -- @ -- data W = W Int Int --   deriving stock (Generic)---   deriving (ToJSON) via (ModernToJSON W)+--   deriving (ToJSON) via (GenericallyToJSONToEncoding W) -- @+--+-- @+-- data X = X Int Int+--   deriving stock (Generic)+--   deriving (ToJSON) via (GenericallyToEncoding X)+-- @ module Data.Aeson.ToJSON.Deriving-  ( ModernToJSON (..),+  ( GenericallyToJSONToEncoding (..),+    GenericallyToEncoding (..),     ToJSON (..),   ) where  import Data.Aeson+import Data.Maybe (fromMaybe) import GHC.Generics -newtype ModernToJSON a = ModernToJSON {unModernToJSON :: a}+-- | Deriving via 'Generic' 'toJSON' and 'toEncoding'.+newtype GenericallyToJSONToEncoding a = GenericallyToJSONToEncoding {unGenericallyToJSONToEncoding :: a}   deriving stock (Eq, Show, Generic)  instance@@ -40,7 +49,31 @@     GToJSON' Value Zero (Rep a),     GToJSON' Encoding Zero (Rep a)   ) =>-  ToJSON (ModernToJSON a)+  ToJSON (GenericallyToJSONToEncoding a)   where-  toJSON = genericToJSON defaultOptions . unModernToJSON-  toEncoding = genericToEncoding defaultOptions . unModernToJSON+  toJSON =+    genericToJSON defaultOptions+      . unGenericallyToJSONToEncoding+  toEncoding =+    genericToEncoding defaultOptions+      . unGenericallyToJSONToEncoding++-- | Deriving via 'Generic' 'toEncoding' ('toJSON' is done via 'decode . encode').+newtype GenericallyToEncoding a = GenericallyToEncoding {unGenericallyToEncoding :: a}+  deriving stock (Eq, Show, Generic)++instance+  ( Generic a,+    ToJSON a,+    GToJSON' Encoding Zero (Rep a)+  ) =>+  ToJSON (GenericallyToEncoding a)+  where+  toJSON =+    fromMaybe (error "GenericallyToEncoding.toJSON: unable to decode encoded Value")+      . decode+      . encode+      . unGenericallyToEncoding+  toEncoding =+    genericToEncoding defaultOptions+      . unGenericallyToEncoding
test/Data/Aeson/ToJSON/DerivingSpec.hs view
@@ -14,15 +14,26 @@  data W = W Int Int   deriving stock (Generic)-  deriving (ToJSON) via (ModernToJSON W)+  deriving (ToJSON) via (GenericallyToJSONToEncoding W) -toEncodingDerived :: W -> Encoding-toEncodingDerived = toEncoding+data X = X Int Int+  deriving stock (Generic)+  deriving (ToJSON) via (GenericallyToEncoding X) -toEncodingTarget :: W -> Encoding-toEncodingTarget = genericToEncoding defaultOptions+toEncodingDerivedBoth :: W -> Encoding+toEncodingDerivedBoth = toEncoding +toEncodingTargetBoth :: W -> Encoding+toEncodingTargetBoth = genericToEncoding defaultOptions++toEncodingDerivedOnly :: X -> Encoding+toEncodingDerivedOnly = toEncoding++toEncodingTargetOnly :: X -> Encoding+toEncodingTargetOnly = genericToEncoding defaultOptions+ main :: IO () main = pure () -inspect $ 'toEncodingDerived ==- 'toEncodingTarget+inspect $ 'toEncodingDerivedBoth ==- 'toEncodingTargetBoth+inspect $ 'toEncodingDerivedOnly ==- 'toEncodingTargetOnly