module Hasql.Core.EncodePrimitive where
import Hasql.Prelude
import Hasql.Core.Model
import qualified ByteString.StrictBuilder as B
import qualified PostgreSQL.Binary.Encoding as A
import qualified PostgreSQL.Binary.Data as F
import qualified Hasql.Core.OID.Primitive as D
import qualified Hasql.Core.OID.Array as E
data EncodePrimitive primitive =
EncodePrimitive Word32 Word32 (primitive -> B.Builder) (primitive -> B.Builder)
instance Contravariant EncodePrimitive where
contramap fn (EncodePrimitive primitiveOID arrayOID builder1 builder2) =
EncodePrimitive primitiveOID arrayOID (builder1 . fn) (builder2 . fn)
int2 :: EncodePrimitive Int16
int2 =
EncodePrimitive D.int2 E.int2 A.int2_int16 A.int2_int16
int4 :: EncodePrimitive Int32
int4 =
EncodePrimitive D.int4 E.int4 A.int4_int32 A.int4_int32
int8 :: EncodePrimitive Int64
int8 =
EncodePrimitive D.int8 E.int8 A.int8_int64 A.int8_int64
text :: EncodePrimitive Text
text =
EncodePrimitive D.text E.text A.text_strict A.text_strict
date :: EncodePrimitive F.Day
date =
EncodePrimitive D.date E.date A.date A.date
time :: EncodePrimitive F.TimeOfDay
time =
EncodePrimitive D.time E.time A.time_int A.time_float
timetz :: EncodePrimitive (F.TimeOfDay, F.TimeZone)
timetz =
EncodePrimitive D.timetz E.timetz A.timetz_int A.timetz_float
timestamp :: EncodePrimitive F.LocalTime
timestamp =
EncodePrimitive D.timestamp E.timestamp A.timestamp_int A.timestamp_float
timestamptz :: EncodePrimitive F.UTCTime
timestamptz =
EncodePrimitive D.timestamptz E.timestamptz A.timestamptz_int A.timestamptz_float
interval :: EncodePrimitive F.DiffTime
interval =
EncodePrimitive D.interval E.interval A.interval_int A.interval_float