/* File:       test-foobar.h
 *
 * GType name: FooBar
 * D-Bus name: org.project.Bar
 *
 * Generated by GDBus Binding Tool 0.1. DO NOT EDIT.
 */

#ifndef __TEST_FOO_BAR_H__
#define __TEST_FOO_BAR_H__

#include <gio/gio.h>

#include "test-typemappers.h"
G_BEGIN_DECLS

#define FOO_TYPE_BAR         (foo_bar_get_type ())
#define FOO_BAR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), FOO_TYPE_BAR, FooBar))
#define FOO_IS_BAR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), FOO_TYPE_BAR))
#define FOO_BAR_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), FOO_TYPE_BAR, FooBarIface))

/**
 * FooBar:
 *
 * Opaque type representing a proxy or an exported object.
 */
typedef struct _FooBar FooBar; /* Dummy typedef */
/**
 * FooBarIface:
 * @parent_iface: The parent interface.
 * @test_signal: Handler for the #FooBar::test-signal signal.
 * @another_signal: Handler for the #FooBar::another-signal signal.
 * @handle_hello_world: Handler for the #FooBar::handle-hello-world signal.
 * @handle_test_primitive_types: Handler for the #FooBar::handle-test-primitive-types signal.
 * @handle_test_non_primitive_types: Handler for the #FooBar::handle-test-non-primitive-types signal.
 * @handle_request_signal_emission: Handler for the #FooBar::handle-request-signal-emission signal.
 * @handle_request_multi_property_mods: Handler for the #FooBar::handle-request-multi-property-mods signal.
 *
 * Virtual table.
 */
typedef struct _FooBarIface FooBarIface;

GType foo_bar_get_type (void) G_GNUC_CONST;

/* ---------------------------------------------------------------------- */

typedef struct _FooBarProxy FooBarProxy;
typedef struct _FooBarProxyClass FooBarProxyClass;

/**
 * FooBarProxyPrivate:
 *
 * The #FooBarProxyPrivate structure contains only private data.
 */
typedef struct _FooBarProxyPrivate FooBarProxyPrivate;

/**
 * FooBarProxy:
 *
 * The #FooBarProxy structure contains only private data and
 * should only be accessed using the provided API.
 */
struct _FooBarProxy
{
  GDBusProxy parent_instance;
  FooBarProxyPrivate *priv;
};

/**
 * FooBarProxyClass:
 *
 * Class structure for #FooBarProxy.
 */
struct _FooBarProxyClass
{
  GDBusProxyClass parent_class;
};

#define FOO_TYPE_BAR_PROXY (foo_bar_proxy_get_type ())
GType foo_bar_proxy_get_type (void) G_GNUC_CONST;

void foo_bar_proxy_new (GDBusConnection     *connection,
                   GDBusProxyFlags      flags,
                   const gchar         *name,
                   const gchar         *object_path,
                   GCancellable        *cancellable,
                   GAsyncReadyCallback  callback,
                   gpointer             user_data);
FooBar *foo_bar_proxy_new_finish (GAsyncResult  *res,
                        GError       **error);
FooBar *foo_bar_proxy_new_sync (GDBusConnection     *connection,
                       GDBusProxyFlags      flags,
                       const gchar         *name,
                       const gchar         *object_path,
                       GCancellable        *cancellable,
                       GError             **error);

void foo_bar_proxy_new_for_bus (GBusType             bus_type,
                           GDBusProxyFlags      flags,
                           const gchar         *name,
                           const gchar         *object_path,
                           GCancellable        *cancellable,
                           GAsyncReadyCallback  callback,
                           gpointer             user_data);
FooBar *foo_bar_proxy_new_for_bus_finish (GAsyncResult  *res,
                                 GError       **error);
FooBar *foo_bar_proxy_new_for_bus_sync (GBusType             bus_type,
                               GDBusProxyFlags      flags,
                               const gchar         *name,
                               const gchar         *object_path,
                               GCancellable        *cancellable,
                               GError             **error);

/* ---------------------------------------------------------------------- */

typedef struct _FooBarStub FooBarStub;
typedef struct _FooBarStubClass FooBarStubClass;

/**
 * FooBarStubPrivate:
 *
 * The #FooBarStubPrivate structure contains only private data.
 */
typedef struct _FooBarStubPrivate FooBarStubPrivate;

/**
 * FooBarStub:
 *
 * The #FooBarStub structure contains only private data and
 * should only be accessed using the provided API.
 */
struct _FooBarStub
{
  GObject parent_instance;
  FooBarStubPrivate *priv;
};

/**
 * FooBarStubClass:
 *
 * Class structure for #FooBarStub.
 */
struct _FooBarStubClass
{
  GObjectClass parent_class;
};

#define FOO_TYPE_BAR_STUB (foo_bar_stub_get_type ())
GType foo_bar_stub_get_type (void) G_GNUC_CONST;

FooBar *foo_bar_stub_new (void);


guint foo_bar_register_object (FooBar *object,
                    GDBusConnection *connection,
                    const gchar *object_path,
                    GError **error);

void foo_bar_drain_notify (FooBar *object);

guint foo_bar_override_properties (GObjectClass *klass, guint property_id_begin);


const GDBusInterfaceInfo *foo_bar_interface_info (void) G_GNUC_CONST;

struct _FooBarIface
{
  GTypeInterface parent_iface;

  /* Signal handlers for receiving D-Bus signals: */
  void (*test_signal) (
        FooBar *object,
        gint val_int32,
        const gchar* const *array_of_strings,
        GVariant *dict_s_to_pairs);
  void (*another_signal) (
        FooBar *object,
        const gchar *word);

  /* Signal handlers for handling D-Bus method calls: */
  gboolean (*handle_hello_world) (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        const gchar *greeting);
  gboolean (*handle_test_primitive_types) (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        guchar val_byte,
        gboolean val_boolean,
        gint16 val_int16,
        guint16 val_uint16,
        gint val_int32,
        guint val_uint32,
        gint64 val_int64,
        guint64 val_uint64,
        gdouble val_double,
        const gchar *val_string,
        const gchar *val_objpath,
        const gchar *val_signature);
  gboolean (*handle_test_non_primitive_types) (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        GVariant *dict_s_to_s,
        GVariant *dict_s_to_pairs,
        GVariant *a_struct,
        const gchar* const *array_of_strings,
        GVariant *array_of_objpaths,
        GVariant *array_of_signatures);
  gboolean (*handle_request_signal_emission) (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        gint which_one);
  gboolean (*handle_request_multi_property_mods) (
        FooBar *object,
        GDBusMethodInvocation *invocation);
};

/* C Bindings for properties */

guchar foo_bar_get_y (FooBar *object);
void foo_bar_set_y (FooBar *object, guchar value);

gboolean foo_bar_get_b (FooBar *object);
void foo_bar_set_b (FooBar *object, gboolean value);

gint16 foo_bar_get_n (FooBar *object);
void foo_bar_set_n (FooBar *object, gint16 value);

guint16 foo_bar_get_q (FooBar *object);
void foo_bar_set_q (FooBar *object, guint16 value);

gint foo_bar_get_i (FooBar *object);
void foo_bar_set_i (FooBar *object, gint value);

guint foo_bar_get_u (FooBar *object);
void foo_bar_set_u (FooBar *object, guint value);

gint64 foo_bar_get_x (FooBar *object);
void foo_bar_set_x (FooBar *object, gint64 value);

guint64 foo_bar_get_t (FooBar *object);
void foo_bar_set_t (FooBar *object, guint64 value);

gdouble foo_bar_get_d (FooBar *object);
void foo_bar_set_d (FooBar *object, gdouble value);

const gchar *foo_bar_get_s (FooBar *object);
void foo_bar_set_s (FooBar *object, const gchar *value);

const gchar *foo_bar_get_o (FooBar *object);
void foo_bar_set_o (FooBar *object, const gchar *value);

const gchar *foo_bar_get_g (FooBar *object);
void foo_bar_set_g (FooBar *object, const gchar *value);

GVariant *foo_bar_get_ay (FooBar *object);
void foo_bar_set_ay (FooBar *object, GVariant *value);

const gchar* const *foo_bar_get_as (FooBar *object);
void foo_bar_set_as (FooBar *object, const gchar* const *value);

GVariant *foo_bar_get_ao (FooBar *object);
void foo_bar_set_ao (FooBar *object, GVariant *value);

GVariant *foo_bar_get_ag (FooBar *object);
void foo_bar_set_ag (FooBar *object, GVariant *value);

const gchar *foo_bar_get_finally_normal_name (FooBar *object);
void foo_bar_set_finally_normal_name (FooBar *object, const gchar *value);

const gchar *foo_bar_get_readonly_property (FooBar *object);
void foo_bar_set_readonly_property (FooBar *object, const gchar *value);

const gchar *foo_bar_get_writeonly_property (FooBar *object);
void foo_bar_set_writeonly_property (FooBar *object, const gchar *value);

gint foo_bar_get_unset_i (FooBar *object);
void foo_bar_set_unset_i (FooBar *object, gint value);

gdouble foo_bar_get_unset_d (FooBar *object);
void foo_bar_set_unset_d (FooBar *object, gdouble value);

const gchar *foo_bar_get_unset_s (FooBar *object);
void foo_bar_set_unset_s (FooBar *object, const gchar *value);

const gchar *foo_bar_get_unset_o (FooBar *object);
void foo_bar_set_unset_o (FooBar *object, const gchar *value);

const gchar *foo_bar_get_unset_g (FooBar *object);
void foo_bar_set_unset_g (FooBar *object, const gchar *value);

GVariant *foo_bar_get_unset_ay (FooBar *object);
void foo_bar_set_unset_ay (FooBar *object, GVariant *value);

const gchar* const *foo_bar_get_unset_as (FooBar *object);
void foo_bar_set_unset_as (FooBar *object, const gchar* const *value);

GVariant *foo_bar_get_unset_ao (FooBar *object);
void foo_bar_set_unset_ao (FooBar *object, GVariant *value);

GVariant *foo_bar_get_unset_ag (FooBar *object);
void foo_bar_set_unset_ag (FooBar *object, GVariant *value);

GVariant *foo_bar_get_unset_struct (FooBar *object);
void foo_bar_set_unset_struct (FooBar *object, GVariant *value);


/* D-Bus Methods */
void foo_bar_call_hello_world (
        FooBar *proxy,
        const gchar *greeting,
        GCancellable *cancellable,
        GAsyncReadyCallback callback,
        gpointer user_data);

gboolean foo_bar_call_hello_world_finish (
        FooBar *proxy,
        gchar **out_response,
        GAsyncResult *res,
        GError **error);

gboolean foo_bar_call_hello_world_sync (
        FooBar *proxy,
        const gchar *greeting,
        gchar **out_response,
        GCancellable *cancellable,
        GError **error);


void foo_bar_call_test_primitive_types (
        FooBar *proxy,
        guchar val_byte,
        gboolean val_boolean,
        gint16 val_int16,
        guint16 val_uint16,
        gint val_int32,
        guint val_uint32,
        gint64 val_int64,
        guint64 val_uint64,
        gdouble val_double,
        const gchar *val_string,
        const gchar *val_objpath,
        const gchar *val_signature,
        GCancellable *cancellable,
        GAsyncReadyCallback callback,
        gpointer user_data);

gboolean foo_bar_call_test_primitive_types_finish (
        FooBar *proxy,
        guchar *out_arg_12,
        gboolean *out_arg_13,
        gint16 *out_arg_14,
        guint16 *out_arg_15,
        gint *out_arg_16,
        guint *out_arg_17,
        gint64 *out_arg_18,
        guint64 *out_arg_19,
        gdouble *out_arg_20,
        gchar **out_arg_21,
        gchar **out_arg_22,
        gchar **out_arg_23,
        GAsyncResult *res,
        GError **error);

