Skip to content

Releases: mransan/ocaml-protoc

4.0

20 Nov 03:12
258b491

Choose a tag to compare

CHANGES:

  • better parsing of protobuf options
  • generation of validation code with --pp_options
  • feat: add --encode-only and --decode-only features
  • take presence semantics in account, to be closer to compliance
    with the official protobuf docs and implementation
    • use a bitfield to track presence for scalar fields
    • use options in more places
    • do not serialize non-present fields, to save space
    • always generate make builders, setters, presence checks
  • merge mutable and immutable types, only generate a single record per
    message type
  • feat codegen: use polyvariants for very large sum types
  • fix parser: handle reserved in enums
  • improved tests

3.1.1

16 Jul 15:02
20e71e0

Choose a tag to compare

CHANGES:

  • fix error in codegen for nested oneof in yojson

3.1

10 Jul 16:16
955cce3

Choose a tag to compare

3.1

CHANGES:

  • Expose one-of per-constructor options

  • Support options for enum values

  • expose server stubs for advanced users

  • fix: only generate services from the current file

  • silence warning 44 in generated code

  • Use generated encoders/decoders for empty messages in rpc

breaking:

  • remove bs runtime, we don't support it going forward

3.0.2

13 Feb 17:51
5d6ed70

Choose a tag to compare

CHANGES:

  • fix segfault in pbrt in bytecode

3.0.1

12 Dec 00:12
d781f55

Choose a tag to compare

CHANGES:

  • fix bug where code for services would be generated even if --services
    is not passed on the CLI

3.0.0

30 Nov 02:37
6f4bea0

Choose a tag to compare

CHANGES:

Major version that breaks code for every user. Sorry!

Breaking

  • Generated code now always fits into 2 files: code
    for foo.proto is produced in foo.ml and foo.mli.
    This follows a fairly large internal refactor that enables
    a plugin architecture internally (which facilitated codegen for
    services).
    All encoder/decoder functions also have a new name now,
    so that they don't collide inside the same file.
  • CLI flags now use --this-style rather than -this-style
  • Bump minimal OCaml version to 4.08

Performance

  • encode probotufs backward, which means we can write directly
    into a single buffer (which is not possible in a forward mode
    because sub-messages require an unknown amount of prefix space
    to write their size as a varint)
  • add C stubs for pbrt
  • use Bytes functions to read/write fixed size integers
  • inlining annotations
  • more benchmarks, helping optimization overall
  • reduce allocations drastically, by having the generated code
    create fewer closures

Services

  • add pbrt_services runtime library
  • generate code for service statements. This is a big feature
    for users who want to implement RPC systems using protobuf.
    The generated code is agnostic to whatever RPC implementation
    will use it, it only packs together RPC method names and path
    with the relevant encoders/decoders. Services require
    both JSON and binary encoders/decoders to be present.

JSON

  • migrate pbrt_yojson into the main ocaml-protoc repo
  • JSON runtime support for empty messages
  • Add support for bytes in JSON encoding
  • Add support for encoding and decoding maps in JSON

Other features and fixes

  • add --make flag to generate make functions that take fewer
    optional arguments. This helps preventing the user from
    forgetting important arguments when they're encoding to protobuf.
    Arguments actually marked as optional in the .proto file
    are still optional.
  • Support maps/lists in options
  • add Pbrt.Decoder.of_substring
  • Allow options to be named like (validate.rules).message.required
  • support code generation for empty messages
  • Empty proto file is a valid proto as well

Testing

  • expect-style tests for parser
  • Tests for option parsing
  • Test demonstrating parse error printing

2.4

16 Mar 16:01
736af40

Choose a tag to compare

2.4
  • expose compiler library as ocaml-protoc.compiler-lib
  • option to differentiate unsigned arg from signed arguments,
    taggings uint32/64 with `unsigned

internal changes:

  • fix(test): change integration test, protoc produces broken C++ code
  • automatic generation of gh-pages
  • add basic CI
  • use ocamlformat

2.3

16 Mar 16:01
50b1cd6

Choose a tag to compare

2.3
  • allow optional in proto3 files
  • improve compatibility with OCaml 5

2.2

20 Apr 13:10
0fe37be

Choose a tag to compare

2.2
  • handle stream as a name (#179)
  • support hexadecimal notation for integers
  • improve generated pretty printers
  • move to dune 2.0
  • rename runtime library to pbrt, with a separate opam package
  • print bytes opaquely

2.1

08 Mar 16:55
33f3c63

Choose a tag to compare

2.1
  • perf: nested buffer to reduce allocations for nested messages
  • perf: improvements in runtime library, varint encoding/decoding, add benchmarks
  • Update docs/tests to reflect that sfixed is supported
  • add clear/reset to the encoder
  • Add ability to parse stream modifier