Esempio n. 1
0
static int test_union(void)
{
    avro_schema_t schema = avro_schema_union();
    avro_datum_t union_datum;
    avro_datum_t datum;
    avro_datum_t union_datum1;
    avro_datum_t datum1;

    avro_schema_union_append(schema, avro_schema_string());
    avro_schema_union_append(schema, avro_schema_int());
    avro_schema_union_append(schema, avro_schema_null());

    datum = avro_givestring("Follow your bliss.", NULL);
    union_datum = avro_union(schema, 0, datum);

    if (avro_union_discriminant(union_datum) != 0) {
        fprintf(stderr, "Unexpected union discriminant\n");
        exit(EXIT_FAILURE);
    }

    if (avro_union_current_branch(union_datum) != datum) {
        fprintf(stderr, "Unexpected union branch datum\n");
        exit(EXIT_FAILURE);
    }

    union_datum1 = avro_datum_from_schema(schema);
    avro_union_set_discriminant(union_datum1, 0, &datum1);
    avro_givestring_set(datum1, "Follow your bliss.", NULL);

    if (!avro_datum_equal(datum, datum1)) {
        fprintf(stderr, "Union values should be equal\n");
        exit(EXIT_FAILURE);
    }

    write_read_check(schema, union_datum, NULL, NULL, "union");
    test_json(union_datum, "{\"string\": \"Follow your bliss.\"}");

    avro_datum_decref(datum);
    avro_union_set_discriminant(union_datum, 2, &datum);
    test_json(union_datum, "null");

    avro_datum_decref(union_datum);
    avro_datum_decref(datum);
    avro_datum_decref(union_datum1);
    avro_schema_decref(schema);
    return 0;
}
Esempio n. 2
0
static int test_nested_record(void)
{
    const char  *json =
        "{"
        "  \"type\": \"record\","
        "  \"name\": \"list\","
        "  \"fields\": ["
        "    { \"name\": \"x\", \"type\": \"int\" },"
        "    { \"name\": \"y\", \"type\": \"int\" },"
        "    { \"name\": \"next\", \"type\": [\"null\",\"list\"]}"
        "  ]"
        "}";

    int  rval;

    avro_schema_t schema = NULL;
    avro_schema_error_t error;
    avro_schema_from_json(json, strlen(json), &schema, &error);

    avro_datum_t  head = avro_datum_from_schema(schema);
    avro_record_set_field_value(rval, head, int32, "x", 10);
    avro_record_set_field_value(rval, head, int32, "y", 10);

    avro_datum_t  next = NULL;
    avro_datum_t  tail = NULL;

    avro_record_get(head, "next", &next);
    avro_union_set_discriminant(next, 1, &tail);
    avro_record_set_field_value(rval, tail, int32, "x", 20);
    avro_record_set_field_value(rval, tail, int32, "y", 20);

    avro_record_get(tail, "next", &next);
    avro_union_set_discriminant(next, 0, NULL);

    write_read_check(schema, head, NULL, NULL, "nested record");

    avro_schema_decref(schema);
    avro_datum_decref(head);

    return 0;
}
Esempio n. 3
0
static int
avro_datum_value_set_branch(const avro_value_iface_t *iface,
			    void *vself, int discriminant,
			    avro_value_t *branch)
{
	AVRO_UNUSED(iface);
	const avro_datum_t  self = (const avro_datum_t) vself;
	check_param(EINVAL, self, "datum instance");

	if (!is_avro_union(self)) {
		avro_set_error("Can only set branch of union");
		return EINVAL;
	}

	int  rval;
	avro_datum_t  child_datum;
	check(rval, avro_union_set_discriminant(self, discriminant, &child_datum));
	return avro_datum_as_child_value(branch, child_datum);
}