blob: 1234caef9d6a7f1c90be212923c2b664c6d7f4e6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include "thrift_application_exception.h"
#include <thrift/c_glib/protocol/thrift_protocol.h>
/* object properties */
enum _ThriftApplicationExceptionProperties
{
PROP_0,
PROP_THRIFT_APPLICATION_EXCEPTION_TYPE,
PROP_THRIFT_APPLICATION_EXCEPTION_MESSAGE
};
G_DEFINE_TYPE(ThriftApplicationException, thrift_application_exception, THRIFT_TYPE_STRUCT)
gint32
thrift_application_exception_read (ThriftStruct *object,
ThriftProtocol *protocol, GError **error)
{
gint32 ret;
gint32 xfer = 0;
gchar *name;
ThriftType ftype;
gint16 fid;
ThriftApplicationException *this = THRIFT_APPLICATION_EXCEPTION (object);
/* read the struct begin marker */
if ((ret = thrift_protocol_read_struct_begin (protocol, &name, error)) < 0)
{
if (name) g_free (name);
return -1;
}
xfer += ret;
if (name) g_free (name);
while (1)
{
if ((ret = thrift_protocol_read_field_begin (protocol, &name, &ftype,
&fid, error)) < 0)
{
if (name) g_free (name);
return -1;
}
xfer += ret;
if (name) g_free (name);
/* break if we get a STOP field */
if (ftype == T_STOP)
{
break;
}
switch (fid)
{
case 1:
if (ftype == T_STRING)
{
if ((ret = thrift_protocol_read_string (protocol, &this->message,
error)) < 0)
return -1;
xfer += ret;
this->__isset_message = TRUE;
} else {
if ((ret = thrift_protocol_skip (protocol, ftype, error)) < 0)
return -1;
xfer += ret;
}
break;
case 2:
if (ftype == T_I32)
{
if ((ret = thrift_protocol_read_i32 (protocol, &this->type,
error)) < 0)
return -1;
xfer += ret;
this->__isset_type = TRUE;
} else {
if ((ret = thrift_protocol_skip (protocol, ftype, error)) < 0)
return -1;
xfer += ret;
}
break;
default:
if ((ret = thrift_protocol_skip (protocol, ftype, error)) < 0)
return -1;
xfer += ret;
break;
}
if ((ret = thrift_protocol_read_field_end (protocol, error)) < 0)
return -1;
xfer += ret;
}
if ((ret = thrift_protocol_read_struct_end (protocol, error)) < 0)
return -1;
xfer += ret;
return xfer;
}
gint32
thrift_application_exception_write (ThriftStruct *object,
ThriftProtocol *protocol, GError **error)
{
gint32 ret;
gint32 xfer = 0;
ThriftApplicationException *this = THRIFT_APPLICATION_EXCEPTION (object);
if ((ret = thrift_protocol_write_struct_begin (protocol,
"TApplicationException",
error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_field_begin (protocol, "message",
T_STRING, 1, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_string (protocol, this->message, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_field_end (protocol, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_field_begin (protocol, "type",
T_I32, 2, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_i32 (protocol, this->type, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_field_end (protocol, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_field_stop (protocol, error)) < 0)
return -1;
xfer += ret;
if ((ret = thrift_protocol_write_struct_end (protocol, error)) < 0)
return -1;
xfer += ret;
return xfer;
}
/* GError domain */
#define THRIFT_APPLICATION_EXCEPTION_ERROR_DOMAIN "thrift-application-exception-error-quark"
GQuark
thrift_application_exception_error_quark (void)
{
return g_quark_from_static_string (THRIFT_APPLICATION_EXCEPTION_ERROR_DOMAIN);
}
static void
thrift_application_exception_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
ThriftApplicationException *tae = THRIFT_APPLICATION_EXCEPTION (object);
switch (property_id)
{
case PROP_THRIFT_APPLICATION_EXCEPTION_TYPE:
g_value_set_int (value, tae->type);
break;
case PROP_THRIFT_APPLICATION_EXCEPTION_MESSAGE:
g_value_set_string (value, tae->message);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
thrift_application_exception_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
ThriftApplicationException *tae = THRIFT_APPLICATION_EXCEPTION (object);
switch (property_id)
{
case PROP_THRIFT_APPLICATION_EXCEPTION_TYPE:
tae->type = g_value_get_int (value);
tae->__isset_type = TRUE;
break;
case PROP_THRIFT_APPLICATION_EXCEPTION_MESSAGE:
if (tae->message != NULL)
g_free (tae->message);
tae->message = g_value_dup_string (value);
tae->__isset_message = TRUE;
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
void
thrift_application_exception_init (ThriftApplicationException *object)
{
object->type = 0;
object->__isset_type = FALSE;
object->message = NULL;
object->__isset_message = FALSE;
}
void
thrift_application_exception_finalize (GObject *object)
{
ThriftApplicationException *tae = THRIFT_APPLICATION_EXCEPTION (object);
if (tae->__isset_message) {
g_free(tae->message);
}
}
void
thrift_application_exception_class_init (ThriftApplicationExceptionClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(class);
ThriftStructClass *cls = THRIFT_STRUCT_CLASS(class);
GParamSpec *param_spec;
cls->read = thrift_application_exception_read;
cls->write = thrift_application_exception_write;
gobject_class->finalize = thrift_application_exception_finalize;
gobject_class->get_property = thrift_application_exception_get_property;
gobject_class->set_property = thrift_application_exception_set_property;
param_spec = g_param_spec_int ("type",
"Exception type",
"The type of the exception, one of the "
"values defined by the "
"ThriftApplicationExceptionError "
"enumeration.",
0,
THRIFT_APPLICATION_EXCEPTION_ERROR_N - 1,
0,
G_PARAM_READWRITE);
g_object_class_install_property (gobject_class,
PROP_THRIFT_APPLICATION_EXCEPTION_TYPE,
param_spec);
param_spec = g_param_spec_string ("message",
"Exception message",
"A string describing the exception that "
"occurred.",
NULL,
G_PARAM_READWRITE);
g_object_class_install_property (gobject_class,
PROP_THRIFT_APPLICATION_EXCEPTION_MESSAGE,
param_spec);
}