module Hasql.Core.EncodeParam where import Hasql.Prelude import Hasql.Core.Model import qualified ByteString.StrictBuilder as B import qualified VectorBuilder.Builder as N import qualified PostgreSQL.Binary.Encoding as A import qualified Hasql.Core.EncodePrimitive as C data EncodeParam param = EncodeParam Word32 (param -> B.Builder) (param -> B.Builder) instance Contravariant EncodeParam where contramap mapping (EncodeParam oid idtOnEncode idtOffEncode) = EncodeParam oid (idtOnEncode . mapping) (idtOffEncode . mapping) primitive :: C.EncodePrimitive primitive -> EncodeParam primitive primitive (C.EncodePrimitive elementOID _ builder1 builder2) = EncodeParam elementOID builder1 builder2 arrayVector :: C.EncodePrimitive primitive -> EncodeParam (Vector primitive) arrayVector (C.EncodePrimitive elementOID arrayOID elementEncoder1 elementEncoder2) = EncodeParam arrayOID (encoder elementEncoder1) (encoder elementEncoder2) where encoder elementEncoder = A.array_vector elementOID elementEncoder arrayVectorWithNulls :: C.EncodePrimitive primitive -> EncodeParam (Vector (Maybe primitive)) arrayVectorWithNulls (C.EncodePrimitive elementOID arrayOID elementEncoder1 elementEncoder2) = EncodeParam arrayOID (encoder elementEncoder1) (encoder elementEncoder2) where encoder elementEncoder = A.nullableArray_vector elementOID elementEncoder