Piqi 0.5.7 Released
Piqi-0.5.7 is finally released!
Release highlights: - Better compatibility with Google Protocol Buffers The new version includes many fixes in "piqi to-proto" and also follows Protobuf behavior in handling more than one entriy for required and optional fields during binary deserialization - Improved upper-bound of record parsing time for Erlang, OCaml and Piqi tools. Essentially, it has improved from O(N^2) to O(N), where N is the number of fields. - Configurable serialization options for Erlang, OCaml, Piqi-RPC and Piqi tools: - pretty-print JSON and XML output - omit fields with 'null' values from JSON output - treat unknown and duplicate fields as errors when parsing JSON or XML input - Piqi-RPC fixes and improvements including the following: - Allow callbacks to modify Webmachine Request record; for example, this can be used for setting extra response headers, cookies, etc. - Optionally, do not include Erlang stracktraces in HTTP 500 responses when request handler crashes - Fix HTTP GET returning internal error when Piqi imports are used The next set of new features become especially useful for working with third-party Piqi or Protocol Buffers definitions which, for example, may not define necessary OCaml- or Erlang-specific properties in the first place. Now, it is possible to take any set of Piqi modules and write custom extensions for them without modifying the original files. Moreover, extensions can be loaded automatically for all recursively included and imported Piqi modules. - Add support for universal extensions Previously, Piqi extensions could be applied only to type definitions: records, variants, enums, lists and aliases. Starting from this version, they can be applied to all Piqi entries: type definitions, fields, options, functions, function parameters and imports. - Automatic inclusion of Piqi extension modules Extension module is a Piqi module that has a second extension in its file name. For example, "m.ocaml.piqi" is an extension module for a regular Piqi module "m.piqi". All operations applicable to regular Piqi modules are also supported for extension modules. The difference is that extension modules can be included automatically in the modules which they extend. For instance, "piqic ocaml" and "piqic erlang" try to automatically include .ocaml.piqi and .erlang.piqi respectively for each loaded module .piqi Backward incompatible changes: - Change in Piqi-JSON mapping -- applicable to OCaml, Erlang serialization and "piqi convert" command: Piqi flags, i.e. fields and options without associated values, were previously encoded in JSON as "field_name" : null Starting from this version, their representation changes to "field_name" : true This is consistent with how flags are represented in binary format. It is also more reliable this way.
Full list of changes: https://github.com/alavrik/piqi/blob/master/CHANGES
Updated roadmap: https://piqi.org/roadmap/
Downloads: https://piqi.org/downloads/