packages feed

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 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