Почему avrogenccp требует нерегулярного синтаксиса схемы AVRO для массивов в записях? - PullRequest
0 голосов
/ 07 февраля 2020

Повторное использование содержимого схемы меньшего размера в схеме большего размера не работает с avrogencpp:

$ cat Test1.avsc
{
    "name": "calcList",
    "type": "array",
    "items" : {
        "name": "calcItem",
        "type": "enum",
        "symbols": [
            "FOO", "BAR"
        ]
    }
}
$ cat Test2.avsc
{
    "name": "CalcInput",
    "type": "record",
    "fields": [
        {
            "name": "calcList",
            "type": "array",
            "items": {
                "name": "calcItem",
                "type": "enum",
                "symbols" : [
                    "FOO", "BAR"
                ]
            }
        }
    ]
}
$ avrogencpp -i Test1.avsc -o Test1.h
$ avrogencpp -i Test2.avsc -o Test2.h
Failed to parse or compile schema: Unknown type: array

После некоторых экспериментов это похоже на работу с схемой большего размера:

$ cat Test3.avsc
{
    "name": "CalcInput",
    "type": "record",
    "fields": [
        {
            "name": "calcList",
            "type": {
                "type": "array",
                "items": {
                    "name": "calcItem",
                    "type": "enum",
                    "symbols" : [
                        "FOO", "BAR"
                    ]
                }
            }
        }
    ]
}

Но эта форма меньшей схемы не работает сама по себе:

$ cat Test4.avsc
{
    "name": "calcList",
    "type": {
        "type": "array",
        "items" : {
            "name": "calcItem",
            "type": "enum",
            "symbols": [
                "FOO", "BAR"
            ]
        }
    }
}
$ avrogencpp -i Test3.avsc -o Test3.h
$ avrogencpp -i Test4.avsc -o Test4.h
Failed to parse or compile schema: Json field "type" is not a string: {"items":{"name":"calcItem","symbols":["FOO","BAR"],"type":"enum"},"type":"array"}

Что происходит? Почему avrogencpp не допускает схему массива в схеме записи? (Это авро cpp -1.9.1)

...