module Logging.Class.Message ( IsMessage(..) ) where
import Control.Exception
import Data.Aeson
import qualified Data.ByteString.Char8 as B8
import qualified Data.ByteString.Lazy.Char8 as LB8
import Data.List (intercalate)
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
class IsMessage a where
toMessage :: a -> String
toMessageList :: [a] -> String
toMessageList [] = ""
toMessageList xs = "[" ++ (intercalate "," $ map toMessage xs) ++ "]"
instance IsMessage Char where
toMessage = (: "")
toMessageList = id
instance IsMessage B8.ByteString where
toMessage = B8.unpack
instance IsMessage LB8.ByteString where
toMessage = LB8.unpack
instance IsMessage T.Text where
toMessage = T.unpack
instance IsMessage LT.Text where
toMessage = LT.unpack
instance IsMessage Value where
toMessage = toMessage . encode
instance IsMessage SomeException where
toMessage = show
instance IsMessage a => IsMessage [a] where
{-# SPECIALIZE instance IsMessage [Char] #-}
toMessage = toMessageList