janestreet / ppx_yojson_conv

[@@deriving] plugin to generate Yojson conversion functions
MIT License
58 stars 8 forks source link

Derivation of json schemas #4

Open disteph opened 3 years ago

disteph commented 3 years ago

Feature request: I'd be interested in automatically generating a json schema (in the sense of https://json-schema.org) out of an OCaml type definition. A json schema is describing a subset of all jsons and can be seen as a json type or a validity criterion on a json structure. Say if I have an OCaml type ty = ... [@@deriving yojson], the json structures produced by yojson_of_ty, when applied to OCaml values of type ty, would be json structures abiding by the schema.

Ideally the schema would capture exactly the image of yojson_of_ty, but I expect the notion of json schema to be less expressive than OCaml's type system (e.g., I don't think json schemas have polymorphism and I think that in a json schema, all elements of JSON arrays must have the same type --which would be problematic for the encoding of OCaml's tuples as json arrays)... ...so for the moment what would be enough is producing a json schema that captures the image of yojson_of_ty for a simple class of OCaml types ty (no tuples, all constructors have "record-like / named arguments", etc), and perhaps producing a reasonable superset of that image when ty is outside that class.

Has anybody heard of a project doing what I need?

GoPavel commented 2 years ago

Also, there is json-data-encoding. It provides Json_schema module that "contains an OCaml intermediate representation for the JSON schema document grammar description language, along with translators to / from the concrete JSON schema format."

But it cannot autoderive schema from the OCaml datatype as well. I had the same thoughts as yours and decided that the only way is to write own ppx extention.