Beispiel #1
0
avro_schema_t avro_schema_link_target(avro_schema_t schema)
{
	check_param(NULL, is_avro_schema(schema), "schema");
	check_param(NULL, is_avro_link(schema), "schema");

	struct avro_link_schema_t *link = avro_schema_to_link(schema);
	return link->to;
}
Beispiel #2
0
int avro_schema_equal(avro_schema_t a, avro_schema_t b)
{
	if (!a || !b) {
		/*
		 * this is an error. protecting from segfault. 
		 */
		return 0;
	} else if (a == b) {
		/*
		 * an object is equal to itself 
		 */
		return 1;
	} else if (avro_typeof(a) != avro_typeof(b)) {
		return 0;
	} else if (is_avro_record(a)) {
		return schema_record_equal(avro_schema_to_record(a),
					   avro_schema_to_record(b));
	} else if (is_avro_enum(a)) {
		return schema_enum_equal(avro_schema_to_enum(a),
					 avro_schema_to_enum(b));
	} else if (is_avro_fixed(a)) {
		return schema_fixed_equal(avro_schema_to_fixed(a),
					  avro_schema_to_fixed(b));
	} else if (is_avro_map(a)) {
		return schema_map_equal(avro_schema_to_map(a),
					avro_schema_to_map(b));
	} else if (is_avro_array(a)) {
		return schema_array_equal(avro_schema_to_array(a),
					  avro_schema_to_array(b));
	} else if (is_avro_union(a)) {
		return schema_union_equal(avro_schema_to_union(a),
					  avro_schema_to_union(b));
	} else if (is_avro_link(a)) {
		return schema_link_equal(avro_schema_to_link(a),
					 avro_schema_to_link(b));
	}
	return 1;
}
Beispiel #3
0
const char *avro_schema_type_name(const avro_schema_t schema)
{
	if (is_avro_record(schema)) {
		return (avro_schema_to_record(schema))->name;
	} else if (is_avro_enum(schema)) {
		return (avro_schema_to_enum(schema))->name;
	} else if (is_avro_fixed(schema)) {
		return (avro_schema_to_fixed(schema))->name;
	} else if (is_avro_union(schema)) {
		return "union";
	} else if (is_avro_array(schema)) {
		return "array";
	} else if (is_avro_map(schema)) {
		return "map";
	} else if (is_avro_int32(schema)) {
		return "int";
	} else if (is_avro_int64(schema)) {
		return "long";
	} else if (is_avro_float(schema)) {
		return "float";
	} else if (is_avro_double(schema)) {
		return "double";
	} else if (is_avro_boolean(schema)) {
		return "boolean";
	} else if (is_avro_null(schema)) {
		return "null";
	} else if (is_avro_string(schema)) {
		return "string";
	} else if (is_avro_bytes(schema)) {
		return "bytes";
	} else if (is_avro_link(schema)) {
		avro_schema_t  target = avro_schema_link_target(schema);
		return avro_schema_type_name(target);
	}
	avro_set_error("Unknown schema type");
	return NULL;
}
Beispiel #4
0
static int write_datum(avro_writer_t writer, const avro_encoding_t * enc,
		       avro_schema_t writers_schema, avro_datum_t datum)
{
	if (is_avro_schema(writers_schema) && is_avro_link(writers_schema)) {
		return write_datum(writer, enc,
				   (avro_schema_to_link(writers_schema))->to,
				   datum);
	}

	switch (avro_typeof(datum)) {
	case AVRO_NULL:
		return enc->write_null(writer);

	case AVRO_BOOLEAN:
		return enc->write_boolean(writer,
					  avro_datum_to_boolean(datum)->i);

	case AVRO_STRING:
		return enc->write_string(writer,
					 avro_datum_to_string(datum)->s);

	case AVRO_BYTES:
		return enc->write_bytes(writer,
					avro_datum_to_bytes(datum)->bytes,
					avro_datum_to_bytes(datum)->size);

	case AVRO_INT32:
	case AVRO_INT64:{
			int64_t val = avro_typeof(datum) == AVRO_INT32 ?
			    avro_datum_to_int32(datum)->i32 :
			    avro_datum_to_int64(datum)->i64;
			if (is_avro_schema(writers_schema)) {
				/* handle promotion */
				if (is_avro_float(writers_schema)) {
					return enc->write_float(writer,
								(float)val);
				} else if (is_avro_double(writers_schema)) {
					return enc->write_double(writer,
								 (double)val);
				}
			}
			return enc->write_long(writer, val);
		}

	case AVRO_FLOAT:{
			float val = avro_datum_to_float(datum)->f;
			if (is_avro_schema(writers_schema)
			    && is_avro_double(writers_schema)) {
				/* handle promotion */
				return enc->write_double(writer, (double)val);
			}
			return enc->write_float(writer, val);
		}

	case AVRO_DOUBLE:
		return enc->write_double(writer,
					 avro_datum_to_double(datum)->d);

	case AVRO_RECORD:
		return write_record(writer, enc,
				    avro_schema_to_record(writers_schema),
				    datum);

	case AVRO_ENUM:
		return write_enum(writer, enc,
				  avro_schema_to_enum(writers_schema),
				  avro_datum_to_enum(datum));

	case AVRO_FIXED:
		return avro_write(writer,
				  avro_datum_to_fixed(datum)->bytes,
				  avro_datum_to_fixed(datum)->size);

	case AVRO_MAP:
		return write_map(writer, enc,
				 avro_schema_to_map(writers_schema),
				 avro_datum_to_map(datum));

	case AVRO_ARRAY:
		return write_array(writer, enc,
				   avro_schema_to_array(writers_schema),
				   avro_datum_to_array(datum));

	case AVRO_UNION:
		return write_union(writer, enc,
				   avro_schema_to_union(writers_schema),
				   avro_datum_to_union(datum));

	case AVRO_LINK:
		break;
	}

	return 0;
}