module Hasql.Private.Decoders.Value where

import Hasql.Private.Prelude
import qualified PostgreSQL.Binary.Decoding as A


newtype Value a =
  Value (ReaderT Bool A.Value a)
  deriving (a -> Value b -> Value a
(a -> b) -> Value a -> Value b
(forall a b. (a -> b) -> Value a -> Value b)
-> (forall a b. a -> Value b -> Value a) -> Functor Value
forall a b. a -> Value b -> Value a
forall a b. (a -> b) -> Value a -> Value b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Value b -> Value a
$c<$ :: forall a b. a -> Value b -> Value a
fmap :: (a -> b) -> Value a -> Value b
$cfmap :: forall a b. (a -> b) -> Value a -> Value b
Functor)


{-# INLINE run #-}
run :: Value a -> Bool -> A.Value a
run :: Value a -> Bool -> Value a
run (Value ReaderT Bool Value a
imp) Bool
integerDatetimes =
  ReaderT Bool Value a -> Bool -> Value a
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT Bool Value a
imp Bool
integerDatetimes

{-# INLINE decoder #-}
decoder :: (Bool -> A.Value a) -> Value a
decoder :: (Bool -> Value a) -> Value a
decoder =
  {-# SCC "decoder" #-} 
  ReaderT Bool Value a -> Value a
forall a. ReaderT Bool Value a -> Value a
Value (ReaderT Bool Value a -> Value a)
-> ((Bool -> Value a) -> ReaderT Bool Value a)
-> (Bool -> Value a)
-> Value a
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Bool -> Value a) -> ReaderT Bool Value a
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT

{-# INLINE decoderFn #-}
decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a
decoderFn :: (Bool -> ByteString -> Either Text a) -> Value a
decoderFn Bool -> ByteString -> Either Text a
fn =
  ReaderT Bool Value a -> Value a
forall a. ReaderT Bool Value a -> Value a
Value (ReaderT Bool Value a -> Value a)
-> ReaderT Bool Value a -> Value a
forall a b. (a -> b) -> a -> b
$ (Bool -> BinaryParser a) -> ReaderT Bool Value a
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT ((Bool -> BinaryParser a) -> ReaderT Bool Value a)
-> (Bool -> BinaryParser a) -> ReaderT Bool Value a
forall a b. (a -> b) -> a -> b
$ \Bool
integerDatetimes -> (ByteString -> Either Text a) -> BinaryParser a
forall a. (ByteString -> Either Text a) -> Value a
A.fn ((ByteString -> Either Text a) -> BinaryParser a)
-> (ByteString -> Either Text a) -> BinaryParser a
forall a b. (a -> b) -> a -> b
$ Bool -> ByteString -> Either Text a
fn Bool
integerDatetimes