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"