    {-# LANGUAGE TypeApplications #-}

    -- | Copyright  : Will Thompson and Iñaki García Etxebarria
    -- License    : LGPL-2.1
    -- Maintainer : Iñaki García Etxebarria
    --
    -- A @GDBusObjectProxy@ is an object used to represent a remote object
    -- with one or more D-Bus interfaces. Normally, you don’t instantiate
    -- a @GDBusObjectProxy@ yourself — typically t'GI.Gio.Objects.DBusObjectManagerClient.DBusObjectManagerClient'
    -- is used to obtain it.
    --
    -- /Since: 2.30/

    #if !defined(__HADDOCK_VERSION__)
    #define ENABLE_OVERLOADING
    #endif

    module GI.Gio.Objects.DBusObjectProxy
        (

    -- * Exported types
        DBusObjectProxy(..)                     ,
        IsDBusObjectProxy                       ,
        toDBusObjectProxy                       ,

     -- * Methods
    -- |
    --
    --  === __Click to display all available methods, including inherited ones__
    -- ==== Methods
    -- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
    --
    -- ==== Getters
    -- [getConnection]("GI.Gio.Objects.DBusObjectProxy#g:method:getConnection"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getInterface]("GI.Gio.Interfaces.DBusObject#g:method:getInterface"), [getInterfaces]("GI.Gio.Interfaces.DBusObject#g:method:getInterfaces"), [getObjectPath]("GI.Gio.Interfaces.DBusObject#g:method:getObjectPath"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
    --
    -- ==== Setters
    -- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

    #if defined(ENABLE_OVERLOADING)
        ResolveDBusObjectProxyMethod            ,
    #endif

    -- ** getConnection #method:getConnection#

    #if defined(ENABLE_OVERLOADING)
        DBusObjectProxyGetConnectionMethodInfo  ,
    #endif
        dBusObjectProxyGetConnection            ,

    -- ** new #method:new#

        dBusObjectProxyNew                      ,

     -- * Properties

    -- ** gConnection #attr:gConnection#
    -- | The connection of the proxy.
    --
    -- /Since: 2.30/

    #if defined(ENABLE_OVERLOADING)
        DBusObjectProxyGConnectionPropertyInfo  ,
    #endif
        constructDBusObjectProxyGConnection     ,
    #if defined(ENABLE_OVERLOADING)
        dBusObjectProxyGConnection              ,
    #endif
        getDBusObjectProxyGConnection           ,

    -- ** gObjectPath #attr:gObjectPath#
    -- | The object path of the proxy.
    --
    -- /Since: 2.30/

    #if defined(ENABLE_OVERLOADING)
        DBusObjectProxyGObjectPathPropertyInfo  ,
    #endif
        constructDBusObjectProxyGObjectPath     ,
    #if defined(ENABLE_OVERLOADING)
        dBusObjectProxyGObjectPath              ,
    #endif
        getDBusObjectProxyGObjectPath           ,

        ) 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 GI.GObject.Objects.Object as GObject.Object
    import {-# SOURCE #-} qualified GI.Gio.Interfaces.DBusObject as Gio.DBusObject
    import {-# SOURCE #-} qualified GI.Gio.Objects.DBusConnection as Gio.DBusConnection

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

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

    foreign import ccall "g_dbus_object_proxy_get_type"
        c_g_dbus_object_proxy_get_type :: IO B.Types.GType

    instance B.Types.TypedObject DBusObjectProxy where
        glibType :: IO GType
    glibType = IO GType
    c_g_dbus_object_proxy_get_type

    instance B.Types.GObject DBusObjectProxy

    -- | Type class for types which can be safely cast to `DBusObjectProxy`, for instance with `toDBusObjectProxy`.
    class (SP.GObject o, O.IsDescendantOf DBusObjectProxy o) => IsDBusObjectProxy o
    instance (SP.GObject o, O.IsDescendantOf DBusObjectProxy o) => IsDBusObjectProxy o

    instance O.HasParentTypes DBusObjectProxy
    type instance O.ParentTypes DBusObjectProxy = '[GObject.Object.Object, Gio.DBusObject.DBusObject]

    -- | Cast to `DBusObjectProxy`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
    toDBusObjectProxy :: (MIO.MonadIO m, IsDBusObjectProxy o) => o -> m DBusObjectProxy
    toDBusObjectProxy :: forall (m :: * -> *) o.
    (MonadIO m, IsDBusObjectProxy o) =>
    o -> m DBusObjectProxy
    toDBusObjectProxy = IO DBusObjectProxy -> m DBusObjectProxy
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO DBusObjectProxy -> m DBusObjectProxy)
    -> (o -> IO DBusObjectProxy) -> o -> m DBusObjectProxy
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . (ManagedPtr DBusObjectProxy -> DBusObjectProxy)
    -> o -> IO DBusObjectProxy
    forall o o'.
    (HasCallStack, ManagedPtrNewtype o, TypedObject o,
     ManagedPtrNewtype o', TypedObject o') =>
    (ManagedPtr o' -> o') -> o -> IO o'
    B.ManagedPtr.unsafeCastTo ManagedPtr DBusObjectProxy -> DBusObjectProxy
    DBusObjectProxy

    -- | Convert 'DBusObjectProxy' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
    instance B.GValue.IsGValue (Maybe DBusObjectProxy) where
        gvalueGType_ :: IO GType
    gvalueGType_ = IO GType
    c_g_dbus_object_proxy_get_type
        gvalueSet_ :: Ptr GValue -> Maybe DBusObjectProxy -> IO ()
    gvalueSet_ Ptr GValue
    gv Maybe DBusObjectProxy
    P.Nothing = Ptr GValue -> Ptr DBusObjectProxy -> IO ()
    forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
    B.GValue.set_object Ptr GValue
    gv (Ptr DBusObjectProxy
    forall a. Ptr a
    FP.nullPtr :: FP.Ptr DBusObjectProxy)
        gvalueSet_ Ptr GValue
    gv (P.Just DBusObjectProxy
    obj) = DBusObjectProxy -> (Ptr DBusObjectProxy -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    B.ManagedPtr.withManagedPtr DBusObjectProxy
    obj (Ptr GValue -> Ptr DBusObjectProxy -> IO ()
    forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
    B.GValue.set_object Ptr GValue
    gv)
        gvalueGet_ :: Ptr GValue -> IO (Maybe DBusObjectProxy)
    gvalueGet_ Ptr GValue
    gv = do
            Ptr DBusObjectProxy
    ptr <- Ptr GValue -> IO (Ptr DBusObjectProxy)
    forall a. GObject a => Ptr GValue -> IO (Ptr a)
    B.GValue.get_object Ptr GValue
    gv :: IO (FP.Ptr DBusObjectProxy)
            if Ptr DBusObjectProxy
    ptr Ptr DBusObjectProxy -> Ptr DBusObjectProxy -> Bool
    forall a. Eq a => a -> a -> Bool
    /= Ptr DBusObjectProxy
    forall a. Ptr a
    FP.nullPtr
            then DBusObjectProxy -> Maybe DBusObjectProxy
    forall a. a -> Maybe a
    P.Just (DBusObjectProxy -> Maybe DBusObjectProxy)
    -> IO DBusObjectProxy -> IO (Maybe DBusObjectProxy)
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> (ManagedPtr DBusObjectProxy -> DBusObjectProxy)
    -> Ptr DBusObjectProxy -> IO DBusObjectProxy
    forall a b.
    (HasCallStack, GObject a, GObject b) =>
    (ManagedPtr a -> a) -> Ptr b -> IO a
    B.ManagedPtr.newObject ManagedPtr DBusObjectProxy -> DBusObjectProxy
    DBusObjectProxy Ptr DBusObjectProxy
    ptr
            else Maybe DBusObjectProxy -> IO (Maybe DBusObjectProxy)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Maybe DBusObjectProxy
    forall a. Maybe a
    P.Nothing

    #if defined(ENABLE_OVERLOADING)
    type family ResolveDBusObjectProxyMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
        ResolveDBusObjectProxyMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
        ResolveDBusObjectProxyMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
        ResolveDBusObjectProxyMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
        ResolveDBusObjectProxyMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
        ResolveDBusObjectProxyMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
        ResolveDBusObjectProxyMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
        ResolveDBusObjectProxyMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
        ResolveDBusObjectProxyMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
        ResolveDBusObjectProxyMethod "ref" o = GObject.Object.ObjectRefMethodInfo
        ResolveDBusObjectProxyMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
        ResolveDBusObjectProxyMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
        ResolveDBusObjectProxyMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
        ResolveDBusObjectProxyMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
        ResolveDBusObjectProxyMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
        ResolveDBusObjectProxyMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
        ResolveDBusObjectProxyMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
        ResolveDBusObjectProxyMethod "getConnection" o = DBusObjectProxyGetConnectionMethodInfo
        ResolveDBusObjectProxyMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
        ResolveDBusObjectProxyMethod "getInterface" o = Gio.DBusObject.DBusObjectGetInterfaceMethodInfo
        ResolveDBusObjectProxyMethod "getInterfaces" o = Gio.DBusObject.DBusObjectGetInterfacesMethodInfo
        ResolveDBusObjectProxyMethod "getObjectPath" o = Gio.DBusObject.DBusObjectGetObjectPathMethodInfo
        ResolveDBusObjectProxyMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
        ResolveDBusObjectProxyMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
        ResolveDBusObjectProxyMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
        ResolveDBusObjectProxyMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
        ResolveDBusObjectProxyMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
        ResolveDBusObjectProxyMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveDBusObjectProxyMethod t DBusObjectProxy, O.OverloadedMethod info DBusObjectProxy p) => OL.IsLabel t (DBusObjectProxy -> 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 ~ ResolveDBusObjectProxyMethod t DBusObjectProxy, O.OverloadedMethod info DBusObjectProxy p, R.HasField t DBusObjectProxy p) => R.HasField t DBusObjectProxy p where
        getField = O.overloadedMethod @info

    #endif

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

    #endif

    -- VVV Prop "g-connection"
       -- Type: TInterface (Name {namespace = "Gio", name = "DBusConnection"})
       -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
       -- Nullable: (Nothing,Nothing)

    -- | Get the value of the “@g-connection@” property.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' dBusObjectProxy #gConnection
    -- @
    getDBusObjectProxyGConnection :: (MonadIO m, IsDBusObjectProxy o) => o -> m (Maybe Gio.DBusConnection.DBusConnection)
    getDBusObjectProxyGConnection :: forall (m :: * -> *) o.
    (MonadIO m, IsDBusObjectProxy o) =>
    o -> m (Maybe DBusConnection)
    getDBusObjectProxyGConnection o
    obj = IO (Maybe DBusConnection) -> m (Maybe DBusConnection)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO (Maybe DBusConnection) -> m (Maybe DBusConnection))
    -> IO (Maybe DBusConnection) -> m (Maybe DBusConnection)
    forall a b. (a -> b) -> a -> b
    $ o
    -> String
    -> (ManagedPtr DBusConnection -> DBusConnection)
    -> IO (Maybe DBusConnection)
    forall a b.
    (GObject a, GObject b) =>
    a -> String -> (ManagedPtr b -> b) -> IO (Maybe b)
    B.Properties.getObjectPropertyObject o
    obj String
    "g-connection" ManagedPtr DBusConnection -> DBusConnection
    Gio.DBusConnection.DBusConnection

    -- | Construct a `GValueConstruct` with valid value for the “@g-connection@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
    constructDBusObjectProxyGConnection :: (IsDBusObjectProxy o, MIO.MonadIO m, Gio.DBusConnection.IsDBusConnection a) => a -> m (GValueConstruct o)
    constructDBusObjectProxyGConnection :: forall o (m :: * -> *) a.
    (IsDBusObjectProxy o, MonadIO m, IsDBusConnection a) =>
    a -> m (GValueConstruct o)
    constructDBusObjectProxyGConnection a
    val = IO (GValueConstruct o) -> m (GValueConstruct o)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
    -> IO (GValueConstruct o) -> m (GValueConstruct o)
    forall a b. (a -> b) -> a -> b
    $ do
        IO (GValueConstruct o) -> IO (GValueConstruct o)
    forall a. IO a -> IO a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
    -> IO (GValueConstruct o) -> IO (GValueConstruct o)
    forall a b. (a -> b) -> a -> b
    $ String -> Maybe a -> IO (GValueConstruct o)
    forall a o.
    GObject a =>
    String -> Maybe a -> IO (GValueConstruct o)
    B.Properties.constructObjectPropertyObject String
    "g-connection" (a -> Maybe a
    forall a. a -> Maybe a
    P.Just a
    val)

    #if defined(ENABLE_OVERLOADING)
    data DBusObjectProxyGConnectionPropertyInfo
    instance AttrInfo DBusObjectProxyGConnectionPropertyInfo where
        type AttrAllowedOps DBusObjectProxyGConnectionPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
        type AttrBaseTypeConstraint DBusObjectProxyGConnectionPropertyInfo = IsDBusObjectProxy
        type AttrSetTypeConstraint DBusObjectProxyGConnectionPropertyInfo = Gio.DBusConnection.IsDBusConnection
        type AttrTransferTypeConstraint DBusObjectProxyGConnectionPropertyInfo = Gio.DBusConnection.IsDBusConnection
        type AttrTransferType DBusObjectProxyGConnectionPropertyInfo = Gio.DBusConnection.DBusConnection
        type AttrGetType DBusObjectProxyGConnectionPropertyInfo = (Maybe Gio.DBusConnection.DBusConnection)
        type AttrLabel DBusObjectProxyGConnectionPropertyInfo = "g-connection"
        type AttrOrigin DBusObjectProxyGConnectionPropertyInfo = DBusObjectProxy
        attrGet = getDBusObjectProxyGConnection
        attrSet = undefined
        attrTransfer _ v = do
            unsafeCastTo Gio.DBusConnection.DBusConnection v
        attrConstruct = constructDBusObjectProxyGConnection
        attrClear = undefined
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gio.Objects.DBusObjectProxy.gConnection"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gio-2.0.32/docs/GI-Gio-Objects-DBusObjectProxy.html#g:attr:gConnection"
            })
    #endif

    -- VVV Prop "g-object-path"
       -- Type: TBasicType TUTF8
       -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
       -- Nullable: (Nothing,Nothing)

    -- | Get the value of the “@g-object-path@” property.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' dBusObjectProxy #gObjectPath
    -- @
    getDBusObjectProxyGObjectPath :: (MonadIO m, IsDBusObjectProxy o) => o -> m (Maybe T.Text)
    getDBusObjectProxyGObjectPath :: forall (m :: * -> *) o.
    (MonadIO m, IsDBusObjectProxy o) =>
    o -> m (Maybe Text)
    getDBusObjectProxyGObjectPath o
    obj = IO (Maybe Text) -> m (Maybe Text)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO (Maybe Text) -> m (Maybe Text))
    -> IO (Maybe Text) -> m (Maybe Text)
    forall a b. (a -> b) -> a -> b
    $ o -> String -> IO (Maybe Text)
    forall a. GObject a => a -> String -> IO (Maybe Text)
    B.Properties.getObjectPropertyString o
    obj String
    "g-object-path"

    -- | Construct a `GValueConstruct` with valid value for the “@g-object-path@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
    constructDBusObjectProxyGObjectPath :: (IsDBusObjectProxy o, MIO.MonadIO m) => T.Text -> m (GValueConstruct o)
    constructDBusObjectProxyGObjectPath :: forall o (m :: * -> *).
    (IsDBusObjectProxy o, MonadIO m) =>
    Text -> m (GValueConstruct o)
    constructDBusObjectProxyGObjectPath Text
    val = IO (GValueConstruct o) -> m (GValueConstruct o)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
    -> IO (GValueConstruct o) -> m (GValueConstruct o)
    forall a b. (a -> b) -> a -> b
    $ do
        IO (GValueConstruct o) -> IO (GValueConstruct o)
    forall a. IO a -> IO a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
    -> IO (GValueConstruct o) -> IO (GValueConstruct o)
    forall a b. (a -> b) -> a -> b
    $ String -> Maybe Text -> IO (GValueConstruct o)
    forall o. String -> Maybe Text -> IO (GValueConstruct o)
    B.Properties.constructObjectPropertyString String
    "g-object-path" (Text -> Maybe Text
    forall a. a -> Maybe a
    P.Just Text
    val)

    #if defined(ENABLE_OVERLOADING)
    data DBusObjectProxyGObjectPathPropertyInfo
    instance AttrInfo DBusObjectProxyGObjectPathPropertyInfo where
        type AttrAllowedOps DBusObjectProxyGObjectPathPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
        type AttrBaseTypeConstraint DBusObjectProxyGObjectPathPropertyInfo = IsDBusObjectProxy
        type AttrSetTypeConstraint DBusObjectProxyGObjectPathPropertyInfo = (~) T.Text
        type AttrTransferTypeConstraint DBusObjectProxyGObjectPathPropertyInfo = (~) T.Text
        type AttrTransferType DBusObjectProxyGObjectPathPropertyInfo = T.Text
        type AttrGetType DBusObjectProxyGObjectPathPropertyInfo = (Maybe T.Text)
        type AttrLabel DBusObjectProxyGObjectPathPropertyInfo = "g-object-path"
        type AttrOrigin DBusObjectProxyGObjectPathPropertyInfo = DBusObjectProxy
        attrGet = getDBusObjectProxyGObjectPath
        attrSet = undefined
        attrTransfer _ v = do
            return v
        attrConstruct = constructDBusObjectProxyGObjectPath
        attrClear = undefined
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gio.Objects.DBusObjectProxy.gObjectPath"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gio-2.0.32/docs/GI-Gio-Objects-DBusObjectProxy.html#g:attr:gObjectPath"
            })
    #endif

    #if defined(ENABLE_OVERLOADING)
    instance O.HasAttributeList DBusObjectProxy
    type instance O.AttributeList DBusObjectProxy = DBusObjectProxyAttributeList
    type DBusObjectProxyAttributeList = ('[ '("gConnection", DBusObjectProxyGConnectionPropertyInfo), '("gObjectPath", DBusObjectProxyGObjectPathPropertyInfo)] :: [(Symbol, DK.Type)])
    #endif

    #if defined(ENABLE_OVERLOADING)
    dBusObjectProxyGConnection :: AttrLabelProxy "gConnection"
    dBusObjectProxyGConnection = AttrLabelProxy

    dBusObjectProxyGObjectPath :: AttrLabelProxy "gObjectPath"
    dBusObjectProxyGObjectPath = AttrLabelProxy

    #endif

    #if defined(ENABLE_OVERLOADING)
    type instance O.SignalList DBusObjectProxy = DBusObjectProxySignalList
    type DBusObjectProxySignalList = ('[ '("interfaceAdded", Gio.DBusObject.DBusObjectInterfaceAddedSignalInfo), '("interfaceRemoved", Gio.DBusObject.DBusObjectInterfaceRemovedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, DK.Type)])

    #endif

    -- method DBusObjectProxy::new
    -- method type : Constructor
    -- Args: [ Arg
    --           { argCName = "connection"
    --           , argType =
    --               TInterface Name { namespace = "Gio" , name = "DBusConnection" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a #GDBusConnection" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "object_path"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the object path" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "Gio" , name = "DBusObjectProxy" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_dbus_object_proxy_new" g_dbus_object_proxy_new ::
        Ptr Gio.DBusConnection.DBusConnection -> -- connection : TInterface (Name {namespace = "Gio", name = "DBusConnection"})
        CString ->                              -- object_path : TBasicType TUTF8
        IO (Ptr DBusObjectProxy)

    -- | Creates a new t'GI.Gio.Objects.DBusObjectProxy.DBusObjectProxy' for the given connection and
    -- object path.
    --
    -- /Since: 2.30/
    dBusObjectProxyNew ::
        (B.CallStack.HasCallStack, MonadIO m, Gio.DBusConnection.IsDBusConnection a) =>
        a
        -- ^ /@connection@/: a t'GI.Gio.Objects.DBusConnection.DBusConnection'
        -> T.Text
        -- ^ /@objectPath@/: the object path
        -> m DBusObjectProxy
        -- ^ __Returns:__ a new t'GI.Gio.Objects.DBusObjectProxy.DBusObjectProxy'
    dBusObjectProxyNew :: forall (m :: * -> *) a.
    (HasCallStack, MonadIO m, IsDBusConnection a) =>
    a -> Text -> m DBusObjectProxy
    dBusObjectProxyNew a
    connection Text
    objectPath = IO DBusObjectProxy -> m DBusObjectProxy
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO DBusObjectProxy -> m DBusObjectProxy)
    -> IO DBusObjectProxy -> m DBusObjectProxy
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr DBusConnection
    connection' <- a -> IO (Ptr DBusConnection)
    forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
    unsafeManagedPtrCastPtr a
    connection
        CString
    objectPath' <- Text -> IO CString
    textToCString Text
    objectPath
        Ptr DBusObjectProxy
    result <- Ptr DBusConnection -> CString -> IO (Ptr DBusObjectProxy)
    g_dbus_object_proxy_new Ptr DBusConnection
    connection' CString
    objectPath'
        Text -> Ptr DBusObjectProxy -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL Text
    "dBusObjectProxyNew" Ptr DBusObjectProxy
    result
        DBusObjectProxy
    result' <- ((ManagedPtr DBusObjectProxy -> DBusObjectProxy)
    -> Ptr DBusObjectProxy -> IO DBusObjectProxy
    forall a b.
    (HasCallStack, GObject a, GObject b) =>
    (ManagedPtr a -> a) -> Ptr b -> IO a
    wrapObject ManagedPtr DBusObjectProxy -> DBusObjectProxy
    DBusObjectProxy) Ptr DBusObjectProxy
    result
        a -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr a
    connection
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    objectPath'
        DBusObjectProxy -> IO DBusObjectProxy
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return DBusObjectProxy
    result'

    #if defined(ENABLE_OVERLOADING)
    #endif

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

    foreign import ccall "g_dbus_object_proxy_get_connection" g_dbus_object_proxy_get_connection ::
        Ptr DBusObjectProxy ->                  -- proxy : TInterface (Name {namespace = "Gio", name = "DBusObjectProxy"})
        IO (Ptr Gio.DBusConnection.DBusConnection)

    -- | Gets the connection that /@proxy@/ is for.
    --
    -- /Since: 2.30/
    dBusObjectProxyGetConnection ::
        (B.CallStack.HasCallStack, MonadIO m, IsDBusObjectProxy a) =>
        a
        -- ^ /@proxy@/: a t'GI.Gio.Objects.DBusObjectProxy.DBusObjectProxy'
        -> m Gio.DBusConnection.DBusConnection
        -- ^ __Returns:__ A t'GI.Gio.Objects.DBusConnection.DBusConnection'. Do not free, the
        --   object is owned by /@proxy@/.
    dBusObjectProxyGetConnection :: forall (m :: * -> *) a.
    (HasCallStack, MonadIO m, IsDBusObjectProxy a) =>
    a -> m DBusConnection
    dBusObjectProxyGetConnection a
    proxy = IO DBusConnection -> m DBusConnection
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO DBusConnection -> m DBusConnection)
    -> IO DBusConnection -> m DBusConnection
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr DBusObjectProxy
    proxy' <- a -> IO (Ptr DBusObjectProxy)
    forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
    unsafeManagedPtrCastPtr a
    proxy
        Ptr DBusConnection
    result <- Ptr DBusObjectProxy -> IO (Ptr DBusConnection)
    g_dbus_object_proxy_get_connection Ptr DBusObjectProxy
    proxy'
        Text -> Ptr DBusConnection -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL Text
    "dBusObjectProxyGetConnection" Ptr DBusConnection
    result
        DBusConnection
    result' <- ((ManagedPtr DBusConnection -> DBusConnection)
    -> Ptr DBusConnection -> IO DBusConnection
    forall a b.
    (HasCallStack, GObject a, GObject b) =>
    (ManagedPtr a -> a) -> Ptr b -> IO a
    newObject ManagedPtr DBusConnection -> DBusConnection
    Gio.DBusConnection.DBusConnection) Ptr DBusConnection
    result
        a -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr a
    proxy
        DBusConnection -> IO DBusConnection
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return DBusConnection
    result'

    #if defined(ENABLE_OVERLOADING)
    data DBusObjectProxyGetConnectionMethodInfo
    instance (signature ~ (m Gio.DBusConnection.DBusConnection), MonadIO m, IsDBusObjectProxy a) => O.OverloadedMethod DBusObjectProxyGetConnectionMethodInfo a signature where
        overloadedMethod = dBusObjectProxyGetConnection

    instance O.OverloadedMethodInfo DBusObjectProxyGetConnectionMethodInfo a where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gio.Objects.DBusObjectProxy.dBusObjectProxyGetConnection",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gio-2.0.32/docs/GI-Gio-Objects-DBusObjectProxy.html#v:dBusObjectProxyGetConnection"
            })

    #endif