hasql-0.20: library/Hasql/Core/DecodePrimitive.hs
module Hasql.Core.DecodePrimitive where
import Hasql.Prelude hiding (bool)
import Hasql.Core.Model
import qualified BinaryParser as A
import qualified PostgreSQL.Binary.Decoding as B
newtype DecodePrimitive primitive =
DecodePrimitive (ReaderT Bool A.BinaryParser primitive)
deriving (Functor)
-- * Helpers
-------------------------
{-# INLINE nonDateTime #-}
nonDateTime :: A.BinaryParser primitive -> DecodePrimitive primitive
nonDateTime parser =
DecodePrimitive (ReaderT (const parser))
{-# INLINE dateTime #-}
dateTime :: A.BinaryParser primitive -> A.BinaryParser primitive -> DecodePrimitive primitive
dateTime intParser floatParser =
DecodePrimitive (ReaderT (\case False -> floatParser; True -> intParser))
-- * Numbers
-------------------------
{-# INLINE bool #-}
bool :: DecodePrimitive Bool
bool =
nonDateTime B.bool
{-# INLINE int8 #-}
int8 :: DecodePrimitive Int64
int8 =
nonDateTime B.int
-- * Blobs
-------------------------
{-# INLINE text #-}
text :: DecodePrimitive Text
text =
nonDateTime B.text_strict
{-# INLINE bytea #-}
bytea :: DecodePrimitive ByteString
bytea =
nonDateTime B.bytea_strict
-- * Time
-------------------------
{-# INLINE timestamptz #-}
timestamptz :: DecodePrimitive UTCTime
timestamptz =
dateTime B.timestamptz_int B.timestamptz_float