Uploaded image for project: 'Avro'
  1. Avro
  2. AVRO-530

allow for mutual recursion in type definitions

    Details

    • Type: Improvement
    • Status: Open
    • Priority: 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.

        Attachments

          Activity

            People

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

              Dates

              • Created:
                Updated: