/* AUTOMATICALLY GENERATED by qapi-gen.py DO NOT MODIFY */

/*
 * Schema-defined QAPI/QMP events
 *
 * Copyright (c) 2014 Wenchao Xia
 * Copyright (c) 2015-2018 Red Hat Inc.
 *
 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
 * See the COPYING.LIB file in the top-level directory.
 */

#include "qemu/osdep.h"
#include "test-qapi-emit-events.h"
#include "test-qapi-events.h"
#include "test-qapi-visit.h"
#include "qapi/compat-policy.h"
#include "qapi/error.h"
#include "qapi/qmp/qdict.h"
#include "qapi/qmp-event.h"

void qapi_event_send_event_a(void)
{
    QDict *qmp;

    qmp = qmp_event_build_dict("EVENT_A");

    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_A, qmp);

    qobject_unref(qmp);
}

void qapi_event_send_event_b(void)
{
    QDict *qmp;

    qmp = qmp_event_build_dict("EVENT_B");

    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_B, qmp);

    qobject_unref(qmp);
}

void qapi_event_send_event_c(bool has_a, int64_t a, UserDefOne *b, const char *c)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;
    q_obj_EVENT_C_arg param = {
        has_a, a, b, (char *)c
    };

    qmp = qmp_event_build_dict("EVENT_C");

    v = qobject_output_visitor_new_qmp(&obj);

    visit_start_struct(v, "EVENT_C", NULL, 0, &error_abort);
    visit_type_q_obj_EVENT_C_arg_members(v, &param, &error_abort);
    visit_check_struct(v, &error_abort);
    visit_end_struct(v, NULL);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_C, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

void qapi_event_send_event_d(EventStructOne *a, const char *b, const char *c, bool has_enum3, EnumOne enum3)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;
    q_obj_EVENT_D_arg param = {
        a, (char *)b, (char *)c, has_enum3, enum3
    };

    qmp = qmp_event_build_dict("EVENT_D");

    v = qobject_output_visitor_new_qmp(&obj);

    visit_start_struct(v, "EVENT_D", NULL, 0, &error_abort);
    visit_type_q_obj_EVENT_D_arg_members(v, &param, &error_abort);
    visit_check_struct(v, &error_abort);
    visit_end_struct(v, NULL);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_D, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

void qapi_event_send_event_e(UserDefZero *arg)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;

    qmp = qmp_event_build_dict("EVENT_E");

    v = qobject_output_visitor_new_qmp(&obj);
    visit_type_UserDefZero(v, "EVENT_E", &arg, &error_abort);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_E, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

void qapi_event_send_event_f(UserDefFlatUnion *arg)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;

    qmp = qmp_event_build_dict("EVENT_F");

    v = qobject_output_visitor_new_qmp(&obj);
    visit_type_UserDefFlatUnion(v, "EVENT_F", &arg, &error_abort);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_F, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

void qapi_event_send_event_g(Empty1 *arg)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;

    qmp = qmp_event_build_dict("EVENT_G");

    v = qobject_output_visitor_new_qmp(&obj);
    visit_type_Empty1(v, "EVENT_G", &arg, &error_abort);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_EVENT_G, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

void qapi_event_send___org_qemu_x_event(__org_qemu_x_Enum __org_qemu_x_member1, const char *__org_qemu_x_member2, bool has_q_wchar_t, int64_t q_wchar_t)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;
    __org_qemu_x_Struct param = {
        __org_qemu_x_member1, (char *)__org_qemu_x_member2, has_q_wchar_t, q_wchar_t
    };
    __org_qemu_x_Struct *arg = &param;

    qmp = qmp_event_build_dict("__ORG.QEMU_X-EVENT");

    v = qobject_output_visitor_new_qmp(&obj);
    visit_type___org_qemu_x_Struct(v, "__ORG.QEMU_X-EVENT", &arg, &error_abort);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT___ORG_QEMU_X_EVENT, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

#if defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)
void qapi_event_send_test_if_event(TestIfStruct *arg)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;

    qmp = qmp_event_build_dict("TEST_IF_EVENT");

    v = qobject_output_visitor_new_qmp(&obj);
    visit_type_TestIfStruct(v, "TEST_IF_EVENT", &arg, &error_abort);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_TEST_IF_EVENT, qmp);

    visit_free(v);
    qobject_unref(qmp);
}
#endif /* defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT) */

#if !(!defined(TEST_IF_EVT) || !defined(TEST_IF_STRUCT))
void qapi_event_send_test_if_event2(void)
{
    QDict *qmp;

    qmp = qmp_event_build_dict("TEST_IF_EVENT2");

    test_qapi_event_emit(TEST_QAPI_EVENT_TEST_IF_EVENT2, qmp);

    qobject_unref(qmp);
}
#endif /* !(!defined(TEST_IF_EVT) || !defined(TEST_IF_STRUCT)) */

void qapi_event_send_test_event_features0(int64_t foo)
{
    QDict *qmp;
    QObject *obj;
    Visitor *v;
    FeatureStruct1 param = {
        foo
    };
    FeatureStruct1 *arg = &param;

    qmp = qmp_event_build_dict("TEST_EVENT_FEATURES0");

    v = qobject_output_visitor_new_qmp(&obj);
    visit_type_FeatureStruct1(v, "TEST_EVENT_FEATURES0", &arg, &error_abort);

    visit_complete(v, &obj);
    if (qdict_size(qobject_to(QDict, obj))) {
        qdict_put_obj(qmp, "data", obj);
    } else {
        qobject_unref(obj);
    }
    test_qapi_event_emit(TEST_QAPI_EVENT_TEST_EVENT_FEATURES0, qmp);

    visit_free(v);
    qobject_unref(qmp);
}

void qapi_event_send_test_event_features1(void)
{
    QDict *qmp;

    if (compat_policy.deprecated_output == COMPAT_POLICY_OUTPUT_HIDE) {
        return;
    }

    qmp = qmp_event_build_dict("TEST_EVENT_FEATURES1");

    test_qapi_event_emit(TEST_QAPI_EVENT_TEST_EVENT_FEATURES1, qmp);

    qobject_unref(qmp);
}

void qapi_event_send_test_event_features2(void)
{
    QDict *qmp;

    if (compat_policy.unstable_output == COMPAT_POLICY_OUTPUT_HIDE) {
        return;
    }

    qmp = qmp_event_build_dict("TEST_EVENT_FEATURES2");

    test_qapi_event_emit(TEST_QAPI_EVENT_TEST_EVENT_FEATURES2, qmp);

    qobject_unref(qmp);
}

/* Dummy declaration to prevent empty .o file */
char qapi_dummy_test_qapi_events_c;
