hasql-0.20.1: library/Hasql/Core/Protocol/Parse/Primitives.hs
module Hasql.Core.Protocol.Parse.Primitives where
import Hasql.Prelude hiding (fail)
import Hasql.Core.Model
import Ptr.Parse
-- * Primitives
-------------------------
{-|
Int32
The length of the column value, in bytes (this count does not include itself). Can be zero. As a special case, -1 indicates a NULL column value. No value bytes follow in the NULL case.
Byten
The value of the column, in the format indicated by the associated format code. n is the above length.
-}
{-# INLINE sized #-}
sized :: Parse result -> Parse result -> Parse result
sized nullParse sizedParse =
{-# SCC "sized" #-}
do
size <- fromIntegral <$> beWord32
if size == -1
then nullParse
else sizedParse
{-|
Int32
The length of the column value, in bytes (this count does not include itself). Can be zero. As a special case, -1 indicates a NULL column value. No value bytes follow in the NULL case.
Byten
The value of the column, in the format indicated by the associated format code. n is the above length.
-}
{-# INLINE sizedBytes #-}
sizedBytes :: Parse (Maybe ByteString)
sizedBytes =
{-# SCC "sizedBytes" #-}
do
size <- fromIntegral <$> beWord32
if size == -1
then return Nothing
else do
!bytes_ <- bytes size
return (Just bytes_)
-- * Components
-------------------------
{-# INLINE nullableDataRowColumn #-}
nullableDataRowColumn :: Parse column -> Parse (Maybe column)
nullableDataRowColumn parseColumn =
{-# SCC "nullableDataRowColumn" #-}
sized (return Nothing) (fmap Just parseColumn)
{-# INLINE nonNullDataRowColumn #-}
nonNullDataRowColumn :: Parse column -> Parse column
nonNullDataRowColumn parseColumn =
{-# SCC "nonNullDataRowColumn" #-}
sized (fail "Unexpected Null column value") parseColumn