У меня есть автоматически сгенерированная схема avro, которую я могу кодировать и декодировать в потоки памяти avro.
Теперь я хотел бы записать в файл, и я должен кое-как активировать мой файловый писатель с помощью следующего:
#include "avro/Encoder.hh"#include "avro/Decoder.hh"#include "avro/ValidSchema.hh"#include "avro/Compiler.hh"#include "avro/DataFile.hh
avro::ValidSchema loadSchema(const char* filename)
{
std::ifstream ifs(filename);
avro::ValidSchema result;
avro::compileJsonSchema(ifs, result);
return result;
}
int
main()
{
avro::ValidSchema cpxSchema = loadSchema("cpx.json");
{
avro::DataFileWriter<c::cpx> dfw("test.bin", cpxSchema);
c::cpx c1;
for (int i = 0; i < 100; i++) {
c1.re = i * 100;
c1.im = i + 100;
dfw.write(c1);
}
dfw.close();
}
{
avro::DataFileReader<c::cpx> dfr("test.bin", cpxSchema);
c::cpx c2;
while (dfr.read(c2)) {
std::cout << '(' << c2.re << ", " << c2.im << ')' << std::endl;
}
}
return 0;
}
Итак, у меня есть мой автоматически сгенерированный файл в auto_generated.hh
(Команда: avrogencpp -i schema.json -o auto_generated.hh -n auto_generated
) и я включил в него все соответствующие файлы, и, за исключением загрузки схемы из моего файла json (что, кажется, не имеет смысла, если я уже все автоматически сгенерировал), я попробовал следующее:
#include "auto_generated.hh"
int main(){
/*
auto_generated::schema() is going to produce the datum which I am
storing.
auto_generated::schema is the struct which contains the data
members which will be set during the course of data output.
*///avro::ValidSchema vs; vs.setSchema(auto_generated::schema);
// auto_generated::schema schema = auto_generated::schema();
// avro::ValidSchema vs(schema);
// avro::ValidSchema vs;
// auto_generated::schema schema = auto_generated::schema();
// vs.setSchema(schema);
avro::ValidSchema vs;
avro::Schema s = auto_generated::schema(); // or without ()
vs.setSchema(s);
// etc.
avro::DataFileWriter<auto_generated::schema> dfw("foo",vs);
}
Как мне инициализировать ValidSchema
и построить DataFileWriter
чтобы записать мои данные в файл?
Задача ещё не решена.
Других решений пока нет …