hw-aeson 0.1.8.0 → 0.1.9.0
raw patch · 2 files changed
+32/−10 lines, 2 filesdep ~aesondep ~bytestringdep ~containersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aeson, bytestring, containers, doctest, hashable, hedgehog
API changes (from Hackage documentation)
Files
- hw-aeson.cabal +8/−8
- src/HaskellWorks/Data/Aeson.hs +24/−2
hw-aeson.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: hw-aeson-version: 0.1.8.0+version: 0.1.9.0 synopsis: Convenience functions for Aeson description: Convenience functions for Aeson. category: Data, JSON@@ -12,7 +12,7 @@ copyright: 2018-2022 John Ky license: BSD-3-Clause license-file: LICENSE-tested-with: GHC == 9.2.2, GHC == 9.0.2, GHC == 8.10.7, GHC == 8.8.4, GHC == 8.6.5+tested-with: GHC == 9.4.4, GHC == 9.2.5, GHC == 9.0.2, GHC == 8.10.7, GHC == 8.8.4, GHC == 8.6.5 build-type: Simple extra-source-files: README.md @@ -22,15 +22,15 @@ common base { build-depends: base >= 4.11 && < 5 } -common aeson { build-depends: aeson >= 1.4 && < 2.2 }-common bytestring { build-depends: bytestring >= 0.10 && < 0.12 }-common containers { build-depends: containers >= 0.6 && < 0.7 }-common doctest { build-depends: doctest >= 0.16.2 && < 0.21 }+common aeson { build-depends: aeson >= 1.4 && < 2.3 }+common bytestring { build-depends: bytestring >= 0.10 && < 0.13 }+common containers { build-depends: containers >= 0.6 && < 0.8 }+common doctest { build-depends: doctest >= 0.16.2 && < 0.23 } common doctest-discover { build-depends: doctest-discover >= 0.2 && < 0.3 } common hashable { build-depends: hashable >= 1.3 && < 1.5 }-common hedgehog { build-depends: hedgehog >= 0.6 && < 1.3 }+common hedgehog { build-depends: hedgehog >= 0.6 && < 1.5 } common hspec { build-depends: hspec >= 2.4 && < 3 }-common text { build-depends: text >= 1.2 && < 1.3 }+common text { build-depends: text >= 1.2 && < 3 } common text-short { build-depends: text-short >= 0.1.3 && < 0.2 } common unordered-containers { build-depends: unordered-containers >= 0.2 && < 0.3 }
src/HaskellWorks/Data/Aeson.hs view
@@ -1,5 +1,10 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DerivingVia #-}-+#if MIN_VERSION_aeson(2,2,0)+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+#endif module HaskellWorks.Data.Aeson ( JsonEndo(..) , WithJsonKeyValues(..)@@ -30,8 +35,13 @@ } deriving (Semigroup, Monoid) via (Endo [a]) +#if MIN_VERSION_aeson(2,2,0)+instance (ToJSON e, KeyValue e a) => KeyValue e (JsonEndo a) where+ explicitToField f k v = JsonEndo (k .= f v :)+#else instance KeyValue a => KeyValue (JsonEndo a) where- k .= v = JsonEndo (k .= v:)+#endif+ k .= v = JsonEndo (k .= v :) objectWithoutNulls :: [Pair] -> Value objectWithoutNulls = object . Prelude.filter (not . isNull . snd)@@ -45,13 +55,21 @@ Nothing -> fail $ "Could not parse " <> t -- | Render optional fields as missing in JSON output.+#if MIN_VERSION_aeson(2,2,0)+(.?=) :: (KeyValue e p, ToJSON v, Monoid p) => Key -> Maybe v -> p+#else (.?=) :: (KeyValue p, ToJSON v, Monoid p) => Key -> Maybe v -> p+#endif (.?=) k mv = case mv of Just v -> k .= v Nothing -> mempty -- | Same as '.=', but with lower precedence to work well with lens.+#if MIN_VERSION_aeson(2,2,0)+(.!=) :: (KeyValue e kv, ToJSON v) => Key -> v -> kv+#else (.!=) :: (KeyValue kv, ToJSON v) => Key -> v -> kv+#endif (.!=) = (.=) -- | Same as 'object' except used in combination with '.?=' and '.!=' instead of '.='.@@ -81,7 +99,11 @@ -- ] -- @ class ToJsonKeyValues a where+#if MIN_VERSION_aeson(2,2,0)+ toJsonKeyValues :: (KeyValue e kv, Monoid kv) => a -> [kv]+#else toJsonKeyValues :: (KeyValue kv, Monoid kv) => a -> [kv]+#endif -- | For use with language extension DerivingVia. This derivation provides -- a ToJSON instance that delegates to the ToJsonKeyValues instance.