Avro
  1. Avro
  2. AVRO-530

allow for mutual recursion in type definitions

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.3.2
    • Fix Version/s: None
    • Component/s: spec
    • Labels:
      None

      Description

      Suppose you have these two types in your protocol:

      {"name": "User", "type": "record", "fields": [{"name": "current_status", "type": "Status"}]}
      
      {"name": "Status", "type": "record", "fields": [{"name": "author", "type": "User"}]}
      

      This will raise an error! The current workaround is to define one of them at their first usage. Like:

      {"name": "User", "type": "record", "fields": [{"name": "current_status", "type": {"name": "Status", "type": "record", "fields": [.. lots of fields ...]}]}
      

      But this is incredibly unwieldy. It would be really nice for the spec to require all the parsers to allow for mutual recursion, instead. It could be done by implementing a two-pass parser. One pass to acquire names referenced, and a second to fill in those names with their appropriate references.

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            Jeff Hodges
          • Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:

              Development