hasql-0.20.1: library/Hasql/Core/ParseDataRow.hs
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)