Hello, I cannot seem to get avro union types to work properly in the c++ codebase that I pulled from your github repo a couple of weeks ago. I want to specify that an object attribute can be either null or a string in order to capture some notion of optional attributes in my json data. However, when decoding data that actually has a string value for the "optional" attribute in question, I get the following exception: "Incorrect token in the stream. Expected: Object start, found String". Here is a small program that replicates the issue:
std::string schema; schema += "{"; schema += " \"name\" : \"simple\", "; schema += " \"type\" : \"record\", "; schema += " \"fields\" : [ { \"name\" : \"last\", \"type\" : [ \"null\", \"string\"] } ] "; schema += "}"; std::string value; value += "{"; value += " \"last\" : \"dog\" "; value += "}"; std::istringstream schemass(schema); std::istringstream valuess(value); avro::ValidSchema cpxSchema; avro::compileJsonSchema(schemass, cpxSchema); std::unique_ptr<avro::InputStream> json_is = avro::istreamInputStream(valuess); /* JSON decoder */ avro::DecoderPtr json_decoder = avro::jsonDecoder(cpxSchema); avro::GenericDatum *datum = new avro::GenericDatum(cpxSchema); try { /* Decode JSON to Avro datum */ json_decoder->init(*json_is); avro::decode(*json_decoder, *datum); } catch(const avro::Exception &_e) { // throws Incorrect token in the stream. Expected: Object start, found String } Do I need to configure the system in a particular way for this to work, or does the current implementation simply not support these types of unions. I sincerely hope someone can help! All the best, Svend