hasql-1.9.1: library/Hasql/Decoders/Value.hs
module Hasql.Decoders.Value where
import Hasql.Prelude
import PostgreSQL.Binary.Decoding qualified as A
newtype Value a
= Value (Bool -> A.Value a)
deriving (Functor)
instance Filterable Value where
{-# INLINE mapMaybe #-}
mapMaybe fn =
refine (maybe (Left "Invalid value") Right . fn)
{-# INLINE run #-}
run :: Value a -> Bool -> A.Value a
run (Value imp) integerDatetimes =
imp integerDatetimes
{-# INLINE decoder #-}
decoder :: (Bool -> A.Value a) -> Value a
decoder =
{-# SCC "decoder" #-}
Value
{-# INLINE decoderFn #-}
decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a
decoderFn fn =
Value $ \integerDatetimes -> A.fn $ fn integerDatetimes
-- |
-- Refine a value decoder, lifting the possible error to the session level.
{-# INLINE refine #-}
refine :: (a -> Either Text b) -> Value a -> Value b
refine fn (Value run) = Value (A.refine fn . run)