{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE OverloadedStrings #-} module Data.UUID.Instances () where import Prelude import Database.Persist import Database.Persist.Sql import Data.UUID (UUID) import qualified Data.UUID as UUID import qualified Data.ByteString.Char8 as CBS import qualified Data.Text as Text import Web.PathPieces instance PersistField UUID where toPersistValue = PersistLiteralEscaped . CBS.pack . UUID.toString fromPersistValue (PersistLiteralEscaped uuidB8) = case UUID.fromString $ CBS.unpack uuidB8 of Just uuid -> Right uuid Nothing -> Left "Invalid UUID" fromPersistValue v = Left $ "Expected PersistLiteral but got ‘" <> Text.pack (show v) <> "’" instance PersistFieldSql UUID where sqlType _ = SqlOther "uuid" instance PathPiece UUID where toPathPiece = Text.pack . UUID.toString fromPathPiece = UUID.fromString . Text.unpack