| syntax = "proto3"; |
| package examples.example; |
| |
| import "google/api/annotations.proto"; |
| import "google/protobuf/empty.proto"; |
| import "sub.proto"; |
| import "sub2.proto"; |
| import "google/protobuf/timestamp.proto"; |
| |
| // Intentionaly complicated message type to cover much features of Protobuf. |
| // NEXT ID: 27 |
| message ABitOfEverything { |
| // Nested is nested type. |
| message Nested { |
| // name is nested field. |
| string name = 1; |
| uint32 amount = 2; |
| // DeepEnum is one or zero. |
| enum DeepEnum { |
| // FALSE is false. |
| FALSE = 0; |
| // TRUE is true. |
| TRUE = 1; |
| } |
| DeepEnum ok = 3; |
| } |
| Nested single_nested = 25; |
| |
| string uuid = 1; |
| repeated Nested nested = 2; |
| float float_value = 3; |
| double double_value = 4; |
| int64 int64_value = 5; |
| uint64 uint64_value = 6; |
| int32 int32_value = 7; |
| fixed64 fixed64_value = 8; |
| fixed32 fixed32_value = 9; |
| bool bool_value = 10; |
| string string_value = 11; |
| // TODO(yugui) add bytes_value |
| uint32 uint32_value = 13; |
| NumericEnum enum_value = 14; |
| sfixed32 sfixed32_value = 15; |
| sfixed64 sfixed64_value = 16; |
| sint32 sint32_value = 17; |
| sint64 sint64_value = 18; |
| repeated string repeated_string_value = 19; |
| oneof oneof_value { |
| google.protobuf.Empty oneof_empty = 20; |
| string oneof_string = 21; |
| } |
| |
| map<string, NumericEnum> map_value = 22; |
| map<string, string> mapped_string_value = 23; |
| map<string, Nested> mapped_nested_value = 24; |
| |
| string nonConventionalNameValue = 26; |
| |
| google.protobuf.Timestamp timestamp_value = 27; |
| } |
| |
| // NumericEnum is one or zero. |
| enum NumericEnum { |
| // ZERO means 0 |
| ZERO = 0; |
| // ONE means 1 |
| ONE = 1; |
| } |
| |
| service ABitOfEverythingService { |
| rpc Create(ABitOfEverything) returns (ABitOfEverything) { |
| // TODO add enum_value |
| option (google.api.http) = { |
| post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}" |
| }; |
| } |
| rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { |
| option (google.api.http) = { |
| post: "/v1/example/a_bit_of_everything" |
| body: "*" |
| }; |
| } |
| rpc Lookup(sub2.IdMessage) returns (ABitOfEverything) { |
| option (google.api.http) = { |
| get: "/v1/example/a_bit_of_everything/{uuid}" |
| }; |
| } |
| rpc Update(ABitOfEverything) returns (google.protobuf.Empty) { |
| option (google.api.http) = { |
| put: "/v1/example/a_bit_of_everything/{uuid}" |
| body: "*" |
| }; |
| } |
| rpc Delete(sub2.IdMessage) returns (google.protobuf.Empty) { |
| option (google.api.http) = { |
| delete: "/v1/example/a_bit_of_everything/{uuid}" |
| }; |
| } |
| rpc Echo(examples.sub.StringMessage) returns (examples.sub.StringMessage) { |
| option (google.api.http) = { |
| get: "/v1/example/a_bit_of_everything/echo/{value}" |
| additional_bindings { |
| post: "/v2/example/echo" |
| body: "value" |
| } |
| additional_bindings { |
| get: "/v2/example/echo" |
| } |
| }; |
| } |
| rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) { |
| option (google.api.http) = { |
| post: "/v1/example/a_bit_of_everything/{single_nested.name}" |
| body: "*" |
| }; |
| } |
| rpc Timeout(google.protobuf.Empty) returns (google.protobuf.Empty) { |
| option (google.api.http) = { |
| get: "/v2/example/timeout", |
| }; |
| } |
| } |