【发布时间】:2018-08-04 19:57:41
【问题描述】:
我正在尝试在我们的软件中使用 C++ avro 库,但遇到了重大问题。我有一个包含一系列类型的“值”类,我想使用 avro 来读/写它。这不仅包括简单类型,还包括类型的 std::vectors、任意类等等。
我正在尝试为我的“值”类指定一个 avro 架构。在我的示例中,我将其限制为空、int、long、int 数组和 long 数组。
我的架构是一个包含两个字段的记录,一个标识包含的类型,一个用于保存包含的对象的联合。我拥有的架构如下...
{
"type": "record",
"name": "Value",
"fields": [
{
"name": "ilk",
"type": "string"
},
{
"name": "contents",
"type": [
"null",
"boolean",
"int",
{
"type": "array",
"items": "int"
},
"long",
{
"type": "array",
"items": "long"
}
]
}
]
}
我没有指定 JSON,而是构建了一个打印出上述内容的 avro C++ 架构层次结构。但是,验证该架构层次结构失败。嗅探 C++ 代码,它会阻止您在联合中拥有多个数组或映射,即使数组或映射中的类型不同。
这实际上是 avro 标准的一部分还是 C++ 实现中的错误?我知道两次指定相同的类型是一件愚蠢的事情,但我没想到会允许包含不同类型的数组和映射。
【问题讨论】: