#include <glib-object.h>
#include <dbus/dbus-glib.h>
#include <telepathy-glib/dbus-properties-mixin.h>

G_BEGIN_DECLS

/**
 * TpSvcDBusIntrospectable:
 *
 * Dummy typedef representing any implementation of this interface.
 */
typedef struct _TpSvcDBusIntrospectable TpSvcDBusIntrospectable;

/**
 * TpSvcDBusIntrospectableClass:
 *
 * The class of TpSvcDBusIntrospectable.
 */
typedef struct _TpSvcDBusIntrospectableClass TpSvcDBusIntrospectableClass;

GType tp_svc_dbus_introspectable_get_type (void);
#define TP_TYPE_SVC_DBUS_INTROSPECTABLE \
  (tp_svc_dbus_introspectable_get_type ())
#define TP_SVC_DBUS_INTROSPECTABLE(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TYPE_SVC_DBUS_INTROSPECTABLE, TpSvcDBusIntrospectable))
#define TP_IS_SVC_DBUS_INTROSPECTABLE(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TYPE_SVC_DBUS_INTROSPECTABLE))
#define TP_SVC_DBUS_INTROSPECTABLE_GET_CLASS(obj) \
  (G_TYPE_INSTANCE_GET_INTERFACE((obj), TP_TYPE_SVC_DBUS_INTROSPECTABLE, TpSvcDBusIntrospectableClass))


typedef void (*tp_svc_dbus_introspectable_introspect_impl) (TpSvcDBusIntrospectable *self,
    DBusGMethodInvocation *context);
void tp_svc_dbus_introspectable_implement_introspect (TpSvcDBusIntrospectableClass *klass, tp_svc_dbus_introspectable_introspect_impl impl);
/**
 * tp_svc_dbus_introspectable_return_from_introspect:
 * @context: The D-Bus method invocation context
 * @out_XML_Data: const gchar * (FIXME, generate documentation)
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_dbus_introspectable_return_from_introspect (DBusGMethodInvocation *context,
    const gchar *out_XML_Data);
static inline void
tp_svc_dbus_introspectable_return_from_introspect (DBusGMethodInvocation *context,
    const gchar *out_XML_Data)
{
  dbus_g_method_return (context,
      out_XML_Data);
}


/**
 * TpSvcDBusProperties:
 *
 * Dummy typedef representing any implementation of this interface.
 */
typedef struct _TpSvcDBusProperties TpSvcDBusProperties;

/**
 * TpSvcDBusPropertiesClass:
 *
 * The class of TpSvcDBusProperties.
 */
typedef struct _TpSvcDBusPropertiesClass TpSvcDBusPropertiesClass;

GType tp_svc_dbus_properties_get_type (void);
#define TP_TYPE_SVC_DBUS_PROPERTIES \
  (tp_svc_dbus_properties_get_type ())
#define TP_SVC_DBUS_PROPERTIES(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TYPE_SVC_DBUS_PROPERTIES, TpSvcDBusProperties))
#define TP_IS_SVC_DBUS_PROPERTIES(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TYPE_SVC_DBUS_PROPERTIES))
#define TP_SVC_DBUS_PROPERTIES_GET_CLASS(obj) \
  (G_TYPE_INSTANCE_GET_INTERFACE((obj), TP_TYPE_SVC_DBUS_PROPERTIES, TpSvcDBusPropertiesClass))


typedef void (*tp_svc_dbus_properties_get_impl) (TpSvcDBusProperties *self,
    const gchar *in_Interface_Name,
    const gchar *in_Property_Name,
    DBusGMethodInvocation *context);
void tp_svc_dbus_properties_implement_get (TpSvcDBusPropertiesClass *klass, tp_svc_dbus_properties_get_impl impl);
/**
 * tp_svc_dbus_properties_return_from_get:
 * @context: The D-Bus method invocation context
 * @out_Value: const GValue * (FIXME, generate documentation)
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_dbus_properties_return_from_get (DBusGMethodInvocation *context,
    const GValue *out_Value);
static inline void
tp_svc_dbus_properties_return_from_get (DBusGMethodInvocation *context,
    const GValue *out_Value)
{
  dbus_g_method_return (context,
      out_Value);
}

typedef void (*tp_svc_dbus_properties_set_impl) (TpSvcDBusProperties *self,
    const gchar *in_Interface_Name,
    const gchar *in_Property_Name,
    const GValue *in_Value,
    DBusGMethodInvocation *context);
void tp_svc_dbus_properties_implement_set (TpSvcDBusPropertiesClass *klass, tp_svc_dbus_properties_set_impl impl);
/**
 * tp_svc_dbus_properties_return_from_set:
 * @context: The D-Bus method invocation context
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_dbus_properties_return_from_set (DBusGMethodInvocation *context);
static inline void
tp_svc_dbus_properties_return_from_set (DBusGMethodInvocation *context)
{
  dbus_g_method_return (context);
}

typedef void (*tp_svc_dbus_properties_get_all_impl) (TpSvcDBusProperties *self,
    const gchar *in_Interface_Name,
    DBusGMethodInvocation *context);
void tp_svc_dbus_properties_implement_get_all (TpSvcDBusPropertiesClass *klass, tp_svc_dbus_properties_get_all_impl impl);
/**
 * tp_svc_dbus_properties_return_from_get_all:
 * @context: The D-Bus method invocation context
 * @out_Properties: GHashTable * (FIXME, generate documentation)
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_dbus_properties_return_from_get_all (DBusGMethodInvocation *context,
    GHashTable *out_Properties);
static inline void
tp_svc_dbus_properties_return_from_get_all (DBusGMethodInvocation *context,
    GHashTable *out_Properties)
{
  dbus_g_method_return (context,
      out_Properties);
}


/**
 * TpSvcPropertiesInterface:
 *
 * Dummy typedef representing any implementation of this interface.
 */
