{-# LANGUAGE TemplateHaskell #-} -- | -- Module: Database.PostgreSQL.Store.Utilities -- Copyright: (c) Ole Krüger 2016 -- License: BSD3 -- Maintainer: Ole Krüger module Database.PostgreSQL.Store.Utilities ( showByteString, readByteString, buildByteString, liftByteString ) where import Language.Haskell.TH import Language.Haskell.TH.Syntax import qualified Blaze.ByteString.Builder as B import qualified Blaze.ByteString.Builder.Char.Utf8 as B import qualified Data.ByteString as B import qualified Data.Text as T import qualified Data.Text.Encoding as T import Text.Read (readMaybe) -- | Show as 'ByteString' showByteString :: (Show a) => a -> B.ByteString showByteString = B.toByteString . B.fromString . show -- | Read as 'ByteString' readByteString :: (Read a) => B.ByteString -> Maybe a readByteString = readMaybe . T.unpack . T.decodeUtf8 -- | UTF-8 correct alternative to 'fromString'. buildByteString :: String -> B.ByteString buildByteString = B.toByteString . B.fromString -- | Lift 'ByteString'. liftByteString :: B.ByteString -> Q Exp liftByteString bs = case B.unpack bs of [] -> [e| B.empty |] [x] -> [e| B.singleton x |] xs -> [e| B.pack $(lift xs) |]