module Hasql.Core.ParseDataRow where import Hasql.Prelude import qualified Ptr.Parse as B import qualified Hasql.Core.Protocol.Parse.Primitives as C {-| A specification for processing of DataRow messages. It is assumed that the size of the input vector is checked externally. -} data ParseDataRow result = ParseDataRow {-# UNPACK #-} !Int (B.Parse result) deriving instance Functor ParseDataRow instance Applicative ParseDataRow where pure x = ParseDataRow 0 (pure x) (<*>) (ParseDataRow leftSize leftParse) (ParseDataRow rightSize rightParse) = ParseDataRow (leftSize + rightSize) (leftParse <*> rightParse) nullableColumn :: B.Parse column -> ParseDataRow (Maybe column) nullableColumn parseColumn = ParseDataRow 1 (C.nullableDataRowColumn parseColumn) column :: B.Parse column -> ParseDataRow column column parseColumn = ParseDataRow 1 (C.nonNullDataRowColumn parseColumn)