module Hasql.Core.DecodePrimitive where import Hasql.Prelude hiding (bool) import Hasql.Core.Model import qualified Ptr.Parse as A import qualified Hasql.Core.Protocol.Parse.Values as B newtype DecodePrimitive primitive = DecodePrimitive (ReaderT Bool A.Parse primitive) deriving (Functor) -- * Helpers ------------------------- {-# INLINE nonDateTime #-} nonDateTime :: A.Parse primitive -> DecodePrimitive primitive nonDateTime parser = DecodePrimitive (ReaderT (const parser)) {-# INLINE dateTime #-} dateTime :: A.Parse primitive -> A.Parse primitive -> DecodePrimitive primitive dateTime intParser floatParser = DecodePrimitive (ReaderT (\case False -> floatParser; True -> intParser)) -- * Numbers ------------------------- {-# INLINE bool #-} bool :: DecodePrimitive Bool bool = nonDateTime B.bool {-# INLINE int4 #-} int4 :: DecodePrimitive Int32 int4 = nonDateTime B.int4 {-# INLINE int8 #-} int8 :: DecodePrimitive Int64 int8 = nonDateTime B.int8 -- * Blobs ------------------------- {-# INLINE text #-} text :: DecodePrimitive Text text = nonDateTime B.text {-# INLINE bytea #-} bytea :: DecodePrimitive ByteString bytea = nonDateTime B.bytea -- * Time ------------------------- {-# INLINE timestamptz #-} timestamptz :: DecodePrimitive UTCTime timestamptz = dateTime B.intTimestamptz B.floatTimestamptz