    {- |
    Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
    License    : LGPL-2.1
    Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

    Instances of the 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation' class are used when
    handling D-Bus method calls. It provides a way to asynchronously
    return results and errors.

    The normal way to obtain a 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation' object is to receive
    it as an argument to the @/handle_method_call()/@ function in a
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' that was passed to @/g_dbus_connection_register_object()/@.

    /Since: 2.26/
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Gio.Objects.DBusMethodInvocation
        (

    -- * Exported types
        DBusMethodInvocation(..)                ,
        IsDBusMethodInvocation                  ,
        toDBusMethodInvocation                  ,
        noDBusMethodInvocation                  ,

     -- * Methods
    -- ** getConnection #method:getConnection#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetConnectionMethodInfo,
    #endif
        dBusMethodInvocationGetConnection       ,

    -- ** getInterfaceName #method:getInterfaceName#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetInterfaceNameMethodInfo,
    #endif
        dBusMethodInvocationGetInterfaceName    ,

    -- ** getMessage #method:getMessage#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetMessageMethodInfo,
    #endif
        dBusMethodInvocationGetMessage          ,

    -- ** getMethodInfo #method:getMethodInfo#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetMethodInfoMethodInfo,
    #endif
        dBusMethodInvocationGetMethodInfo       ,

    -- ** getMethodName #method:getMethodName#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetMethodNameMethodInfo,
    #endif
        dBusMethodInvocationGetMethodName       ,

    -- ** getObjectPath #method:getObjectPath#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetObjectPathMethodInfo,
    #endif
        dBusMethodInvocationGetObjectPath       ,

    -- ** getParameters #method:getParameters#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetParametersMethodInfo,
    #endif
        dBusMethodInvocationGetParameters       ,

    -- ** getPropertyInfo #method:getPropertyInfo#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetPropertyInfoMethodInfo,
    #endif
        dBusMethodInvocationGetPropertyInfo     ,

    -- ** getSender #method:getSender#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationGetSenderMethodInfo ,
    #endif
        dBusMethodInvocationGetSender           ,

    -- ** returnDbusError #method:returnDbusError#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationReturnDbusErrorMethodInfo,
    #endif
        dBusMethodInvocationReturnDbusError     ,

    -- ** returnErrorLiteral #method:returnErrorLiteral#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationReturnErrorLiteralMethodInfo,
    #endif
        dBusMethodInvocationReturnErrorLiteral  ,

    -- ** returnGerror #method:returnGerror#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationReturnGerrorMethodInfo,
    #endif
        dBusMethodInvocationReturnGerror        ,

    -- ** returnValue #method:returnValue#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationReturnValueMethodInfo,
    #endif
        dBusMethodInvocationReturnValue         ,

    -- ** returnValueWithUnixFdList #method:returnValueWithUnixFdList#

    #if ENABLE_OVERLOADING
        DBusMethodInvocationReturnValueWithUnixFdListMethodInfo,
    #endif
        dBusMethodInvocationReturnValueWithUnixFdList,

        ) 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.ManagedPtr as B.ManagedPtr
    import qualified Data.GI.Base.GError as B.GError
    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.Text as T
    import qualified Data.ByteString.Char8 as B
    import qualified Data.Map as Map
    import qualified Foreign.Ptr as FP

    import qualified GI.GObject.Objects.Object as GObject.Object
    import {-# SOURCE #-} qualified GI.Gio.Objects.DBusConnection as Gio.DBusConnection
    import {-# SOURCE #-} qualified GI.Gio.Objects.DBusMessage as Gio.DBusMessage
    import {-# SOURCE #-} qualified GI.Gio.Objects.UnixFDList as Gio.UnixFDList
    import {-# SOURCE #-} qualified GI.Gio.Structs.DBusMethodInfo as Gio.DBusMethodInfo
    import {-# SOURCE #-} qualified GI.Gio.Structs.DBusPropertyInfo as Gio.DBusPropertyInfo

    -- | Memory-managed wrapper type.
    newtype DBusMethodInvocation = DBusMethodInvocation (ManagedPtr DBusMethodInvocation)
    foreign import ccall "g_dbus_method_invocation_get_type"
        c_g_dbus_method_invocation_get_type :: IO GType

    instance GObject DBusMethodInvocation where
        gobjectType _ = c_g_dbus_method_invocation_get_type

    -- | Type class for types which can be safely cast to `DBusMethodInvocation`, for instance with `toDBusMethodInvocation`.
    class GObject o => IsDBusMethodInvocation o
    #if MIN_VERSION_base(4,9,0)
    instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError DBusMethodInvocation a) =>
        IsDBusMethodInvocation a
    #endif
    instance IsDBusMethodInvocation DBusMethodInvocation
    instance GObject.Object.IsObject DBusMethodInvocation

    -- | Cast to `DBusMethodInvocation`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
    toDBusMethodInvocation :: (MonadIO m, IsDBusMethodInvocation o) => o -> m DBusMethodInvocation
    toDBusMethodInvocation = liftIO . unsafeCastTo DBusMethodInvocation

    -- | A convenience alias for `Nothing` :: `Maybe` `DBusMethodInvocation`.
    noDBusMethodInvocation :: Maybe DBusMethodInvocation
    noDBusMethodInvocation = Nothing

    #if ENABLE_OVERLOADING
    type family ResolveDBusMethodInvocationMethod (t :: Symbol) (o :: *) :: * where
        ResolveDBusMethodInvocationMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
        ResolveDBusMethodInvocationMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
        ResolveDBusMethodInvocationMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
        ResolveDBusMethodInvocationMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
        ResolveDBusMethodInvocationMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
        ResolveDBusMethodInvocationMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
        ResolveDBusMethodInvocationMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
        ResolveDBusMethodInvocationMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
        ResolveDBusMethodInvocationMethod "ref" o = GObject.Object.ObjectRefMethodInfo
        ResolveDBusMethodInvocationMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
        ResolveDBusMethodInvocationMethod "returnDbusError" o = DBusMethodInvocationReturnDbusErrorMethodInfo
        ResolveDBusMethodInvocationMethod "returnErrorLiteral" o = DBusMethodInvocationReturnErrorLiteralMethodInfo
        ResolveDBusMethodInvocationMethod "returnGerror" o = DBusMethodInvocationReturnGerrorMethodInfo
        ResolveDBusMethodInvocationMethod "returnValue" o = DBusMethodInvocationReturnValueMethodInfo
        ResolveDBusMethodInvocationMethod "returnValueWithUnixFdList" o = DBusMethodInvocationReturnValueWithUnixFdListMethodInfo
        ResolveDBusMethodInvocationMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
        ResolveDBusMethodInvocationMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
        ResolveDBusMethodInvocationMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
        ResolveDBusMethodInvocationMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
        ResolveDBusMethodInvocationMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
        ResolveDBusMethodInvocationMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
        ResolveDBusMethodInvocationMethod "getConnection" o = DBusMethodInvocationGetConnectionMethodInfo
        ResolveDBusMethodInvocationMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
        ResolveDBusMethodInvocationMethod "getInterfaceName" o = DBusMethodInvocationGetInterfaceNameMethodInfo
        ResolveDBusMethodInvocationMethod "getMessage" o = DBusMethodInvocationGetMessageMethodInfo
        ResolveDBusMethodInvocationMethod "getMethodInfo" o = DBusMethodInvocationGetMethodInfoMethodInfo
        ResolveDBusMethodInvocationMethod "getMethodName" o = DBusMethodInvocationGetMethodNameMethodInfo
        ResolveDBusMethodInvocationMethod "getObjectPath" o = DBusMethodInvocationGetObjectPathMethodInfo
        ResolveDBusMethodInvocationMethod "getParameters" o = DBusMethodInvocationGetParametersMethodInfo
        ResolveDBusMethodInvocationMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
        ResolveDBusMethodInvocationMethod "getPropertyInfo" o = DBusMethodInvocationGetPropertyInfoMethodInfo
        ResolveDBusMethodInvocationMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
        ResolveDBusMethodInvocationMethod "getSender" o = DBusMethodInvocationGetSenderMethodInfo
        ResolveDBusMethodInvocationMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
        ResolveDBusMethodInvocationMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
        ResolveDBusMethodInvocationMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveDBusMethodInvocationMethod t DBusMethodInvocation, O.MethodInfo info DBusMethodInvocation p) => O.IsLabelProxy t (DBusMethodInvocation -> p) where
        fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

    #if MIN_VERSION_base(4,9,0)
    instance (info ~ ResolveDBusMethodInvocationMethod t DBusMethodInvocation, O.MethodInfo info DBusMethodInvocation p) => O.IsLabel t (DBusMethodInvocation -> p) where
    #if MIN_VERSION_base(4,10,0)
        fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
    #else
        fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
    #endif
    #endif

    #endif

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList DBusMethodInvocation
    type instance O.AttributeList DBusMethodInvocation = DBusMethodInvocationAttributeList
    type DBusMethodInvocationAttributeList = ('[ ] :: [(Symbol, *)])
    #endif

    #if ENABLE_OVERLOADING
    #endif

    #if ENABLE_OVERLOADING
    type instance O.SignalList DBusMethodInvocation = DBusMethodInvocationSignalList
    type DBusMethodInvocationSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

    #endif

    -- method DBusMethodInvocation::get_connection
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "DBusConnection"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_connection" g_dbus_method_invocation_get_connection ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO (Ptr Gio.DBusConnection.DBusConnection)

    {- |
    Gets the 'GI.Gio.Objects.DBusConnection.DBusConnection' the method was invoked on.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetConnection ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m Gio.DBusConnection.DBusConnection
        {- ^ __Returns:__ A 'GI.Gio.Objects.DBusConnection.DBusConnection'. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetConnection invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_connection invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetConnection" result
        result' <- (newObject Gio.DBusConnection.DBusConnection) result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetConnectionMethodInfo
    instance (signature ~ (m Gio.DBusConnection.DBusConnection), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetConnectionMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetConnection

    #endif

    -- method DBusMethodInvocation::get_interface_name
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_interface_name" g_dbus_method_invocation_get_interface_name ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO CString

    {- |
    Gets the name of the D-Bus interface the method was invoked on.

    If this method call is a property Get, Set or GetAll call that has
    been redirected to the method call handler then
    \"org.freedesktop.DBus.Properties\" will be returned.  See
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetInterfaceName ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m T.Text
        {- ^ __Returns:__ A string. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetInterfaceName invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_interface_name invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetInterfaceName" result
        result' <- cstringToText result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetInterfaceNameMethodInfo
    instance (signature ~ (m T.Text), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetInterfaceNameMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetInterfaceName

    #endif

    -- method DBusMethodInvocation::get_message
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "DBusMessage"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_message" g_dbus_method_invocation_get_message ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO (Ptr Gio.DBusMessage.DBusMessage)

    {- |
    Gets the 'GI.Gio.Objects.DBusMessage.DBusMessage' for the method invocation. This is useful if
    you need to use low-level protocol features, such as UNIX file
    descriptor passing, that cannot be properly expressed in the
    'GVariant' API.

    See this [server][gdbus-server] and [client][gdbus-unix-fd-client]
    for an example of how to use this low-level API to send and receive
    UNIX file descriptors.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetMessage ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m Gio.DBusMessage.DBusMessage
        {- ^ __Returns:__ 'GI.Gio.Objects.DBusMessage.DBusMessage'. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetMessage invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_message invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetMessage" result
        result' <- (newObject Gio.DBusMessage.DBusMessage) result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetMessageMethodInfo
    instance (signature ~ (m Gio.DBusMessage.DBusMessage), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetMessageMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetMessage

    #endif

    -- method DBusMethodInvocation::get_method_info
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "DBusMethodInfo"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_method_info" g_dbus_method_invocation_get_method_info ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO (Ptr Gio.DBusMethodInfo.DBusMethodInfo)

    {- |
    Gets information about the method call, if any.

    If this method invocation is a property Get, Set or GetAll call that
    has been redirected to the method call handler then 'Nothing' will be
    returned.  See 'GI.Gio.Objects.DBusMethodInvocation.dBusMethodInvocationGetPropertyInfo' and
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetMethodInfo ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m Gio.DBusMethodInfo.DBusMethodInfo
        {- ^ __Returns:__ A 'GI.Gio.Structs.DBusMethodInfo.DBusMethodInfo' or 'Nothing'. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetMethodInfo invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_method_info invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetMethodInfo" result
        result' <- (newBoxed Gio.DBusMethodInfo.DBusMethodInfo) result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetMethodInfoMethodInfo
    instance (signature ~ (m Gio.DBusMethodInfo.DBusMethodInfo), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetMethodInfoMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetMethodInfo

    #endif

    -- method DBusMethodInvocation::get_method_name
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_method_name" g_dbus_method_invocation_get_method_name ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO CString

    {- |
    Gets the name of the method that was invoked.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetMethodName ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m T.Text
        {- ^ __Returns:__ A string. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetMethodName invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_method_name invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetMethodName" result
        result' <- cstringToText result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetMethodNameMethodInfo
    instance (signature ~ (m T.Text), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetMethodNameMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetMethodName

    #endif

    -- method DBusMethodInvocation::get_object_path
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_object_path" g_dbus_method_invocation_get_object_path ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO CString

    {- |
    Gets the object path the method was invoked on.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetObjectPath ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m T.Text
        {- ^ __Returns:__ A string. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetObjectPath invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_object_path invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetObjectPath" result
        result' <- cstringToText result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetObjectPathMethodInfo
    instance (signature ~ (m T.Text), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetObjectPathMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetObjectPath

    #endif

    -- method DBusMethodInvocation::get_parameters
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just TVariant
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_parameters" g_dbus_method_invocation_get_parameters ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO (Ptr GVariant)

    {- |
    Gets the parameters of the method invocation. If there are no input
    parameters then this will return a GVariant with 0 children rather than NULL.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetParameters ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m GVariant
        {- ^ __Returns:__ A 'GVariant' tuple. Do not unref this because it is owned by /@invocation@/. -}
    dBusMethodInvocationGetParameters invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_parameters invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetParameters" result
        result' <- B.GVariant.newGVariantFromPtr result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetParametersMethodInfo
    instance (signature ~ (m GVariant), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetParametersMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetParameters

    #endif

    -- method DBusMethodInvocation::get_property_info
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "DBusPropertyInfo"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_property_info" g_dbus_method_invocation_get_property_info ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO (Ptr Gio.DBusPropertyInfo.DBusPropertyInfo)

    {- |
    Gets information about the property that this method call is for, if
    any.

    This will only be set in the case of an invocation in response to a
    property Get or Set call that has been directed to the method call
    handler for an object on account of its @/property_get()/@ or
    @/property_set()/@ vtable pointers being unset.

    See 'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information.

    If the call was GetAll, 'Nothing' will be returned.

    /Since: 2.38/
    -}
    dBusMethodInvocationGetPropertyInfo ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation' -}
        -> m Gio.DBusPropertyInfo.DBusPropertyInfo
        {- ^ __Returns:__ a 'GI.Gio.Structs.DBusPropertyInfo.DBusPropertyInfo' or 'Nothing' -}
    dBusMethodInvocationGetPropertyInfo invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_property_info invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetPropertyInfo" result
        result' <- (newBoxed Gio.DBusPropertyInfo.DBusPropertyInfo) result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetPropertyInfoMethodInfo
    instance (signature ~ (m Gio.DBusPropertyInfo.DBusPropertyInfo), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetPropertyInfoMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetPropertyInfo

    #endif

    -- method DBusMethodInvocation::get_sender
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_get_sender" g_dbus_method_invocation_get_sender ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        IO CString

    {- |
    Gets the bus name that invoked the method.

    /Since: 2.26/
    -}
    dBusMethodInvocationGetSender ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> m T.Text
        {- ^ __Returns:__ A string. Do not free, it is owned by /@invocation@/. -}
    dBusMethodInvocationGetSender invocation = liftIO $ do
        invocation' <- unsafeManagedPtrCastPtr invocation
        result <- g_dbus_method_invocation_get_sender invocation'
        checkUnexpectedReturnNULL "dBusMethodInvocationGetSender" result
        result' <- cstringToText result
        touchManagedPtr invocation
        return result'

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationGetSenderMethodInfo
    instance (signature ~ (m T.Text), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationGetSenderMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationGetSender

    #endif

    -- method DBusMethodInvocation::return_dbus_error
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "error_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A valid D-Bus error name.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "error_message", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A valid D-Bus error message.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_return_dbus_error" g_dbus_method_invocation_return_dbus_error ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        CString ->                              -- error_name : TBasicType TUTF8
        CString ->                              -- error_message : TBasicType TUTF8
        IO ()

    {- |
    Finishes handling a D-Bus method call by returning an error.

    This method will take ownership of /@invocation@/. See
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information about the ownership of
    /@invocation@/.

    /Since: 2.26/
    -}
    dBusMethodInvocationReturnDbusError ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> T.Text
        {- ^ /@errorName@/: A valid D-Bus error name. -}
        -> T.Text
        {- ^ /@errorMessage@/: A valid D-Bus error message. -}
        -> m ()
    dBusMethodInvocationReturnDbusError invocation errorName errorMessage = liftIO $ do
        invocation' <- B.ManagedPtr.disownObject invocation
        errorName' <- textToCString errorName
        errorMessage' <- textToCString errorMessage
        g_dbus_method_invocation_return_dbus_error invocation' errorName' errorMessage'
        touchManagedPtr invocation
        freeMem errorName'
        freeMem errorMessage'
        return ()

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationReturnDbusErrorMethodInfo
    instance (signature ~ (T.Text -> T.Text -> m ()), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationReturnDbusErrorMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationReturnDbusError

    #endif

    -- method DBusMethodInvocation::return_error_literal
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "domain", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GQuark for the #GError error domain.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "code", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The error code.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "message", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The error message.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_return_error_literal" g_dbus_method_invocation_return_error_literal ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        Word32 ->                               -- domain : TBasicType TUInt32
        Int32 ->                                -- code : TBasicType TInt
        CString ->                              -- message : TBasicType TUTF8
        IO ()

    {- |
    Like @/g_dbus_method_invocation_return_error()/@ but without @/printf()/@-style formatting.

    This method will take ownership of /@invocation@/. See
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information about the ownership of
    /@invocation@/.

    /Since: 2.26/
    -}
    dBusMethodInvocationReturnErrorLiteral ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> Word32
        {- ^ /@domain@/: A @/GQuark/@ for the 'GError' error domain. -}
        -> Int32
        {- ^ /@code@/: The error code. -}
        -> T.Text
        {- ^ /@message@/: The error message. -}
        -> m ()
    dBusMethodInvocationReturnErrorLiteral invocation domain code message = liftIO $ do
        invocation' <- B.ManagedPtr.disownObject invocation
        message' <- textToCString message
        g_dbus_method_invocation_return_error_literal invocation' domain code message'
        touchManagedPtr invocation
        freeMem message'
        return ()

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationReturnErrorLiteralMethodInfo
    instance (signature ~ (Word32 -> Int32 -> T.Text -> m ()), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationReturnErrorLiteralMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationReturnErrorLiteral

    #endif

    -- method DBusMethodInvocation::return_gerror
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "error", argType = TError, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GError.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_return_gerror" g_dbus_method_invocation_return_gerror ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        Ptr GError ->                           -- error : TError
        IO ()

    {- |
    Like @/g_dbus_method_invocation_return_error()/@ but takes a 'GError'
    instead of the error domain, error code and message.

    This method will take ownership of /@invocation@/. See
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information about the ownership of
    /@invocation@/.

    /Since: 2.26/
    -}
    dBusMethodInvocationReturnGerror ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> GError
        {- ^ /@error@/: A 'GError'. -}
        -> m ()
    dBusMethodInvocationReturnGerror invocation error_ = liftIO $ do
        invocation' <- B.ManagedPtr.disownObject invocation
        error_' <- unsafeManagedPtrGetPtr error_
        g_dbus_method_invocation_return_gerror invocation' error_'
        touchManagedPtr invocation
        touchManagedPtr error_
        return ()

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationReturnGerrorMethodInfo
    instance (signature ~ (GError -> m ()), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationReturnGerrorMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationReturnGerror

    #endif

    -- method DBusMethodInvocation::return_value
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "parameters", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #GVariant tuple with out parameters for the method or %NULL if not passing any parameters.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_return_value" g_dbus_method_invocation_return_value ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        Ptr GVariant ->                         -- parameters : TVariant
        IO ()

    {- |
    Finishes handling a D-Bus method call by returning /@parameters@/.
    If the /@parameters@/ GVariant is floating, it is consumed.

    It is an error if /@parameters@/ is not of the right format: it must be a tuple
    containing the out-parameters of the D-Bus method. Even if the method has a
    single out-parameter, it must be contained in a tuple. If the method has no
    out-parameters, /@parameters@/ may be 'Nothing' or an empty tuple.

    === /C code/
    >
    >GDBusMethodInvocation *invocation = some_invocation;
    >g_autofree gchar *result_string = NULL;
    >g_autoptr (GError) error = NULL;
    >
    >result_string = calculate_result (&error);
    >
    >if (error != NULL)
    >  g_dbus_method_invocation_return_gerror (invocation, error);
    >else
    >  g_dbus_method_invocation_return_value (invocation,
    >                                         g_variant_new ("(s)", result_string));
    >
    >// Do not free @invocation here; returning a value does that

    This method will take ownership of /@invocation@/. See
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information about the ownership of
    /@invocation@/.

    Since 2.48, if the method call requested for a reply not to be sent
    then this call will sink /@parameters@/ and free /@invocation@/, but
    otherwise do nothing (as per the recommendations of the D-Bus
    specification).

    /Since: 2.26/
    -}
    dBusMethodInvocationReturnValue ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> Maybe (GVariant)
        {- ^ /@parameters@/: A 'GVariant' tuple with out parameters for the method or 'Nothing' if not passing any parameters. -}
        -> m ()
    dBusMethodInvocationReturnValue invocation parameters = liftIO $ do
        invocation' <- B.ManagedPtr.disownObject invocation
        maybeParameters <- case parameters of
            Nothing -> return nullPtr
            Just jParameters -> do
                jParameters' <- unsafeManagedPtrGetPtr jParameters
                return jParameters'
        g_dbus_method_invocation_return_value invocation' maybeParameters
        touchManagedPtr invocation
        whenJust parameters touchManagedPtr
        return ()

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationReturnValueMethodInfo
    instance (signature ~ (Maybe (GVariant) -> m ()), MonadIO m, IsDBusMethodInvocation a) => O.MethodInfo DBusMethodInvocationReturnValueMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationReturnValue

    #endif

    -- method DBusMethodInvocation::return_value_with_unix_fd_list
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "invocation", argType = TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GDBusMethodInvocation.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "parameters", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #GVariant tuple with out parameters for the method or %NULL if not passing any parameters.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "fd_list", argType = TInterface (Name {namespace = "Gio", name = "UnixFDList"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #GUnixFDList or %NULL.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_method_invocation_return_value_with_unix_fd_list" g_dbus_method_invocation_return_value_with_unix_fd_list ::
        Ptr DBusMethodInvocation ->             -- invocation : TInterface (Name {namespace = "Gio", name = "DBusMethodInvocation"})
        Ptr GVariant ->                         -- parameters : TVariant
        Ptr Gio.UnixFDList.UnixFDList ->        -- fd_list : TInterface (Name {namespace = "Gio", name = "UnixFDList"})
        IO ()

    {- |
    Like 'GI.Gio.Objects.DBusMethodInvocation.dBusMethodInvocationReturnValue' but also takes a 'GI.Gio.Objects.UnixFDList.UnixFDList'.

    This method is only available on UNIX.

    This method will take ownership of /@invocation@/. See
    'GI.Gio.Structs.DBusInterfaceVTable.DBusInterfaceVTable' for more information about the ownership of
    /@invocation@/.

    /Since: 2.30/
    -}
    dBusMethodInvocationReturnValueWithUnixFdList ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusMethodInvocation a, Gio.UnixFDList.IsUnixFDList b) =>
        a
        {- ^ /@invocation@/: A 'GI.Gio.Objects.DBusMethodInvocation.DBusMethodInvocation'. -}
        -> Maybe (GVariant)
        {- ^ /@parameters@/: A 'GVariant' tuple with out parameters for the method or 'Nothing' if not passing any parameters. -}
        -> Maybe (b)
        {- ^ /@fdList@/: A 'GI.Gio.Objects.UnixFDList.UnixFDList' or 'Nothing'. -}
        -> m ()
    dBusMethodInvocationReturnValueWithUnixFdList invocation parameters fdList = liftIO $ do
        invocation' <- B.ManagedPtr.disownObject invocation
        maybeParameters <- case parameters of
            Nothing -> return nullPtr
            Just jParameters -> do
                jParameters' <- unsafeManagedPtrGetPtr jParameters
                return jParameters'
        maybeFdList <- case fdList of
            Nothing -> return nullPtr
            Just jFdList -> do
                jFdList' <- unsafeManagedPtrCastPtr jFdList
                return jFdList'
        g_dbus_method_invocation_return_value_with_unix_fd_list invocation' maybeParameters maybeFdList
        touchManagedPtr invocation
        whenJust parameters touchManagedPtr
        whenJust fdList touchManagedPtr
        return ()

    #if ENABLE_OVERLOADING
    data DBusMethodInvocationReturnValueWithUnixFdListMethodInfo
    instance (signature ~ (Maybe (GVariant) -> Maybe (b) -> m ()), MonadIO m, IsDBusMethodInvocation a, Gio.UnixFDList.IsUnixFDList b) => O.MethodInfo DBusMethodInvocationReturnValueWithUnixFdListMethodInfo a signature where
        overloadedMethod _ = dBusMethodInvocationReturnValueWithUnixFdList

    #endif