{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}

-- |
-- Module      : Database.HDBC.Record.TH
-- Copyright   : 2013 Kei Hibino
-- License     : BSD3
--
-- Maintainer  : ex8k.hibino@gmail.com
-- Stability   : experimental
-- Portability : unknown
--
-- This module provides DB-record templates depends on HDBC.
module Database.HDBC.Record.TH (
  derivePersistableInstanceFromValue,
  ) where

import Language.Haskell.TH (Q, Dec, Type)
import Database.HDBC (SqlValue)
import Database.HDBC.SqlValueExtra ()
import Database.Record (FromSql(..), valueFromSql, ToSql(..), valueToSql)


-- | Template to declare HDBC instances of DB-record against single value type.
derivePersistableInstanceFromValue :: Q Type  -- ^ Type to implement instances
                                   -> Q [Dec] -- ^ Result declarations
derivePersistableInstanceFromValue typ =
  [d| instance FromSql SqlValue $(typ)  where
        recordFromSql = valueFromSql

      instance ToSql SqlValue $(typ)  where
        recordToSql = valueToSql
    |]