{-# LANGUAGE OverloadedStrings #-} module Database.Persist.Instances.IP where import Control.Applicative (pure, (<$>)) import Data.ByteString.Char8 (pack,unpack) import Data.IP import Data.Maybe (fromMaybe) import Database.Persist import Database.Persist.Sql import Text.Read (readMaybe) instance PersistField IP where toPersistValue = PersistDbSpecific . pack . show fromPersistValue (PersistDbSpecific v) = fromMaybe (Left "Unable to parse IP") (pure <$> readMaybe (unpack v)) fromPersistValue _ = Left "IP must be converted from PersistDbSpecific" instance PersistFieldSql IP where sqlType _ = SqlOther "INET" instance PersistField IPRange where toPersistValue = PersistDbSpecific . pack . show fromPersistValue (PersistDbSpecific v) = fromMaybe (Left "Unable to parse IPRange") (pure <$> readMaybe (unpack v)) fromPersistValue _ = Left "IPRange must be converted from PersistDbSpecific" instance PersistFieldSql IPRange where sqlType _ = SqlOther "CIDR"