Sophie

Sophie

distrib > Fedora > 17 > i386 > by-pkgid > eb330d7fe32721d8e82213be474b1b15 > files > 13

erlang-protobuffs-0.8.0-1.fc17.i686.rpm

# README

[![Build Status](https://secure.travis-ci.org/basho/erlang_protobuffs.png?branch=master)](http://travis-ci.org/basho/erlang_protobuffs)

This module is a composite of other open source modules and original code to
make interfacing with the Protocol Buffers protocol easy.

## Encode / Decode

Encoding is simple.

    1> protobuffs:encode(1, 1, uint32).
    <<8,1>>
    2> erlang:iolist_to_binary([
        protobuffs:encode(1, <<"Nick">>, string),
        protobuffs:encode(2, 25, uint32)
    ]).
    <<10,4,78,105,99,107,16,25>>

Decoding is simple too.

    1> protobuffs:decode(<<8, 1>>, uint32).
    {{1, 1}, <<>>}
    2> protobuffs:decode(<<10,4,78,105,99,107,16,25>>, bytes).
    {{1, <<"Nick">>}, <<16,25>>}
    3> protobuffs:decode(<<16,25>>, bytes).
    {{2, 25}, <<>>}

## Using .proto Files

The main objective of this module is to allow developers to use .proto files
easily. This module provides very basic functionality to do so.

Consider the `t/simple.proto` file.

    message Person {
    	required string name = 1;
    	required string address = 2;
    	required string phone_number = 3;
    	required int32 age = 4;
    }

From that file we can create an Erlang module that can encode and decode the
Person message into records.

    1> protobuffs_compile:scan_file("simple.proto").
    ok
	2> simple_pb:decode_person(<<10,4,78,105,99,107,18,13,77,111,...>>).
	{person,<<"Nick">>,<<"Mountain View">>, <<"+1 (000) 555-1234">>,25}
	3> simple_pb:encode_person({person, <<"Nick">>, <<"Mountain View">>,
	    <<"+1 (000) 555-1234">>,25}).
	<<10,4,78,105,99,107,18,13,77,111,117,110,116,97,105,110,32,86,105,...>>

How cool is that? From .proto files, we create modules that export encode and
decode functions for the messages defined.

## no_debug_info

The protobuffs_compile module relies on the pokemon_pb module being compiled
with debug info. This is because pokemon_pb serves as a template for generated
_pb modules. Running protobuffs_compile:scan_file/1 reads the erlang forms from
the pokemon_pb.beam file and expands and alters those forms to create the generated
module.

## Building with rebar
To compile
    %>./rebar compile

To run all tests
    %>./rebar eunit
    %>./rebar ct

Se rebar doc for more information.

## CREDITS

Some of the protobuffs.erl module came from code written by Brian Buchanan.

Some of the protobuffs\_compile.erl module came from code written by Tim
Fletcher.

The rest of it and it's test suite was written by Nick Gerakines. Major
contributions have been made by Jacob Vorreuter.