@hackage / wireform-proto

Protocol Buffers (proto2/proto3) with IDL parser, code generation, JSON mapping

Latest0.2.0.0

Changelog

Changelog for wireform-proto

0.2.0.0 -- 2026-07-16

Breaking release from 0.1.0.0.

  • Rename generated well-known-type modules to match their canonical google.protobuf package paths (for example, Proto.Google.Protobuf.Timestamp).
  • Replace the legacy public wire codec surface with Proto.Encode and Proto.Decode, and add collecting decode diagnostics in Proto.Decode.Collect.
  • Add Proto.JSONSchema, a draft-2020-12 / OpenAPI 3.1 schema generator aligned with the proto3 JSON mapping.
  • Update loadProto, code generation, well-known types, dynamic messages, extensions, text format, compatibility, and tests to the current wireform-derive and wireform-core APIs.

0.1.0.0 -- 2026

Initial release.

Highlights
  • .proto IDL parser (proto2 + proto3) with full reference resolution.
  • Pure-text Haskell code generator (Proto.CodeGen) that emits records, enums, oneofs, maps, services, well-known type imports, and extension bindings -- plus a serialized FileDescriptorProto blob for each module.
  • Annotation-driven Template Haskell deriver (Proto.Derive) that emits wire codecs (MessageEncode / MessageDecode / MessageSize), JSON instances, Hashable, IsMessage, and ProtoMessage schema metadata for hand-written Haskell records.
  • Proto.TH.loadProto Template Haskell splice that runs the parser and the deriver together for an in-place data + instances bundle.
  • Inline [proto| ... |] quasi-quoter for one-off types (Proto.QQ).
  • Proto.Setup Cabal Setup.hs integration hook for pre-build protobuf code generation.
  • protoc-gen-wireform protoc plugin (--wireform_out=DIR).
  • Allocation-disciplined wire-format primitives: unboxed-sum decoder result (Proto.Wire.Decode), two-pass sized encoder (Proto.SizedBuilder, Proto.Encode.Archetype), pre-computed field tags, packed repeated field encode/decode, branchless varint sizing, lazy submessage decoding.
  • Proto3 canonical JSON mapping (Proto.JSON) with json_name override, base64 bytes, string-encoded 64-bit integers, and NaN/Infinity sentinels.
  • Proto → JSON Schema (draft 2020-12 / OpenAPI 3.1) walk (Proto.JSONSchema): the transport-agnostic half of schema-derived API doc generation. Emits #/components/schemas objects whose field names, 64-bit-int-as-string, base64 bytes, inlined well-known types, enum-as-string, map, and oneof shapes match the proto3-canonical-JSON codec byte-for-byte. Consumed by wireform-connect's OpenAPI emitter.
  • Well-known types (Timestamp, Duration, Any, FieldMask, Struct, Value, ListValue, NullValue, Empty, Wrappers, SourceContext) generated from the bundled .proto files by the gen-wkt executable. Supplementary logic (Proto.Google.Protobuf.*.Util) ships packAny, RFC 3339 formatting, TypeRegistry, FieldMask ops.
  • Proto2 typed extensions (Proto.Extension.HasExtensions), unknown-field round-trip preservation, dynamic / untyped messages (Proto.Dynamic), .pbtxt text format I/O (Proto.TextFormat), and a runtime MessageRegistry (Proto.Registry).
  • Streaming and incremental decoders (Proto.Decode.Stream, Proto.Decode.Streaming).
  • gRPC service-method codegen (Proto.GRPC). The wire framing lives in the wireform-grpc package.
  • Conformance test driver (Proto.Conformance) that exposes the protocol expected by the upstream conformance_test_runner. Today's baseline against protocolbuffers/protobuf@v28.2: 2675 successes, 0 unexpected failures across proto3 + proto2, binary + JSON suites.