module Hasql.Private.Encoders.Array where import Hasql.Private.Prelude import qualified PostgreSQL.Binary.Encoding as A import qualified Hasql.Private.PTI as B data Array a = Array B.OID B.OID (Bool -> a -> A.Array) {-# INLINE run #-} run :: Array a -> (B.OID, Bool -> a -> A.Encoding) run (Array valueOID arrayOID encoder) = (arrayOID, \env input -> A.array (B.oidWord32 valueOID) (encoder env input)) {-# INLINE value #-} value :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> Array a value valueOID arrayOID encoder = Array valueOID arrayOID (\params -> A.encodingArray . encoder params) {-# INLINE nullableValue #-} nullableValue :: B.OID -> B.OID -> (Bool -> a -> A.Encoding) -> Array (Maybe a) nullableValue valueOID arrayOID encoder = Array valueOID arrayOID (\params -> maybe A.nullArray (A.encodingArray . encoder params)) {-# INLINE dimension #-} dimension :: (forall a. (a -> b -> a) -> a -> c -> a) -> Array b -> Array c dimension fold (Array valueOID arrayOID encoder) = Array valueOID arrayOID (\params -> A.dimensionArray fold (encoder params))