proto_turf
proto_turf is a library to interact with the Confluent Schema Registry using Google Protobuf. It is inspired by and based off of avro_turf.
Installation
Add this line to your application's Gemfile:
gem 'proto_turf'
And then execute:
$ bundle
Or install it yourself as:
$ gem install proto_turf
Usage
ProtoTurf interacts with the Confluent Schema Registry, and caches all results. When you first encode a message, it will register the message and all dependencies with the Schema Registry. When decoding, it will look up the schema in the Schema Registry and use the associated local generated code to decode the message.
Example usage:
require 'proto_turf'
proto_turf = ProtoTurf.new(registry_url: 'http://localhost:8081')
= MyProto::MyMessage.new(field1: 'value1', field2: 42)
encoded = proto_turf.encode(, subject: 'my-subject')
# Decoding
= proto_turf.decode(encoded_string)
If you're using buf to manage your Protobuf definitions, you should run buf export before using proto_turf to ensure that all the dependencies are available as .proto files in your project. The actual proto text is needed when registering the schema with the Schema Registry.
Notes about usage
- When decoding, this library does not attempt to fully parse the Proto definition stored on the schema registry and generate dynamic classes. Instead, it simply parses out the package and message and assumes that the reader has the message available in the descriptor pool. Any compatibility issues should be detected through normal means, i.e. just by instantiating the message and seeing if any errors are raised.