moffy-samples-gtk4-run-0.1.0.0: src/Stopgap/System/GLib/Error/Io.hsc
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE CApiFFI #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE PatternSynonyms #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Stopgap.System.GLib.Error.Io where
import Foreign.C.Enum
import Control.Exception
import Control.Exception.Hierarchy
import Data.Word
import Stopgap.System.GLib.Error qualified as G.Error
import Stopgap.System.GLib.Error qualified
#include <gtk/gtk.h>
enum "I_" ''#{type GFileError} [''Show, ''Read] [
("Failed", #{const G_IO_ERROR_FAILED}),
("NotFound", #{const G_IO_ERROR_NOT_FOUND}),
("PermissionDenied", #{const G_IO_ERROR_PERMISSION_DENIED})
]
data I = I { iCode :: I_, iMessage :: String }
instance Show I where
show (I c msg) = "Error: " ++ show c ++ " " ++ msg
exceptionHierarchy (Just ''G.Error.E) $ ExType ''I
foreign import capi "gtk/gtk.h value G_IO_ERROR" c_G_IO_ERROR :: #{type GQuark}
mkEFun :: G.Error.DomainCode -> String -> IO (Maybe G.Error.E)
mkEFun (d, c) msg = do
let d0 = c_G_IO_ERROR
pure if d == d0
then Just . G.Error.E $ I (I_ $ fromIntegral c) msg
else Nothing