typedef struct _TpSvcPropertiesInterface TpSvcPropertiesInterface;

/**
 * TpSvcPropertiesInterfaceClass:
 *
 * The class of TpSvcPropertiesInterface.
 */
typedef struct _TpSvcPropertiesInterfaceClass TpSvcPropertiesInterfaceClass;

GType tp_svc_properties_interface_get_type (void);
#define TP_TYPE_SVC_PROPERTIES_INTERFACE \
  (tp_svc_properties_interface_get_type ())
#define TP_SVC_PROPERTIES_INTERFACE(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TYPE_SVC_PROPERTIES_INTERFACE, TpSvcPropertiesInterface))
#define TP_IS_SVC_PROPERTIES_INTERFACE(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TYPE_SVC_PROPERTIES_INTERFACE))
#define TP_SVC_PROPERTIES_INTERFACE_GET_CLASS(obj) \
  (G_TYPE_INSTANCE_GET_INTERFACE((obj), TP_TYPE_SVC_PROPERTIES_INTERFACE, TpSvcPropertiesInterfaceClass))


typedef void (*tp_svc_properties_interface_get_properties_impl) (TpSvcPropertiesInterface *self,
    const GArray *in_properties,
    DBusGMethodInvocation *context);
void tp_svc_properties_interface_implement_get_properties (TpSvcPropertiesInterfaceClass *klass, tp_svc_properties_interface_get_properties_impl impl);
/**
 * tp_svc_properties_interface_return_from_get_properties:
 * @context: The D-Bus method invocation context
 * @out0: const GPtrArray * (FIXME, generate documentation)
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_properties_interface_return_from_get_properties (DBusGMethodInvocation *context,
    const GPtrArray *out0);
static inline void
tp_svc_properties_interface_return_from_get_properties (DBusGMethodInvocation *context,
    const GPtrArray *out0)
{
  dbus_g_method_return (context,
      out0);
}

typedef void (*tp_svc_properties_interface_list_properties_impl) (TpSvcPropertiesInterface *self,
    DBusGMethodInvocation *context);
void tp_svc_properties_interface_implement_list_properties (TpSvcPropertiesInterfaceClass *klass, tp_svc_properties_interface_list_properties_impl impl);
/**
 * tp_svc_properties_interface_return_from_list_properties:
 * @context: The D-Bus method invocation context
 * @out0: const GPtrArray * (FIXME, generate documentation)
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_properties_interface_return_from_list_properties (DBusGMethodInvocation *context,
    const GPtrArray *out0);
static inline void
tp_svc_properties_interface_return_from_list_properties (DBusGMethodInvocation *context,
    const GPtrArray *out0)
{
  dbus_g_method_return (context,
      out0);
}

typedef void (*tp_svc_properties_interface_set_properties_impl) (TpSvcPropertiesInterface *self,
    const GPtrArray *in_properties,
    DBusGMethodInvocation *context);
void tp_svc_properties_interface_implement_set_properties (TpSvcPropertiesInterfaceClass *klass, tp_svc_properties_interface_set_properties_impl impl);
/**
 * tp_svc_properties_interface_return_from_set_properties:
 * @context: The D-Bus method invocation context
 *
 * Return successfully by calling dbus_g_method_return().
 * This inline function exists only to provide type-safety.
 */
static inline
/* this comment is to stop gtkdoc realising this is static */
void tp_svc_properties_interface_return_from_set_properties (DBusGMethodInvocation *context);
static inline void
tp_svc_properties_interface_return_from_set_properties (DBusGMethodInvocation *context)
{
  dbus_g_method_return (context);
}

void tp_svc_properties_interface_emit_properties_changed (gpointer instance,
    const GPtrArray *arg_properties);
void tp_svc_properties_interface_emit_property_flags_changed (gpointer instance,
    const GPtrArray *arg_properties);


G_END_DECLS
