aeson-modern-tojson (empty) → 0.1.0.0
raw patch · 7 files changed
+169/−0 lines, 7 filesdep +aesondep +aeson-modern-tojsondep +basesetup-changed
Dependencies added: aeson, aeson-modern-tojson, base, inspection-testing
Files
- ChangeLog.md +6/−0
- LICENSE +13/−0
- README.md +11/−0
- Setup.hs +2/−0
- aeson-modern-tojson.cabal +63/−0
- src/Data/Aeson/ToJSON/Deriving.hs +46/−0
- test/Data/Aeson/ToJSON/DerivingSpec.hs +28/−0
+ ChangeLog.md view
@@ -0,0 +1,6 @@+# Changelog for aeson-modern-tojson++## Unreleased changes++## 0.1.0.0+ * Library creation
+ LICENSE view
@@ -0,0 +1,13 @@+Copyright (c) 2021, Gautier DI FOLCO++Permission to use, copy, modify, and/or distribute this software for any+purpose with or without fee is hereby granted, provided that the above+copyright notice and this permission notice appear in all copies.++THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ README.md view
@@ -0,0 +1,11 @@+# 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).++As simple as:+++```+data W = W Int Int+deriving stock (Generic)+deriving (ToJSON) via (ModernToJSON W)+```
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ aeson-modern-tojson.cabal view
@@ -0,0 +1,63 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.34.4.+--+-- see: https://github.com/sol/hpack++name: aeson-modern-tojson+version: 0.1.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>.+ .+ As simple as:+ .+ .+ @+ data W = W Int Int+ deriving stock (Generic)+ deriving (ToJSON) via (ModernToJSON W)+ @+category: Text, Web, JSON+homepage: https://github.com/blackheaven/aeson-modern-tojson#readme+bug-reports: https://github.com/blackheaven/aeson-modern-tojson/issues+author: Gautier DI FOLCO+maintainer: gautier.difolco@gmail.com+copyright: Gautier DI FOLCO+license: ISC+license-file: LICENSE+build-type: Simple+extra-source-files:+ README.md+ ChangeLog.md+ LICENSE++source-repository head+ type: git+ location: https://github.com/blackheaven/aeson-modern-tojson++library+ exposed-modules:+ Data.Aeson.ToJSON.Deriving+ other-modules:+ Paths_aeson_modern_tojson+ hs-source-dirs:+ src+ build-depends:+ aeson >=1.0.0.0 && <2+ , base >=4.7 && <5+ default-language: Haskell2010++test-suite aeson-modern-tojson-test+ type: exitcode-stdio-1.0+ main-is: Data/Aeson/ToJSON/DerivingSpec.hs+ other-modules:+ Paths_aeson_modern_tojson+ hs-source-dirs:+ test+ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints+ build-depends:+ aeson >=1.0.0.0 && <2+ , aeson-modern-tojson+ , base >=4.7 && <5+ , inspection-testing >=0.4.4.0 && <1.0+ default-language: Haskell2010
+ src/Data/Aeson/ToJSON/Deriving.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-}++-- |+-- Module: Data.Time.Format.Typed+-- Copyright: (c) 20021 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>.+--+-- As simple as:+--+--+-- @+-- data W = W Int Int+-- deriving stock (Generic)+-- deriving (ToJSON) via (ModernToJSON W)+-- @+module Data.Aeson.ToJSON.Deriving+ ( ModernToJSON (..),+ ToJSON (..),+ )+where++import Data.Aeson+import GHC.Generics++newtype ModernToJSON a = ModernToJSON {unModernToJSON :: a}+ deriving stock (Eq, Show, Generic)++instance+ ( Generic a,+ ToJSON a,+ GToJSON' Value Zero (Rep a),+ GToJSON' Encoding Zero (Rep a)+ ) =>+ ToJSON (ModernToJSON a)+ where+ toJSON = genericToJSON defaultOptions . unModernToJSON+ toEncoding = genericToEncoding defaultOptions . unModernToJSON
+ test/Data/Aeson/ToJSON/DerivingSpec.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE TemplateHaskell #-}+{-# OPTIONS_GHC -dsuppress-idinfo -dsuppress-coercions -dsuppress-type-applications+-dsuppress-module-prefixes -dsuppress-type-signatures -dsuppress-uniques -O #-}++module Data.Aeson.ToJSON.DerivingSpec (main) where++import Data.Aeson+import Data.Aeson.ToJSON.Deriving+import GHC.Generics+import Test.Inspection (inspect, (===))++data W = W Int Int+ deriving stock (Generic)+ deriving (ToJSON) via (ModernToJSON W)++toEncodingDerived :: W -> Encoding+toEncodingDerived = toEncoding++toEncodingTarget :: W -> Encoding+toEncodingTarget = genericToEncoding defaultOptions++main :: IO ()+main = pure ()++inspect $ 'toEncodingDerived === 'toEncodingTarget