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/