blob: 1f3f7a117183b9114e7bcaf2b934dfc6b9e8146c (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 | {-# 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"
 |