syntax = "proto2"; package example; message Object { required string name = 1; required int32 identifier = 2; optional string address = 3; enum ObjectType { LOCAL = 0; REMOTE = 1; NEITHER = 2; default = 3; // no keyword } message ObjectData { required string number = 1; optional ObjectType type = 2 [default = NEITHER]; optional ObjectType other = 3 [default = default]; // ^ no keyword } repeated ObjectData dataList = 4; string string = 5; // ^ no data type string default = 5; // ^ no keyword } message ObjectList { repeated Object object = 1; } enum EnumAllowingAlias { option allow_alias = true; EAA_UNSPECIFIED = 0; EAA_STARTED = 1; EAA_RUNNING = 1; EAA_FINISHED = 2; } message SomeOtherMessage { SearchResponse.Result result = 1; } package media; // A container message to hold stuff that a user has created. message UserContent { // Set verification to `DECLARATION` to enforce extension declarations for all // extensions in this range. extensions 100 to 199 [verification = DECLARATION]; } // A container message to hold stuff that a user has created. message UserContent { extensions 100 to 199 [ declaration = { number: 126, full_name: ".kittens.kitten_videos", type: ".kittens.Video", repeated: true }, // Ensures all field numbers in this extension range are declarations. verification = DECLARATION ]; } service SearchService { rpc Search(SearchRequest) returns (SearchResponse); } message RequestType {} message ResponseType {} service MyService { option (my_service_option) = FOO; rpc MyMethod(RequestType) returns(ResponseType) { // Note: my_method_option has type MyMessage. We can set each field // within it using a separate "option" line. option (my_method_option).foo = 567; option (my_method_option).bar = "Some string"; } } import "google/protobuf/descriptor.proto"; extend google.protobuf.EnumValueOptions { string string_name = 123456789; } enum Data { DATA_UNSPECIFIED = 0; DATA_SEARCH = 1 [deprecated = true]; DATA_DISPLAY = 2 [ (string_name) = "x\uafe23\U000123456\nx\x433\xag\0123\u1xx\p\U0010ai" ]; } message Outer { option (my_option).a = true; message Inner { // Level 2 required int64 ival = 1; } map<int32, string> my_map = 2; extensions 20 to 30; float n = .2; float n = inf; }