Avro схема и реализация C - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь сериализовать данные, используя реализацию C.(Упрощенная) схема выглядит следующим образом:

[{
"type" : "record",
"name" : "Global",
"fields" : [
  {
    "name" : "source", 
    "type" : "string"
  },
  {
    "name" : "timestamp", 
    "type" : "long"
  }]
 },
{ 
"type" : "record",
"name" : "seb_sup",
"fields" : [
  {
    "name" : "global", 
    "type" : "Global"
  }
]
}]

Я не нахожу правильный способ использования C API.Я пробовал что-то вроде этого:

avro_schema_t sch_seb_sup = avro_schema_get_subschema (sch_schema, "seb_sup");
check_p (iface = avro_generic_class_from_schema (sch_seb_sup));

avro_value_t seb_sup;
check_i (avro_generic_value_new (iface, &seb_sup));

// populate the global part

avro_value_t global;
check_i (avro_value_get_by_name (&seb_sup, "global", &global, NULL));

check_i (avro_value_get_by_name (&global, "source", &field, NULL));
check_i (avro_value_set_string (&field, "seb"));

check_i (avro_value_get_by_name (&global, "timestamp", &field, NULL));
check_i (avro_value_set_long (&field, 12345678));

check_i (avro_file_writer_append_value (db, &seb_sup));

, но выполнение показывает ошибку: Ошибка: Никогда не создавал реализацию значения для Global

Как мне использовать C API?

С уважением, Арно

...