{-# 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
(Int -> GError -> ShowS)
-> (GError -> String) -> ([GError] -> ShowS) -> Show GError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GError -> ShowS
showsPrec :: Int -> GError -> ShowS
$cshow :: GError -> String
show :: GError -> String
$cshowList :: [GError] -> ShowS
showList :: [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
		(GQuark -> CInt -> String -> GError)
-> IO GQuark -> IO (CInt -> String -> GError)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (\Ptr GError
hsc_ptr -> Ptr GError -> Int -> IO GQuark
forall b. Ptr b -> Int -> IO GQuark
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" #-}
		IO (CInt -> String -> GError) -> IO CInt -> IO (String -> GError)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (\Ptr GError
hsc_ptr -> Ptr GError -> Int -> IO CInt
forall b. Ptr b -> Int -> IO CInt
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" #-}
		IO (String -> GError) -> IO String -> IO GError
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CString -> IO String
peekCString (CString -> IO String) -> IO CString -> IO String
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (\Ptr GError
hsc_ptr -> Ptr GError -> Int -> IO CString
forall b. Ptr b -> Int -> IO CString
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
	GError -> IO GError
forall a. a -> IO a
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 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
": " String -> ShowS
forall a. [a] -> [a] -> [a]
++ CInt -> String
forall a. Show a => a -> String
show CInt
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
": " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
m