module Hasql.Core.EncodeArray where

import Hasql.Prelude
import qualified Hasql.Core.EncodePrimitive as B
import qualified PostgreSQL.Binary.Encoding as A


data EncodeArray array =
  EncodeArray Word32 Word32 (array -> A.Array) (array -> A.Array)

primitive :: B.EncodePrimitive element -> EncodeArray element
primitive (B.EncodePrimitive elementOID arrayOID encoder1 encoder2) =
  EncodeArray elementOID arrayOID (A.encodingArray . encoder1) (A.encodingArray . encoder2)

nullablePrimitive :: B.EncodePrimitive element -> EncodeArray (Maybe element)
nullablePrimitive (B.EncodePrimitive elementOID arrayOID encoder1 encoder2) =
  EncodeArray elementOID arrayOID (arrayEncoder encoder1) (arrayEncoder encoder2)
  where
    arrayEncoder encoder =
      maybe A.nullArray (A.encodingArray . encoder)