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 +4/−0
- README.md +9/−3
- aeson-modern-tojson.cabal +3/−3
- src/Data/Aeson/ToJSON/Deriving.hs +41/−8
- test/Data/Aeson/ToJSON/DerivingSpec.hs +17/−6
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