Google Protocol Buffer Support(5.0)

Google Protocol Buffer Support(5.0)

This chapter describes the GPB (Google Protocol Buffers) addition to the Ultra Format Definition Language (UFDL). This addition enables you to compile GPB definitions, and to decode the GPB input data as well as encode data into the GPB format.

Both the proto2 and proto3 versions of the Google protocol buffers language are supported.

Overview

In 

 you manage GPB parsing in UFDL by applying the gpb_block construct. The syntax differs whether you are using proto2 or proto3.

Syntax for proto2

gpb_block { <GPB message elements> };


Syntax for proto3

gpb_block { syntax = "proto3"; <GPB message elements> };

The full description of the GPB language for proto2 and proto3 can be found at: https://developers.google.com/protocol-buffers/docs/proto or https://developers.google.com/protocol-buffers/docs/proto3.

The GPB Field Rules

You specify that message elements are formatted according to one of the following rules:

For proto2 only:

  • required

  • optional

For proto2 and proto3:

  • repeated



The GPB Scalar Value Types 

The GPB message elements can be defined with any of the following types:

Type

Notes

Type

Notes

double

8 bytes signed

float

4 bytes signed

int32

Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.

int64

Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.

uint32

Uses variable-length encoding.

uint64

Uses variable-length encoding.

sint32

Uses variable-length encoding. Signed int value. This more efficiently encode negative numbers than regular int32s.

sint64

Uses variable-length encoding. Signed int value. This more efficiently encode negative numbers than regular int64s. In

 sint64 will be more efficient than uint64.

fixed32

Always four bytes. More efficient encoded than uint32 if values are often greater than 228.

fixed64

Always eight bytes. More efficient encoded than uint64 if values are often greater than 256.

sfixed32

Always four bytes.

sfixed64

Always eight bytes.

bool



string



bytes

May contain any arbitrary sequence of bytes.



Limitations

The following limitations apply for the GPB support for proto2 in 

:

  • Default specifiers are not supported.

  • Groups are not supported.

  • The packed option is not supported.

  • Import statements with the gpb_block will have no effect.

  •  Nested types are not fully supported, since their names will become a part of the global scope. However, you can avoid this problem by changing names on one of the sub types.

  • The extensions specifier is not supported.

  • The packed specifier is not supported.

  • Options are not supported.

  • Packages are not supported.

  • Import public specifiers is not supported.

  • Definitions of services are not supported, only messages.