{-# LINE 1 "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



data GError = GError {
	GError -> GQuark
gErrorDomain :: GQuark, GError -> CInt
gErrorCode :: CInt, GError -> String
gErrorMessage :: String }
	deriving Int -> GError -> ShowS
[GError] -> ShowS
GError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GError] -> ShowS
$cshowList :: [GError] -> ShowS
show :: GError -> String
$cshow :: GError -> String
showsPrec :: Int -> GError -> ShowS
$cshowsPrec :: Int -> GError -> ShowS
Show

mkGError :: Ptr GError -> IO GError
mkGError :: Ptr GError -> IO GError
mkGError Ptr GError
p = do
	GError
ge <- GQuark -> CInt -> String -> GError
GError
		forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (\Ptr GError
hsc_ptr -> forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr GError
hsc_ptr Int
0) Ptr GError
p
{-# LINE 24 "src/System/GLib/ErrorReporting.hsc" #-}
		forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (\Ptr GError
hsc_ptr -> forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr GError
hsc_ptr Int
4) Ptr GError
p
{-# LINE 25 "src/System/GLib/ErrorReporting.hsc" #-}
		forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CString -> IO String
peekCString forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (\Ptr GError
hsc_ptr -> forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr GError
hsc_ptr Int
8) Ptr GError
p)
{-# LINE 26 "src/System/GLib/ErrorReporting.hsc" #-}
	Ptr GError -> IO ()
c_g_error_free Ptr GError
p
	forall (f :: * -> *) a. Applicative f => a -> f a
pure GError
ge

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

gErrorReport :: GError -> String
gErrorReport :: GError -> String
gErrorReport (GError GQuark
d CInt
c String
m) = GQuark -> String
gQuarkToString GQuark
d forall a. [a] -> [a] -> [a]
++ String
": " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show CInt
c forall a. [a] -> [a] -> [a]
++ String
": " forall a. [a] -> [a] -> [a]
++ String
m