preql-0.2: src/Preql/Wire/Orphans.hs
{-# LANGUAGE DerivingStrategies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Orphan instances
module Preql.Wire.Orphans where
import Data.Aeson (FromJSON(..), ToJSON(..), Value(..), withScientific)
import Data.Scientific (toBoundedInteger)
import qualified Database.PostgreSQL.LibPQ as PQ
-- TODO use a locally-defined PgType, and hang instances on that, instead
instance ToJSON PQ.Oid where
toJSON (PQ.Oid oid) = Number (fromIntegral oid)
instance FromJSON PQ.Oid where
parseJSON = withScientific "Oid" $ \sci ->
case toBoundedInteger sci of
Just i -> return (PQ.Oid i)
Nothing -> fail "expected integer Oid"