{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE OverloadedStrings #-} module Data.CaseInsensitive.Instances () where import Prelude import Database.Persist import Database.Persist.Sql import Data.CaseInsensitive (CI) import qualified Data.CaseInsensitive as CI import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import Control.Exception instance PersistField (CI Text) where toPersistValue = PersistLiteralEscaped . Text.encodeUtf8 . CI.original fromPersistValue = \case PersistText t -> Right $ CI.mk t PersistLiteralEscaped bs -> case Text.decodeUtf8' bs of Right t -> Right $ CI.mk t Left err -> Left $ "Could not decode PersistLiteral as UTF-8: " <> Text.pack (displayException err) o -> Left $ "Expected PersistText or PersistLiteral but got ‘" <> Text.pack (show o) <> "’" instance PersistFieldSql (CI Text) where sqlType _ = SqlOther "citext"