{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}

-- |
-- Module      : Database.HDBC.PostgreSQL.Persistable
-- Copyright   : 2015-2018 Kei Hibino
-- License     : BSD3
--
-- Maintainer  : ex8k.hibino@gmail.com
-- Stability   : experimental
-- Portability : unknown
--
-- This module defines Persistable instances for PostgreSQL types
module Database.HDBC.PostgreSQL.Persistable () where

import Data.Convertible (convert)
import Data.PostgreSQL.NetworkAddress (Inet, Cidr)
import Database.HDBC (SqlValue)
import Database.HDBC.Record.Persistable ()
import Database.Record.FromSql (FromSql (..), valueRecordFromSql)
import Database.Record.ToSql (ToSql (..), valueRecordToSql)
import Database.Record.TH (deriveNotNullType)

import Database.HDBC.PostgreSQL.Instances ()


$(deriveNotNullType [t| Inet |])

$(deriveNotNullType [t| Cidr |])

instance FromSql SqlValue Inet where
  recordFromSql :: RecordFromSql SqlValue Inet
recordFromSql = (SqlValue -> Inet) -> RecordFromSql SqlValue Inet
forall q a. (q -> a) -> RecordFromSql q a
valueRecordFromSql SqlValue -> Inet
forall a b. Convertible a b => a -> b
convert

instance FromSql SqlValue Cidr where
  recordFromSql :: RecordFromSql SqlValue Cidr
recordFromSql = (SqlValue -> Cidr) -> RecordFromSql SqlValue Cidr
forall q a. (q -> a) -> RecordFromSql q a
valueRecordFromSql SqlValue -> Cidr
forall a b. Convertible a b => a -> b
convert

instance ToSql SqlValue Inet where
  recordToSql :: RecordToSql SqlValue Inet
recordToSql = (Inet -> SqlValue) -> RecordToSql SqlValue Inet
forall a q. (a -> q) -> RecordToSql q a
valueRecordToSql Inet -> SqlValue
forall a b. Convertible a b => a -> b
convert

instance ToSql SqlValue Cidr where
  recordToSql :: RecordToSql SqlValue Cidr
recordToSql = (Cidr -> SqlValue) -> RecordToSql SqlValue Cidr
forall a q. (a -> q) -> RecordToSql q a
valueRecordToSql Cidr -> SqlValue
forall a b. Convertible a b => a -> b
convert