hpqtypes 1.9.0.1 → 1.9.1.0
raw patch · 3 files changed
+30/−17 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Database.PostgreSQL.PQTypes.JSON: aesonFromSQL :: FromJSON t => Maybe PGbytea -> IO t
+ Database.PostgreSQL.PQTypes.JSON: aesonToSQL :: ToJSON t => t -> ParamAllocator -> (Ptr PGbytea -> IO r) -> IO r
Files
- CHANGELOG.md +3/−0
- hpqtypes.cabal +1/−1
- src/Database/PostgreSQL/PQTypes/JSON.hs +26/−16
CHANGELOG.md view
@@ -1,3 +1,6 @@+# hpqtypes-1.9.1.0 (2020-09-14)+* Expose aesonFromSQL and aesonToSQL for convenience.+ # hpqtypes-1.9.0.1 (2020-09-04) * Remove upper bounds of dependencies.
hpqtypes.cabal view
@@ -1,5 +1,5 @@ name: hpqtypes-version: 1.9.0.1+version: 1.9.1.0 synopsis: Haskell bindings to libpqtypes description: Efficient and easy-to-use bindings to (slightly modified)
src/Database/PostgreSQL/PQTypes/JSON.hs view
@@ -1,6 +1,9 @@-module Database.PostgreSQL.PQTypes.JSON (- JSON(..)+{-# LANGUAGE TypeApplications #-}+module Database.PostgreSQL.PQTypes.JSON+ ( JSON(..) , JSONB(..)+ , aesonFromSQL+ , aesonToSQL ) where import Data.Aeson@@ -39,11 +42,11 @@ instance FromSQL (JSON Value) where type PQBase (JSON Value) = PGbytea- fromSQL = valueFromSQL JSON+ fromSQL = fmap JSON . aesonFromSQL instance ToSQL (JSON Value) where type PQDest (JSON Value) = PGbytea- toSQL = valueToSQL unJSON+ toSQL = aesonToSQL . unJSON ---------------------------------------- @@ -72,24 +75,31 @@ instance FromSQL (JSONB Value) where type PQBase (JSONB Value) = PGbytea- fromSQL = valueFromSQL JSONB+ fromSQL = fmap JSONB . aesonFromSQL instance ToSQL (JSONB Value) where type PQDest (JSONB Value) = PGbytea- toSQL = valueToSQL unJSONB+ toSQL = aesonToSQL . unJSONB ---------------------------------------- -valueFromSQL :: (Value -> json) -> Maybe PGbytea -> IO json-valueFromSQL jsonCon mbase = do+-- | Helper for defining 'FromSQL' instance for a type with 'FromJSON' instance.+--+-- @since 1.9.1.0+aesonFromSQL :: FromJSON t => Maybe PGbytea -> IO t+aesonFromSQL mbase = do evalue <- eitherDecodeStrict' <$> fromSQL mbase case evalue of- Left err -> E.throwIO . E.ErrorCall $ "valueFromSQL: " ++ err- Right value -> return $ jsonCon value+ Left err -> E.throwIO . E.ErrorCall $ "aesonFromSQL: " ++ err+ Right value -> return value -valueToSQL :: (json -> Value)- -> json- -> ParamAllocator- -> (Ptr PGbytea -> IO r)- -> IO r-valueToSQL jsonDecon = toSQL . BSL.toStrict . encode . jsonDecon+-- | Helper for defining 'ToSQL' instance for a type with 'ToJSON' instance.+--+-- @since 1.9.1.0+aesonToSQL+ :: ToJSON t+ => t+ -> ParamAllocator+ -> (Ptr PGbytea -> IO r)+ -> IO r+aesonToSQL = toSQL . BSL.toStrict . encode