{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Opaque type with parameters for the callback. The actual content
-- depends on the @/NMKeyfileHandlerType/@.
-- 
-- /Since: 1.30/

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.NM.Structs.KeyfileHandlerData
    ( 

-- * Exported types
    KeyfileHandlerData(..)                  ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [failWithError]("GI.NM.Structs.KeyfileHandlerData#g:method:failWithError"), [warnGet]("GI.NM.Structs.KeyfileHandlerData#g:method:warnGet").
-- 
-- ==== Getters
-- [getContext]("GI.NM.Structs.KeyfileHandlerData#g:method:getContext").
-- 
-- ==== Setters
-- /None/.

#if defined(ENABLE_OVERLOADING)
    ResolveKeyfileHandlerDataMethod         ,
#endif

-- ** failWithError #method:failWithError#

#if defined(ENABLE_OVERLOADING)
    KeyfileHandlerDataFailWithErrorMethodInfo,
#endif
    keyfileHandlerDataFailWithError         ,


-- ** getContext #method:getContext#

#if defined(ENABLE_OVERLOADING)
    KeyfileHandlerDataGetContextMethodInfo  ,
#endif
    keyfileHandlerDataGetContext            ,


-- ** warnGet #method:warnGet#

#if defined(ENABLE_OVERLOADING)
    KeyfileHandlerDataWarnGetMethodInfo     ,
#endif
    keyfileHandlerDataWarnGet               ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R
import qualified Data.Word as DW
import qualified Data.Int as DI
import qualified System.Posix.Types as SPT
import qualified Foreign.C.Types as FCT

-- Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/23392
#if MIN_VERSION_base(4,18,0)
import qualified GI.GLib.Structs.Bytes as GLib.Bytes
import qualified GI.GLib.Structs.VariantType as GLib.VariantType
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.NM.Callbacks as NM.Callbacks
import {-# SOURCE #-} qualified GI.NM.Enums as NM.Enums
import {-# SOURCE #-} qualified GI.NM.Flags as NM.Flags
import {-# SOURCE #-} qualified GI.NM.Interfaces.Connection as NM.Connection
import {-# SOURCE #-} qualified GI.NM.Objects.Setting as NM.Setting
import {-# SOURCE #-} qualified GI.NM.Objects.Setting8021x as NM.Setting8021x
import {-# SOURCE #-} qualified GI.NM.Objects.SettingAdsl as NM.SettingAdsl
import {-# SOURCE #-} qualified GI.NM.Objects.SettingBluetooth as NM.SettingBluetooth
import {-# SOURCE #-} qualified GI.NM.Objects.SettingBond as NM.SettingBond
import {-# SOURCE #-} qualified GI.NM.Objects.SettingBridge as NM.SettingBridge
import {-# SOURCE #-} qualified GI.NM.Objects.SettingBridgePort as NM.SettingBridgePort
import {-# SOURCE #-} qualified GI.NM.Objects.SettingCdma as NM.SettingCdma
import {-# SOURCE #-} qualified GI.NM.Objects.SettingConnection as NM.SettingConnection
import {-# SOURCE #-} qualified GI.NM.Objects.SettingDcb as NM.SettingDcb
import {-# SOURCE #-} qualified GI.NM.Objects.SettingDummy as NM.SettingDummy
import {-# SOURCE #-} qualified GI.NM.Objects.SettingGeneric as NM.SettingGeneric
import {-# SOURCE #-} qualified GI.NM.Objects.SettingGsm as NM.SettingGsm
import {-# SOURCE #-} qualified GI.NM.Objects.SettingIP4Config as NM.SettingIP4Config
import {-# SOURCE #-} qualified GI.NM.Objects.SettingIP6Config as NM.SettingIP6Config
import {-# SOURCE #-} qualified GI.NM.Objects.SettingIPConfig as NM.SettingIPConfig
import {-# SOURCE #-} qualified GI.NM.Objects.SettingIPTunnel as NM.SettingIPTunnel
import {-# SOURCE #-} qualified GI.NM.Objects.SettingInfiniband as NM.SettingInfiniband
import {-# SOURCE #-} qualified GI.NM.Objects.SettingMacsec as NM.SettingMacsec
import {-# SOURCE #-} qualified GI.NM.Objects.SettingMacvlan as NM.SettingMacvlan
import {-# SOURCE #-} qualified GI.NM.Objects.SettingOlpcMesh as NM.SettingOlpcMesh
import {-# SOURCE #-} qualified GI.NM.Objects.SettingOvsBridge as NM.SettingOvsBridge
import {-# SOURCE #-} qualified GI.NM.Objects.SettingOvsInterface as NM.SettingOvsInterface
import {-# SOURCE #-} qualified GI.NM.Objects.SettingOvsPatch as NM.SettingOvsPatch
import {-# SOURCE #-} qualified GI.NM.Objects.SettingOvsPort as NM.SettingOvsPort
import {-# SOURCE #-} qualified GI.NM.Objects.SettingPpp as NM.SettingPpp
import {-# SOURCE #-} qualified GI.NM.Objects.SettingPppoe as NM.SettingPppoe
import {-# SOURCE #-} qualified GI.NM.Objects.SettingProxy as NM.SettingProxy
import {-# SOURCE #-} qualified GI.NM.Objects.SettingSerial as NM.SettingSerial
import {-# SOURCE #-} qualified GI.NM.Objects.SettingTCConfig as NM.SettingTCConfig
import {-# SOURCE #-} qualified GI.NM.Objects.SettingTeam as NM.SettingTeam
import {-# SOURCE #-} qualified GI.NM.Objects.SettingTeamPort as NM.SettingTeamPort
import {-# SOURCE #-} qualified GI.NM.Objects.SettingTun as NM.SettingTun
import {-# SOURCE #-} qualified GI.NM.Objects.SettingVlan as NM.SettingVlan
import {-# SOURCE #-} qualified GI.NM.Objects.SettingVpn as NM.SettingVpn
import {-# SOURCE #-} qualified GI.NM.Objects.SettingVxlan as NM.SettingVxlan
import {-# SOURCE #-} qualified GI.NM.Objects.SettingWimax as NM.SettingWimax
import {-# SOURCE #-} qualified GI.NM.Objects.SettingWired as NM.SettingWired
import {-# SOURCE #-} qualified GI.NM.Objects.SettingWireless as NM.SettingWireless
import {-# SOURCE #-} qualified GI.NM.Objects.SettingWirelessSecurity as NM.SettingWirelessSecurity
import {-# SOURCE #-} qualified GI.NM.Structs.BridgeVlan as NM.BridgeVlan
import {-# SOURCE #-} qualified GI.NM.Structs.IPAddress as NM.IPAddress
import {-# SOURCE #-} qualified GI.NM.Structs.IPRoute as NM.IPRoute
import {-# SOURCE #-} qualified GI.NM.Structs.IPRoutingRule as NM.IPRoutingRule
import {-# SOURCE #-} qualified GI.NM.Structs.Range as NM.Range
import {-# SOURCE #-} qualified GI.NM.Structs.TCAction as NM.TCAction
import {-# SOURCE #-} qualified GI.NM.Structs.TCQdisc as NM.TCQdisc
import {-# SOURCE #-} qualified GI.NM.Structs.TCTfilter as NM.TCTfilter
import {-# SOURCE #-} qualified GI.NM.Structs.TeamLinkWatcher as NM.TeamLinkWatcher
import {-# SOURCE #-} qualified GI.NM.Structs.VariantAttributeSpec as NM.VariantAttributeSpec

#else
import {-# SOURCE #-} qualified GI.NM.Enums as NM.Enums
import {-# SOURCE #-} qualified GI.NM.Objects.Setting as NM.Setting

#endif

-- | Memory-managed wrapper type.
newtype KeyfileHandlerData = KeyfileHandlerData (SP.ManagedPtr KeyfileHandlerData)
    deriving (KeyfileHandlerData -> KeyfileHandlerData -> Bool
(KeyfileHandlerData -> KeyfileHandlerData -> Bool)
-> (KeyfileHandlerData -> KeyfileHandlerData -> Bool)
-> Eq KeyfileHandlerData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: KeyfileHandlerData -> KeyfileHandlerData -> Bool
== :: KeyfileHandlerData -> KeyfileHandlerData -> Bool
$c/= :: KeyfileHandlerData -> KeyfileHandlerData -> Bool
/= :: KeyfileHandlerData -> KeyfileHandlerData -> Bool
Eq)

instance SP.ManagedPtrNewtype KeyfileHandlerData where
    toManagedPtr :: KeyfileHandlerData -> ManagedPtr KeyfileHandlerData
toManagedPtr (KeyfileHandlerData ManagedPtr KeyfileHandlerData
p) = ManagedPtr KeyfileHandlerData
p

-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
instance BoxedPtr KeyfileHandlerData where
    boxedPtrCopy :: KeyfileHandlerData -> IO KeyfileHandlerData
boxedPtrCopy = KeyfileHandlerData -> IO KeyfileHandlerData
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return
    boxedPtrFree :: KeyfileHandlerData -> IO ()
boxedPtrFree = \KeyfileHandlerData
_x -> () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()


#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList KeyfileHandlerData
type instance O.AttributeList KeyfileHandlerData = KeyfileHandlerDataAttributeList
type KeyfileHandlerDataAttributeList = ('[ ] :: [(Symbol, DK.Type)])
#endif

-- method KeyfileHandlerData::fail_with_error
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "handler_data"
--           , argType =
--               TInterface Name { namespace = "NM" , name = "KeyfileHandlerData" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the #NMKeyfileHandlerData"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "src"
--           , argType = TError
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "error to move into the return location"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferEverything
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "nm_keyfile_handler_data_fail_with_error" nm_keyfile_handler_data_fail_with_error :: 
    Ptr KeyfileHandlerData ->               -- handler_data : TInterface (Name {namespace = "NM", name = "KeyfileHandlerData"})
    Ptr GError ->                           -- src : TError
    IO ()

-- | Set the error for the handler. This lets the operation fail
-- with the provided error. You may only set the error once.
-- 
-- /@src@/ must be non-'P.Nothing'.
-- 
-- Note that /@src@/ is no longer valid after this call. If you want
-- to keep using the same GError*, you need to set it to 'P.Nothing'
-- after calling this function on it.
-- 
-- /Since: 1.30/
keyfileHandlerDataFailWithError ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    KeyfileHandlerData
    -- ^ /@handlerData@/: the t'GI.NM.Structs.KeyfileHandlerData.KeyfileHandlerData'
    -> GError
    -- ^ /@src@/: error to move into the return location
    -> m ()
keyfileHandlerDataFailWithError :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
KeyfileHandlerData -> GError -> m ()
keyfileHandlerDataFailWithError KeyfileHandlerData
handlerData GError
src = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr KeyfileHandlerData
handlerData' <- KeyfileHandlerData -> IO (Ptr KeyfileHandlerData)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr KeyfileHandlerData
handlerData
    Ptr GError
src' <- GError -> IO (Ptr GError)
forall a. (HasCallStack, GBoxed a) => a -> IO (Ptr a)
B.ManagedPtr.disownBoxed GError
src
    Ptr KeyfileHandlerData -> Ptr GError -> IO ()
nm_keyfile_handler_data_fail_with_error Ptr KeyfileHandlerData
handlerData' Ptr GError
src'
    KeyfileHandlerData -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr KeyfileHandlerData
handlerData
    GError -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr GError
src
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data KeyfileHandlerDataFailWithErrorMethodInfo
instance (signature ~ (GError -> m ()), MonadIO m) => O.OverloadedMethod KeyfileHandlerDataFailWithErrorMethodInfo KeyfileHandlerData signature where
    overloadedMethod = keyfileHandlerDataFailWithError

instance O.OverloadedMethodInfo KeyfileHandlerDataFailWithErrorMethodInfo KeyfileHandlerData where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.NM.Structs.KeyfileHandlerData.keyfileHandlerDataFailWithError",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-nm-1.0.1/docs/GI-NM-Structs-KeyfileHandlerData.html#v:keyfileHandlerDataFailWithError"
        })


#endif

-- method KeyfileHandlerData::get_context
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "handler_data"
--           , argType =
--               TInterface Name { namespace = "NM" , name = "KeyfileHandlerData" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the #NMKeyfileHandlerData for any event."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "out_kf_group_name"
--           , argType = TBasicType TUTF8
--           , direction = DirectionOut
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "if the event\n  is in the context of a keyfile group, the group name."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "out_kf_key_name"
--           , argType = TBasicType TUTF8
--           , direction = DirectionOut
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "if the event\n  is in the context of a keyfile value, the key name."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "out_cur_setting"
--           , argType = TInterface Name { namespace = "NM" , name = "Setting" }
--           , direction = DirectionOut
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "if the event\n  happens while handling a particular #NMSetting instance."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "out_cur_property_name"
--           , argType = TBasicType TUTF8
--           , direction = DirectionOut
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the\n  property name if applicable."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "nm_keyfile_handler_data_get_context" nm_keyfile_handler_data_get_context :: 
    Ptr KeyfileHandlerData ->               -- handler_data : TInterface (Name {namespace = "NM", name = "KeyfileHandlerData"})
    Ptr CString ->                          -- out_kf_group_name : TBasicType TUTF8
    Ptr CString ->                          -- out_kf_key_name : TBasicType TUTF8
    Ptr (Ptr NM.Setting.Setting) ->         -- out_cur_setting : TInterface (Name {namespace = "NM", name = "Setting"})
    Ptr CString ->                          -- out_cur_property_name : TBasicType TUTF8
    IO ()

-- | Get context information of the current event. This function can be called
-- on all events, but the context information may be unset.
-- 
-- /Since: 1.30/
keyfileHandlerDataGetContext ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    KeyfileHandlerData
    -- ^ /@handlerData@/: the t'GI.NM.Structs.KeyfileHandlerData.KeyfileHandlerData' for any event.
    -> m ((Maybe T.Text, Maybe T.Text, Maybe NM.Setting.Setting, Maybe T.Text))
keyfileHandlerDataGetContext :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
KeyfileHandlerData
-> m (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
keyfileHandlerDataGetContext KeyfileHandlerData
handlerData = IO (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
-> m (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
 -> m (Maybe Text, Maybe Text, Maybe Setting, Maybe Text))
-> IO (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
-> m (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
forall a b. (a -> b) -> a -> b
$ do
    Ptr KeyfileHandlerData
handlerData' <- KeyfileHandlerData -> IO (Ptr KeyfileHandlerData)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr KeyfileHandlerData
handlerData
    Ptr CString
outKfGroupName <- IO (Ptr CString)
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr CString)
    Ptr CString
outKfKeyName <- IO (Ptr CString)
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr CString)
    Ptr (Ptr Setting)
outCurSetting <- IO (Ptr (Ptr Setting))
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr (Ptr NM.Setting.Setting))
    Ptr CString
outCurPropertyName <- IO (Ptr CString)
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr CString)
    Ptr KeyfileHandlerData
-> Ptr CString
-> Ptr CString
-> Ptr (Ptr Setting)
-> Ptr CString
-> IO ()
nm_keyfile_handler_data_get_context Ptr KeyfileHandlerData
handlerData' Ptr CString
outKfGroupName Ptr CString
outKfKeyName Ptr (Ptr Setting)
outCurSetting Ptr CString
outCurPropertyName
    CString
outKfGroupName' <- Ptr CString -> IO CString
forall a. Storable a => Ptr a -> IO a
peek Ptr CString
outKfGroupName
    Maybe Text
maybeOutKfGroupName' <- CString -> (CString -> IO Text) -> IO (Maybe Text)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull CString
outKfGroupName' ((CString -> IO Text) -> IO (Maybe Text))
-> (CString -> IO Text) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
outKfGroupName'' -> do
        Text
outKfGroupName''' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
outKfGroupName''
        Text -> IO Text
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
outKfGroupName'''
    CString
outKfKeyName' <- Ptr CString -> IO CString
forall a. Storable a => Ptr a -> IO a
peek Ptr CString
outKfKeyName
    Maybe Text
maybeOutKfKeyName' <- CString -> (CString -> IO Text) -> IO (Maybe Text)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull CString
outKfKeyName' ((CString -> IO Text) -> IO (Maybe Text))
-> (CString -> IO Text) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
outKfKeyName'' -> do
        Text
outKfKeyName''' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
outKfKeyName''
        Text -> IO Text
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
outKfKeyName'''
    Ptr Setting
outCurSetting' <- Ptr (Ptr Setting) -> IO (Ptr Setting)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Ptr Setting)
outCurSetting
    Maybe Setting
maybeOutCurSetting' <- Ptr Setting -> (Ptr Setting -> IO Setting) -> IO (Maybe Setting)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull Ptr Setting
outCurSetting' ((Ptr Setting -> IO Setting) -> IO (Maybe Setting))
-> (Ptr Setting -> IO Setting) -> IO (Maybe Setting)
forall a b. (a -> b) -> a -> b
$ \Ptr Setting
outCurSetting'' -> do
        Setting
outCurSetting''' <- ((ManagedPtr Setting -> Setting) -> Ptr Setting -> IO Setting
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Setting -> Setting
NM.Setting.Setting) Ptr Setting
outCurSetting''
        Setting -> IO Setting
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Setting
outCurSetting'''
    CString
outCurPropertyName' <- Ptr CString -> IO CString
forall a. Storable a => Ptr a -> IO a
peek Ptr CString
outCurPropertyName
    Maybe Text
maybeOutCurPropertyName' <- CString -> (CString -> IO Text) -> IO (Maybe Text)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull CString
outCurPropertyName' ((CString -> IO Text) -> IO (Maybe Text))
-> (CString -> IO Text) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
outCurPropertyName'' -> do
        Text
outCurPropertyName''' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
outCurPropertyName''
        Text -> IO Text
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
outCurPropertyName'''
    KeyfileHandlerData -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr KeyfileHandlerData
handlerData
    Ptr CString -> IO ()
forall a. Ptr a -> IO ()
freeMem Ptr CString
outKfGroupName
    Ptr CString -> IO ()
forall a. Ptr a -> IO ()
freeMem Ptr CString
outKfKeyName
    Ptr (Ptr Setting) -> IO ()
forall a. Ptr a -> IO ()
freeMem Ptr (Ptr Setting)
outCurSetting
    Ptr CString -> IO ()
forall a. Ptr a -> IO ()
freeMem Ptr CString
outCurPropertyName
    (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
-> IO (Maybe Text, Maybe Text, Maybe Setting, Maybe Text)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe Text
maybeOutKfGroupName', Maybe Text
maybeOutKfKeyName', Maybe Setting
maybeOutCurSetting', Maybe Text
maybeOutCurPropertyName')

#if defined(ENABLE_OVERLOADING)
data KeyfileHandlerDataGetContextMethodInfo
instance (signature ~ (m ((Maybe T.Text, Maybe T.Text, Maybe NM.Setting.Setting, Maybe T.Text))), MonadIO m) => O.OverloadedMethod KeyfileHandlerDataGetContextMethodInfo KeyfileHandlerData signature where
    overloadedMethod = keyfileHandlerDataGetContext

instance O.OverloadedMethodInfo KeyfileHandlerDataGetContextMethodInfo KeyfileHandlerData where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.NM.Structs.KeyfileHandlerData.keyfileHandlerDataGetContext",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-nm-1.0.1/docs/GI-NM-Structs-KeyfileHandlerData.html#v:keyfileHandlerDataGetContext"
        })


#endif

-- method KeyfileHandlerData::warn_get
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "handler_data"
--           , argType =
--               TInterface Name { namespace = "NM" , name = "KeyfileHandlerData" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "the #NMKeyfileHandlerData for a %NM_KEYFILE_HANDLER_TYPE_WARN\n event."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "out_message"
--           , argType = TBasicType TUTF8
--           , direction = DirectionOut
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the warning message."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "out_severity"
--           , argType =
--               TInterface Name { namespace = "NM" , name = "KeyfileWarnSeverity" }
--           , direction = DirectionOut
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the #NMKeyfileWarnSeverity warning severity."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferEverything
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "nm_keyfile_handler_data_warn_get" nm_keyfile_handler_data_warn_get :: 
    Ptr KeyfileHandlerData ->               -- handler_data : TInterface (Name {namespace = "NM", name = "KeyfileHandlerData"})
    Ptr CString ->                          -- out_message : TBasicType TUTF8
    Ptr CUInt ->                            -- out_severity : TInterface (Name {namespace = "NM", name = "KeyfileWarnSeverity"})
    IO ()

-- | /No description available in the introspection data./
-- 
-- /Since: 1.30/
keyfileHandlerDataWarnGet ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    KeyfileHandlerData
    -- ^ /@handlerData@/: the t'GI.NM.Structs.KeyfileHandlerData.KeyfileHandlerData' for a 'GI.NM.Enums.KeyfileHandlerTypeWarn'
    --  event.
    -> m ((T.Text, NM.Enums.KeyfileWarnSeverity))
keyfileHandlerDataWarnGet :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
KeyfileHandlerData -> m (Text, KeyfileWarnSeverity)
keyfileHandlerDataWarnGet KeyfileHandlerData
handlerData = IO (Text, KeyfileWarnSeverity) -> m (Text, KeyfileWarnSeverity)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Text, KeyfileWarnSeverity) -> m (Text, KeyfileWarnSeverity))
-> IO (Text, KeyfileWarnSeverity) -> m (Text, KeyfileWarnSeverity)
forall a b. (a -> b) -> a -> b
$ do
    Ptr KeyfileHandlerData
handlerData' <- KeyfileHandlerData -> IO (Ptr KeyfileHandlerData)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr KeyfileHandlerData
handlerData
    Ptr CString
outMessage <- IO (Ptr CString)
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr CString)
    Ptr CUInt
outSeverity <- IO (Ptr CUInt)
forall a. Storable a => IO (Ptr a)
allocMem :: IO (Ptr CUInt)
    Ptr KeyfileHandlerData -> Ptr CString -> Ptr CUInt -> IO ()
nm_keyfile_handler_data_warn_get Ptr KeyfileHandlerData
handlerData' Ptr CString
outMessage Ptr CUInt
outSeverity
    CString
outMessage' <- Ptr CString -> IO CString
forall a. Storable a => Ptr a -> IO a
peek Ptr CString
outMessage
    Text
outMessage'' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
outMessage'
    CUInt
outSeverity' <- Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CUInt
outSeverity
    let outSeverity'' :: KeyfileWarnSeverity
outSeverity'' = (Int -> KeyfileWarnSeverity
forall a. Enum a => Int -> a
toEnum (Int -> KeyfileWarnSeverity)
-> (CUInt -> Int) -> CUInt -> KeyfileWarnSeverity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) CUInt
outSeverity'
    KeyfileHandlerData -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr KeyfileHandlerData
handlerData
    Ptr CString -> IO ()
forall a. Ptr a -> IO ()
freeMem Ptr CString
outMessage
    Ptr CUInt -> IO ()
forall a. Ptr a -> IO ()
freeMem Ptr CUInt
outSeverity
    (Text, KeyfileWarnSeverity) -> IO (Text, KeyfileWarnSeverity)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Text
outMessage'', KeyfileWarnSeverity
outSeverity'')

#if defined(ENABLE_OVERLOADING)
data KeyfileHandlerDataWarnGetMethodInfo
instance (signature ~ (m ((T.Text, NM.Enums.KeyfileWarnSeverity))), MonadIO m) => O.OverloadedMethod KeyfileHandlerDataWarnGetMethodInfo KeyfileHandlerData signature where
    overloadedMethod = keyfileHandlerDataWarnGet

instance O.OverloadedMethodInfo KeyfileHandlerDataWarnGetMethodInfo KeyfileHandlerData where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.NM.Structs.KeyfileHandlerData.keyfileHandlerDataWarnGet",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-nm-1.0.1/docs/GI-NM-Structs-KeyfileHandlerData.html#v:keyfileHandlerDataWarnGet"
        })


#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveKeyfileHandlerDataMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveKeyfileHandlerDataMethod "failWithError" o = KeyfileHandlerDataFailWithErrorMethodInfo
    ResolveKeyfileHandlerDataMethod "warnGet" o = KeyfileHandlerDataWarnGetMethodInfo
    ResolveKeyfileHandlerDataMethod "getContext" o = KeyfileHandlerDataGetContextMethodInfo
    ResolveKeyfileHandlerDataMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveKeyfileHandlerDataMethod t KeyfileHandlerData, O.OverloadedMethod info KeyfileHandlerData p) => OL.IsLabel t (KeyfileHandlerData -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveKeyfileHandlerDataMethod t KeyfileHandlerData, O.OverloadedMethod info KeyfileHandlerData p, R.HasField t KeyfileHandlerData p) => R.HasField t KeyfileHandlerData p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveKeyfileHandlerDataMethod t KeyfileHandlerData, O.OverloadedMethodInfo info KeyfileHandlerData) => OL.IsLabel t (O.MethodProxy info KeyfileHandlerData) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif