hw-aeson 0.1.1.1 → 0.1.2.0
raw patch · 2 files changed
+37/−1 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ HaskellWorks.Data.Aeson: WithJsonKeyValues :: a -> WithJsonKeyValues a
+ HaskellWorks.Data.Aeson: [unWithJsonKeyValues] :: WithJsonKeyValues a -> a
+ HaskellWorks.Data.Aeson: class ToJsonKeyValues a
+ HaskellWorks.Data.Aeson: instance HaskellWorks.Data.Aeson.ToJsonKeyValues a => Data.Aeson.Types.ToJSON.ToJSON (HaskellWorks.Data.Aeson.WithJsonKeyValues a)
+ HaskellWorks.Data.Aeson: newtype WithJsonKeyValues a
+ HaskellWorks.Data.Aeson: toJsonKeyValues :: (ToJsonKeyValues a, KeyValue kv, Monoid kv) => a -> [kv]
Files
- hw-aeson.cabal +1/−1
- src/HaskellWorks/Data/Aeson.hs +36/−0
hw-aeson.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: hw-aeson-version: 0.1.1.1+version: 0.1.2.0 synopsis: Convenience functions for Aeson description: Convenience functions for Aeson. category: Data, JSON
src/HaskellWorks/Data/Aeson.hs view
@@ -2,6 +2,8 @@ module HaskellWorks.Data.Aeson ( JsonEndo(..)+ , WithJsonKeyValues(..)+ , ToJsonKeyValues(..) , objectWithoutNulls , readJson , objectEndo@@ -60,3 +62,37 @@ -- @ objectEndo :: [JsonEndo Pair] -> Value objectEndo es = object $ unJsonEndo (mconcat es) []++-- | Generate key values from a value of a type. This can be used+-- in conjunction with 'WithJsonKeyValues' to define a 'ToJSON' instance+-- without having to implement both 'toJSON' and 'toEncoding', thereby+-- reducing boilerplate.+--+-- For example:+--+-- @+-- instance ToJsonEncoding MyType where+-- toJsonEncoding sv =+-- [ "my_field" .!= sv ^. #myField+-- ]+-- @+class ToJsonKeyValues a where+ toJsonKeyValues :: (KeyValue kv, Monoid kv) => a -> [kv]++-- | For use with language extension DerivingVia. This derivation provides+-- a ToJSON instance that delegates to the ToJsonKeyValues instance.+--+-- For example:+--+-- @+-- newtype MyType = MyType+-- { myField :: Text+-- } deriving J.ToJSON via WithJsonKeyValues MyType+-- @+newtype WithJsonKeyValues a = WithJsonKeyValues+ { unWithJsonKeyValues :: a+ }++instance ToJsonKeyValues a => ToJSON (WithJsonKeyValues a) where+ toJSON = objectEndo . toJsonKeyValues . unWithJsonKeyValues+ toEncoding = pairs . mconcat . toJsonKeyValues . unWithJsonKeyValues