Google Protocol Buffers tools.
Project description
About
Google Protocol Buffers tools in Python 3.6+.
C source code generator.
Only supports proto3.
Known limitations:
Recursive messages are not yet supported (probably never will be).
Options, services (gRPC) and maps are ignored.
The C type char must be 8 bits.
Only single line comments are currently supported.
Project homepage: https://github.com/eerimoq/pbtools
Documentation: http://pbtools.readthedocs.org/en/latest
Installation
pip install pbtools
Example usage
C source code
In this example we use the simple proto-file hello_world.proto.
syntax = "proto3";
package hello_world;
message Foo {
int32 bar = 1;
}
Generate C source code from the proto-file.
$ pbtools generate_c_source examples/hello_world/hello_world.proto
Successfully generated hello_world.h and hello_world.c.
Successfully created pbtools.h and pbtools.c.
See hello_world.h and hello_world.c for the contents of the generated files.
We’ll use the generated types and functions below.
struct hello_world_foo_t {
struct pbtools_message_base_t base;
int32_t bar;
};
struct hello_world_foo_t *hello_world_foo_new(
void *workspace_p,
size_t size);
int hello_world_foo_encode(
struct hello_world_foo_t *self_p,
void *encoded_p,
size_t size);
int hello_world_foo_decode(
struct hello_world_foo_t *self_p,
const uint8_t *encoded_p,
size_t size);
Encode and decode the Foo-message in main.c.
#include <stdio.h>
#include "hello_world.h"
int main(int argc, const char *argv[])
{
int size;
uint8_t workspace[64];
uint8_t encoded[16];
struct hello_world_foo_t *foo_p;
/* Encode. */
foo_p = hello_world_foo_new(&workspace[0], sizeof(workspace));
if (foo_p == NULL) {
return (1);
}
foo_p->bar = 78;
size = hello_world_foo_encode(foo_p, &encoded[0], sizeof(encoded));
if (size < 0) {
return (2);
}
printf("Successfully encoded Foo into %d bytes.\n", size);
/* Decode. */
foo_p = hello_world_foo_new(&workspace[0], sizeof(workspace));
if (foo_p == NULL) {
return (3);
}
size = hello_world_foo_decode(foo_p, &encoded[0], size);
if (size < 0) {
return (4);
}
printf("Successfully decoded %d bytes into Foo.\n", size);
printf("Foo.bar: %d\n", foo_p->bar);
return (0);
}
Build and run the program.
$ gcc main.c hello_world.c pbtools.c -o main
$ ./main
Successfully encoded Foo into 2 bytes.
Successfully decoded 2 bytes into Foo.
Foo.bar: 78
See hello_world for all files used in this example.
Command line tool
The generate C source subcommand
Below is an example of how to generate C source code from a proto-file.
$ pbtools generate_c_source examples/address_book/address_book.proto
Successfully generated address_book.h and address_book.c.
Successfully created pbtools.h and pbtools.c.
See address_book.h and address_book.c for the contents of the generated files.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pbtools-0.17.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b520609dab1789f3ff70d2a306ba2797ca03967a8ef71fd83deb263b19eef6f |
|
MD5 | 6cb932bb23d993fc114e7ac15e631c6e |
|
BLAKE2b-256 | 1a3a6c96c1679633872998d3fad655ae8ee68cff451974ee47945849a1d031b0 |