{-# LANGUAGE CPP #-}
module Hasql.Implicits.Encoders where
import qualified Data.Aeson as Aeson
import Hasql.Encoders
import Hasql.Implicits.Prelude hiding (bool)
class DefaultParamEncoder a where
defaultParam :: NullableOrNot Value a
#define INSTANCES(VALUE, ENCODER) \
instance DefaultParamEncoder VALUE where { \
defaultParam = nonNullable ENCODER; \
}; \
instance DefaultParamEncoder [VALUE] where { \
defaultParam = (nonNullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder [Maybe VALUE] where { \
defaultParam = (nonNullable . array . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder [[VALUE]] where { \
defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder [[Maybe VALUE]] where { \
defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder (Vector VALUE) where { \
defaultParam = (nonNullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder (Vector (Maybe VALUE)) where { \
defaultParam = (nonNullable . array . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder (Vector (Vector VALUE)) where { \
defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder (Vector (Vector (Maybe VALUE))) where { \
defaultParam = (nonNullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe VALUE) where { \
defaultParam = nullable ENCODER; \
}; \
instance DefaultParamEncoder (Maybe [VALUE]) where { \
defaultParam = (nullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe [Maybe VALUE]) where { \
defaultParam = (nullable . array . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe [[VALUE]]) where { \
defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe [[Maybe VALUE]]) where { \
defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe (Vector VALUE)) where { \
defaultParam = (nullable . array . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe (Vector (Maybe VALUE))) where { \
defaultParam = (nullable . array . dimension foldlStrict . element . nullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe (Vector (Vector VALUE))) where { \
defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nonNullable) ENCODER; \
}; \
instance DefaultParamEncoder (Maybe (Vector (Vector (Maybe VALUE)))) where { \
defaultParam = (nullable . array . dimension foldlStrict . dimension foldlStrict . element . nullable) ENCODER; \
}
INSTANCES (Char, char)
INSTANCES (Double, float8)
INSTANCES (Float, float4)
INSTANCES (Int16, int2)
INSTANCES (Int32, int4)
INSTANCES (Int64, int8)
INSTANCES (ByteString, bytea)
INSTANCES (Scientific, numeric)
INSTANCES (Text, text)
INSTANCES (UTCTime, timestamptz)
INSTANCES (Aeson.Value, jsonb)
INSTANCES (UUID, uuid)
INSTANCES (Day, date)
INSTANCES (DiffTime, interval)
INSTANCES (TimeOfDay, time)
INSTANCES (LocalTime, timestamp)
INSTANCES ((TimeOfDay, TimeZone), timetz)
INSTANCES ((NetAddr IP), inet)
INSTANCES (Bool, bool)
#undef INSTANCES