edition = "2023";
// File level options supported.
option optimize_for = SPEED;
message SomeMessage {
// Field identifiers reserved after message changes.
reserved 8, 100;
// Many integer types with specific encodings.
int32 aMostlyPositiveInteger = 1;
sint64 aSignedInteger = 2;
uint64 anUnsignedInteger = 3;
fixed32 anOftenBigUnsignedInteger = 4;
sfixed32 anOftenBigSignedInteger = 5;
// String always with UTF 8 encoding.
string aString = 10;
// Another message type.
AnotherMessage aMessage = 111;
// Variable length content supported.
repeated string aStringList = 333;
map <int32, string> aMap = 444;
// Field level options supported.
int32 aDeprecatedInteger = 666 [deprecated = true];
float aFloatWithoutPresenceTracking = 222 [features.field_presence = IMPLICIT];
// Extension field range.
extensions 1234 to 5678;
}
extend SomeMessage {
// Extension field in extension field range.
int32 anExtensionField = 1234;
}
A spectrum of basic types
Packages and nested types
Fields can be repeated
Fields have presence tracked unless disabled
Explicit field identifiers for versioning
Options tune code generation
Extensions reserve fields