No commit activity in last 3 years
No release in over 3 years
A new implementation of Protocol Buffers in Ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

 Project Readme

Protopuffs!¶ ↑

A new implementation of Protocol Buffers in Ruby.

If you’re not familiar with Protocol Buffers, start with Google’s homepage: code.google.com/apis/protocolbuffers

Protocol buffers are Google's language-neutral, platform-neutral, extensible
mechanism for serializing structured data -- think XML, but smaller, faster,
and simpler.

Installation¶ ↑

Rubyforge is cuckoo for protopuffs.

sudo gem install protopuffs

Usage¶ ↑

Start with a proto file, say, proto/animals.proto:

message Bird {
  required string name = 1;
  optional string species = 2;
}

First, require Protopuffs and tell it where your proto files are:

require 'protopuffs'
Protopuffs.proto_load_path << "proto"
Protopuffs.load_message_classes

That makes the Bird message dynamically available in Ruby. Everything’s namespaced under Protopuffs::Message, which should help with your OCD.

bird = Protopuffs::Message::Bird.new
bird.name = "Sonny"
bird.species = "Cuculus canorus"

# encode this message to the super-efficient binary wire format
binary_bird = bird.to_wire_format

# or encode to the human-friendly text format, for debugging
puts bird.inspect

You can also decode incoming binary wire-format messages:

decoded_bird = Protopuffs::Message::Bird.new
decoded_bird.from_wire_format(binary_bird)
decoded_bird.name  # => "Sonny"

Mass-assignment¶ ↑

TODO: explain Message::Base.new with strings containing the wire format or hashes, as well as #attributes=

Missing functionality¶ ↑

Protopuffs currently only supports a base set of the .proto file syntax. Here’s what’s missing:

  • the sfixed64 type

  • sint32 and sint64 types (due to lack of support for ZigZag encoding)

  • packed repeated fields (the [packed=true] option)

  • enumerations

  • importing definitions

  • nested message types

  • extensions

  • nested extensions

  • packages

  • services

  • built-in options

  • custom options

  • groups (deprecated)