sample_messages_edition.proto 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. //
  4. // Use of this source code is governed by a BSD-style
  5. // license that can be found in the LICENSE file or at
  6. // https://developers.google.com/open-source/licenses/bsd
  7. //
  8. // Sample messages to generate example code.
  9. edition = "2023";
  10. package protobuf_test_messages.edition;
  11. import "google/protobuf/cpp_features.proto";
  12. option optimize_for = SPEED;
  13. option features.(pb.cpp).string_type = VIEW;
  14. // This proto includes every type of field in both singular and repeated
  15. // forms.
  16. //
  17. // Also, crucially, all messages and enums in this file are eventually
  18. // submessages of this message. So for example, a fuzz test of TestAllTypes
  19. // could trigger bugs that occur in any message type in this file. We verify
  20. // this stays true in a unit test.
  21. message TestAllTypesEdition {
  22. message NestedMessage {
  23. int32 a = 1;
  24. TestAllTypesEdition corecursive = 2;
  25. }
  26. enum NestedEnum {
  27. FOO = 0;
  28. BAR = 1;
  29. BAZ = 2;
  30. NEG = -1; // Intentionally negative.
  31. }
  32. // Singular
  33. int32 optional_int32 = 1;
  34. int64 optional_int64 = 2;
  35. uint32 optional_uint32 = 3;
  36. uint64 optional_uint64 = 4;
  37. sint32 optional_sint32 = 5;
  38. sint64 optional_sint64 = 6;
  39. fixed32 optional_fixed32 = 7;
  40. fixed64 optional_fixed64 = 8;
  41. sfixed32 optional_sfixed32 = 9;
  42. sfixed64 optional_sfixed64 = 10;
  43. float optional_float = 11;
  44. double optional_double = 12;
  45. bool optional_bool = 13;
  46. string optional_string = 14;
  47. bytes optional_bytes = 15;
  48. NestedMessage optional_nested_message = 18;
  49. ForeignMessageEdition optional_foreign_message = 19;
  50. NestedEnum optional_nested_enum = 21;
  51. ForeignEnumEdition optional_foreign_enum = 22;
  52. string optional_string_piece = 24 [ctype = STRING_PIECE];
  53. string optional_cord = 25 [ctype = CORD];
  54. TestAllTypesEdition recursive_message = 27;
  55. // Repeated
  56. repeated int32 repeated_int32 = 31;
  57. repeated int64 repeated_int64 = 32;
  58. repeated uint32 repeated_uint32 = 33;
  59. repeated uint64 repeated_uint64 = 34;
  60. repeated sint32 repeated_sint32 = 35;
  61. repeated sint64 repeated_sint64 = 36;
  62. repeated fixed32 repeated_fixed32 = 37;
  63. repeated fixed64 repeated_fixed64 = 38;
  64. repeated sfixed32 repeated_sfixed32 = 39;
  65. repeated sfixed64 repeated_sfixed64 = 40;
  66. repeated float repeated_float = 41;
  67. repeated double repeated_double = 42;
  68. repeated bool repeated_bool = 43;
  69. repeated string repeated_string = 44;
  70. repeated bytes repeated_bytes = 45;
  71. repeated NestedMessage repeated_nested_message = 48;
  72. repeated ForeignMessageEdition repeated_foreign_message = 49;
  73. repeated NestedEnum repeated_nested_enum = 51;
  74. repeated ForeignEnumEdition repeated_foreign_enum = 52;
  75. repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
  76. repeated string repeated_cord = 55 [ctype = CORD];
  77. // Packed
  78. repeated int32 packed_int32 = 75 [features.repeated_field_encoding = PACKED];
  79. repeated int64 packed_int64 = 76 [features.repeated_field_encoding = PACKED];
  80. repeated uint32 packed_uint32 = 77
  81. [features.repeated_field_encoding = PACKED];
  82. repeated uint64 packed_uint64 = 78
  83. [features.repeated_field_encoding = PACKED];
  84. repeated sint32 packed_sint32 = 79
  85. [features.repeated_field_encoding = PACKED];
  86. repeated sint64 packed_sint64 = 80
  87. [features.repeated_field_encoding = PACKED];
  88. repeated fixed32 packed_fixed32 = 81
  89. [features.repeated_field_encoding = PACKED];
  90. repeated fixed64 packed_fixed64 = 82
  91. [features.repeated_field_encoding = PACKED];
  92. repeated sfixed32 packed_sfixed32 = 83
  93. [features.repeated_field_encoding = PACKED];
  94. repeated sfixed64 packed_sfixed64 = 84
  95. [features.repeated_field_encoding = PACKED];
  96. repeated float packed_float = 85 [features.repeated_field_encoding = PACKED];
  97. repeated double packed_double = 86
  98. [features.repeated_field_encoding = PACKED];
  99. repeated bool packed_bool = 87 [features.repeated_field_encoding = PACKED];
  100. repeated NestedEnum packed_nested_enum = 88
  101. [features.repeated_field_encoding = PACKED];
  102. // Unpacked
  103. repeated int32 unpacked_int32 = 89
  104. [features.repeated_field_encoding = EXPANDED];
  105. repeated int64 unpacked_int64 = 90
  106. [features.repeated_field_encoding = EXPANDED];
  107. repeated uint32 unpacked_uint32 = 91
  108. [features.repeated_field_encoding = EXPANDED];
  109. repeated uint64 unpacked_uint64 = 92
  110. [features.repeated_field_encoding = EXPANDED];
  111. repeated sint32 unpacked_sint32 = 93
  112. [features.repeated_field_encoding = EXPANDED];
  113. repeated sint64 unpacked_sint64 = 94
  114. [features.repeated_field_encoding = EXPANDED];
  115. repeated fixed32 unpacked_fixed32 = 95
  116. [features.repeated_field_encoding = EXPANDED];
  117. repeated fixed64 unpacked_fixed64 = 96
  118. [features.repeated_field_encoding = EXPANDED];
  119. repeated sfixed32 unpacked_sfixed32 = 97
  120. [features.repeated_field_encoding = EXPANDED];
  121. repeated sfixed64 unpacked_sfixed64 = 98
  122. [features.repeated_field_encoding = EXPANDED];
  123. repeated float unpacked_float = 99
  124. [features.repeated_field_encoding = EXPANDED];
  125. repeated double unpacked_double = 100
  126. [features.repeated_field_encoding = EXPANDED];
  127. repeated bool unpacked_bool = 101
  128. [features.repeated_field_encoding = EXPANDED];
  129. repeated NestedEnum unpacked_nested_enum = 102
  130. [features.repeated_field_encoding = EXPANDED];
  131. // Map
  132. map<int32, int32> map_int32_int32 = 56;
  133. map<int64, int64> map_int64_int64 = 57;
  134. map<uint32, uint32> map_uint32_uint32 = 58;
  135. map<uint64, uint64> map_uint64_uint64 = 59;
  136. map<sint32, sint32> map_sint32_sint32 = 60;
  137. map<sint64, sint64> map_sint64_sint64 = 61;
  138. map<fixed32, fixed32> map_fixed32_fixed32 = 62;
  139. map<fixed64, fixed64> map_fixed64_fixed64 = 63;
  140. map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 64;
  141. map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 65;
  142. map<int32, float> map_int32_float = 66;
  143. map<int32, double> map_int32_double = 67;
  144. map<bool, bool> map_bool_bool = 68;
  145. map<string, string> map_string_string = 69;
  146. map<string, bytes> map_string_bytes = 70;
  147. map<string, NestedMessage> map_string_nested_message = 71;
  148. map<string, ForeignMessageEdition> map_string_foreign_message = 72;
  149. map<string, NestedEnum> map_string_nested_enum = 73;
  150. map<string, ForeignEnumEdition> map_string_foreign_enum = 74;
  151. oneof oneof_field {
  152. uint32 oneof_uint32 = 111;
  153. NestedMessage oneof_nested_message = 112;
  154. string oneof_string = 113;
  155. bytes oneof_bytes = 114;
  156. bool oneof_bool = 115;
  157. uint64 oneof_uint64 = 116;
  158. float oneof_float = 117;
  159. double oneof_double = 118;
  160. NestedEnum oneof_enum = 119;
  161. }
  162. // extensions
  163. extensions 120 to 200;
  164. // groups
  165. message Data {
  166. int32 group_int32 = 202;
  167. uint32 group_uint32 = 203;
  168. }
  169. Data data = 201 [features.message_encoding = DELIMITED];
  170. // default values
  171. int32 default_int32 = 241 [default = -123456789];
  172. int64 default_int64 = 242 [default = -9123456789123456789];
  173. uint32 default_uint32 = 243 [default = 2123456789];
  174. uint64 default_uint64 = 244 [default = 10123456789123456789];
  175. sint32 default_sint32 = 245 [default = -123456789];
  176. sint64 default_sint64 = 246 [default = -9123456789123456789];
  177. fixed32 default_fixed32 = 247 [default = 2123456789];
  178. fixed64 default_fixed64 = 248 [default = 10123456789123456789];
  179. sfixed32 default_sfixed32 = 249 [default = -123456789];
  180. sfixed64 default_sfixed64 = 250 [default = -9123456789123456789];
  181. float default_float = 251 [default = 9e9];
  182. double default_double = 252 [default = 7e22];
  183. bool default_bool = 253 [default = true];
  184. string default_string = 254 [default = "Rosebud"];
  185. bytes default_bytes = 255 [default = "joshua"];
  186. // Test field-name-to-JSON-name convention.
  187. // (protobuf says names can be any valid C/C++ identifier.)
  188. int32 fieldname1 = 401;
  189. int32 field_name2 = 402;
  190. int32 _field_name3 = 403;
  191. int32 field__name4_ = 404;
  192. int32 field0name5 = 405;
  193. int32 field_0_name6 = 406;
  194. int32 fieldName7 = 407;
  195. int32 FieldName8 = 408;
  196. int32 field_Name9 = 409;
  197. int32 Field_Name10 = 410;
  198. int32 FIELD_NAME11 = 411;
  199. int32 FIELD_name12 = 412;
  200. int32 __field_name13 = 413;
  201. int32 __Field_name14 = 414;
  202. int32 field__name15 = 415;
  203. int32 field__Name16 = 416;
  204. int32 field_name17__ = 417;
  205. int32 Field_name18__ = 418;
  206. // Reserved for unknown fields test.
  207. reserved 1000 to 9999;
  208. // message_set test case.
  209. message MessageSetCorrect {
  210. option message_set_wire_format = true;
  211. extensions 4 to max;
  212. }
  213. message MessageSetCorrectExtension1 {
  214. extend MessageSetCorrect {
  215. MessageSetCorrectExtension1 message_set_extension = 1547769;
  216. }
  217. string str = 25;
  218. }
  219. message MessageSetCorrectExtension2 {
  220. extend MessageSetCorrect {
  221. MessageSetCorrectExtension2 message_set_extension = 4135312;
  222. }
  223. int32 i = 9;
  224. }
  225. }
  226. message ForeignMessageEdition {
  227. int32 c = 1;
  228. }
  229. enum ForeignEnumEdition {
  230. FOREIGN_FOO = 0;
  231. FOREIGN_BAR = 1;
  232. FOREIGN_BAZ = 2;
  233. }
  234. extend TestAllTypesEdition {
  235. int32 extension_int32 = 120;
  236. }
  237. message UnknownToTestAllTypes {
  238. int32 optional_int32 = 1001;
  239. string optional_string = 1002;
  240. ForeignMessageEdition nested_message = 1003;
  241. message OptionalGroup {
  242. int32 a = 1;
  243. }
  244. OptionalGroup optionalgroup = 1004 [features.message_encoding = DELIMITED];
  245. bool optional_bool = 1006;
  246. repeated int32 repeated_int32 = 1011;
  247. }
  248. message NullHypothesisEdition {}
  249. message EnumOnlyEdition {
  250. enum Bool {
  251. kFalse = 0;
  252. kTrue = 1;
  253. }
  254. }
  255. message OneStringEdition {
  256. string data = 1;
  257. }
  258. message ProtoWithKeywords {
  259. int32 inline = 1;
  260. string concept = 2;
  261. repeated string requires = 3;
  262. }
  263. message TestAllRequiredTypesEdition {
  264. message NestedMessage {
  265. int32 a = 1 [features.field_presence = LEGACY_REQUIRED];
  266. TestAllRequiredTypesEdition corecursive = 2
  267. [features.field_presence = LEGACY_REQUIRED];
  268. TestAllRequiredTypesEdition optional_corecursive = 3;
  269. }
  270. enum NestedEnum {
  271. FOO = 0;
  272. BAR = 1;
  273. BAZ = 2;
  274. NEG = -1; // Intentionally negative.
  275. }
  276. // Singular
  277. int32 required_int32 = 1 [features.field_presence = LEGACY_REQUIRED];
  278. int64 required_int64 = 2 [features.field_presence = LEGACY_REQUIRED];
  279. uint32 required_uint32 = 3 [features.field_presence = LEGACY_REQUIRED];
  280. uint64 required_uint64 = 4 [features.field_presence = LEGACY_REQUIRED];
  281. sint32 required_sint32 = 5 [features.field_presence = LEGACY_REQUIRED];
  282. sint64 required_sint64 = 6 [features.field_presence = LEGACY_REQUIRED];
  283. fixed32 required_fixed32 = 7 [features.field_presence = LEGACY_REQUIRED];
  284. fixed64 required_fixed64 = 8 [features.field_presence = LEGACY_REQUIRED];
  285. sfixed32 required_sfixed32 = 9 [features.field_presence = LEGACY_REQUIRED];
  286. sfixed64 required_sfixed64 = 10 [features.field_presence = LEGACY_REQUIRED];
  287. float required_float = 11 [features.field_presence = LEGACY_REQUIRED];
  288. double required_double = 12 [features.field_presence = LEGACY_REQUIRED];
  289. bool required_bool = 13 [features.field_presence = LEGACY_REQUIRED];
  290. string required_string = 14 [features.field_presence = LEGACY_REQUIRED];
  291. bytes required_bytes = 15 [features.field_presence = LEGACY_REQUIRED];
  292. NestedMessage required_nested_message = 18
  293. [features.field_presence = LEGACY_REQUIRED];
  294. ForeignMessageEdition required_foreign_message = 19
  295. [features.field_presence = LEGACY_REQUIRED];
  296. NestedEnum required_nested_enum = 21
  297. [features.field_presence = LEGACY_REQUIRED];
  298. ForeignEnumEdition required_foreign_enum = 22
  299. [features.field_presence = LEGACY_REQUIRED];
  300. string required_string_piece = 24
  301. [ctype = STRING_PIECE, features.field_presence = LEGACY_REQUIRED];
  302. string required_cord = 25
  303. [ctype = CORD, features.field_presence = LEGACY_REQUIRED];
  304. TestAllRequiredTypesEdition recursive_message = 27;
  305. TestAllRequiredTypesEdition optional_recursive_message = 28;
  306. // extensions
  307. extensions 120 to 200;
  308. // groups
  309. message Data {
  310. int32 group_int32 = 202 [features.field_presence = LEGACY_REQUIRED];
  311. uint32 group_uint32 = 203 [features.field_presence = LEGACY_REQUIRED];
  312. }
  313. Data data = 201 [features.message_encoding = DELIMITED];
  314. // default values
  315. int32 default_int32 = 241
  316. [default = -123456789, features.field_presence = LEGACY_REQUIRED];
  317. int64 default_int64 = 242 [
  318. default = -9123456789123456789,
  319. features.field_presence = LEGACY_REQUIRED
  320. ];
  321. uint32 default_uint32 = 243
  322. [default = 2123456789, features.field_presence = LEGACY_REQUIRED];
  323. uint64 default_uint64 = 244 [
  324. default = 10123456789123456789,
  325. features.field_presence = LEGACY_REQUIRED
  326. ];
  327. sint32 default_sint32 = 245
  328. [default = -123456789, features.field_presence = LEGACY_REQUIRED];
  329. sint64 default_sint64 = 246 [
  330. default = -9123456789123456789,
  331. features.field_presence = LEGACY_REQUIRED
  332. ];
  333. fixed32 default_fixed32 = 247
  334. [default = 2123456789, features.field_presence = LEGACY_REQUIRED];
  335. fixed64 default_fixed64 = 248 [
  336. default = 10123456789123456789,
  337. features.field_presence = LEGACY_REQUIRED
  338. ];
  339. sfixed32 default_sfixed32 = 249
  340. [default = -123456789, features.field_presence = LEGACY_REQUIRED];
  341. sfixed64 default_sfixed64 = 250 [
  342. default = -9123456789123456789,
  343. features.field_presence = LEGACY_REQUIRED
  344. ];
  345. float default_float = 251
  346. [default = 9e9, features.field_presence = LEGACY_REQUIRED];
  347. double default_double = 252
  348. [default = 7e22, features.field_presence = LEGACY_REQUIRED];
  349. bool default_bool = 253
  350. [default = true, features.field_presence = LEGACY_REQUIRED];
  351. string default_string = 254
  352. [default = "Rosebud", features.field_presence = LEGACY_REQUIRED];
  353. bytes default_bytes = 255
  354. [default = "joshua", features.field_presence = LEGACY_REQUIRED];
  355. // Reserved for unknown fields test.
  356. reserved 1000 to 9999;
  357. // message_set test case.
  358. message MessageSetCorrect {
  359. option message_set_wire_format = true;
  360. extensions 4 to max;
  361. }
  362. message MessageSetCorrectExtension1 {
  363. extend MessageSetCorrect {
  364. MessageSetCorrectExtension1 message_set_extension = 1547769;
  365. }
  366. string str = 25 [features.field_presence = LEGACY_REQUIRED];
  367. }
  368. message MessageSetCorrectExtension2 {
  369. extend MessageSetCorrect {
  370. MessageSetCorrectExtension2 message_set_extension = 4135312;
  371. }
  372. int32 i = 9 [features.field_presence = LEGACY_REQUIRED];
  373. }
  374. }