John Snow <js...@redhat.com> writes: > With the two major JSON-ish type hierarchies clarified for distinct > purposes; QAPIExpression for parsed expressions and JSONValue for > introspection data, remove this FIXME as no longer an action item. > > A third JSON-y data type, _ExprValue, is not meant to represent JSON in > the abstract but rather only the possible legal return values from a > single function, get_expr(). It isn't appropriate to attempt to merge it > with either of the above two types. > > In theory, it may be possible to define a completely agnostic > one-size-fits-all JSON type hierarchy that any other user could borrow - > in practice, it's tough to wrangle the differences between invariant, > covariant and contravariant types: input and output parameters demand > different properties of such a structure. > > However, QAPIExpression serves to authoritatively type user input to the > QAPI parser, while JSONValue serves to authoritatively type qapi > generator *output* to be served back to client users at runtime via > QMP. The AST for these two types are different and cannot be wholly > merged into a unified syntax. > > They could, in theory, share some JSON primitive definitions. In > practice, this is currently more trouble than it's worth with mypy's > current expressive power. As such, declare this "done enough for now". > > Signed-off-by: John Snow <js...@redhat.com>
Reviewed-by: Markus Armbruster <arm...@redhat.com>