packages feed

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 %}