packages feed

glib-stopgap-0.1.0.0: src/System/GLib/ErrorReporting.hsc

{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module System.GLib.ErrorReporting (
	GError(..), mkGError, gErrorReport
	) where

import Foreign.Ptr
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String

import System.GLib.Quarks

#include <glib.h>

data GError = GError {
	gErrorDomain :: GQuark, gErrorCode :: CInt, gErrorMessage :: String }
	deriving Show

mkGError :: Ptr GError -> IO GError
mkGError p = do
	ge <- GError
		<$> #{peek GError, domain} p
		<*> #{peek GError, code} p
		<*> (peekCString =<< #{peek GError, message} p)
	c_g_error_free p
	pure ge

foreign import ccall "g_error_free" c_g_error_free :: Ptr GError -> IO ()

gErrorReport :: GError -> String
gErrorReport (GError d c m) = gQuarkToString d ++ ": " ++ show c ++ ": " ++ m