gboolean foo_bar_call_test_primitive_types_sync (
        FooBar *proxy,
        guchar val_byte,
        gboolean val_boolean,
        gint16 val_int16,
        guint16 val_uint16,
        gint val_int32,
        guint val_uint32,
        gint64 val_int64,
        guint64 val_uint64,
        gdouble val_double,
        const gchar *val_string,
        const gchar *val_objpath,
        const gchar *val_signature,
        guchar *out_arg_12,
        gboolean *out_arg_13,
        gint16 *out_arg_14,
        guint16 *out_arg_15,
        gint *out_arg_16,
        guint *out_arg_17,
        gint64 *out_arg_18,
        guint64 *out_arg_19,
        gdouble *out_arg_20,
        gchar **out_arg_21,
        gchar **out_arg_22,
        gchar **out_arg_23,
        GCancellable *cancellable,
        GError **error);


void foo_bar_call_test_non_primitive_types (
        FooBar *proxy,
        GVariant *dict_s_to_s,
        GVariant *dict_s_to_pairs,
        GVariant *a_struct,
        const gchar* const *array_of_strings,
        GVariant *array_of_objpaths,
        GVariant *array_of_signatures,
        GCancellable *cancellable,
        GAsyncReadyCallback callback,
        gpointer user_data);

gboolean foo_bar_call_test_non_primitive_types_finish (
        FooBar *proxy,
        gchar **out_result,
        GAsyncResult *res,
        GError **error);

gboolean foo_bar_call_test_non_primitive_types_sync (
        FooBar *proxy,
        GVariant *dict_s_to_s,
        GVariant *dict_s_to_pairs,
        GVariant *a_struct,
        const gchar* const *array_of_strings,
        GVariant *array_of_objpaths,
        GVariant *array_of_signatures,
        gchar **out_result,
        GCancellable *cancellable,
        GError **error);


void foo_bar_call_request_signal_emission (
        FooBar *proxy,
        gint which_one,
        GCancellable *cancellable,
        GAsyncReadyCallback callback,
        gpointer user_data);

gboolean foo_bar_call_request_signal_emission_finish (
        FooBar *proxy,
        GAsyncResult *res,
        GError **error);

gboolean foo_bar_call_request_signal_emission_sync (
        FooBar *proxy,
        gint which_one,
        GCancellable *cancellable,
        GError **error);


void foo_bar_call_request_multi_property_mods (
        FooBar *proxy,
        GCancellable *cancellable,
        GAsyncReadyCallback callback,
        gpointer user_data);

gboolean foo_bar_call_request_multi_property_mods_finish (
        FooBar *proxy,
        GAsyncResult *res,
        GError **error);

gboolean foo_bar_call_request_multi_property_mods_sync (
        FooBar *proxy,
        GCancellable *cancellable,
        GError **error);



/* D-Bus Methods Completion Helpers */
void foo_bar_complete_hello_world (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        const gchar *response);


void foo_bar_complete_test_primitive_types (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        guchar arg_12,
        gboolean arg_13,
        gint16 arg_14,
        guint16 arg_15,
        gint arg_16,
        guint arg_17,
        gint64 arg_18,
        guint64 arg_19,
        gdouble arg_20,
        const gchar *arg_21,
        const gchar *arg_22,
        const gchar *arg_23);


void foo_bar_complete_test_non_primitive_types (
        FooBar *object,
        GDBusMethodInvocation *invocation,
        const gchar *result);


void foo_bar_complete_request_signal_emission (
        FooBar *object,
        GDBusMethodInvocation *invocation);


void foo_bar_complete_request_multi_property_mods (
        FooBar *object,
        GDBusMethodInvocation *invocation);



/* D-Bus Signal Emission Helpers */
void foo_bar_emit_test_signal (
        FooBar *object,
        gint val_int32,
        const gchar* const *array_of_strings,
        GVariant *dict_s_to_pairs);


void foo_bar_emit_another_signal (
        FooBar *object,
        const gchar *word);



G_END_DECLS

#endif /* __TEST_FOO_BAR_H__ */
