sqlc-hs-0.2.0.0: templates/types.hs.jinja
{- This file was auto-generated by sqlc-hs. -}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module {{moduleName}} where
{% if generatePostgresql %}
import qualified Control.Monad
import qualified Data.Text
import qualified Database.PostgreSQL.Simple.FromField
import qualified Database.PostgreSQL.Simple.FromRow
import qualified Database.PostgreSQL.Simple.ToField
import qualified Database.PostgreSQL.Simple.ToRow
{% endif %}
{% if generateSqlite %}
import qualified Database.SQLite.Simple.FromRow
import qualified Database.SQLite.Simple.ToField
import qualified Database.SQLite.Simple.ToRow
{% endif %}
{% if generateMysql %}
import qualified Database.MySQL.Simple.Param
import qualified Database.MySQL.Simple.QueryParams
import qualified Database.MySQL.Simple.QueryResults
import qualified Database.MySQL.Simple.Result
{% endif %}
import {{ internalModuleName }}
import Prelude hiding (Enum)
import qualified Prelude
{% for enum in enums %}
data instance Enum {{ enum.value.escapedEnumName }}
{% for value in enum.value.values %}
{% if value.first %}={% else %}|{%endif%} {{ value.value.haskellConstructorName }}
{% endfor %}
deriving stock (Eq, Ord, Show, Bounded, Prelude.Enum)
{% if generatePostgresql %}
instance Database.PostgreSQL.Simple.ToField.ToField (Enum {{ enum.value.escapedEnumName }}) where
{% for value in enum.value.values %}
toField {{ value.value.haskellConstructorName }} = Database.PostgreSQL.Simple.ToField.toField @Data.Text.Text {{ value.value.escapedEnumValue }}
{% endfor %}
instance Database.PostgreSQL.Simple.FromField.FromField (Enum {{ enum.value.escapedEnumName }}) where
fromField field value = do
typename <- Database.PostgreSQL.Simple.FromField.typename field
Control.Monad.when (typename /= {{ enum.value.escapedEnumName }}) $
Database.PostgreSQL.Simple.FromField.returnError Database.PostgreSQL.Simple.FromField.Incompatible field ""
case value of
{% for value in enum.value.values %}
Just {{ value.value.escapedEnumValue }} -> pure {{ value.value.haskellConstructorName }}
{% endfor %}
Just value -> Database.PostgreSQL.Simple.FromField.returnError Database.PostgreSQL.Simple.FromField.ConversionFailed field (show value)
Nothing -> Database.PostgreSQL.Simple.FromField.returnError Database.PostgreSQL.Simple.FromField.UnexpectedNull field ""
{% endif %}
{% endfor %}