{-# LANGUAGE MultiParamTypeClasses #-}
{-# OPTIONS -fno-warn-orphans #-}

-- |
-- Module      : Database.HDBC.SqlValueExtra
-- Copyright   : 2013 Kei Hibino
-- License     : BSD3
--
-- Maintainer  : ex8k.hibino@gmail.com
-- Stability   : experimental
-- Portability : unknown
module Database.HDBC.SqlValueExtra () where

import Data.Convertible (Convertible(safeConvert), ConvertResult)
import Data.Int (Int16, Int32)
import Database.HDBC (SqlValue)

safeConvertFromIntegral32 :: Integral a => a -> ConvertResult SqlValue
safeConvertFromIntegral32 i =
  safeConvert (fromIntegral i :: Int32)

safeConvertToIntegral32 :: Integral a => SqlValue -> ConvertResult a
safeConvertToIntegral32 v =
  fmap fromIntegral (safeConvert v :: ConvertResult Int32)

instance Convertible Int16 SqlValue where
  safeConvert = safeConvertFromIntegral32

instance Convertible SqlValue Int16 where
  safeConvert = safeConvertToIntegral32