@devvit/protos 0.11.4 → 0.11.5-next-2024-12-09-8401a61d8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/meta.min.json +7814 -0
  2. package/package.json +4 -4
  3. package/protos.min.js +2 -0
  4. package/protos.min.js.map +7 -0
  5. package/schema/.snootobuf/deps/buf/validate/expression.proto +92 -0
  6. package/schema/.snootobuf/deps/buf/validate/priv/private.proto +41 -0
  7. package/schema/.snootobuf/deps/buf/validate/validate.proto +4130 -0
  8. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/audit.proto +72 -0
  9. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/auth.proto +49 -0
  10. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/organization.proto +54 -0
  11. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/service.proto +46 -0
  12. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/subscription.proto +72 -0
  13. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/ui.proto +20 -0
  14. package/schema/.snootobuf/deps/devvit/data/api/admin/v1alpha/user.proto +45 -0
  15. package/schema/.snootobuf/deps/devvit/data/api/v1alpha/admin.proto +54 -0
  16. package/schema/.snootobuf/deps/devvit/data/api/v1alpha/delivery.proto +773 -0
  17. package/schema/.snootobuf/deps/devvit/data/api/v1alpha/filter.proto +66 -0
  18. package/schema/.snootobuf/deps/devvit/data/api/v1alpha/firehose.proto +100 -0
  19. package/schema/.snootobuf/deps/devvit/data/api/v1alpha/intake.proto +19 -0
  20. package/schema/.snootobuf/deps/devvit/events/v1alpha/events.proto +446 -0
  21. package/schema/.snootobuf/deps/devvit/gateway/v1alpha/payments.proto +24 -0
  22. package/schema/.snootobuf/deps/devvit/options/options.proto +98 -0
  23. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/commentv2.proto +29 -0
  24. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/flair.proto +25 -0
  25. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/modaction.proto +53 -0
  26. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/modmail.proto +56 -0
  27. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/postv2.proto +107 -0
  28. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/subredditv2.proto +41 -0
  29. package/schema/.snootobuf/deps/devvit/reddit/v2alpha/userv2.proto +23 -0
  30. package/schema/.snootobuf/deps/devvit/triggers/v1alpha/triggers.proto +162 -0
  31. package/schema/.snootobuf/deps/enum/account_gender_category.proto +14 -0
  32. package/schema/.snootobuf/deps/enum/approval_status.proto +15 -0
  33. package/schema/.snootobuf/deps/enum/automated_reporting_level.proto +12 -0
  34. package/schema/.snootobuf/deps/enum/ban_evasion_threshold.proto +13 -0
  35. package/schema/.snootobuf/deps/enum/ban_info_action.proto +12 -0
  36. package/schema/.snootobuf/deps/enum/block_relation_type.proto +11 -0
  37. package/schema/.snootobuf/deps/enum/comment_sort.proto +18 -0
  38. package/schema/.snootobuf/deps/enum/comment_type.proto +11 -0
  39. package/schema/.snootobuf/deps/enum/crowd_control_level.proto +12 -0
  40. package/schema/.snootobuf/deps/enum/discussion_type.proto +10 -0
  41. package/schema/.snootobuf/deps/enum/distinguish_type.proto +14 -0
  42. package/schema/.snootobuf/deps/enum/flair_position.proto +11 -0
  43. package/schema/.snootobuf/deps/enum/hateful_content_threshold.proto +12 -0
  44. package/schema/.snootobuf/deps/enum/link_content_type.proto +11 -0
  45. package/schema/.snootobuf/deps/enum/link_type.proto +11 -0
  46. package/schema/.snootobuf/deps/enum/link_visibility.proto +11 -0
  47. package/schema/.snootobuf/deps/enum/prediction_leaderboard_entry_type.proto +11 -0
  48. package/schema/.snootobuf/deps/enum/promo_layout.proto +11 -0
  49. package/schema/.snootobuf/deps/enum/removed_by_type.proto +18 -0
  50. package/schema/.snootobuf/deps/enum/spam_level.proto +11 -0
  51. package/schema/.snootobuf/deps/enum/subreddit_type.proto +16 -0
  52. package/schema/.snootobuf/deps/enum/verdict.proto +14 -0
  53. package/schema/.snootobuf/deps/enum/vote.proto +12 -0
  54. package/schema/.snootobuf/deps/enum/whitelist_status.proto +17 -0
  55. package/schema/.snootobuf/deps/enum/wiki_edit_mode.proto +12 -0
  56. package/schema/.snootobuf/deps/evaluator/evaluator.proto +203 -0
  57. package/schema/.snootobuf/deps/google/api/annotations.proto +31 -0
  58. package/schema/.snootobuf/deps/google/api/apikeys/v2/apikeys.proto +288 -0
  59. package/schema/.snootobuf/deps/google/api/apikeys/v2/resources.proto +175 -0
  60. package/schema/.snootobuf/deps/google/api/auth.proto +237 -0
  61. package/schema/.snootobuf/deps/google/api/backend.proto +185 -0
  62. package/schema/.snootobuf/deps/google/api/billing.proto +77 -0
  63. package/schema/.snootobuf/deps/google/api/client.proto +431 -0
  64. package/schema/.snootobuf/deps/google/api/cloudquotas/v1/cloudquotas.proto +322 -0
  65. package/schema/.snootobuf/deps/google/api/cloudquotas/v1/resources.proto +315 -0
  66. package/schema/.snootobuf/deps/google/api/config_change.proto +84 -0
  67. package/schema/.snootobuf/deps/google/api/consumer.proto +82 -0
  68. package/schema/.snootobuf/deps/google/api/context.proto +92 -0
  69. package/schema/.snootobuf/deps/google/api/control.proto +41 -0
  70. package/schema/.snootobuf/deps/google/api/distribution.proto +213 -0
  71. package/schema/.snootobuf/deps/google/api/documentation.proto +168 -0
  72. package/schema/.snootobuf/deps/google/api/endpoint.proto +69 -0
  73. package/schema/.snootobuf/deps/google/api/error_reason.proto +589 -0
  74. package/schema/.snootobuf/deps/google/api/expr/conformance/v1alpha1/conformance_service.proto +183 -0
  75. package/schema/.snootobuf/deps/google/api/expr/v1alpha1/checked.proto +343 -0
  76. package/schema/.snootobuf/deps/google/api/expr/v1alpha1/eval.proto +118 -0
  77. package/schema/.snootobuf/deps/google/api/expr/v1alpha1/explain.proto +53 -0
  78. package/schema/.snootobuf/deps/google/api/expr/v1alpha1/syntax.proto +438 -0
  79. package/schema/.snootobuf/deps/google/api/expr/v1alpha1/value.proto +115 -0
  80. package/schema/.snootobuf/deps/google/api/expr/v1beta1/decl.proto +84 -0
  81. package/schema/.snootobuf/deps/google/api/expr/v1beta1/eval.proto +125 -0
  82. package/schema/.snootobuf/deps/google/api/expr/v1beta1/expr.proto +265 -0
  83. package/schema/.snootobuf/deps/google/api/expr/v1beta1/source.proto +62 -0
  84. package/schema/.snootobuf/deps/google/api/expr/v1beta1/value.proto +114 -0
  85. package/schema/.snootobuf/deps/google/api/field_behavior.proto +104 -0
  86. package/schema/.snootobuf/deps/google/api/field_info.proto +106 -0
  87. package/schema/.snootobuf/deps/google/api/http.proto +371 -0
  88. package/schema/.snootobuf/deps/google/api/httpbody.proto +81 -0
  89. package/schema/.snootobuf/deps/google/api/label.proto +48 -0
  90. package/schema/.snootobuf/deps/google/api/launch_stage.proto +72 -0
  91. package/schema/.snootobuf/deps/google/api/log.proto +54 -0
  92. package/schema/.snootobuf/deps/google/api/logging.proto +81 -0
  93. package/schema/.snootobuf/deps/google/api/metric.proto +268 -0
  94. package/schema/.snootobuf/deps/google/api/monitored_resource.proto +130 -0
  95. package/schema/.snootobuf/deps/google/api/monitoring.proto +107 -0
  96. package/schema/.snootobuf/deps/google/api/policy.proto +85 -0
  97. package/schema/.snootobuf/deps/google/api/quota.proto +184 -0
  98. package/schema/.snootobuf/deps/google/api/resource.proto +243 -0
  99. package/schema/.snootobuf/deps/google/api/routing.proto +461 -0
  100. package/schema/.snootobuf/deps/google/api/service.proto +191 -0
  101. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/check_error.proto +124 -0
  102. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/distribution.proto +166 -0
  103. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/http_request.proto +93 -0
  104. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/log_entry.proto +126 -0
  105. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/metric_value.proto +81 -0
  106. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/operation.proto +123 -0
  107. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/quota_controller.proto +245 -0
  108. package/schema/.snootobuf/deps/google/api/servicecontrol/v1/service_controller.proto +260 -0
  109. package/schema/.snootobuf/deps/google/api/servicecontrol/v2/service_controller.proto +196 -0
  110. package/schema/.snootobuf/deps/google/api/servicemanagement/v1/resources.proto +295 -0
  111. package/schema/.snootobuf/deps/google/api/servicemanagement/v1/servicemanager.proto +508 -0
  112. package/schema/.snootobuf/deps/google/api/serviceusage/v1/resources.proto +130 -0
  113. package/schema/.snootobuf/deps/google/api/serviceusage/v1/serviceusage.proto +305 -0
  114. package/schema/.snootobuf/deps/google/api/serviceusage/v1beta1/resources.proto +458 -0
  115. package/schema/.snootobuf/deps/google/api/serviceusage/v1beta1/serviceusage.proto +793 -0
  116. package/schema/.snootobuf/deps/google/api/source_info.proto +31 -0
  117. package/schema/.snootobuf/deps/google/api/system_parameter.proto +96 -0
  118. package/schema/.snootobuf/deps/google/api/usage.proto +96 -0
  119. package/schema/.snootobuf/deps/google/api/visibility.proto +113 -0
  120. package/schema/.snootobuf/deps/google/cloud/extended_operations.proto +150 -0
  121. package/schema/.snootobuf/deps/google/iam/admin/v1/iam.proto +1087 -0
  122. package/schema/.snootobuf/deps/google/iam/v1/iam_policy.proto +145 -0
  123. package/schema/.snootobuf/deps/google/iam/v1/logging/audit_data.proto +34 -0
  124. package/schema/.snootobuf/deps/google/iam/v1/options.proto +41 -0
  125. package/schema/.snootobuf/deps/google/iam/v1/policy.proto +240 -0
  126. package/schema/.snootobuf/deps/google/logging/type/http_request.proto +92 -0
  127. package/schema/.snootobuf/deps/google/logging/type/log_severity.proto +72 -0
  128. package/schema/.snootobuf/deps/google/longrunning/operations.proto +247 -0
  129. package/schema/.snootobuf/deps/google/protobuf/any.proto +158 -0
  130. package/schema/.snootobuf/deps/google/protobuf/api.proto +208 -0
  131. package/schema/.snootobuf/deps/google/protobuf/compiler/plugin.proto +183 -0
  132. package/schema/.snootobuf/deps/google/protobuf/descriptor.proto +921 -0
  133. package/schema/.snootobuf/deps/google/protobuf/duration.proto +116 -0
  134. package/schema/.snootobuf/deps/google/protobuf/empty.proto +51 -0
  135. package/schema/.snootobuf/deps/google/protobuf/field_mask.proto +245 -0
  136. package/schema/.snootobuf/deps/google/protobuf/source_context.proto +48 -0
  137. package/schema/.snootobuf/deps/google/protobuf/struct.proto +95 -0
  138. package/schema/.snootobuf/deps/google/protobuf/timestamp.proto +147 -0
  139. package/schema/.snootobuf/deps/google/protobuf/type.proto +187 -0
  140. package/schema/.snootobuf/deps/google/protobuf/wrappers.proto +123 -0
  141. package/schema/.snootobuf/deps/google/rpc/code.proto +186 -0
  142. package/schema/.snootobuf/deps/google/rpc/context/attribute_context.proto +287 -0
  143. package/schema/.snootobuf/deps/google/rpc/error_details.proto +246 -0
  144. package/schema/.snootobuf/deps/google/rpc/status.proto +47 -0
  145. package/schema/.snootobuf/deps/google/type/calendar_period.proto +57 -0
  146. package/schema/.snootobuf/deps/google/type/color.proto +170 -0
  147. package/schema/.snootobuf/deps/google/type/date.proto +50 -0
  148. package/schema/.snootobuf/deps/google/type/datetime.proto +97 -0
  149. package/schema/.snootobuf/deps/google/type/dayofweek.proto +51 -0
  150. package/schema/.snootobuf/deps/google/type/expr.proto +51 -0
  151. package/schema/.snootobuf/deps/google/type/fraction.proto +34 -0
  152. package/schema/.snootobuf/deps/google/type/latlng.proto +37 -0
  153. package/schema/.snootobuf/deps/google/type/money.proto +43 -0
  154. package/schema/.snootobuf/deps/google/type/month.proto +66 -0
  155. package/schema/.snootobuf/deps/google/type/postal_address.proto +135 -0
  156. package/schema/.snootobuf/deps/google/type/quaternion.proto +95 -0
  157. package/schema/.snootobuf/deps/google/type/timeofday.proto +44 -0
  158. package/schema/.snootobuf/deps/openapi/helper.proto +20 -0
  159. package/schema/.snootobuf/deps/products-api/protos/reddit/xpaymentsplatform/payproducts/v1/currencies.proto +189 -0
  160. package/schema/.snootobuf/deps/products-api/protos/reddit/xpaymentsplatform/payproducts/v1/payproducts.proto +118 -0
  161. package/schema/.snootobuf/deps/reddit/api/metadata/v1/metadata.proto +55 -0
  162. package/schema/.snootobuf/deps/reddit/coreplatform/account/v1/account.proto +579 -0
  163. package/schema/.snootobuf/deps/reddit/coreplatform/account/v1/account_relations.proto +43 -0
  164. package/schema/.snootobuf/deps/reddit/coreplatform/api/metadata/v1/metadata.proto +82 -0
  165. package/schema/.snootobuf/deps/reddit/coreplatform/blocking/v1/user_blocking_service.proto +221 -0
  166. package/schema/.snootobuf/deps/reddit/coreplatform/comments/v1/comment_tree.proto +78 -0
  167. package/schema/.snootobuf/deps/reddit/coreplatform/comments/v1/comment_tree_service.proto +189 -0
  168. package/schema/.snootobuf/deps/reddit/coreplatform/comments/v1/comment_tree_structure.proto +29 -0
  169. package/schema/.snootobuf/deps/reddit/coreplatform/comments/v1/comments.proto +417 -0
  170. package/schema/.snootobuf/deps/reddit/coreplatform/comments/v1/comments_service.proto +72 -0
  171. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/auth.proto +25 -0
  172. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/features.proto +52 -0
  173. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/lang.proto +16 -0
  174. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/legal.proto +20 -0
  175. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/media.proto +149 -0
  176. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/moderation.proto +197 -0
  177. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/safety.proto +116 -0
  178. package/schema/.snootobuf/deps/reddit/coreplatform/common/v1/time.proto +25 -0
  179. package/schema/.snootobuf/deps/reddit/coreplatform/domains/v1/domains_metadata_service.proto +101 -0
  180. package/schema/.snootobuf/deps/reddit/coreplatform/grpc_thrift/v1/grpc_thrift_options.proto +34 -0
  181. package/schema/.snootobuf/deps/reddit/coreplatform/links/v1/links.proto +798 -0
  182. package/schema/.snootobuf/deps/reddit/coreplatform/links/v1/links_service.proto +186 -0
  183. package/schema/.snootobuf/deps/reddit/coreplatform/messages/v1/messages.proto +110 -0
  184. package/schema/.snootobuf/deps/reddit/coreplatform/sensitive/v1/wrappers.proto +51 -0
  185. package/schema/.snootobuf/deps/reddit/coreplatform/subreddit/v1/subreddit.proto +1202 -0
  186. package/schema/.snootobuf/deps/reddit/coreplatform/subreddit/v1/subreddit_member_relations.proto +85 -0
  187. package/schema/.snootobuf/deps/reddit/coreplatform/subreddit/v1/subreddit_moderator_service.proto +363 -0
  188. package/schema/.snootobuf/deps/reddit/coreplatform/subreddit/v1/subreddit_service.proto +301 -0
  189. package/schema/.snootobuf/deps/reddit/coreplatform/thing/v0/thing.proto +2869 -0
  190. package/schema/.snootobuf/deps/reddit/devvit/custom_post/v1/custom_post.proto +15 -0
  191. package/schema/.snootobuf/deps/reddit/devvit/custom_post/v1/service.proto +11 -0
  192. package/schema/.snootobuf/deps/reddit/devvit/subreddit/v1/context_action.proto +48 -0
  193. package/schema/.snootobuf/deps/reddit/devvit/subreddit/v1/manifest.proto +70 -0
  194. package/schema/.snootobuf/deps/reddit/devvit/subreddit/v1/service.proto +11 -0
  195. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/acknowledge_order_delivery.proto +17 -0
  196. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/checkout.proto +89 -0
  197. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/common.proto +322 -0
  198. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/delete_products.proto +17 -0
  199. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/events.proto +14 -0
  200. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_batch_products.proto +15 -0
  201. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_gold_balances.proto +48 -0
  202. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_order.proto +31 -0
  203. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_orders.proto +26 -0
  204. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_orders_by_user.proto +15 -0
  205. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_payout_info_batch.proto +52 -0
  206. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_products.proto +23 -0
  207. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/get_user_profiles.proto +28 -0
  208. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/refund_order.proto +17 -0
  209. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/service.proto +49 -0
  210. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/service_data_compliance.proto +20 -0
  211. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payapi/v1/upsert_products.proto +17 -0
  212. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/paygatewaypsps/v1/paygatewaypsps.proto +158 -0
  213. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payorders/v1/payments_data_compliance.proto +18 -0
  214. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payorders/v1/payorders.proto +195 -0
  215. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/paypayments/v1/admin.proto +44 -0
  216. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/paypayments/v1/ledger.proto +200 -0
  217. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/paypayments/v1/payments_data_compliance.proto +18 -0
  218. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/paypayments/v1/paypayments.proto +210 -0
  219. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payproducts/v1/currencies.proto +189 -0
  220. package/schema/.snootobuf/deps/reddit/xpaymentsplatform/payproducts/v1/payproducts.proto +135 -0
  221. package/schema/.snootobuf/deps/snooron_sources/text_classification/text_classification.proto +29 -0
  222. package/schema/.snootobuf/deps/snooron_sources/v2_event/v2_event.proto +3292 -0
  223. package/schema/.snootobuf/deps/validate/validate.proto +862 -0
  224. package/schema/devvit/dev_portal/app/app.proto +3 -0
  225. package/schema/devvit/dev_portal/app/info/app_info.proto +13 -1
  226. package/schema/devvit/dev_portal/dev_portal.proto +9 -0
  227. package/schema/devvit/dev_portal/payments/payments_verification.proto +31 -0
  228. package/schema/devvit/ui/block_kit/v1beta/ui.proto +1 -1
  229. package/schema/devvit/ui/effects/web_view/v1alpha/fullscreen.proto +7 -1
  230. package/schema/snootobuf.devenv.lock +1227 -662
  231. package/schema/snootobuf.lock +1228 -662
  232. package/schema/snootobuf.redditapi.lock +1226 -662
  233. package/schema/snootobuf.ts.lock +1227 -662
  234. package/types/devvit/dev_portal/app/app.d.ts +2 -0
  235. package/types/devvit/dev_portal/app/app.d.ts.map +1 -1
  236. package/types/devvit/dev_portal/app/app.js +17 -0
  237. package/types/devvit/dev_portal/app/info/app_info.d.ts +13 -0
  238. package/types/devvit/dev_portal/app/info/app_info.d.ts.map +1 -1
  239. package/types/devvit/dev_portal/app/info/app_info.js +17 -0
  240. package/types/devvit/dev_portal/dev_portal.d.ts +113 -3
  241. package/types/devvit/dev_portal/dev_portal.d.ts.map +1 -1
  242. package/types/devvit/dev_portal/dev_portal.js +32 -0
  243. package/types/devvit/dev_portal/dev_portal.twirp-client.d.ts +17 -0
  244. package/types/devvit/dev_portal/dev_portal.twirp-client.d.ts.map +1 -1
  245. package/types/devvit/dev_portal/dev_portal.twirp-client.js +23 -0
  246. package/types/devvit/dev_portal/dev_portal.twirp.d.ts +9 -0
  247. package/types/devvit/dev_portal/dev_portal.twirp.d.ts.map +1 -1
  248. package/types/devvit/dev_portal/dev_portal.twirp.js +89 -0
  249. package/types/devvit/dev_portal/payments/payments_verification.d.ts +59 -0
  250. package/types/devvit/dev_portal/payments/payments_verification.d.ts.map +1 -0
  251. package/types/devvit/dev_portal/payments/payments_verification.js +163 -0
  252. package/types/devvit/reddit/custom_post/v1alpha/custom_post.d.ts +4 -0
  253. package/types/devvit/reddit/custom_post/v1alpha/custom_post.d.ts.map +1 -1
  254. package/types/devvit/ui/effects/web_view/v1alpha/fullscreen.d.ts +8 -1
  255. package/types/devvit/ui/effects/web_view/v1alpha/fullscreen.d.ts.map +1 -1
  256. package/types/devvit/ui/effects/web_view/v1alpha/fullscreen.js +15 -1
@@ -0,0 +1,4130 @@
1
+ // Copyright 2023 Buf Technologies, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ syntax = "proto3";
16
+
17
+ package buf.validate;
18
+
19
+ import "buf/validate/expression.proto";
20
+ import "buf/validate/priv/private.proto";
21
+ import "google/protobuf/descriptor.proto";
22
+ import "google/protobuf/duration.proto";
23
+ import "google/protobuf/timestamp.proto";
24
+
25
+ option go_package = "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate";
26
+ option java_multiple_files = true;
27
+ option java_outer_classname = "ValidateProto";
28
+ option java_package = "build.buf.validate";
29
+
30
+ // MessageOptions is an extension to google.protobuf.MessageOptions. It allows
31
+ // the addition of validation rules at the message level. These rules can be
32
+ // applied to incoming messages to ensure they meet certain criteria before
33
+ // being processed.
34
+ extend google.protobuf.MessageOptions {
35
+ // Rules specify the validations to be performed on this message. By default,
36
+ // no validation is performed against a message.
37
+ optional MessageConstraints message = 1159;
38
+ }
39
+
40
+ // OneofOptions is an extension to google.protobuf.OneofOptions. It allows
41
+ // the addition of validation rules on a oneof. These rules can be
42
+ // applied to incoming messages to ensure they meet certain criteria before
43
+ // being processed.
44
+ extend google.protobuf.OneofOptions {
45
+ // Rules specify the validations to be performed on this oneof. By default,
46
+ // no validation is performed against a oneof.
47
+ optional OneofConstraints oneof = 1159;
48
+ }
49
+
50
+ // FieldOptions is an extension to google.protobuf.FieldOptions. It allows
51
+ // the addition of validation rules at the field level. These rules can be
52
+ // applied to incoming messages to ensure they meet certain criteria before
53
+ // being processed.
54
+ extend google.protobuf.FieldOptions {
55
+ // Rules specify the validations to be performed on this field. By default,
56
+ // no validation is performed against a field.
57
+ optional FieldConstraints field = 1159;
58
+ }
59
+
60
+ // MessageConstraints represents validation rules that are applied to the entire message.
61
+ // It includes disabling options and a list of Constraint messages representing Common Expression Language (CEL) validation rules.
62
+ message MessageConstraints {
63
+ // `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
64
+ // This includes any fields within the message that would otherwise support validation.
65
+ //
66
+ // ```proto
67
+ // message MyMessage {
68
+ // // validation will be bypassed for this message
69
+ // option (buf.validate.message).disabled = true;
70
+ // }
71
+ // ```
72
+ optional bool disabled = 1;
73
+
74
+ // `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
75
+ // These constraints are written in Common Expression Language (CEL) syntax. For more information on
76
+ // CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
77
+ //
78
+ //
79
+ // ```proto
80
+ // message MyMessage {
81
+ // // The field `foo` must be greater than 42.
82
+ // option (buf.validate.message).cel = {
83
+ // id: "my_message.value",
84
+ // message: "value must be greater than 42",
85
+ // expression: "this.foo > 42",
86
+ // };
87
+ // optional int32 foo = 1;
88
+ // }
89
+ // ```
90
+ repeated Constraint cel = 3;
91
+ }
92
+
93
+ // The `OneofConstraints` message type enables you to manage constraints for
94
+ // oneof fields in your protobuf messages.
95
+ message OneofConstraints {
96
+ // If `required` is true, exactly one field of the oneof must be present. A
97
+ // validation error is returned if no fields in the oneof are present. The
98
+ // field itself may still be a default value; further constraints
99
+ // should be placed on the fields themselves to ensure they are valid values,
100
+ // such as `min_len` or `gt`.
101
+ //
102
+ // ```proto
103
+ // message MyMessage {
104
+ // oneof value {
105
+ // // Either `a` or `b` must be set. If `a` is set, it must also be
106
+ // // non-empty; whereas if `b` is set, it can still be an empty string.
107
+ // option (buf.validate.oneof).required = true;
108
+ // string a = 1 [(buf.validate.field).string.min_len = 1];
109
+ // string b = 2;
110
+ // }
111
+ // }
112
+ // ```
113
+ optional bool required = 1;
114
+ }
115
+
116
+ // FieldConstraints encapsulates the rules for each type of field. Depending on
117
+ // the field, the correct set should be used to ensure proper validations.
118
+ message FieldConstraints {
119
+ // `cel` is a repeated field used to represent a textual expression
120
+ // in the Common Expression Language (CEL) syntax. For more information on
121
+ // CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
122
+ //
123
+ // ```proto
124
+ // message MyMessage {
125
+ // // The field `value` must be greater than 42.
126
+ // optional int32 value = 1 [(buf.validate.field).cel = {
127
+ // id: "my_message.value",
128
+ // message: "value must be greater than 42",
129
+ // expression: "this > 42",
130
+ // }];
131
+ // }
132
+ // ```
133
+ repeated Constraint cel = 23;
134
+ // If `required` is true, the field must be populated. A populated field can be
135
+ // described as "serialized in the wire format," which includes:
136
+ //
137
+ // - the following "nullable" fields must be explicitly set to be considered populated:
138
+ // - singular message fields (whose fields may be unpopulated/default values)
139
+ // - member fields of a oneof (may be their default value)
140
+ // - proto3 optional fields (may be their default value)
141
+ // - proto2 scalar fields (both optional and required)
142
+ // - proto3 scalar fields must be non-zero to be considered populated
143
+ // - repeated and map fields must be non-empty to be considered populated
144
+ //
145
+ // ```proto
146
+ // message MyMessage {
147
+ // // The field `value` must be set to a non-null value.
148
+ // optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
149
+ // }
150
+ // ```
151
+ bool required = 25;
152
+ // Skip validation on the field if its value matches the specified criteria.
153
+ // See Ignore enum for details.
154
+ //
155
+ // ```proto
156
+ // message UpdateRequest {
157
+ // // The uri rule only applies if the field is populated and not an empty
158
+ // // string.
159
+ // optional string url = 1 [
160
+ // (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE,
161
+ // (buf.validate.field).string.uri = true,
162
+ // ];
163
+ // }
164
+ // ```
165
+ Ignore ignore = 27;
166
+
167
+ oneof type {
168
+ // Scalar Field Types
169
+ FloatRules float = 1;
170
+ DoubleRules double = 2;
171
+ Int32Rules int32 = 3;
172
+ Int64Rules int64 = 4;
173
+ UInt32Rules uint32 = 5;
174
+ UInt64Rules uint64 = 6;
175
+ SInt32Rules sint32 = 7;
176
+ SInt64Rules sint64 = 8;
177
+ Fixed32Rules fixed32 = 9;
178
+ Fixed64Rules fixed64 = 10;
179
+ SFixed32Rules sfixed32 = 11;
180
+ SFixed64Rules sfixed64 = 12;
181
+ BoolRules bool = 13;
182
+ StringRules string = 14;
183
+ BytesRules bytes = 15;
184
+
185
+ // Complex Field Types
186
+ EnumRules enum = 16;
187
+ RepeatedRules repeated = 18;
188
+ MapRules map = 19;
189
+
190
+ // Well-Known Field Types
191
+ AnyRules any = 20;
192
+ DurationRules duration = 21;
193
+ TimestampRules timestamp = 22;
194
+ }
195
+
196
+ // DEPRECATED: use ignore=IGNORE_ALWAYS instead. TODO: remove this field pre-v1.
197
+ bool skipped = 24 [deprecated = true];
198
+ // DEPRECATED: use ignore=IGNORE_IF_UNPOPULATED instead. TODO: remove this field pre-v1.
199
+ bool ignore_empty = 26 [deprecated = true];
200
+ }
201
+
202
+ // Specifies how FieldConstraints.ignore behaves. See the documentation for
203
+ // FieldConstraints.required for definitions of "populated" and "nullable".
204
+ enum Ignore {
205
+ // buf:lint:ignore ENUM_NO_ALLOW_ALIAS // allowance for deprecations. TODO: remove pre-v1.
206
+ option allow_alias = true;
207
+ // Validation is only skipped if it's an unpopulated nullable fields.
208
+ //
209
+ // ```proto
210
+ // syntax="proto3";
211
+ //
212
+ // message Request {
213
+ // // The uri rule applies to any value, including the empty string.
214
+ // string foo = 1 [
215
+ // (buf.validate.field).string.uri = true
216
+ // ];
217
+ //
218
+ // // The uri rule only applies if the field is set, including if it's
219
+ // // set to the empty string.
220
+ // optional string bar = 2 [
221
+ // (buf.validate.field).string.uri = true
222
+ // ];
223
+ //
224
+ // // The min_items rule always applies, even if the list is empty.
225
+ // repeated string baz = 3 [
226
+ // (buf.validate.field).repeated.min_items = 3
227
+ // ];
228
+ //
229
+ // // The custom CEL rule applies only if the field is set, including if
230
+ // // it's the "zero" value of that message.
231
+ // SomeMessage quux = 4 [
232
+ // (buf.validate.field).cel = {/* ... */}
233
+ // ];
234
+ // }
235
+ // ```
236
+ IGNORE_UNSPECIFIED = 0;
237
+
238
+ // Validation is skipped if the field is unpopulated. This rule is redundant
239
+ // if the field is already nullable. This value is equivalent behavior to the
240
+ // deprecated ignore_empty rule.
241
+ //
242
+ // ```proto
243
+ // syntax="proto3
244
+ //
245
+ // message Request {
246
+ // // The uri rule applies only if the value is not the empty string.
247
+ // string foo = 1 [
248
+ // (buf.validate.field).string.uri = true,
249
+ // (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
250
+ // ];
251
+ //
252
+ // // IGNORE_IF_UNPOPULATED is equivalent to IGNORE_UNSPECIFIED in this
253
+ // // case: the uri rule only applies if the field is set, including if
254
+ // // it's set to the empty string.
255
+ // optional string bar = 2 [
256
+ // (buf.validate.field).string.uri = true,
257
+ // (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
258
+ // ];
259
+ //
260
+ // // The min_items rule only applies if the list has at least one item.
261
+ // repeated string baz = 3 [
262
+ // (buf.validate.field).repeated.min_items = 3,
263
+ // (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
264
+ // ];
265
+ //
266
+ // // IGNORE_IF_UNPOPULATED is equivalent to IGNORE_UNSPECIFIED in this
267
+ // // case: the custom CEL rule applies only if the field is set, including
268
+ // // if it's the "zero" value of that message.
269
+ // SomeMessage quux = 4 [
270
+ // (buf.validate.field).cel = {/* ... */},
271
+ // (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
272
+ // ];
273
+ // }
274
+ // ```
275
+ IGNORE_IF_UNPOPULATED = 1;
276
+
277
+ // Validation is skipped if the field is unpopulated or if it is a nullable
278
+ // field populated with its default value. This is typically the zero or
279
+ // empty value, but proto2 scalars support custom defaults. For messages, the
280
+ // default is a non-null message with all its fields unpopulated.
281
+ //
282
+ // ```proto
283
+ // syntax="proto3
284
+ //
285
+ // message Request {
286
+ // // IGNORE_IF_DEFAULT_VALUE is equivalent to IGNORE_IF_UNPOPULATED in
287
+ // // this case; the uri rule applies only if the value is not the empty
288
+ // // string.
289
+ // string foo = 1 [
290
+ // (buf.validate.field).string.uri = true,
291
+ // (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
292
+ // ];
293
+ //
294
+ // // The uri rule only applies if the field is set to a value other than
295
+ // // the empty string.
296
+ // optional string bar = 2 [
297
+ // (buf.validate.field).string.uri = true,
298
+ // (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
299
+ // ];
300
+ //
301
+ // // IGNORE_IF_DEFAULT_VALUE is equivalent to IGNORE_IF_UNPOPULATED in
302
+ // // this case; the min_items rule only applies if the list has at least
303
+ // // one item.
304
+ // repeated string baz = 3 [
305
+ // (buf.validate.field).repeated.min_items = 3,
306
+ // (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
307
+ // ];
308
+ //
309
+ // // The custom CEL rule only applies if the field is set to a value other
310
+ // // than an empty message (i.e., fields are unpopulated).
311
+ // SomeMessage quux = 4 [
312
+ // (buf.validate.field).cel = {/* ... */},
313
+ // (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
314
+ // ];
315
+ // }
316
+ // ```
317
+ //
318
+ // This rule is affected by proto2 custom default values:
319
+ //
320
+ // ```proto
321
+ // syntax="proto2";
322
+ //
323
+ // message Request {
324
+ // // The gt rule only applies if the field is set and it's value is not
325
+ // the default (i.e., not -42). The rule even applies if the field is set
326
+ // to zero since the default value differs.
327
+ // optional int32 value = 1 [
328
+ // default = -42,
329
+ // (buf.validate.field).int32.gt = 0,
330
+ // (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
331
+ // ];
332
+ // }
333
+ IGNORE_IF_DEFAULT_VALUE = 2;
334
+
335
+ // The validation rules of this field will be skipped and not evaluated. This
336
+ // is useful for situations that necessitate turning off the rules of a field
337
+ // containing a message that may not make sense in the current context, or to
338
+ // temporarily disable constraints during development.
339
+ //
340
+ // ```proto
341
+ // message MyMessage {
342
+ // // The field's rules will always be ignored, including any validation's
343
+ // // on value's fields.
344
+ // MyOtherMessage value = 1 [
345
+ // (buf.validate.field).ignore = IGNORE_ALWAYS];
346
+ // }
347
+ // ```
348
+ IGNORE_ALWAYS = 3;
349
+
350
+ // Deprecated: Use IGNORE_IF_UNPOPULATED instead. TODO: Remove this value pre-v1.
351
+ IGNORE_EMPTY = 1 [deprecated = true];
352
+ // Deprecated: Use IGNORE_IF_DEFAULT_VALUE. TODO: Remove this value pre-v1.
353
+ IGNORE_DEFAULT = 2 [deprecated = true];
354
+ }
355
+
356
+ // FloatRules describes the constraints applied to `float` values. These
357
+ // rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
358
+ message FloatRules {
359
+ // `const` requires the field value to exactly match the specified value. If
360
+ // the field value doesn't match, an error message is generated.
361
+ //
362
+ // ```proto
363
+ // message MyFloat {
364
+ // // value must equal 42.0
365
+ // float value = 1 [(buf.validate.field).float.const = 42.0];
366
+ // }
367
+ // ```
368
+ optional float const = 1 [(priv.field).cel = {
369
+ id: "float.const"
370
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
371
+ }];
372
+
373
+ oneof less_than {
374
+ // `lt` requires the field value to be less than the specified value (field <
375
+ // value). If the field value is equal to or greater than the specified value,
376
+ // an error message is generated.
377
+ //
378
+ // ```proto
379
+ // message MyFloat {
380
+ // // value must be less than 10.0
381
+ // float value = 1 [(buf.validate.field).float.lt = 10.0];
382
+ // }
383
+ // ```
384
+ float lt = 2 [(priv.field).cel = {
385
+ id: "float.lt"
386
+ expression:
387
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)"
388
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
389
+ }];
390
+
391
+ // `lte` requires the field value to be less than or equal to the specified
392
+ // value (field <= value). If the field value is greater than the specified
393
+ // value, an error message is generated.
394
+ //
395
+ // ```proto
396
+ // message MyFloat {
397
+ // // value must be less than or equal to 10.0
398
+ // float value = 1 [(buf.validate.field).float.lte = 10.0];
399
+ // }
400
+ // ```
401
+ float lte = 3 [(priv.field).cel = {
402
+ id: "float.lte"
403
+ expression:
404
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)"
405
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
406
+ }];
407
+ }
408
+
409
+ oneof greater_than {
410
+ // `gt` requires the field value to be greater than the specified value
411
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
412
+ // `lte`, the range is reversed, and the field value must be outside the
413
+ // specified range. If the field value doesn't meet the required conditions,
414
+ // an error message is generated.
415
+ //
416
+ // ```proto
417
+ // message MyFloat {
418
+ // // value must be greater than 5.0 [float.gt]
419
+ // float value = 1 [(buf.validate.field).float.gt = 5.0];
420
+ //
421
+ // // value must be greater than 5 and less than 10.0 [float.gt_lt]
422
+ // float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
423
+ //
424
+ // // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
425
+ // float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
426
+ // }
427
+ // ```
428
+ float gt = 4 [
429
+ (priv.field).cel = {
430
+ id: "float.gt"
431
+ expression:
432
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)"
433
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
434
+ },
435
+ (priv.field).cel = {
436
+ id: "float.gt_lt"
437
+ expression:
438
+ "has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)"
439
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
440
+ },
441
+ (priv.field).cel = {
442
+ id: "float.gt_lt_exclusive"
443
+ expression:
444
+ "has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))"
445
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
446
+ },
447
+ (priv.field).cel = {
448
+ id: "float.gt_lte"
449
+ expression:
450
+ "has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)"
451
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
452
+ },
453
+ (priv.field).cel = {
454
+ id: "float.gt_lte_exclusive"
455
+ expression:
456
+ "has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))"
457
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
458
+ }
459
+ ];
460
+
461
+ // `gte` requires the field value to be greater than or equal to the specified
462
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
463
+ // or `lte`, the range is reversed, and the field value must be outside the
464
+ // specified range. If the field value doesn't meet the required conditions,
465
+ // an error message is generated.
466
+ //
467
+ // ```proto
468
+ // message MyFloat {
469
+ // // value must be greater than or equal to 5.0 [float.gte]
470
+ // float value = 1 [(buf.validate.field).float.gte = 5.0];
471
+ //
472
+ // // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
473
+ // float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
474
+ //
475
+ // // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
476
+ // float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
477
+ // }
478
+ // ```
479
+ float gte = 5 [
480
+ (priv.field).cel = {
481
+ id: "float.gte"
482
+ expression:
483
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)"
484
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
485
+ },
486
+ (priv.field).cel = {
487
+ id: "float.gte_lt"
488
+ expression:
489
+ "has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)"
490
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
491
+ },
492
+ (priv.field).cel = {
493
+ id: "float.gte_lt_exclusive"
494
+ expression:
495
+ "has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))"
496
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
497
+ },
498
+ (priv.field).cel = {
499
+ id: "float.gte_lte"
500
+ expression:
501
+ "has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)"
502
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
503
+ },
504
+ (priv.field).cel = {
505
+ id: "float.gte_lte_exclusive"
506
+ expression:
507
+ "has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))"
508
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
509
+ }
510
+ ];
511
+ }
512
+
513
+ // `in` requires the field value to be equal to one of the specified values.
514
+ // If the field value isn't one of the specified values, an error message
515
+ // is generated.
516
+ //
517
+ // ```proto
518
+ // message MyFloat {
519
+ // // value must be in list [1.0, 2.0, 3.0]
520
+ // repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
521
+ // }
522
+ // ```
523
+ repeated float in = 6 [(priv.field).cel = {
524
+ id: "float.in"
525
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
526
+ }];
527
+
528
+ // `in` requires the field value to not be equal to any of the specified
529
+ // values. If the field value is one of the specified values, an error
530
+ // message is generated.
531
+ //
532
+ // ```proto
533
+ // message MyFloat {
534
+ // // value must not be in list [1.0, 2.0, 3.0]
535
+ // repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
536
+ // }
537
+ // ```
538
+ repeated float not_in = 7 [(priv.field).cel = {
539
+ id: "float.not_in"
540
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
541
+ }];
542
+
543
+ // `finite` requires the field value to be finite. If the field value is
544
+ // infinite or NaN, an error message is generated.
545
+ bool finite = 8 [(priv.field).cel = {
546
+ id: "float.finite"
547
+ expression: "this.isNan() || this.isInf() ? 'value must be finite' : ''"
548
+ }];
549
+ }
550
+
551
+ // DoubleRules describes the constraints applied to `double` values. These
552
+ // rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
553
+ message DoubleRules {
554
+ // `const` requires the field value to exactly match the specified value. If
555
+ // the field value doesn't match, an error message is generated.
556
+ //
557
+ // ```proto
558
+ // message MyDouble {
559
+ // // value must equal 42.0
560
+ // double value = 1 [(buf.validate.field).double.const = 42.0];
561
+ // }
562
+ // ```
563
+ optional double const = 1 [(priv.field).cel = {
564
+ id: "double.const"
565
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
566
+ }];
567
+ oneof less_than {
568
+ // `lt` requires the field value to be less than the specified value (field <
569
+ // value). If the field value is equal to or greater than the specified
570
+ // value, an error message is generated.
571
+ //
572
+ // ```proto
573
+ // message MyDouble {
574
+ // // value must be less than 10.0
575
+ // double value = 1 [(buf.validate.field).double.lt = 10.0];
576
+ // }
577
+ // ```
578
+ double lt = 2 [(priv.field).cel = {
579
+ id: "double.lt"
580
+ expression:
581
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)"
582
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
583
+ }];
584
+
585
+ // `lte` requires the field value to be less than or equal to the specified value
586
+ // (field <= value). If the field value is greater than the specified value,
587
+ // an error message is generated.
588
+ //
589
+ // ```proto
590
+ // message MyDouble {
591
+ // // value must be less than or equal to 10.0
592
+ // double value = 1 [(buf.validate.field).double.lte = 10.0];
593
+ // }
594
+ // ```
595
+ double lte = 3 [(priv.field).cel = {
596
+ id: "double.lte"
597
+ expression:
598
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)"
599
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
600
+ }];
601
+ }
602
+ oneof greater_than {
603
+ // `gt` requires the field value to be greater than the specified value
604
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
605
+ // the range is reversed, and the field value must be outside the specified
606
+ // range. If the field value doesn't meet the required conditions, an error
607
+ // message is generated.
608
+ //
609
+ // ```proto
610
+ // message MyDouble {
611
+ // // value must be greater than 5.0 [double.gt]
612
+ // double value = 1 [(buf.validate.field).double.gt = 5.0];
613
+ //
614
+ // // value must be greater than 5 and less than 10.0 [double.gt_lt]
615
+ // double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
616
+ //
617
+ // // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
618
+ // double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
619
+ // }
620
+ // ```
621
+ double gt = 4 [
622
+ (priv.field).cel = {
623
+ id: "double.gt"
624
+ expression:
625
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)"
626
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
627
+ },
628
+ (priv.field).cel = {
629
+ id: "double.gt_lt"
630
+ expression:
631
+ "has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)"
632
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
633
+ },
634
+ (priv.field).cel = {
635
+ id: "double.gt_lt_exclusive"
636
+ expression:
637
+ "has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))"
638
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
639
+ },
640
+ (priv.field).cel = {
641
+ id: "double.gt_lte"
642
+ expression:
643
+ "has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)"
644
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
645
+ },
646
+ (priv.field).cel = {
647
+ id: "double.gt_lte_exclusive"
648
+ expression:
649
+ "has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))"
650
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
651
+ }
652
+ ];
653
+
654
+ // `gte` requires the field value to be greater than or equal to the specified
655
+ // value (exclusive). If the value of `gte` is larger than a specified `lt` or
656
+ // `lte`, the range is reversed, and the field value must be outside the
657
+ // specified range. If the field value doesn't meet the required conditions,
658
+ // an error message is generated.
659
+ //
660
+ // ```proto
661
+ // message MyDouble {
662
+ // // value must be greater than or equal to 5.0 [double.gte]
663
+ // double value = 1 [(buf.validate.field).double.gte = 5.0];
664
+ //
665
+ // // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
666
+ // double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
667
+ //
668
+ // // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
669
+ // double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
670
+ // }
671
+ // ```
672
+ double gte = 5 [
673
+ (priv.field).cel = {
674
+ id: "double.gte"
675
+ expression:
676
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)"
677
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
678
+ },
679
+ (priv.field).cel = {
680
+ id: "double.gte_lt"
681
+ expression:
682
+ "has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)"
683
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
684
+ },
685
+ (priv.field).cel = {
686
+ id: "double.gte_lt_exclusive"
687
+ expression:
688
+ "has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))"
689
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
690
+ },
691
+ (priv.field).cel = {
692
+ id: "double.gte_lte"
693
+ expression:
694
+ "has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)"
695
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
696
+ },
697
+ (priv.field).cel = {
698
+ id: "double.gte_lte_exclusive"
699
+ expression:
700
+ "has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))"
701
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
702
+ }
703
+ ];
704
+ }
705
+ // `in` requires the field value to be equal to one of the specified values.
706
+ // If the field value isn't one of the specified values, an error message is
707
+ // generated.
708
+ //
709
+ // ```proto
710
+ // message MyDouble {
711
+ // // value must be in list [1.0, 2.0, 3.0]
712
+ // repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
713
+ // }
714
+ // ```
715
+ repeated double in = 6 [(priv.field).cel = {
716
+ id: "double.in"
717
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
718
+ }];
719
+
720
+ // `not_in` requires the field value to not be equal to any of the specified
721
+ // values. If the field value is one of the specified values, an error
722
+ // message is generated.
723
+ //
724
+ // ```proto
725
+ // message MyDouble {
726
+ // // value must not be in list [1.0, 2.0, 3.0]
727
+ // repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
728
+ // }
729
+ // ```
730
+ repeated double not_in = 7 [(priv.field).cel = {
731
+ id: "double.not_in"
732
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
733
+ }];
734
+
735
+ // `finite` requires the field value to be finite. If the field value is
736
+ // infinite or NaN, an error message is generated.
737
+ bool finite = 8 [(priv.field).cel = {
738
+ id: "double.finite"
739
+ expression: "this.isNan() || this.isInf() ? 'value must be finite' : ''"
740
+ }];
741
+ }
742
+
743
+ // Int32Rules describes the constraints applied to `int32` values. These
744
+ // rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
745
+ message Int32Rules {
746
+ // `const` requires the field value to exactly match the specified value. If
747
+ // the field value doesn't match, an error message is generated.
748
+ //
749
+ // ```proto
750
+ // message MyInt32 {
751
+ // // value must equal 42
752
+ // int32 value = 1 [(buf.validate.field).int32.const = 42];
753
+ // }
754
+ // ```
755
+ optional int32 const = 1 [(priv.field).cel = {
756
+ id: "int32.const"
757
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
758
+ }];
759
+ oneof less_than {
760
+ // `lt` requires the field value to be less than the specified value (field
761
+ // < value). If the field value is equal to or greater than the specified
762
+ // value, an error message is generated.
763
+ //
764
+ // ```proto
765
+ // message MyInt32 {
766
+ // // value must be less than 10
767
+ // int32 value = 1 [(buf.validate.field).int32.lt = 10];
768
+ // }
769
+ // ```
770
+ int32 lt = 2 [(priv.field).cel = {
771
+ id: "int32.lt"
772
+ expression:
773
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
774
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
775
+ }];
776
+
777
+ // `lte` requires the field value to be less than or equal to the specified
778
+ // value (field <= value). If the field value is greater than the specified
779
+ // value, an error message is generated.
780
+ //
781
+ // ```proto
782
+ // message MyInt32 {
783
+ // // value must be less than or equal to 10
784
+ // int32 value = 1 [(buf.validate.field).int32.lte = 10];
785
+ // }
786
+ // ```
787
+ int32 lte = 3 [(priv.field).cel = {
788
+ id: "int32.lte"
789
+ expression:
790
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
791
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
792
+ }];
793
+ }
794
+ oneof greater_than {
795
+ // `gt` requires the field value to be greater than the specified value
796
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
797
+ // `lte`, the range is reversed, and the field value must be outside the
798
+ // specified range. If the field value doesn't meet the required conditions,
799
+ // an error message is generated.
800
+ //
801
+ // ```proto
802
+ // message MyInt32 {
803
+ // // value must be greater than 5 [int32.gt]
804
+ // int32 value = 1 [(buf.validate.field).int32.gt = 5];
805
+ //
806
+ // // value must be greater than 5 and less than 10 [int32.gt_lt]
807
+ // int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
808
+ //
809
+ // // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
810
+ // int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
811
+ // }
812
+ // ```
813
+ int32 gt = 4 [
814
+ (priv.field).cel = {
815
+ id: "int32.gt"
816
+ expression:
817
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
818
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
819
+ },
820
+ (priv.field).cel = {
821
+ id: "int32.gt_lt"
822
+ expression:
823
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
824
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
825
+ },
826
+ (priv.field).cel = {
827
+ id: "int32.gt_lt_exclusive"
828
+ expression:
829
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
830
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
831
+ },
832
+ (priv.field).cel = {
833
+ id: "int32.gt_lte"
834
+ expression:
835
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
836
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
837
+ },
838
+ (priv.field).cel = {
839
+ id: "int32.gt_lte_exclusive"
840
+ expression:
841
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
842
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
843
+ }
844
+ ];
845
+
846
+ // `gte` requires the field value to be greater than or equal to the specified value
847
+ // (exclusive). If the value of `gte` is larger than a specified `lt` or
848
+ // `lte`, the range is reversed, and the field value must be outside the
849
+ // specified range. If the field value doesn't meet the required conditions,
850
+ // an error message is generated.
851
+ //
852
+ // ```proto
853
+ // message MyInt32 {
854
+ // // value must be greater than or equal to 5 [int32.gte]
855
+ // int32 value = 1 [(buf.validate.field).int32.gte = 5];
856
+ //
857
+ // // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
858
+ // int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
859
+ //
860
+ // // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
861
+ // int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
862
+ // }
863
+ // ```
864
+ int32 gte = 5 [
865
+ (priv.field).cel = {
866
+ id: "int32.gte"
867
+ expression:
868
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
869
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
870
+ },
871
+ (priv.field).cel = {
872
+ id: "int32.gte_lt"
873
+ expression:
874
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
875
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
876
+ },
877
+ (priv.field).cel = {
878
+ id: "int32.gte_lt_exclusive"
879
+ expression:
880
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
881
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
882
+ },
883
+ (priv.field).cel = {
884
+ id: "int32.gte_lte"
885
+ expression:
886
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
887
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
888
+ },
889
+ (priv.field).cel = {
890
+ id: "int32.gte_lte_exclusive"
891
+ expression:
892
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
893
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
894
+ }
895
+ ];
896
+ }
897
+
898
+ // `in` requires the field value to be equal to one of the specified values.
899
+ // If the field value isn't one of the specified values, an error message is
900
+ // generated.
901
+ //
902
+ // ```proto
903
+ // message MyInt32 {
904
+ // // value must be in list [1, 2, 3]
905
+ // repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
906
+ // }
907
+ // ```
908
+ repeated int32 in = 6 [(priv.field).cel = {
909
+ id: "int32.in"
910
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
911
+ }];
912
+
913
+ // `not_in` requires the field value to not be equal to any of the specified
914
+ // values. If the field value is one of the specified values, an error message
915
+ // is generated.
916
+ //
917
+ // ```proto
918
+ // message MyInt32 {
919
+ // // value must not be in list [1, 2, 3]
920
+ // repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
921
+ // }
922
+ // ```
923
+ repeated int32 not_in = 7 [(priv.field).cel = {
924
+ id: "int32.not_in"
925
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
926
+ }];
927
+ }
928
+
929
+ // Int64Rules describes the constraints applied to `int64` values. These
930
+ // rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
931
+ message Int64Rules {
932
+ // `const` requires the field value to exactly match the specified value. If
933
+ // the field value doesn't match, an error message is generated.
934
+ //
935
+ // ```proto
936
+ // message MyInt64 {
937
+ // // value must equal 42
938
+ // int64 value = 1 [(buf.validate.field).int64.const = 42];
939
+ // }
940
+ // ```
941
+ optional int64 const = 1 [(priv.field).cel = {
942
+ id: "int64.const"
943
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
944
+ }];
945
+ oneof less_than {
946
+ // `lt` requires the field value to be less than the specified value (field <
947
+ // value). If the field value is equal to or greater than the specified value,
948
+ // an error message is generated.
949
+ //
950
+ // ```proto
951
+ // message MyInt64 {
952
+ // // value must be less than 10
953
+ // int64 value = 1 [(buf.validate.field).int64.lt = 10];
954
+ // }
955
+ // ```
956
+ int64 lt = 2 [(priv.field).cel = {
957
+ id: "int64.lt"
958
+ expression:
959
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
960
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
961
+ }];
962
+
963
+ // `lte` requires the field value to be less than or equal to the specified
964
+ // value (field <= value). If the field value is greater than the specified
965
+ // value, an error message is generated.
966
+ //
967
+ // ```proto
968
+ // message MyInt64 {
969
+ // // value must be less than or equal to 10
970
+ // int64 value = 1 [(buf.validate.field).int64.lte = 10];
971
+ // }
972
+ // ```
973
+ int64 lte = 3 [(priv.field).cel = {
974
+ id: "int64.lte"
975
+ expression:
976
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
977
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
978
+ }];
979
+ }
980
+ oneof greater_than {
981
+ // `gt` requires the field value to be greater than the specified value
982
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
983
+ // `lte`, the range is reversed, and the field value must be outside the
984
+ // specified range. If the field value doesn't meet the required conditions,
985
+ // an error message is generated.
986
+ //
987
+ // ```proto
988
+ // message MyInt64 {
989
+ // // value must be greater than 5 [int64.gt]
990
+ // int64 value = 1 [(buf.validate.field).int64.gt = 5];
991
+ //
992
+ // // value must be greater than 5 and less than 10 [int64.gt_lt]
993
+ // int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
994
+ //
995
+ // // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
996
+ // int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
997
+ // }
998
+ // ```
999
+ int64 gt = 4 [
1000
+ (priv.field).cel = {
1001
+ id: "int64.gt"
1002
+ expression:
1003
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
1004
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
1005
+ },
1006
+ (priv.field).cel = {
1007
+ id: "int64.gt_lt"
1008
+ expression:
1009
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
1010
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
1011
+ },
1012
+ (priv.field).cel = {
1013
+ id: "int64.gt_lt_exclusive"
1014
+ expression:
1015
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
1016
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
1017
+ },
1018
+ (priv.field).cel = {
1019
+ id: "int64.gt_lte"
1020
+ expression:
1021
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
1022
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1023
+ },
1024
+ (priv.field).cel = {
1025
+ id: "int64.gt_lte_exclusive"
1026
+ expression:
1027
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
1028
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1029
+ }
1030
+ ];
1031
+
1032
+ // `gte` requires the field value to be greater than or equal to the specified
1033
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
1034
+ // or `lte`, the range is reversed, and the field value must be outside the
1035
+ // specified range. If the field value doesn't meet the required conditions,
1036
+ // an error message is generated.
1037
+ //
1038
+ // ```proto
1039
+ // message MyInt64 {
1040
+ // // value must be greater than or equal to 5 [int64.gte]
1041
+ // int64 value = 1 [(buf.validate.field).int64.gte = 5];
1042
+ //
1043
+ // // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
1044
+ // int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
1045
+ //
1046
+ // // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
1047
+ // int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
1048
+ // }
1049
+ // ```
1050
+ int64 gte = 5 [
1051
+ (priv.field).cel = {
1052
+ id: "int64.gte"
1053
+ expression:
1054
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
1055
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
1056
+ },
1057
+ (priv.field).cel = {
1058
+ id: "int64.gte_lt"
1059
+ expression:
1060
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
1061
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
1062
+ },
1063
+ (priv.field).cel = {
1064
+ id: "int64.gte_lt_exclusive"
1065
+ expression:
1066
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
1067
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
1068
+ },
1069
+ (priv.field).cel = {
1070
+ id: "int64.gte_lte"
1071
+ expression:
1072
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
1073
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1074
+ },
1075
+ (priv.field).cel = {
1076
+ id: "int64.gte_lte_exclusive"
1077
+ expression:
1078
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
1079
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1080
+ }
1081
+ ];
1082
+ }
1083
+
1084
+ // `in` requires the field value to be equal to one of the specified values.
1085
+ // If the field value isn't one of the specified values, an error message is
1086
+ // generated.
1087
+ //
1088
+ // ```proto
1089
+ // message MyInt64 {
1090
+ // // value must be in list [1, 2, 3]
1091
+ // repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
1092
+ // }
1093
+ // ```
1094
+ repeated int64 in = 6 [(priv.field).cel = {
1095
+ id: "int64.in"
1096
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
1097
+ }];
1098
+
1099
+ // `not_in` requires the field value to not be equal to any of the specified
1100
+ // values. If the field value is one of the specified values, an error
1101
+ // message is generated.
1102
+ //
1103
+ // ```proto
1104
+ // message MyInt64 {
1105
+ // // value must not be in list [1, 2, 3]
1106
+ // repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
1107
+ // }
1108
+ // ```
1109
+ repeated int64 not_in = 7 [(priv.field).cel = {
1110
+ id: "int64.not_in"
1111
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
1112
+ }];
1113
+ }
1114
+
1115
+ // UInt32Rules describes the constraints applied to `uint32` values. These
1116
+ // rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
1117
+ message UInt32Rules {
1118
+ // `const` requires the field value to exactly match the specified value. If
1119
+ // the field value doesn't match, an error message is generated.
1120
+ //
1121
+ // ```proto
1122
+ // message MyUInt32 {
1123
+ // // value must equal 42
1124
+ // uint32 value = 1 [(buf.validate.field).uint32.const = 42];
1125
+ // }
1126
+ // ```
1127
+ optional uint32 const = 1 [(priv.field).cel = {
1128
+ id: "uint32.const"
1129
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
1130
+ }];
1131
+ oneof less_than {
1132
+ // `lt` requires the field value to be less than the specified value (field <
1133
+ // value). If the field value is equal to or greater than the specified value,
1134
+ // an error message is generated.
1135
+ //
1136
+ // ```proto
1137
+ // message MyUInt32 {
1138
+ // // value must be less than 10
1139
+ // uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
1140
+ // }
1141
+ // ```
1142
+ uint32 lt = 2 [(priv.field).cel = {
1143
+ id: "uint32.lt"
1144
+ expression:
1145
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
1146
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
1147
+ }];
1148
+
1149
+ // `lte` requires the field value to be less than or equal to the specified
1150
+ // value (field <= value). If the field value is greater than the specified
1151
+ // value, an error message is generated.
1152
+ //
1153
+ // ```proto
1154
+ // message MyUInt32 {
1155
+ // // value must be less than or equal to 10
1156
+ // uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
1157
+ // }
1158
+ // ```
1159
+ uint32 lte = 3 [(priv.field).cel = {
1160
+ id: "uint32.lte"
1161
+ expression:
1162
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
1163
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
1164
+ }];
1165
+ }
1166
+ oneof greater_than {
1167
+ // `gt` requires the field value to be greater than the specified value
1168
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
1169
+ // `lte`, the range is reversed, and the field value must be outside the
1170
+ // specified range. If the field value doesn't meet the required conditions,
1171
+ // an error message is generated.
1172
+ //
1173
+ // ```proto
1174
+ // message MyUInt32 {
1175
+ // // value must be greater than 5 [uint32.gt]
1176
+ // uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
1177
+ //
1178
+ // // value must be greater than 5 and less than 10 [uint32.gt_lt]
1179
+ // uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
1180
+ //
1181
+ // // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
1182
+ // uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
1183
+ // }
1184
+ // ```
1185
+ uint32 gt = 4 [
1186
+ (priv.field).cel = {
1187
+ id: "uint32.gt"
1188
+ expression:
1189
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
1190
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
1191
+ },
1192
+ (priv.field).cel = {
1193
+ id: "uint32.gt_lt"
1194
+ expression:
1195
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
1196
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
1197
+ },
1198
+ (priv.field).cel = {
1199
+ id: "uint32.gt_lt_exclusive"
1200
+ expression:
1201
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
1202
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
1203
+ },
1204
+ (priv.field).cel = {
1205
+ id: "uint32.gt_lte"
1206
+ expression:
1207
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
1208
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1209
+ },
1210
+ (priv.field).cel = {
1211
+ id: "uint32.gt_lte_exclusive"
1212
+ expression:
1213
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
1214
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1215
+ }
1216
+ ];
1217
+
1218
+ // `gte` requires the field value to be greater than or equal to the specified
1219
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
1220
+ // or `lte`, the range is reversed, and the field value must be outside the
1221
+ // specified range. If the field value doesn't meet the required conditions,
1222
+ // an error message is generated.
1223
+ //
1224
+ // ```proto
1225
+ // message MyUInt32 {
1226
+ // // value must be greater than or equal to 5 [uint32.gte]
1227
+ // uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
1228
+ //
1229
+ // // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
1230
+ // uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
1231
+ //
1232
+ // // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
1233
+ // uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
1234
+ // }
1235
+ // ```
1236
+ uint32 gte = 5 [
1237
+ (priv.field).cel = {
1238
+ id: "uint32.gte"
1239
+ expression:
1240
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
1241
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
1242
+ },
1243
+ (priv.field).cel = {
1244
+ id: "uint32.gte_lt"
1245
+ expression:
1246
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
1247
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
1248
+ },
1249
+ (priv.field).cel = {
1250
+ id: "uint32.gte_lt_exclusive"
1251
+ expression:
1252
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
1253
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
1254
+ },
1255
+ (priv.field).cel = {
1256
+ id: "uint32.gte_lte"
1257
+ expression:
1258
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
1259
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1260
+ },
1261
+ (priv.field).cel = {
1262
+ id: "uint32.gte_lte_exclusive"
1263
+ expression:
1264
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
1265
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1266
+ }
1267
+ ];
1268
+ }
1269
+
1270
+ // `in` requires the field value to be equal to one of the specified values.
1271
+ // If the field value isn't one of the specified values, an error message is
1272
+ // generated.
1273
+ //
1274
+ // ```proto
1275
+ // message MyUInt32 {
1276
+ // // value must be in list [1, 2, 3]
1277
+ // repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
1278
+ // }
1279
+ // ```
1280
+ repeated uint32 in = 6 [(priv.field).cel = {
1281
+ id: "uint32.in"
1282
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
1283
+ }];
1284
+
1285
+ // `not_in` requires the field value to not be equal to any of the specified
1286
+ // values. If the field value is one of the specified values, an error
1287
+ // message is generated.
1288
+ //
1289
+ // ```proto
1290
+ // message MyUInt32 {
1291
+ // // value must not be in list [1, 2, 3]
1292
+ // repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
1293
+ // }
1294
+ // ```
1295
+ repeated uint32 not_in = 7 [(priv.field).cel = {
1296
+ id: "uint32.not_in"
1297
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
1298
+ }];
1299
+ }
1300
+
1301
+ // UInt64Rules describes the constraints applied to `uint64` values. These
1302
+ // rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
1303
+ message UInt64Rules {
1304
+ // `const` requires the field value to exactly match the specified value. If
1305
+ // the field value doesn't match, an error message is generated.
1306
+ //
1307
+ // ```proto
1308
+ // message MyUInt64 {
1309
+ // // value must equal 42
1310
+ // uint64 value = 1 [(buf.validate.field).uint64.const = 42];
1311
+ // }
1312
+ // ```
1313
+ optional uint64 const = 1 [(priv.field).cel = {
1314
+ id: "uint64.const"
1315
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
1316
+ }];
1317
+ oneof less_than {
1318
+ // `lt` requires the field value to be less than the specified value (field <
1319
+ // value). If the field value is equal to or greater than the specified value,
1320
+ // an error message is generated.
1321
+ //
1322
+ // ```proto
1323
+ // message MyUInt64 {
1324
+ // // value must be less than 10
1325
+ // uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
1326
+ // }
1327
+ // ```
1328
+ uint64 lt = 2 [(priv.field).cel = {
1329
+ id: "uint64.lt"
1330
+ expression:
1331
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
1332
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
1333
+ }];
1334
+
1335
+ // `lte` requires the field value to be less than or equal to the specified
1336
+ // value (field <= value). If the field value is greater than the specified
1337
+ // value, an error message is generated.
1338
+ //
1339
+ // ```proto
1340
+ // message MyUInt64 {
1341
+ // // value must be less than or equal to 10
1342
+ // uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
1343
+ // }
1344
+ // ```
1345
+ uint64 lte = 3 [(priv.field).cel = {
1346
+ id: "uint64.lte"
1347
+ expression:
1348
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
1349
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
1350
+ }];
1351
+ }
1352
+ oneof greater_than {
1353
+ // `gt` requires the field value to be greater than the specified value
1354
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
1355
+ // `lte`, the range is reversed, and the field value must be outside the
1356
+ // specified range. If the field value doesn't meet the required conditions,
1357
+ // an error message is generated.
1358
+ //
1359
+ // ```proto
1360
+ // message MyUInt64 {
1361
+ // // value must be greater than 5 [uint64.gt]
1362
+ // uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
1363
+ //
1364
+ // // value must be greater than 5 and less than 10 [uint64.gt_lt]
1365
+ // uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
1366
+ //
1367
+ // // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
1368
+ // uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
1369
+ // }
1370
+ // ```
1371
+ uint64 gt = 4 [
1372
+ (priv.field).cel = {
1373
+ id: "uint64.gt"
1374
+ expression:
1375
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
1376
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
1377
+ },
1378
+ (priv.field).cel = {
1379
+ id: "uint64.gt_lt"
1380
+ expression:
1381
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
1382
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
1383
+ },
1384
+ (priv.field).cel = {
1385
+ id: "uint64.gt_lt_exclusive"
1386
+ expression:
1387
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
1388
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
1389
+ },
1390
+ (priv.field).cel = {
1391
+ id: "uint64.gt_lte"
1392
+ expression:
1393
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
1394
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1395
+ },
1396
+ (priv.field).cel = {
1397
+ id: "uint64.gt_lte_exclusive"
1398
+ expression:
1399
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
1400
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1401
+ }
1402
+ ];
1403
+
1404
+ // `gte` requires the field value to be greater than or equal to the specified
1405
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
1406
+ // or `lte`, the range is reversed, and the field value must be outside the
1407
+ // specified range. If the field value doesn't meet the required conditions,
1408
+ // an error message is generated.
1409
+ //
1410
+ // ```proto
1411
+ // message MyUInt64 {
1412
+ // // value must be greater than or equal to 5 [uint64.gte]
1413
+ // uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
1414
+ //
1415
+ // // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
1416
+ // uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
1417
+ //
1418
+ // // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
1419
+ // uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
1420
+ // }
1421
+ // ```
1422
+ uint64 gte = 5 [
1423
+ (priv.field).cel = {
1424
+ id: "uint64.gte"
1425
+ expression:
1426
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
1427
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
1428
+ },
1429
+ (priv.field).cel = {
1430
+ id: "uint64.gte_lt"
1431
+ expression:
1432
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
1433
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
1434
+ },
1435
+ (priv.field).cel = {
1436
+ id: "uint64.gte_lt_exclusive"
1437
+ expression:
1438
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
1439
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
1440
+ },
1441
+ (priv.field).cel = {
1442
+ id: "uint64.gte_lte"
1443
+ expression:
1444
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
1445
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1446
+ },
1447
+ (priv.field).cel = {
1448
+ id: "uint64.gte_lte_exclusive"
1449
+ expression:
1450
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
1451
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1452
+ }
1453
+ ];
1454
+ }
1455
+ // `in` requires the field value to be equal to one of the specified values.
1456
+ // If the field value isn't one of the specified values, an error message is
1457
+ // generated.
1458
+ //
1459
+ // ```proto
1460
+ // message MyUInt64 {
1461
+ // // value must be in list [1, 2, 3]
1462
+ // repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
1463
+ // }
1464
+ // ```
1465
+ repeated uint64 in = 6 [(priv.field).cel = {
1466
+ id: "uint64.in"
1467
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
1468
+ }];
1469
+
1470
+ // `not_in` requires the field value to not be equal to any of the specified
1471
+ // values. If the field value is one of the specified values, an error
1472
+ // message is generated.
1473
+ //
1474
+ // ```proto
1475
+ // message MyUInt64 {
1476
+ // // value must not be in list [1, 2, 3]
1477
+ // repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
1478
+ // }
1479
+ // ```
1480
+ repeated uint64 not_in = 7 [(priv.field).cel = {
1481
+ id: "uint64.not_in"
1482
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
1483
+ }];
1484
+ }
1485
+
1486
+ // SInt32Rules describes the constraints applied to `sint32` values.
1487
+ message SInt32Rules {
1488
+ // `const` requires the field value to exactly match the specified value. If
1489
+ // the field value doesn't match, an error message is generated.
1490
+ //
1491
+ // ```proto
1492
+ // message MySInt32 {
1493
+ // // value must equal 42
1494
+ // sint32 value = 1 [(buf.validate.field).sint32.const = 42];
1495
+ // }
1496
+ // ```
1497
+ optional sint32 const = 1 [(priv.field).cel = {
1498
+ id: "sint32.const"
1499
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
1500
+ }];
1501
+ oneof less_than {
1502
+ // `lt` requires the field value to be less than the specified value (field
1503
+ // < value). If the field value is equal to or greater than the specified
1504
+ // value, an error message is generated.
1505
+ //
1506
+ // ```proto
1507
+ // message MySInt32 {
1508
+ // // value must be less than 10
1509
+ // sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
1510
+ // }
1511
+ // ```
1512
+ sint32 lt = 2 [(priv.field).cel = {
1513
+ id: "sint32.lt"
1514
+ expression:
1515
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
1516
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
1517
+ }];
1518
+
1519
+ // `lte` requires the field value to be less than or equal to the specified
1520
+ // value (field <= value). If the field value is greater than the specified
1521
+ // value, an error message is generated.
1522
+ //
1523
+ // ```proto
1524
+ // message MySInt32 {
1525
+ // // value must be less than or equal to 10
1526
+ // sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
1527
+ // }
1528
+ // ```
1529
+ sint32 lte = 3 [(priv.field).cel = {
1530
+ id: "sint32.lte"
1531
+ expression:
1532
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
1533
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
1534
+ }];
1535
+ }
1536
+ oneof greater_than {
1537
+ // `gt` requires the field value to be greater than the specified value
1538
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
1539
+ // `lte`, the range is reversed, and the field value must be outside the
1540
+ // specified range. If the field value doesn't meet the required conditions,
1541
+ // an error message is generated.
1542
+ //
1543
+ // ```proto
1544
+ // message MySInt32 {
1545
+ // // value must be greater than 5 [sint32.gt]
1546
+ // sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
1547
+ //
1548
+ // // value must be greater than 5 and less than 10 [sint32.gt_lt]
1549
+ // sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
1550
+ //
1551
+ // // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
1552
+ // sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
1553
+ // }
1554
+ // ```
1555
+ sint32 gt = 4 [
1556
+ (priv.field).cel = {
1557
+ id: "sint32.gt"
1558
+ expression:
1559
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
1560
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
1561
+ },
1562
+ (priv.field).cel = {
1563
+ id: "sint32.gt_lt"
1564
+ expression:
1565
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
1566
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
1567
+ },
1568
+ (priv.field).cel = {
1569
+ id: "sint32.gt_lt_exclusive"
1570
+ expression:
1571
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
1572
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
1573
+ },
1574
+ (priv.field).cel = {
1575
+ id: "sint32.gt_lte"
1576
+ expression:
1577
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
1578
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1579
+ },
1580
+ (priv.field).cel = {
1581
+ id: "sint32.gt_lte_exclusive"
1582
+ expression:
1583
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
1584
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1585
+ }
1586
+ ];
1587
+
1588
+ // `gte` requires the field value to be greater than or equal to the specified
1589
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
1590
+ // or `lte`, the range is reversed, and the field value must be outside the
1591
+ // specified range. If the field value doesn't meet the required conditions,
1592
+ // an error message is generated.
1593
+ //
1594
+ // ```proto
1595
+ // message MySInt32 {
1596
+ // // value must be greater than or equal to 5 [sint32.gte]
1597
+ // sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
1598
+ //
1599
+ // // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
1600
+ // sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
1601
+ //
1602
+ // // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
1603
+ // sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
1604
+ // }
1605
+ // ```
1606
+ sint32 gte = 5 [
1607
+ (priv.field).cel = {
1608
+ id: "sint32.gte"
1609
+ expression:
1610
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
1611
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
1612
+ },
1613
+ (priv.field).cel = {
1614
+ id: "sint32.gte_lt"
1615
+ expression:
1616
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
1617
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
1618
+ },
1619
+ (priv.field).cel = {
1620
+ id: "sint32.gte_lt_exclusive"
1621
+ expression:
1622
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
1623
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
1624
+ },
1625
+ (priv.field).cel = {
1626
+ id: "sint32.gte_lte"
1627
+ expression:
1628
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
1629
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1630
+ },
1631
+ (priv.field).cel = {
1632
+ id: "sint32.gte_lte_exclusive"
1633
+ expression:
1634
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
1635
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1636
+ }
1637
+ ];
1638
+ }
1639
+
1640
+ // `in` requires the field value to be equal to one of the specified values.
1641
+ // If the field value isn't one of the specified values, an error message is
1642
+ // generated.
1643
+ //
1644
+ // ```proto
1645
+ // message MySInt32 {
1646
+ // // value must be in list [1, 2, 3]
1647
+ // repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
1648
+ // }
1649
+ // ```
1650
+ repeated sint32 in = 6 [(priv.field).cel = {
1651
+ id: "sint32.in"
1652
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
1653
+ }];
1654
+
1655
+ // `not_in` requires the field value to not be equal to any of the specified
1656
+ // values. If the field value is one of the specified values, an error
1657
+ // message is generated.
1658
+ //
1659
+ // ```proto
1660
+ // message MySInt32 {
1661
+ // // value must not be in list [1, 2, 3]
1662
+ // repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
1663
+ // }
1664
+ // ```
1665
+ repeated sint32 not_in = 7 [(priv.field).cel = {
1666
+ id: "sint32.not_in"
1667
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
1668
+ }];
1669
+ }
1670
+
1671
+ // SInt64Rules describes the constraints applied to `sint64` values.
1672
+ message SInt64Rules {
1673
+ // `const` requires the field value to exactly match the specified value. If
1674
+ // the field value doesn't match, an error message is generated.
1675
+ //
1676
+ // ```proto
1677
+ // message MySInt64 {
1678
+ // // value must equal 42
1679
+ // sint64 value = 1 [(buf.validate.field).sint64.const = 42];
1680
+ // }
1681
+ // ```
1682
+ optional sint64 const = 1 [(priv.field).cel = {
1683
+ id: "sint64.const"
1684
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
1685
+ }];
1686
+ oneof less_than {
1687
+ // `lt` requires the field value to be less than the specified value (field
1688
+ // < value). If the field value is equal to or greater than the specified
1689
+ // value, an error message is generated.
1690
+ //
1691
+ // ```proto
1692
+ // message MySInt64 {
1693
+ // // value must be less than 10
1694
+ // sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
1695
+ // }
1696
+ // ```
1697
+ sint64 lt = 2 [(priv.field).cel = {
1698
+ id: "sint64.lt"
1699
+ expression:
1700
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
1701
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
1702
+ }];
1703
+
1704
+ // `lte` requires the field value to be less than or equal to the specified
1705
+ // value (field <= value). If the field value is greater than the specified
1706
+ // value, an error message is generated.
1707
+ //
1708
+ // ```proto
1709
+ // message MySInt64 {
1710
+ // // value must be less than or equal to 10
1711
+ // sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
1712
+ // }
1713
+ // ```
1714
+ sint64 lte = 3 [(priv.field).cel = {
1715
+ id: "sint64.lte"
1716
+ expression:
1717
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
1718
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
1719
+ }];
1720
+ }
1721
+ oneof greater_than {
1722
+ // `gt` requires the field value to be greater than the specified value
1723
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
1724
+ // `lte`, the range is reversed, and the field value must be outside the
1725
+ // specified range. If the field value doesn't meet the required conditions,
1726
+ // an error message is generated.
1727
+ //
1728
+ // ```proto
1729
+ // message MySInt64 {
1730
+ // // value must be greater than 5 [sint64.gt]
1731
+ // sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
1732
+ //
1733
+ // // value must be greater than 5 and less than 10 [sint64.gt_lt]
1734
+ // sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
1735
+ //
1736
+ // // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
1737
+ // sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
1738
+ // }
1739
+ // ```
1740
+ sint64 gt = 4 [
1741
+ (priv.field).cel = {
1742
+ id: "sint64.gt"
1743
+ expression:
1744
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
1745
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
1746
+ },
1747
+ (priv.field).cel = {
1748
+ id: "sint64.gt_lt"
1749
+ expression:
1750
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
1751
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
1752
+ },
1753
+ (priv.field).cel = {
1754
+ id: "sint64.gt_lt_exclusive"
1755
+ expression:
1756
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
1757
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
1758
+ },
1759
+ (priv.field).cel = {
1760
+ id: "sint64.gt_lte"
1761
+ expression:
1762
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
1763
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1764
+ },
1765
+ (priv.field).cel = {
1766
+ id: "sint64.gt_lte_exclusive"
1767
+ expression:
1768
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
1769
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1770
+ }
1771
+ ];
1772
+
1773
+ // `gte` requires the field value to be greater than or equal to the specified
1774
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
1775
+ // or `lte`, the range is reversed, and the field value must be outside the
1776
+ // specified range. If the field value doesn't meet the required conditions,
1777
+ // an error message is generated.
1778
+ //
1779
+ // ```proto
1780
+ // message MySInt64 {
1781
+ // // value must be greater than or equal to 5 [sint64.gte]
1782
+ // sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
1783
+ //
1784
+ // // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
1785
+ // sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
1786
+ //
1787
+ // // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
1788
+ // sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
1789
+ // }
1790
+ // ```
1791
+ sint64 gte = 5 [
1792
+ (priv.field).cel = {
1793
+ id: "sint64.gte"
1794
+ expression:
1795
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
1796
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
1797
+ },
1798
+ (priv.field).cel = {
1799
+ id: "sint64.gte_lt"
1800
+ expression:
1801
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
1802
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
1803
+ },
1804
+ (priv.field).cel = {
1805
+ id: "sint64.gte_lt_exclusive"
1806
+ expression:
1807
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
1808
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
1809
+ },
1810
+ (priv.field).cel = {
1811
+ id: "sint64.gte_lte"
1812
+ expression:
1813
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
1814
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1815
+ },
1816
+ (priv.field).cel = {
1817
+ id: "sint64.gte_lte_exclusive"
1818
+ expression:
1819
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
1820
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
1821
+ }
1822
+ ];
1823
+ }
1824
+
1825
+ // `in` requires the field value to be equal to one of the specified values.
1826
+ // If the field value isn't one of the specified values, an error message
1827
+ // is generated.
1828
+ //
1829
+ // ```proto
1830
+ // message MySInt64 {
1831
+ // // value must be in list [1, 2, 3]
1832
+ // repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
1833
+ // }
1834
+ // ```
1835
+ repeated sint64 in = 6 [(priv.field).cel = {
1836
+ id: "sint64.in"
1837
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
1838
+ }];
1839
+
1840
+ // `not_in` requires the field value to not be equal to any of the specified
1841
+ // values. If the field value is one of the specified values, an error
1842
+ // message is generated.
1843
+ //
1844
+ // ```proto
1845
+ // message MySInt64 {
1846
+ // // value must not be in list [1, 2, 3]
1847
+ // repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
1848
+ // }
1849
+ // ```
1850
+ repeated sint64 not_in = 7 [(priv.field).cel = {
1851
+ id: "sint64.not_in"
1852
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
1853
+ }];
1854
+ }
1855
+
1856
+ // Fixed32Rules describes the constraints applied to `fixed32` values.
1857
+ message Fixed32Rules {
1858
+ // `const` requires the field value to exactly match the specified value.
1859
+ // If the field value doesn't match, an error message is generated.
1860
+ //
1861
+ // ```proto
1862
+ // message MyFixed32 {
1863
+ // // value must equal 42
1864
+ // fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
1865
+ // }
1866
+ // ```
1867
+ optional fixed32 const = 1 [(priv.field).cel = {
1868
+ id: "fixed32.const"
1869
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
1870
+ }];
1871
+ oneof less_than {
1872
+ // `lt` requires the field value to be less than the specified value (field <
1873
+ // value). If the field value is equal to or greater than the specified value,
1874
+ // an error message is generated.
1875
+ //
1876
+ // ```proto
1877
+ // message MyFixed32 {
1878
+ // // value must be less than 10
1879
+ // fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
1880
+ // }
1881
+ // ```
1882
+ fixed32 lt = 2 [(priv.field).cel = {
1883
+ id: "fixed32.lt"
1884
+ expression:
1885
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
1886
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
1887
+ }];
1888
+
1889
+ // `lte` requires the field value to be less than or equal to the specified
1890
+ // value (field <= value). If the field value is greater than the specified
1891
+ // value, an error message is generated.
1892
+ //
1893
+ // ```proto
1894
+ // message MyFixed32 {
1895
+ // // value must be less than or equal to 10
1896
+ // fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
1897
+ // }
1898
+ // ```
1899
+ fixed32 lte = 3 [(priv.field).cel = {
1900
+ id: "fixed32.lte"
1901
+ expression:
1902
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
1903
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
1904
+ }];
1905
+ }
1906
+ oneof greater_than {
1907
+ // `gt` requires the field value to be greater than the specified value
1908
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
1909
+ // `lte`, the range is reversed, and the field value must be outside the
1910
+ // specified range. If the field value doesn't meet the required conditions,
1911
+ // an error message is generated.
1912
+ //
1913
+ // ```proto
1914
+ // message MyFixed32 {
1915
+ // // value must be greater than 5 [fixed32.gt]
1916
+ // fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
1917
+ //
1918
+ // // value must be greater than 5 and less than 10 [fixed32.gt_lt]
1919
+ // fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
1920
+ //
1921
+ // // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
1922
+ // fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
1923
+ // }
1924
+ // ```
1925
+ fixed32 gt = 4 [
1926
+ (priv.field).cel = {
1927
+ id: "fixed32.gt"
1928
+ expression:
1929
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
1930
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
1931
+ },
1932
+ (priv.field).cel = {
1933
+ id: "fixed32.gt_lt"
1934
+ expression:
1935
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
1936
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
1937
+ },
1938
+ (priv.field).cel = {
1939
+ id: "fixed32.gt_lt_exclusive"
1940
+ expression:
1941
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
1942
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
1943
+ },
1944
+ (priv.field).cel = {
1945
+ id: "fixed32.gt_lte"
1946
+ expression:
1947
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
1948
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1949
+ },
1950
+ (priv.field).cel = {
1951
+ id: "fixed32.gt_lte_exclusive"
1952
+ expression:
1953
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
1954
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
1955
+ }
1956
+ ];
1957
+
1958
+ // `gte` requires the field value to be greater than or equal to the specified
1959
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
1960
+ // or `lte`, the range is reversed, and the field value must be outside the
1961
+ // specified range. If the field value doesn't meet the required conditions,
1962
+ // an error message is generated.
1963
+ //
1964
+ // ```proto
1965
+ // message MyFixed32 {
1966
+ // // value must be greater than or equal to 5 [fixed32.gte]
1967
+ // fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
1968
+ //
1969
+ // // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
1970
+ // fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
1971
+ //
1972
+ // // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
1973
+ // fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
1974
+ // }
1975
+ // ```
1976
+ fixed32 gte = 5 [
1977
+ (priv.field).cel = {
1978
+ id: "fixed32.gte"
1979
+ expression:
1980
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
1981
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
1982
+ },
1983
+ (priv.field).cel = {
1984
+ id: "fixed32.gte_lt"
1985
+ expression:
1986
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
1987
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
1988
+ },
1989
+ (priv.field).cel = {
1990
+ id: "fixed32.gte_lt_exclusive"
1991
+ expression:
1992
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
1993
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
1994
+ },
1995
+ (priv.field).cel = {
1996
+ id: "fixed32.gte_lte"
1997
+ expression:
1998
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
1999
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2000
+ },
2001
+ (priv.field).cel = {
2002
+ id: "fixed32.gte_lte_exclusive"
2003
+ expression:
2004
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
2005
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2006
+ }
2007
+ ];
2008
+ }
2009
+
2010
+ // `in` requires the field value to be equal to one of the specified values.
2011
+ // If the field value isn't one of the specified values, an error message
2012
+ // is generated.
2013
+ //
2014
+ // ```proto
2015
+ // message MyFixed32 {
2016
+ // // value must be in list [1, 2, 3]
2017
+ // repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
2018
+ // }
2019
+ // ```
2020
+ repeated fixed32 in = 6 [(priv.field).cel = {
2021
+ id: "fixed32.in"
2022
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
2023
+ }];
2024
+
2025
+ // `not_in` requires the field value to not be equal to any of the specified
2026
+ // values. If the field value is one of the specified values, an error
2027
+ // message is generated.
2028
+ //
2029
+ // ```proto
2030
+ // message MyFixed32 {
2031
+ // // value must not be in list [1, 2, 3]
2032
+ // repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
2033
+ // }
2034
+ // ```
2035
+ repeated fixed32 not_in = 7 [(priv.field).cel = {
2036
+ id: "fixed32.not_in"
2037
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
2038
+ }];
2039
+ }
2040
+
2041
+ // Fixed64Rules describes the constraints applied to `fixed64` values.
2042
+ message Fixed64Rules {
2043
+ // `const` requires the field value to exactly match the specified value. If
2044
+ // the field value doesn't match, an error message is generated.
2045
+ //
2046
+ // ```proto
2047
+ // message MyFixed64 {
2048
+ // // value must equal 42
2049
+ // fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
2050
+ // }
2051
+ // ```
2052
+ optional fixed64 const = 1 [(priv.field).cel = {
2053
+ id: "fixed64.const"
2054
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
2055
+ }];
2056
+ oneof less_than {
2057
+ // `lt` requires the field value to be less than the specified value (field <
2058
+ // value). If the field value is equal to or greater than the specified value,
2059
+ // an error message is generated.
2060
+ //
2061
+ // ```proto
2062
+ // message MyFixed64 {
2063
+ // // value must be less than 10
2064
+ // fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
2065
+ // }
2066
+ // ```
2067
+ fixed64 lt = 2 [(priv.field).cel = {
2068
+ id: "fixed64.lt"
2069
+ expression:
2070
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
2071
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
2072
+ }];
2073
+
2074
+ // `lte` requires the field value to be less than or equal to the specified
2075
+ // value (field <= value). If the field value is greater than the specified
2076
+ // value, an error message is generated.
2077
+ //
2078
+ // ```proto
2079
+ // message MyFixed64 {
2080
+ // // value must be less than or equal to 10
2081
+ // fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
2082
+ // }
2083
+ // ```
2084
+ fixed64 lte = 3 [(priv.field).cel = {
2085
+ id: "fixed64.lte"
2086
+ expression:
2087
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
2088
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
2089
+ }];
2090
+ }
2091
+ oneof greater_than {
2092
+ // `gt` requires the field value to be greater than the specified value
2093
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
2094
+ // `lte`, the range is reversed, and the field value must be outside the
2095
+ // specified range. If the field value doesn't meet the required conditions,
2096
+ // an error message is generated.
2097
+ //
2098
+ // ```proto
2099
+ // message MyFixed64 {
2100
+ // // value must be greater than 5 [fixed64.gt]
2101
+ // fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
2102
+ //
2103
+ // // value must be greater than 5 and less than 10 [fixed64.gt_lt]
2104
+ // fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
2105
+ //
2106
+ // // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
2107
+ // fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
2108
+ // }
2109
+ // ```
2110
+ fixed64 gt = 4 [
2111
+ (priv.field).cel = {
2112
+ id: "fixed64.gt"
2113
+ expression:
2114
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
2115
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
2116
+ },
2117
+ (priv.field).cel = {
2118
+ id: "fixed64.gt_lt"
2119
+ expression:
2120
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
2121
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
2122
+ },
2123
+ (priv.field).cel = {
2124
+ id: "fixed64.gt_lt_exclusive"
2125
+ expression:
2126
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
2127
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
2128
+ },
2129
+ (priv.field).cel = {
2130
+ id: "fixed64.gt_lte"
2131
+ expression:
2132
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
2133
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
2134
+ },
2135
+ (priv.field).cel = {
2136
+ id: "fixed64.gt_lte_exclusive"
2137
+ expression:
2138
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
2139
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
2140
+ }
2141
+ ];
2142
+
2143
+ // `gte` requires the field value to be greater than or equal to the specified
2144
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
2145
+ // or `lte`, the range is reversed, and the field value must be outside the
2146
+ // specified range. If the field value doesn't meet the required conditions,
2147
+ // an error message is generated.
2148
+ //
2149
+ // ```proto
2150
+ // message MyFixed64 {
2151
+ // // value must be greater than or equal to 5 [fixed64.gte]
2152
+ // fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
2153
+ //
2154
+ // // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
2155
+ // fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
2156
+ //
2157
+ // // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
2158
+ // fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
2159
+ // }
2160
+ // ```
2161
+ fixed64 gte = 5 [
2162
+ (priv.field).cel = {
2163
+ id: "fixed64.gte"
2164
+ expression:
2165
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
2166
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
2167
+ },
2168
+ (priv.field).cel = {
2169
+ id: "fixed64.gte_lt"
2170
+ expression:
2171
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
2172
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
2173
+ },
2174
+ (priv.field).cel = {
2175
+ id: "fixed64.gte_lt_exclusive"
2176
+ expression:
2177
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
2178
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
2179
+ },
2180
+ (priv.field).cel = {
2181
+ id: "fixed64.gte_lte"
2182
+ expression:
2183
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
2184
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2185
+ },
2186
+ (priv.field).cel = {
2187
+ id: "fixed64.gte_lte_exclusive"
2188
+ expression:
2189
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
2190
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2191
+ }
2192
+ ];
2193
+ }
2194
+
2195
+ // `in` requires the field value to be equal to one of the specified values.
2196
+ // If the field value isn't one of the specified values, an error message is
2197
+ // generated.
2198
+ //
2199
+ // ```proto
2200
+ // message MyFixed64 {
2201
+ // // value must be in list [1, 2, 3]
2202
+ // repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
2203
+ // }
2204
+ // ```
2205
+ repeated fixed64 in = 6 [(priv.field).cel = {
2206
+ id: "fixed64.in"
2207
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
2208
+ }];
2209
+
2210
+ // `not_in` requires the field value to not be equal to any of the specified
2211
+ // values. If the field value is one of the specified values, an error
2212
+ // message is generated.
2213
+ //
2214
+ // ```proto
2215
+ // message MyFixed64 {
2216
+ // // value must not be in list [1, 2, 3]
2217
+ // repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
2218
+ // }
2219
+ // ```
2220
+ repeated fixed64 not_in = 7 [(priv.field).cel = {
2221
+ id: "fixed64.not_in"
2222
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
2223
+ }];
2224
+ }
2225
+
2226
+ // SFixed32Rules describes the constraints applied to `fixed32` values.
2227
+ message SFixed32Rules {
2228
+ // `const` requires the field value to exactly match the specified value. If
2229
+ // the field value doesn't match, an error message is generated.
2230
+ //
2231
+ // ```proto
2232
+ // message MySFixed32 {
2233
+ // // value must equal 42
2234
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
2235
+ // }
2236
+ // ```
2237
+ optional sfixed32 const = 1 [(priv.field).cel = {
2238
+ id: "sfixed32.const"
2239
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
2240
+ }];
2241
+ oneof less_than {
2242
+ // `lt` requires the field value to be less than the specified value (field <
2243
+ // value). If the field value is equal to or greater than the specified value,
2244
+ // an error message is generated.
2245
+ //
2246
+ // ```proto
2247
+ // message MySFixed32 {
2248
+ // // value must be less than 10
2249
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
2250
+ // }
2251
+ // ```
2252
+ sfixed32 lt = 2 [(priv.field).cel = {
2253
+ id: "sfixed32.lt"
2254
+ expression:
2255
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
2256
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
2257
+ }];
2258
+
2259
+ // `lte` requires the field value to be less than or equal to the specified
2260
+ // value (field <= value). If the field value is greater than the specified
2261
+ // value, an error message is generated.
2262
+ //
2263
+ // ```proto
2264
+ // message MySFixed32 {
2265
+ // // value must be less than or equal to 10
2266
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
2267
+ // }
2268
+ // ```
2269
+ sfixed32 lte = 3 [(priv.field).cel = {
2270
+ id: "sfixed32.lte"
2271
+ expression:
2272
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
2273
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
2274
+ }];
2275
+ }
2276
+ oneof greater_than {
2277
+ // `gt` requires the field value to be greater than the specified value
2278
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
2279
+ // `lte`, the range is reversed, and the field value must be outside the
2280
+ // specified range. If the field value doesn't meet the required conditions,
2281
+ // an error message is generated.
2282
+ //
2283
+ // ```proto
2284
+ // message MySFixed32 {
2285
+ // // value must be greater than 5 [sfixed32.gt]
2286
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
2287
+ //
2288
+ // // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
2289
+ // sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
2290
+ //
2291
+ // // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
2292
+ // sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
2293
+ // }
2294
+ // ```
2295
+ sfixed32 gt = 4 [
2296
+ (priv.field).cel = {
2297
+ id: "sfixed32.gt"
2298
+ expression:
2299
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
2300
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
2301
+ },
2302
+ (priv.field).cel = {
2303
+ id: "sfixed32.gt_lt"
2304
+ expression:
2305
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
2306
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
2307
+ },
2308
+ (priv.field).cel = {
2309
+ id: "sfixed32.gt_lt_exclusive"
2310
+ expression:
2311
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
2312
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
2313
+ },
2314
+ (priv.field).cel = {
2315
+ id: "sfixed32.gt_lte"
2316
+ expression:
2317
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
2318
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
2319
+ },
2320
+ (priv.field).cel = {
2321
+ id: "sfixed32.gt_lte_exclusive"
2322
+ expression:
2323
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
2324
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
2325
+ }
2326
+ ];
2327
+
2328
+ // `gte` requires the field value to be greater than or equal to the specified
2329
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
2330
+ // or `lte`, the range is reversed, and the field value must be outside the
2331
+ // specified range. If the field value doesn't meet the required conditions,
2332
+ // an error message is generated.
2333
+ //
2334
+ // ```proto
2335
+ // message MySFixed32 {
2336
+ // // value must be greater than or equal to 5 [sfixed32.gte]
2337
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
2338
+ //
2339
+ // // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
2340
+ // sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
2341
+ //
2342
+ // // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
2343
+ // sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
2344
+ // }
2345
+ // ```
2346
+ sfixed32 gte = 5 [
2347
+ (priv.field).cel = {
2348
+ id: "sfixed32.gte"
2349
+ expression:
2350
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
2351
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
2352
+ },
2353
+ (priv.field).cel = {
2354
+ id: "sfixed32.gte_lt"
2355
+ expression:
2356
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
2357
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
2358
+ },
2359
+ (priv.field).cel = {
2360
+ id: "sfixed32.gte_lt_exclusive"
2361
+ expression:
2362
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
2363
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
2364
+ },
2365
+ (priv.field).cel = {
2366
+ id: "sfixed32.gte_lte"
2367
+ expression:
2368
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
2369
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2370
+ },
2371
+ (priv.field).cel = {
2372
+ id: "sfixed32.gte_lte_exclusive"
2373
+ expression:
2374
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
2375
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2376
+ }
2377
+ ];
2378
+ }
2379
+
2380
+ // `in` requires the field value to be equal to one of the specified values.
2381
+ // If the field value isn't one of the specified values, an error message is
2382
+ // generated.
2383
+ //
2384
+ // ```proto
2385
+ // message MySFixed32 {
2386
+ // // value must be in list [1, 2, 3]
2387
+ // repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
2388
+ // }
2389
+ // ```
2390
+ repeated sfixed32 in = 6 [(priv.field).cel = {
2391
+ id: "sfixed32.in"
2392
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
2393
+ }];
2394
+
2395
+ // `not_in` requires the field value to not be equal to any of the specified
2396
+ // values. If the field value is one of the specified values, an error
2397
+ // message is generated.
2398
+ //
2399
+ // ```proto
2400
+ // message MySFixed32 {
2401
+ // // value must not be in list [1, 2, 3]
2402
+ // repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
2403
+ // }
2404
+ // ```
2405
+ repeated sfixed32 not_in = 7 [(priv.field).cel = {
2406
+ id: "sfixed32.not_in"
2407
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
2408
+ }];
2409
+ }
2410
+
2411
+ // SFixed64Rules describes the constraints applied to `fixed64` values.
2412
+ message SFixed64Rules {
2413
+ // `const` requires the field value to exactly match the specified value. If
2414
+ // the field value doesn't match, an error message is generated.
2415
+ //
2416
+ // ```proto
2417
+ // message MySFixed64 {
2418
+ // // value must equal 42
2419
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
2420
+ // }
2421
+ // ```
2422
+ optional sfixed64 const = 1 [(priv.field).cel = {
2423
+ id: "sfixed64.const"
2424
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
2425
+ }];
2426
+ oneof less_than {
2427
+ // `lt` requires the field value to be less than the specified value (field <
2428
+ // value). If the field value is equal to or greater than the specified value,
2429
+ // an error message is generated.
2430
+ //
2431
+ // ```proto
2432
+ // message MySFixed64 {
2433
+ // // value must be less than 10
2434
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
2435
+ // }
2436
+ // ```
2437
+ sfixed64 lt = 2 [(priv.field).cel = {
2438
+ id: "sfixed64.lt"
2439
+ expression:
2440
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
2441
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
2442
+ }];
2443
+
2444
+ // `lte` requires the field value to be less than or equal to the specified
2445
+ // value (field <= value). If the field value is greater than the specified
2446
+ // value, an error message is generated.
2447
+ //
2448
+ // ```proto
2449
+ // message MySFixed64 {
2450
+ // // value must be less than or equal to 10
2451
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
2452
+ // }
2453
+ // ```
2454
+ sfixed64 lte = 3 [(priv.field).cel = {
2455
+ id: "sfixed64.lte"
2456
+ expression:
2457
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
2458
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
2459
+ }];
2460
+ }
2461
+ oneof greater_than {
2462
+ // `gt` requires the field value to be greater than the specified value
2463
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
2464
+ // `lte`, the range is reversed, and the field value must be outside the
2465
+ // specified range. If the field value doesn't meet the required conditions,
2466
+ // an error message is generated.
2467
+ //
2468
+ // ```proto
2469
+ // message MySFixed64 {
2470
+ // // value must be greater than 5 [sfixed64.gt]
2471
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
2472
+ //
2473
+ // // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
2474
+ // sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
2475
+ //
2476
+ // // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
2477
+ // sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
2478
+ // }
2479
+ // ```
2480
+ sfixed64 gt = 4 [
2481
+ (priv.field).cel = {
2482
+ id: "sfixed64.gt"
2483
+ expression:
2484
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
2485
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
2486
+ },
2487
+ (priv.field).cel = {
2488
+ id: "sfixed64.gt_lt"
2489
+ expression:
2490
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
2491
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
2492
+ },
2493
+ (priv.field).cel = {
2494
+ id: "sfixed64.gt_lt_exclusive"
2495
+ expression:
2496
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
2497
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
2498
+ },
2499
+ (priv.field).cel = {
2500
+ id: "sfixed64.gt_lte"
2501
+ expression:
2502
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
2503
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
2504
+ },
2505
+ (priv.field).cel = {
2506
+ id: "sfixed64.gt_lte_exclusive"
2507
+ expression:
2508
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
2509
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
2510
+ }
2511
+ ];
2512
+
2513
+ // `gte` requires the field value to be greater than or equal to the specified
2514
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
2515
+ // or `lte`, the range is reversed, and the field value must be outside the
2516
+ // specified range. If the field value doesn't meet the required conditions,
2517
+ // an error message is generated.
2518
+ //
2519
+ // ```proto
2520
+ // message MySFixed64 {
2521
+ // // value must be greater than or equal to 5 [sfixed64.gte]
2522
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
2523
+ //
2524
+ // // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
2525
+ // sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
2526
+ //
2527
+ // // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
2528
+ // sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
2529
+ // }
2530
+ // ```
2531
+ sfixed64 gte = 5 [
2532
+ (priv.field).cel = {
2533
+ id: "sfixed64.gte"
2534
+ expression:
2535
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
2536
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
2537
+ },
2538
+ (priv.field).cel = {
2539
+ id: "sfixed64.gte_lt"
2540
+ expression:
2541
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
2542
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
2543
+ },
2544
+ (priv.field).cel = {
2545
+ id: "sfixed64.gte_lt_exclusive"
2546
+ expression:
2547
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
2548
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
2549
+ },
2550
+ (priv.field).cel = {
2551
+ id: "sfixed64.gte_lte"
2552
+ expression:
2553
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
2554
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2555
+ },
2556
+ (priv.field).cel = {
2557
+ id: "sfixed64.gte_lte_exclusive"
2558
+ expression:
2559
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
2560
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
2561
+ }
2562
+ ];
2563
+ }
2564
+
2565
+ // `in` requires the field value to be equal to one of the specified values.
2566
+ // If the field value isn't one of the specified values, an error message is
2567
+ // generated.
2568
+ //
2569
+ // ```proto
2570
+ // message MySFixed64 {
2571
+ // // value must be in list [1, 2, 3]
2572
+ // repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
2573
+ // }
2574
+ // ```
2575
+ repeated sfixed64 in = 6 [(priv.field).cel = {
2576
+ id: "sfixed64.in"
2577
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
2578
+ }];
2579
+
2580
+ // `not_in` requires the field value to not be equal to any of the specified
2581
+ // values. If the field value is one of the specified values, an error
2582
+ // message is generated.
2583
+ //
2584
+ // ```proto
2585
+ // message MySFixed64 {
2586
+ // // value must not be in list [1, 2, 3]
2587
+ // repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
2588
+ // }
2589
+ // ```
2590
+ repeated sfixed64 not_in = 7 [(priv.field).cel = {
2591
+ id: "sfixed64.not_in"
2592
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
2593
+ }];
2594
+ }
2595
+
2596
+ // BoolRules describes the constraints applied to `bool` values. These rules
2597
+ // may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
2598
+ message BoolRules {
2599
+ // `const` requires the field value to exactly match the specified boolean value.
2600
+ // If the field value doesn't match, an error message is generated.
2601
+ //
2602
+ // ```proto
2603
+ // message MyBool {
2604
+ // // value must equal true
2605
+ // bool value = 1 [(buf.validate.field).bool.const = true];
2606
+ // }
2607
+ // ```
2608
+ optional bool const = 1 [(priv.field).cel = {
2609
+ id: "bool.const"
2610
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
2611
+ }];
2612
+ }
2613
+
2614
+ // StringRules describes the constraints applied to `string` values These
2615
+ // rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
2616
+ message StringRules {
2617
+ // `const` requires the field value to exactly match the specified value. If
2618
+ // the field value doesn't match, an error message is generated.
2619
+ //
2620
+ // ```proto
2621
+ // message MyString {
2622
+ // // value must equal `hello`
2623
+ // string value = 1 [(buf.validate.field).string.const = "hello"];
2624
+ // }
2625
+ // ```
2626
+ optional string const = 1 [(priv.field).cel = {
2627
+ id: "string.const"
2628
+ expression: "this != rules.const ? 'value must equal `%s`'.format([rules.const]) : ''"
2629
+ }];
2630
+
2631
+ // `len` dictates that the field value must have the specified
2632
+ // number of characters (Unicode code points), which may differ from the number
2633
+ // of bytes in the string. If the field value does not meet the specified
2634
+ // length, an error message will be generated.
2635
+ //
2636
+ // ```proto
2637
+ // message MyString {
2638
+ // // value length must be 5 characters
2639
+ // string value = 1 [(buf.validate.field).string.len = 5];
2640
+ // }
2641
+ // ```
2642
+ optional uint64 len = 19 [(priv.field).cel = {
2643
+ id: "string.len"
2644
+ expression: "uint(this.size()) != rules.len ? 'value length must be %s characters'.format([rules.len]) : ''"
2645
+ }];
2646
+
2647
+ // `min_len` specifies that the field value must have at least the specified
2648
+ // number of characters (Unicode code points), which may differ from the number
2649
+ // of bytes in the string. If the field value contains fewer characters, an error
2650
+ // message will be generated.
2651
+ //
2652
+ // ```proto
2653
+ // message MyString {
2654
+ // // value length must be at least 3 characters
2655
+ // string value = 1 [(buf.validate.field).string.min_len = 3];
2656
+ // }
2657
+ // ```
2658
+ optional uint64 min_len = 2 [(priv.field).cel = {
2659
+ id: "string.min_len"
2660
+ expression: "uint(this.size()) < rules.min_len ? 'value length must be at least %s characters'.format([rules.min_len]) : ''"
2661
+ }];
2662
+
2663
+ // `max_len` specifies that the field value must have no more than the specified
2664
+ // number of characters (Unicode code points), which may differ from the
2665
+ // number of bytes in the string. If the field value contains more characters,
2666
+ // an error message will be generated.
2667
+ //
2668
+ // ```proto
2669
+ // message MyString {
2670
+ // // value length must be at most 10 characters
2671
+ // string value = 1 [(buf.validate.field).string.max_len = 10];
2672
+ // }
2673
+ // ```
2674
+ optional uint64 max_len = 3 [(priv.field).cel = {
2675
+ id: "string.max_len"
2676
+ expression: "uint(this.size()) > rules.max_len ? 'value length must be at most %s characters'.format([rules.max_len]) : ''"
2677
+ }];
2678
+
2679
+ // `len_bytes` dictates that the field value must have the specified number of
2680
+ // bytes. If the field value does not match the specified length in bytes,
2681
+ // an error message will be generated.
2682
+ //
2683
+ // ```proto
2684
+ // message MyString {
2685
+ // // value length must be 6 bytes
2686
+ // string value = 1 [(buf.validate.field).string.len_bytes = 6];
2687
+ // }
2688
+ // ```
2689
+ optional uint64 len_bytes = 20 [(priv.field).cel = {
2690
+ id: "string.len_bytes"
2691
+ expression: "uint(bytes(this).size()) != rules.len_bytes ? 'value length must be %s bytes'.format([rules.len_bytes]) : ''"
2692
+ }];
2693
+
2694
+ // `min_bytes` specifies that the field value must have at least the specified
2695
+ // number of bytes. If the field value contains fewer bytes, an error message
2696
+ // will be generated.
2697
+ //
2698
+ // ```proto
2699
+ // message MyString {
2700
+ // // value length must be at least 4 bytes
2701
+ // string value = 1 [(buf.validate.field).string.min_bytes = 4];
2702
+ // }
2703
+ //
2704
+ // ```
2705
+ optional uint64 min_bytes = 4 [(priv.field).cel = {
2706
+ id: "string.min_bytes"
2707
+ expression: "uint(bytes(this).size()) < rules.min_bytes ? 'value length must be at least %s bytes'.format([rules.min_bytes]) : ''"
2708
+ }];
2709
+
2710
+ // `max_bytes` specifies that the field value must have no more than the
2711
+ //specified number of bytes. If the field value contains more bytes, an
2712
+ // error message will be generated.
2713
+ //
2714
+ // ```proto
2715
+ // message MyString {
2716
+ // // value length must be at most 8 bytes
2717
+ // string value = 1 [(buf.validate.field).string.max_bytes = 8];
2718
+ // }
2719
+ // ```
2720
+ optional uint64 max_bytes = 5 [(priv.field).cel = {
2721
+ id: "string.max_bytes"
2722
+ expression: "uint(bytes(this).size()) > rules.max_bytes ? 'value length must be at most %s bytes'.format([rules.max_bytes]) : ''"
2723
+ }];
2724
+
2725
+ // `pattern` specifies that the field value must match the specified
2726
+ // regular expression (RE2 syntax), with the expression provided without any
2727
+ // delimiters. If the field value doesn't match the regular expression, an
2728
+ // error message will be generated.
2729
+ //
2730
+ // ```proto
2731
+ // message MyString {
2732
+ // // value does not match regex pattern `^[a-zA-Z]//$`
2733
+ // string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
2734
+ // }
2735
+ // ```
2736
+ optional string pattern = 6 [(priv.field).cel = {
2737
+ id: "string.pattern"
2738
+ expression: "!this.matches(rules.pattern) ? 'value does not match regex pattern `%s`'.format([rules.pattern]) : ''"
2739
+ }];
2740
+
2741
+ // `prefix` specifies that the field value must have the
2742
+ //specified substring at the beginning of the string. If the field value
2743
+ // doesn't start with the specified prefix, an error message will be
2744
+ // generated.
2745
+ //
2746
+ // ```proto
2747
+ // message MyString {
2748
+ // // value does not have prefix `pre`
2749
+ // string value = 1 [(buf.validate.field).string.prefix = "pre"];
2750
+ // }
2751
+ // ```
2752
+ optional string prefix = 7 [(priv.field).cel = {
2753
+ id: "string.prefix"
2754
+ expression: "!this.startsWith(rules.prefix) ? 'value does not have prefix `%s`'.format([rules.prefix]) : ''"
2755
+ }];
2756
+
2757
+ // `suffix` specifies that the field value must have the
2758
+ //specified substring at the end of the string. If the field value doesn't
2759
+ // end with the specified suffix, an error message will be generated.
2760
+ //
2761
+ // ```proto
2762
+ // message MyString {
2763
+ // // value does not have suffix `post`
2764
+ // string value = 1 [(buf.validate.field).string.suffix = "post"];
2765
+ // }
2766
+ // ```
2767
+ optional string suffix = 8 [(priv.field).cel = {
2768
+ id: "string.suffix"
2769
+ expression: "!this.endsWith(rules.suffix) ? 'value does not have suffix `%s`'.format([rules.suffix]) : ''"
2770
+ }];
2771
+
2772
+ // `contains` specifies that the field value must have the
2773
+ //specified substring anywhere in the string. If the field value doesn't
2774
+ // contain the specified substring, an error message will be generated.
2775
+ //
2776
+ // ```proto
2777
+ // message MyString {
2778
+ // // value does not contain substring `inside`.
2779
+ // string value = 1 [(buf.validate.field).string.contains = "inside"];
2780
+ // }
2781
+ // ```
2782
+ optional string contains = 9 [(priv.field).cel = {
2783
+ id: "string.contains"
2784
+ expression: "!this.contains(rules.contains) ? 'value does not contain substring `%s`'.format([rules.contains]) : ''"
2785
+ }];
2786
+
2787
+ // `not_contains` specifies that the field value must not have the
2788
+ //specified substring anywhere in the string. If the field value contains
2789
+ // the specified substring, an error message will be generated.
2790
+ //
2791
+ // ```proto
2792
+ // message MyString {
2793
+ // // value contains substring `inside`.
2794
+ // string value = 1 [(buf.validate.field).string.not_contains = "inside"];
2795
+ // }
2796
+ // ```
2797
+ optional string not_contains = 23 [(priv.field).cel = {
2798
+ id: "string.not_contains"
2799
+ expression: "this.contains(rules.not_contains) ? 'value contains substring `%s`'.format([rules.not_contains]) : ''"
2800
+ }];
2801
+
2802
+ // `in` specifies that the field value must be equal to one of the specified
2803
+ // values. If the field value isn't one of the specified values, an error
2804
+ // message will be generated.
2805
+ //
2806
+ // ```proto
2807
+ // message MyString {
2808
+ // // value must be in list ["apple", "banana"]
2809
+ // repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
2810
+ // }
2811
+ // ```
2812
+ repeated string in = 10 [(priv.field).cel = {
2813
+ id: "string.in"
2814
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
2815
+ }];
2816
+
2817
+ // `not_in` specifies that the field value cannot be equal to any
2818
+ // of the specified values. If the field value is one of the specified values,
2819
+ // an error message will be generated.
2820
+ // ```proto
2821
+ // message MyString {
2822
+ // // value must not be in list ["orange", "grape"]
2823
+ // repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
2824
+ // }
2825
+ // ```
2826
+ repeated string not_in = 11 [(priv.field).cel = {
2827
+ id: "string.not_in"
2828
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
2829
+ }];
2830
+
2831
+ // `WellKnown` rules provide advanced constraints against common string
2832
+ // patterns
2833
+ oneof well_known {
2834
+ // `email` specifies that the field value must be a valid email address
2835
+ // (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
2836
+ // If the field value isn't a valid email address, an error message will be generated.
2837
+ //
2838
+ // ```proto
2839
+ // message MyString {
2840
+ // // value must be a valid email address
2841
+ // string value = 1 [(buf.validate.field).string.email = true];
2842
+ // }
2843
+ // ```
2844
+ bool email = 12 [
2845
+ (priv.field).cel = {
2846
+ id: "string.email"
2847
+ message: "value must be a valid email address"
2848
+ expression: "this == '' || this.isEmail()"
2849
+ },
2850
+ (priv.field).cel = {
2851
+ id: "string.email_empty"
2852
+ message: "value is empty, which is not a valid email address"
2853
+ expression: "this != ''"
2854
+ }
2855
+ ];
2856
+
2857
+ // `hostname` specifies that the field value must be a valid
2858
+ // hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
2859
+ // internationalized domain names (IDNs). If the field value isn't a
2860
+ // valid hostname, an error message will be generated.
2861
+ //
2862
+ // ```proto
2863
+ // message MyString {
2864
+ // // value must be a valid hostname
2865
+ // string value = 1 [(buf.validate.field).string.hostname = true];
2866
+ // }
2867
+ // ```
2868
+ bool hostname = 13 [
2869
+ (priv.field).cel = {
2870
+ id: "string.hostname"
2871
+ message: "value must be a valid hostname"
2872
+ expression: "this == '' || this.isHostname()"
2873
+ },
2874
+ (priv.field).cel = {
2875
+ id: "string.hostname_empty"
2876
+ message: "value is empty, which is not a valid hostname"
2877
+ expression: "this != ''"
2878
+ }
2879
+ ];
2880
+
2881
+ // `ip` specifies that the field value must be a valid IP
2882
+ // (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
2883
+ // If the field value isn't a valid IP address, an error message will be
2884
+ // generated.
2885
+ //
2886
+ // ```proto
2887
+ // message MyString {
2888
+ // // value must be a valid IP address
2889
+ // string value = 1 [(buf.validate.field).string.ip = true];
2890
+ // }
2891
+ // ```
2892
+ bool ip = 14 [
2893
+ (priv.field).cel = {
2894
+ id: "string.ip"
2895
+ message: "value must be a valid IP address"
2896
+ expression: "this == '' || this.isIp()"
2897
+ },
2898
+ (priv.field).cel = {
2899
+ id: "string.ip_empty"
2900
+ message: "value is empty, which is not a valid IP address"
2901
+ expression: "this != ''"
2902
+ }
2903
+ ];
2904
+
2905
+ // `ipv4` specifies that the field value must be a valid IPv4
2906
+ // address. If the field value isn't a valid IPv4 address, an error message
2907
+ // will be generated.
2908
+ //
2909
+ // ```proto
2910
+ // message MyString {
2911
+ // // value must be a valid IPv4 address
2912
+ // string value = 1 [(buf.validate.field).string.ipv4 = true];
2913
+ // }
2914
+ // ```
2915
+ bool ipv4 = 15 [
2916
+ (priv.field).cel = {
2917
+ id: "string.ipv4"
2918
+ message: "value must be a valid IPv4 address"
2919
+ expression: "this == '' || this.isIp(4)"
2920
+ },
2921
+ (priv.field).cel = {
2922
+ id: "string.ipv4_empty"
2923
+ message: "value is empty, which is not a valid IPv4 address"
2924
+ expression: "this != ''"
2925
+ }
2926
+ ];
2927
+
2928
+ // `ipv6` specifies that the field value must be a valid
2929
+ // IPv6 address, without surrounding square brackets. If the field value is
2930
+ // not a valid IPv6 address, an error message will be generated.
2931
+ //
2932
+ // ```proto
2933
+ // message MyString {
2934
+ // // value must be a valid IPv6 address
2935
+ // string value = 1 [(buf.validate.field).string.ipv6 = true];
2936
+ // }
2937
+ // ```
2938
+ bool ipv6 = 16 [
2939
+ (priv.field).cel = {
2940
+ id: "string.ipv6"
2941
+ message: "value must be a valid IPv6 address"
2942
+ expression: "this == '' || this.isIp(6)"
2943
+ },
2944
+ (priv.field).cel = {
2945
+ id: "string.ipv6_empty"
2946
+ message: "value is empty, which is not a valid IPv6 address"
2947
+ expression: "this != ''"
2948
+ }
2949
+ ];
2950
+
2951
+ // `uri` specifies that the field value must be a valid,
2952
+ // absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
2953
+ // absolute URI, an error message will be generated.
2954
+ //
2955
+ // ```proto
2956
+ // message MyString {
2957
+ // // value must be a valid URI
2958
+ // string value = 1 [(buf.validate.field).string.uri = true];
2959
+ // }
2960
+ // ```
2961
+ bool uri = 17 [
2962
+ (priv.field).cel = {
2963
+ id: "string.uri"
2964
+ message: "value must be a valid URI"
2965
+ expression: "this == '' || this.isUri()"
2966
+ },
2967
+ (priv.field).cel = {
2968
+ id: "string.uri_empty"
2969
+ message: "value is empty, which is not a valid URI"
2970
+ expression: "this != ''"
2971
+ }
2972
+ ];
2973
+
2974
+ // `uri_ref` specifies that the field value must be a valid URI
2975
+ // as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
2976
+ // field value isn't a valid URI, an error message will be generated.
2977
+ //
2978
+ // ```proto
2979
+ // message MyString {
2980
+ // // value must be a valid URI
2981
+ // string value = 1 [(buf.validate.field).string.uri_ref = true];
2982
+ // }
2983
+ // ```
2984
+ bool uri_ref = 18 [(priv.field).cel = {
2985
+ id: "string.uri_ref"
2986
+ message: "value must be a valid URI"
2987
+ expression: "this.isUriRef()"
2988
+ }];
2989
+
2990
+ // `address` specifies that the field value must be either a valid hostname
2991
+ // as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
2992
+ // (which doesn't support internationalized domain names or IDNs) or a valid
2993
+ // IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
2994
+ // message will be generated.
2995
+ //
2996
+ // ```proto
2997
+ // message MyString {
2998
+ // // value must be a valid hostname, or ip address
2999
+ // string value = 1 [(buf.validate.field).string.address = true];
3000
+ // }
3001
+ // ```
3002
+ bool address = 21 [
3003
+ (priv.field).cel = {
3004
+ id: "string.address"
3005
+ message: "value must be a valid hostname, or ip address"
3006
+ expression: "this == '' || this.isHostname() || this.isIp()"
3007
+ },
3008
+ (priv.field).cel = {
3009
+ id: "string.address_empty"
3010
+ message: "value is empty, which is not a valid hostname, or ip address"
3011
+ expression: "this != ''"
3012
+ }
3013
+ ];
3014
+
3015
+ // `uuid` specifies that the field value must be a valid UUID as defined by
3016
+ // [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
3017
+ // field value isn't a valid UUID, an error message will be generated.
3018
+ //
3019
+ // ```proto
3020
+ // message MyString {
3021
+ // // value must be a valid UUID
3022
+ // string value = 1 [(buf.validate.field).string.uuid = true];
3023
+ // }
3024
+ // ```
3025
+ bool uuid = 22 [
3026
+ (priv.field).cel = {
3027
+ id: "string.uuid"
3028
+ message: "value must be a valid UUID"
3029
+ expression: "this == '' || this.matches('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$')"
3030
+ },
3031
+ (priv.field).cel = {
3032
+ id: "string.uuid_empty"
3033
+ message: "value is empty, which is not a valid UUID"
3034
+ expression: "this != ''"
3035
+ }
3036
+ ];
3037
+
3038
+ // `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as
3039
+ // defined by [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2) with all dashes
3040
+ // omitted. If the field value isn't a valid UUID without dashes, an error message
3041
+ // will be generated.
3042
+ //
3043
+ // ```proto
3044
+ // message MyString {
3045
+ // // value must be a valid trimmed UUID
3046
+ // string value = 1 [(buf.validate.field).string.tuuid = true];
3047
+ // }
3048
+ // ```
3049
+ bool tuuid = 33 [
3050
+ (priv.field).cel = {
3051
+ id: "string.tuuid"
3052
+ message: "value must be a valid trimmed UUID"
3053
+ expression: "this == '' || this.matches('^[0-9a-fA-F]{32}$')"
3054
+ },
3055
+ (priv.field).cel = {
3056
+ id: "string.tuuid_empty"
3057
+ message: "value is empty, which is not a valid trimmed UUID"
3058
+ expression: "this != ''"
3059
+ }
3060
+ ];
3061
+
3062
+ // `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
3063
+ // address with prefix length. If the field value isn't a valid IP with prefix
3064
+ // length, an error message will be generated.
3065
+ //
3066
+ //
3067
+ // ```proto
3068
+ // message MyString {
3069
+ // // value must be a valid IP with prefix length
3070
+ // string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
3071
+ // }
3072
+ // ```
3073
+ bool ip_with_prefixlen = 26 [
3074
+ (priv.field).cel = {
3075
+ id: "string.ip_with_prefixlen"
3076
+ message: "value must be a valid IP prefix"
3077
+ expression: "this == '' || this.isIpPrefix()"
3078
+ },
3079
+ (priv.field).cel = {
3080
+ id: "string.ip_with_prefixlen_empty"
3081
+ message: "value is empty, which is not a valid IP prefix"
3082
+ expression: "this != ''"
3083
+ }
3084
+ ];
3085
+
3086
+ // `ipv4_with_prefixlen` specifies that the field value must be a valid
3087
+ // IPv4 address with prefix.
3088
+ // If the field value isn't a valid IPv4 address with prefix length,
3089
+ // an error message will be generated.
3090
+ //
3091
+ // ```proto
3092
+ // message MyString {
3093
+ // // value must be a valid IPv4 address with prefix length
3094
+ // string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
3095
+ // }
3096
+ // ```
3097
+ bool ipv4_with_prefixlen = 27 [
3098
+ (priv.field).cel = {
3099
+ id: "string.ipv4_with_prefixlen"
3100
+ message: "value must be a valid IPv4 address with prefix length"
3101
+ expression: "this == '' || this.isIpPrefix(4)"
3102
+ },
3103
+ (priv.field).cel = {
3104
+ id: "string.ipv4_with_prefixlen_empty"
3105
+ message: "value is empty, which is not a valid IPv4 address with prefix length"
3106
+ expression: "this != ''"
3107
+ }
3108
+ ];
3109
+
3110
+ // `ipv6_with_prefixlen` specifies that the field value must be a valid
3111
+ // IPv6 address with prefix length.
3112
+ // If the field value is not a valid IPv6 address with prefix length,
3113
+ // an error message will be generated.
3114
+ //
3115
+ // ```proto
3116
+ // message MyString {
3117
+ // // value must be a valid IPv6 address prefix length
3118
+ // string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
3119
+ // }
3120
+ // ```
3121
+ bool ipv6_with_prefixlen = 28 [
3122
+ (priv.field).cel = {
3123
+ id: "string.ipv6_with_prefixlen"
3124
+ message: "value must be a valid IPv6 address with prefix length"
3125
+ expression: "this == '' || this.isIpPrefix(6)"
3126
+ },
3127
+ (priv.field).cel = {
3128
+ id: "string.ipv6_with_prefixlen_empty"
3129
+ message: "value is empty, which is not a valid IPv6 address with prefix length"
3130
+ expression: "this != ''"
3131
+ }
3132
+ ];
3133
+
3134
+ // `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
3135
+ // If the field value isn't a valid IP prefix, an error message will be
3136
+ // generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
3137
+ // `127.0.0.0/16`, not `127.0.0.1/16`).
3138
+ //
3139
+ // ```proto
3140
+ // message MyString {
3141
+ // // value must be a valid IP prefix
3142
+ // string value = 1 [(buf.validate.field).string.ip_prefix = true];
3143
+ // }
3144
+ // ```
3145
+ bool ip_prefix = 29 [
3146
+ (priv.field).cel = {
3147
+ id: "string.ip_prefix"
3148
+ message: "value must be a valid IP prefix"
3149
+ expression: "this == '' || this.isIpPrefix(true)"
3150
+ },
3151
+ (priv.field).cel = {
3152
+ id: "string.ip_prefix_empty"
3153
+ message: "value is empty, which is not a valid IP prefix"
3154
+ expression: "this != ''"
3155
+ }
3156
+ ];
3157
+
3158
+ // `ipv4_prefix` specifies that the field value must be a valid IPv4
3159
+ // prefix. If the field value isn't a valid IPv4 prefix, an error message
3160
+ // will be generated. The prefix must have all zeros for the masked bits of
3161
+ // the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
3162
+ //
3163
+ // ```proto
3164
+ // message MyString {
3165
+ // // value must be a valid IPv4 prefix
3166
+ // string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
3167
+ // }
3168
+ // ```
3169
+ bool ipv4_prefix = 30 [
3170
+ (priv.field).cel = {
3171
+ id: "string.ipv4_prefix"
3172
+ message: "value must be a valid IPv4 prefix"
3173
+ expression: "this == '' || this.isIpPrefix(4, true)"
3174
+ },
3175
+ (priv.field).cel = {
3176
+ id: "string.ipv4_prefix_empty"
3177
+ message: "value is empty, which is not a valid IPv4 prefix"
3178
+ expression: "this != ''"
3179
+ }
3180
+ ];
3181
+
3182
+ // `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
3183
+ // If the field value is not a valid IPv6 prefix, an error message will be
3184
+ // generated. The prefix must have all zeros for the masked bits of the prefix
3185
+ // (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
3186
+ //
3187
+ // ```proto
3188
+ // message MyString {
3189
+ // // value must be a valid IPv6 prefix
3190
+ // string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
3191
+ // }
3192
+ // ```
3193
+ bool ipv6_prefix = 31 [
3194
+ (priv.field).cel = {
3195
+ id: "string.ipv6_prefix"
3196
+ message: "value must be a valid IPv6 prefix"
3197
+ expression: "this == '' || this.isIpPrefix(6, true)"
3198
+ },
3199
+ (priv.field).cel = {
3200
+ id: "string.ipv6_prefix_empty"
3201
+ message: "value is empty, which is not a valid IPv6 prefix"
3202
+ expression: "this != ''"
3203
+ }
3204
+ ];
3205
+
3206
+ // `host_and_port` specifies the field value must be a valid host and port
3207
+ // pair. The host must be a valid hostname or IP address while the port
3208
+ // must be in the range of 0-65535, inclusive. IPv6 addresses must be delimited
3209
+ // with square brackets (e.g., `[::1]:1234`).
3210
+ bool host_and_port = 32 [
3211
+ (priv.field).cel = {
3212
+ id: "string.host_and_port"
3213
+ message: "value must be a valid host (hostname or IP address) and port pair"
3214
+ expression: "this == '' || this.isHostAndPort(true)"
3215
+ },
3216
+ (priv.field).cel = {
3217
+ id: "string.host_and_port_empty"
3218
+ message: "value is empty, which is not a valid host and port pair"
3219
+ expression: "this != ''"
3220
+ }
3221
+ ];
3222
+
3223
+ // `well_known_regex` specifies a common well-known pattern
3224
+ // defined as a regex. If the field value doesn't match the well-known
3225
+ // regex, an error message will be generated.
3226
+ //
3227
+ // ```proto
3228
+ // message MyString {
3229
+ // // value must be a valid HTTP header value
3230
+ // string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];
3231
+ // }
3232
+ // ```
3233
+ //
3234
+ // #### KnownRegex
3235
+ //
3236
+ // `well_known_regex` contains some well-known patterns.
3237
+ //
3238
+ // | Name | Number | Description |
3239
+ // |-------------------------------|--------|-------------------------------------------|
3240
+ // | KNOWN_REGEX_UNSPECIFIED | 0 | |
3241
+ // | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2) |
3242
+ // | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
3243
+ KnownRegex well_known_regex = 24 [
3244
+ (priv.field).cel = {
3245
+ id: "string.well_known_regex.header_name"
3246
+ message: "value must be a valid HTTP header name"
3247
+ expression:
3248
+ "rules.well_known_regex != 1 || this == '' || this.matches(!has(rules.strict) || rules.strict ?"
3249
+ "'^:?[0-9a-zA-Z!#$%&\\'*+-.^_|~\\x60]+$' :"
3250
+ "'^[^\\u0000\\u000A\\u000D]+$')"
3251
+ },
3252
+ (priv.field).cel = {
3253
+ id: "string.well_known_regex.header_name_empty"
3254
+ message: "value is empty, which is not a valid HTTP header name"
3255
+ expression: "rules.well_known_regex != 1 || this != ''"
3256
+ },
3257
+ (priv.field).cel = {
3258
+ id: "string.well_known_regex.header_value"
3259
+ message: "value must be a valid HTTP header value"
3260
+ expression:
3261
+ "rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?"
3262
+ "'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$' :"
3263
+ "'^[^\\u0000\\u000A\\u000D]*$')"
3264
+ }
3265
+ ];
3266
+ }
3267
+
3268
+ // This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
3269
+ // enable strict header validation. By default, this is true, and HTTP header
3270
+ // validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
3271
+ // validations that only disallow `\r\n\0` characters, which can be used to
3272
+ // bypass header matching rules.
3273
+ //
3274
+ // ```proto
3275
+ // message MyString {
3276
+ // // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
3277
+ // string value = 1 [(buf.validate.field).string.strict = false];
3278
+ // }
3279
+ // ```
3280
+ optional bool strict = 25;
3281
+ }
3282
+
3283
+ // WellKnownRegex contain some well-known patterns.
3284
+ enum KnownRegex {
3285
+ KNOWN_REGEX_UNSPECIFIED = 0;
3286
+
3287
+ // HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2).
3288
+ KNOWN_REGEX_HTTP_HEADER_NAME = 1;
3289
+
3290
+ // HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4).
3291
+ KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
3292
+ }
3293
+
3294
+ // BytesRules describe the constraints applied to `bytes` values. These rules
3295
+ // may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
3296
+ message BytesRules {
3297
+ // `const` requires the field value to exactly match the specified bytes
3298
+ // value. If the field value doesn't match, an error message is generated.
3299
+ //
3300
+ // ```proto
3301
+ // message MyBytes {
3302
+ // // value must be "\x01\x02\x03\x04"
3303
+ // bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"];
3304
+ // }
3305
+ // ```
3306
+ optional bytes const = 1 [(priv.field).cel = {
3307
+ id: "bytes.const"
3308
+ expression: "this != rules.const ? 'value must be %x'.format([rules.const]) : ''"
3309
+ }];
3310
+
3311
+ // `len` requires the field value to have the specified length in bytes.
3312
+ // If the field value doesn't match, an error message is generated.
3313
+ //
3314
+ // ```proto
3315
+ // message MyBytes {
3316
+ // // value length must be 4 bytes.
3317
+ // optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
3318
+ // }
3319
+ // ```
3320
+ optional uint64 len = 13 [(priv.field).cel = {
3321
+ id: "bytes.len"
3322
+ expression: "uint(this.size()) != rules.len ? 'value length must be %s bytes'.format([rules.len]) : ''"
3323
+ }];
3324
+
3325
+ // `min_len` requires the field value to have at least the specified minimum
3326
+ // length in bytes.
3327
+ // If the field value doesn't meet the requirement, an error message is generated.
3328
+ //
3329
+ // ```proto
3330
+ // message MyBytes {
3331
+ // // value length must be at least 2 bytes.
3332
+ // optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
3333
+ // }
3334
+ // ```
3335
+ optional uint64 min_len = 2 [(priv.field).cel = {
3336
+ id: "bytes.min_len"
3337
+ expression: "uint(this.size()) < rules.min_len ? 'value length must be at least %s bytes'.format([rules.min_len]) : ''"
3338
+ }];
3339
+
3340
+ // `max_len` requires the field value to have at most the specified maximum
3341
+ // length in bytes.
3342
+ // If the field value exceeds the requirement, an error message is generated.
3343
+ //
3344
+ // ```proto
3345
+ // message MyBytes {
3346
+ // // value must be at most 6 bytes.
3347
+ // optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
3348
+ // }
3349
+ // ```
3350
+ optional uint64 max_len = 3 [(priv.field).cel = {
3351
+ id: "bytes.max_len"
3352
+ expression: "uint(this.size()) > rules.max_len ? 'value must be at most %s bytes'.format([rules.max_len]) : ''"
3353
+ }];
3354
+
3355
+ // `pattern` requires the field value to match the specified regular
3356
+ // expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
3357
+ // The value of the field must be valid UTF-8 or validation will fail with a
3358
+ // runtime error.
3359
+ // If the field value doesn't match the pattern, an error message is generated.
3360
+ //
3361
+ // ```proto
3362
+ // message MyBytes {
3363
+ // // value must match regex pattern "^[a-zA-Z0-9]+$".
3364
+ // optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
3365
+ // }
3366
+ // ```
3367
+ optional string pattern = 4 [(priv.field).cel = {
3368
+ id: "bytes.pattern"
3369
+ expression: "!string(this).matches(rules.pattern) ? 'value must match regex pattern `%s`'.format([rules.pattern]) : ''"
3370
+ }];
3371
+
3372
+ // `prefix` requires the field value to have the specified bytes at the
3373
+ // beginning of the string.
3374
+ // If the field value doesn't meet the requirement, an error message is generated.
3375
+ //
3376
+ // ```proto
3377
+ // message MyBytes {
3378
+ // // value does not have prefix \x01\x02
3379
+ // optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"];
3380
+ // }
3381
+ // ```
3382
+ optional bytes prefix = 5 [(priv.field).cel = {
3383
+ id: "bytes.prefix"
3384
+ expression: "!this.startsWith(rules.prefix) ? 'value does not have prefix %x'.format([rules.prefix]) : ''"
3385
+ }];
3386
+
3387
+ // `suffix` requires the field value to have the specified bytes at the end
3388
+ // of the string.
3389
+ // If the field value doesn't meet the requirement, an error message is generated.
3390
+ //
3391
+ // ```proto
3392
+ // message MyBytes {
3393
+ // // value does not have suffix \x03\x04
3394
+ // optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"];
3395
+ // }
3396
+ // ```
3397
+ optional bytes suffix = 6 [(priv.field).cel = {
3398
+ id: "bytes.suffix"
3399
+ expression: "!this.endsWith(rules.suffix) ? 'value does not have suffix %x'.format([rules.suffix]) : ''"
3400
+ }];
3401
+
3402
+ // `contains` requires the field value to have the specified bytes anywhere in
3403
+ // the string.
3404
+ // If the field value doesn't meet the requirement, an error message is generated.
3405
+ //
3406
+ // ```protobuf
3407
+ // message MyBytes {
3408
+ // // value does not contain \x02\x03
3409
+ // optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"];
3410
+ // }
3411
+ // ```
3412
+ optional bytes contains = 7 [(priv.field).cel = {
3413
+ id: "bytes.contains"
3414
+ expression: "!this.contains(rules.contains) ? 'value does not contain %x'.format([rules.contains]) : ''"
3415
+ }];
3416
+
3417
+ // `in` requires the field value to be equal to one of the specified
3418
+ // values. If the field value doesn't match any of the specified values, an
3419
+ // error message is generated.
3420
+ //
3421
+ // ```protobuf
3422
+ // message MyBytes {
3423
+ // // value must in ["\x01\x02", "\x02\x03", "\x03\x04"]
3424
+ // optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3425
+ // }
3426
+ // ```
3427
+ repeated bytes in = 8 [(priv.field).cel = {
3428
+ id: "bytes.in"
3429
+ expression: "dyn(rules)['in'].size() > 0 && !(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
3430
+ }];
3431
+
3432
+ // `not_in` requires the field value to be not equal to any of the specified
3433
+ // values.
3434
+ // If the field value matches any of the specified values, an error message is
3435
+ // generated.
3436
+ //
3437
+ // ```proto
3438
+ // message MyBytes {
3439
+ // // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"]
3440
+ // optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3441
+ // }
3442
+ // ```
3443
+ repeated bytes not_in = 9 [(priv.field).cel = {
3444
+ id: "bytes.not_in"
3445
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
3446
+ }];
3447
+
3448
+ // WellKnown rules provide advanced constraints against common byte
3449
+ // patterns
3450
+ oneof well_known {
3451
+ // `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
3452
+ // If the field value doesn't meet this constraint, an error message is generated.
3453
+ //
3454
+ // ```proto
3455
+ // message MyBytes {
3456
+ // // value must be a valid IP address
3457
+ // optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
3458
+ // }
3459
+ // ```
3460
+ bool ip = 10 [
3461
+ (priv.field).cel = {
3462
+ id: "bytes.ip"
3463
+ message: "value must be a valid IP address"
3464
+ expression: "this.size() == 0 || this.size() == 4 || this.size() == 16"
3465
+ },
3466
+ (priv.field).cel = {
3467
+ id: "bytes.ip_empty"
3468
+ message: "value is empty, which is not a valid IP address"
3469
+ expression: "this.size() != 0"
3470
+ }
3471
+ ];
3472
+
3473
+ // `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
3474
+ // If the field value doesn't meet this constraint, an error message is generated.
3475
+ //
3476
+ // ```proto
3477
+ // message MyBytes {
3478
+ // // value must be a valid IPv4 address
3479
+ // optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
3480
+ // }
3481
+ // ```
3482
+ bool ipv4 = 11 [
3483
+ (priv.field).cel = {
3484
+ id: "bytes.ipv4"
3485
+ message: "value must be a valid IPv4 address"
3486
+ expression: "this.size() == 0 || this.size() == 4"
3487
+ },
3488
+ (priv.field).cel = {
3489
+ id: "bytes.ipv4_empty"
3490
+ message: "value is empty, which is not a valid IPv4 address"
3491
+ expression: "this.size() != 0"
3492
+ }
3493
+ ];
3494
+
3495
+ // `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
3496
+ // If the field value doesn't meet this constraint, an error message is generated.
3497
+ // ```proto
3498
+ // message MyBytes {
3499
+ // // value must be a valid IPv6 address
3500
+ // optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
3501
+ // }
3502
+ // ```
3503
+ bool ipv6 = 12 [
3504
+ (priv.field).cel = {
3505
+ id: "bytes.ipv6"
3506
+ message: "value must be a valid IPv6 address"
3507
+ expression: "this.size() == 0 || this.size() == 16"
3508
+ },
3509
+ (priv.field).cel = {
3510
+ id: "bytes.ipv6_empty"
3511
+ message: "value is empty, which is not a valid IPv6 address"
3512
+ expression: "this.size() != 0"
3513
+ }
3514
+ ];
3515
+ }
3516
+ }
3517
+
3518
+ // EnumRules describe the constraints applied to `enum` values.
3519
+ message EnumRules {
3520
+ // `const` requires the field value to exactly match the specified enum value.
3521
+ // If the field value doesn't match, an error message is generated.
3522
+ //
3523
+ // ```proto
3524
+ // enum MyEnum {
3525
+ // MY_ENUM_UNSPECIFIED = 0;
3526
+ // MY_ENUM_VALUE1 = 1;
3527
+ // MY_ENUM_VALUE2 = 2;
3528
+ // }
3529
+ //
3530
+ // message MyMessage {
3531
+ // // The field `value` must be exactly MY_ENUM_VALUE1.
3532
+ // MyEnum value = 1 [(buf.validate.field).enum.const = 1];
3533
+ // }
3534
+ // ```
3535
+ optional int32 const = 1 [(priv.field).cel = {
3536
+ id: "enum.const"
3537
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
3538
+ }];
3539
+
3540
+ // `defined_only` requires the field value to be one of the defined values for
3541
+ // this enum, failing on any undefined value.
3542
+ //
3543
+ // ```proto
3544
+ // enum MyEnum {
3545
+ // MY_ENUM_UNSPECIFIED = 0;
3546
+ // MY_ENUM_VALUE1 = 1;
3547
+ // MY_ENUM_VALUE2 = 2;
3548
+ // }
3549
+ //
3550
+ // message MyMessage {
3551
+ // // The field `value` must be a defined value of MyEnum.
3552
+ // MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
3553
+ // }
3554
+ // ```
3555
+ optional bool defined_only = 2;
3556
+
3557
+ // `in` requires the field value to be equal to one of the
3558
+ //specified enum values. If the field value doesn't match any of the
3559
+ //specified values, an error message is generated.
3560
+ //
3561
+ // ```proto
3562
+ // enum MyEnum {
3563
+ // MY_ENUM_UNSPECIFIED = 0;
3564
+ // MY_ENUM_VALUE1 = 1;
3565
+ // MY_ENUM_VALUE2 = 2;
3566
+ // }
3567
+ //
3568
+ // message MyMessage {
3569
+ // // The field `value` must be equal to one of the specified values.
3570
+ // MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];
3571
+ // }
3572
+ // ```
3573
+ repeated int32 in = 3 [(priv.field).cel = {
3574
+ id: "enum.in"
3575
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
3576
+ }];
3577
+
3578
+ // `not_in` requires the field value to be not equal to any of the
3579
+ //specified enum values. If the field value matches one of the specified
3580
+ // values, an error message is generated.
3581
+ //
3582
+ // ```proto
3583
+ // enum MyEnum {
3584
+ // MY_ENUM_UNSPECIFIED = 0;
3585
+ // MY_ENUM_VALUE1 = 1;
3586
+ // MY_ENUM_VALUE2 = 2;
3587
+ // }
3588
+ //
3589
+ // message MyMessage {
3590
+ // // The field `value` must not be equal to any of the specified values.
3591
+ // MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];
3592
+ // }
3593
+ // ```
3594
+ repeated int32 not_in = 4 [(priv.field).cel = {
3595
+ id: "enum.not_in"
3596
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
3597
+ }];
3598
+ }
3599
+
3600
+ // RepeatedRules describe the constraints applied to `repeated` values.
3601
+ message RepeatedRules {
3602
+ // `min_items` requires that this field must contain at least the specified
3603
+ // minimum number of items.
3604
+ //
3605
+ // Note that `min_items = 1` is equivalent to setting a field as `required`.
3606
+ //
3607
+ // ```proto
3608
+ // message MyRepeated {
3609
+ // // value must contain at least 2 items
3610
+ // repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
3611
+ // }
3612
+ // ```
3613
+ optional uint64 min_items = 1 [(priv.field).cel = {
3614
+ id: "repeated.min_items"
3615
+ expression: "uint(this.size()) < rules.min_items ? 'value must contain at least %d item(s)'.format([rules.min_items]) : ''"
3616
+ }];
3617
+
3618
+ // `max_items` denotes that this field must not exceed a
3619
+ // certain number of items as the upper limit. If the field contains more
3620
+ // items than specified, an error message will be generated, requiring the
3621
+ // field to maintain no more than the specified number of items.
3622
+ //
3623
+ // ```proto
3624
+ // message MyRepeated {
3625
+ // // value must contain no more than 3 item(s)
3626
+ // repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
3627
+ // }
3628
+ // ```
3629
+ optional uint64 max_items = 2 [(priv.field).cel = {
3630
+ id: "repeated.max_items"
3631
+ expression: "uint(this.size()) > rules.max_items ? 'value must contain no more than %s item(s)'.format([rules.max_items]) : ''"
3632
+ }];
3633
+
3634
+ // `unique` indicates that all elements in this field must
3635
+ // be unique. This constraint is strictly applicable to scalar and enum
3636
+ // types, with message types not being supported.
3637
+ //
3638
+ // ```proto
3639
+ // message MyRepeated {
3640
+ // // repeated value must contain unique items
3641
+ // repeated string value = 1 [(buf.validate.field).repeated.unique = true];
3642
+ // }
3643
+ // ```
3644
+ optional bool unique = 3 [(priv.field).cel = {
3645
+ id: "repeated.unique"
3646
+ message: "repeated value must contain unique items"
3647
+ expression: "this.unique()"
3648
+ }];
3649
+
3650
+ // `items` details the constraints to be applied to each item
3651
+ // in the field. Even for repeated message fields, validation is executed
3652
+ // against each item unless skip is explicitly specified.
3653
+ //
3654
+ // ```proto
3655
+ // message MyRepeated {
3656
+ // // The items in the field `value` must follow the specified constraints.
3657
+ // repeated string value = 1 [(buf.validate.field).repeated.items = {
3658
+ // string: {
3659
+ // min_len: 3
3660
+ // max_len: 10
3661
+ // }
3662
+ // }];
3663
+ // }
3664
+ // ```
3665
+ optional FieldConstraints items = 4;
3666
+ }
3667
+
3668
+ // MapRules describe the constraints applied to `map` values.
3669
+ message MapRules {
3670
+ //Specifies the minimum number of key-value pairs allowed. If the field has
3671
+ // fewer key-value pairs than specified, an error message is generated.
3672
+ //
3673
+ // ```proto
3674
+ // message MyMap {
3675
+ // // The field `value` must have at least 2 key-value pairs.
3676
+ // map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];
3677
+ // }
3678
+ // ```
3679
+ optional uint64 min_pairs = 1 [(priv.field).cel = {
3680
+ id: "map.min_pairs"
3681
+ expression: "uint(this.size()) < rules.min_pairs ? 'map must be at least %d entries'.format([rules.min_pairs]) : ''"
3682
+ }];
3683
+
3684
+ //Specifies the maximum number of key-value pairs allowed. If the field has
3685
+ // more key-value pairs than specified, an error message is generated.
3686
+ //
3687
+ // ```proto
3688
+ // message MyMap {
3689
+ // // The field `value` must have at most 3 key-value pairs.
3690
+ // map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];
3691
+ // }
3692
+ // ```
3693
+ optional uint64 max_pairs = 2 [(priv.field).cel = {
3694
+ id: "map.max_pairs"
3695
+ expression: "uint(this.size()) > rules.max_pairs ? 'map must be at most %d entries'.format([rules.max_pairs]) : ''"
3696
+ }];
3697
+
3698
+ //Specifies the constraints to be applied to each key in the field.
3699
+ //
3700
+ // ```proto
3701
+ // message MyMap {
3702
+ // // The keys in the field `value` must follow the specified constraints.
3703
+ // map<string, string> value = 1 [(buf.validate.field).map.keys = {
3704
+ // string: {
3705
+ // min_len: 3
3706
+ // max_len: 10
3707
+ // }
3708
+ // }];
3709
+ // }
3710
+ // ```
3711
+ optional FieldConstraints keys = 4;
3712
+
3713
+ //Specifies the constraints to be applied to the value of each key in the
3714
+ // field. Message values will still have their validations evaluated unless
3715
+ //skip is specified here.
3716
+ //
3717
+ // ```proto
3718
+ // message MyMap {
3719
+ // // The values in the field `value` must follow the specified constraints.
3720
+ // map<string, string> value = 1 [(buf.validate.field).map.values = {
3721
+ // string: {
3722
+ // min_len: 5
3723
+ // max_len: 20
3724
+ // }
3725
+ // }];
3726
+ // }
3727
+ // ```
3728
+ optional FieldConstraints values = 5;
3729
+ }
3730
+
3731
+ // AnyRules describe constraints applied exclusively to the `google.protobuf.Any` well-known type.
3732
+ message AnyRules {
3733
+ // `in` requires the field's `type_url` to be equal to one of the
3734
+ //specified values. If it doesn't match any of the specified values, an error
3735
+ // message is generated.
3736
+ //
3737
+ // ```proto
3738
+ // message MyAny {
3739
+ // // The `value` field must have a `type_url` equal to one of the specified values.
3740
+ // google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
3741
+ // }
3742
+ // ```
3743
+ repeated string in = 2;
3744
+
3745
+ // requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
3746
+ //
3747
+ // ```proto
3748
+ // message MyAny {
3749
+ // // The field `value` must not have a `type_url` equal to any of the specified values.
3750
+ // google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
3751
+ // }
3752
+ // ```
3753
+ repeated string not_in = 3;
3754
+ }
3755
+
3756
+ // DurationRules describe the constraints applied exclusively to the `google.protobuf.Duration` well-known type.
3757
+ message DurationRules {
3758
+ // `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
3759
+ // If the field's value deviates from the specified value, an error message
3760
+ // will be generated.
3761
+ //
3762
+ // ```proto
3763
+ // message MyDuration {
3764
+ // // value must equal 5s
3765
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
3766
+ // }
3767
+ // ```
3768
+ optional google.protobuf.Duration const = 2 [(priv.field).cel = {
3769
+ id: "duration.const"
3770
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
3771
+ }];
3772
+ oneof less_than {
3773
+ // `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
3774
+ // exclusive. If the field's value is greater than or equal to the specified
3775
+ // value, an error message will be generated.
3776
+ //
3777
+ // ```proto
3778
+ // message MyDuration {
3779
+ // // value must be less than 5s
3780
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
3781
+ // }
3782
+ // ```
3783
+ google.protobuf.Duration lt = 3 [(priv.field).cel = {
3784
+ id: "duration.lt"
3785
+ expression:
3786
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
3787
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
3788
+ }];
3789
+
3790
+ // `lte` indicates that the field must be less than or equal to the specified
3791
+ // value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
3792
+ // an error message will be generated.
3793
+ //
3794
+ // ```proto
3795
+ // message MyDuration {
3796
+ // // value must be less than or equal to 10s
3797
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
3798
+ // }
3799
+ // ```
3800
+ google.protobuf.Duration lte = 4 [(priv.field).cel = {
3801
+ id: "duration.lte"
3802
+ expression:
3803
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
3804
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
3805
+ }];
3806
+ }
3807
+ oneof greater_than {
3808
+ // `gt` requires the duration field value to be greater than the specified
3809
+ // value (exclusive). If the value of `gt` is larger than a specified `lt`
3810
+ // or `lte`, the range is reversed, and the field value must be outside the
3811
+ // specified range. If the field value doesn't meet the required conditions,
3812
+ // an error message is generated.
3813
+ //
3814
+ // ```proto
3815
+ // message MyDuration {
3816
+ // // duration must be greater than 5s [duration.gt]
3817
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
3818
+ //
3819
+ // // duration must be greater than 5s and less than 10s [duration.gt_lt]
3820
+ // google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
3821
+ //
3822
+ // // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
3823
+ // google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
3824
+ // }
3825
+ // ```
3826
+ google.protobuf.Duration gt = 5 [
3827
+ (priv.field).cel = {
3828
+ id: "duration.gt"
3829
+ expression:
3830
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
3831
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
3832
+ },
3833
+ (priv.field).cel = {
3834
+ id: "duration.gt_lt"
3835
+ expression:
3836
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
3837
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
3838
+ },
3839
+ (priv.field).cel = {
3840
+ id: "duration.gt_lt_exclusive"
3841
+ expression:
3842
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
3843
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
3844
+ },
3845
+ (priv.field).cel = {
3846
+ id: "duration.gt_lte"
3847
+ expression:
3848
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
3849
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
3850
+ },
3851
+ (priv.field).cel = {
3852
+ id: "duration.gt_lte_exclusive"
3853
+ expression:
3854
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
3855
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
3856
+ }
3857
+ ];
3858
+
3859
+ // `gte` requires the duration field value to be greater than or equal to the
3860
+ // specified value (exclusive). If the value of `gte` is larger than a
3861
+ // specified `lt` or `lte`, the range is reversed, and the field value must
3862
+ // be outside the specified range. If the field value doesn't meet the
3863
+ // required conditions, an error message is generated.
3864
+ //
3865
+ // ```proto
3866
+ // message MyDuration {
3867
+ // // duration must be greater than or equal to 5s [duration.gte]
3868
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
3869
+ //
3870
+ // // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
3871
+ // google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
3872
+ //
3873
+ // // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
3874
+ // google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
3875
+ // }
3876
+ // ```
3877
+ google.protobuf.Duration gte = 6 [
3878
+ (priv.field).cel = {
3879
+ id: "duration.gte"
3880
+ expression:
3881
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
3882
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
3883
+ },
3884
+ (priv.field).cel = {
3885
+ id: "duration.gte_lt"
3886
+ expression:
3887
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
3888
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
3889
+ },
3890
+ (priv.field).cel = {
3891
+ id: "duration.gte_lt_exclusive"
3892
+ expression:
3893
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
3894
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
3895
+ },
3896
+ (priv.field).cel = {
3897
+ id: "duration.gte_lte"
3898
+ expression:
3899
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
3900
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
3901
+ },
3902
+ (priv.field).cel = {
3903
+ id: "duration.gte_lte_exclusive"
3904
+ expression:
3905
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
3906
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
3907
+ }
3908
+ ];
3909
+ }
3910
+
3911
+ // `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
3912
+ // If the field's value doesn't correspond to any of the specified values,
3913
+ // an error message will be generated.
3914
+ //
3915
+ // ```proto
3916
+ // message MyDuration {
3917
+ // // value must be in list [1s, 2s, 3s]
3918
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
3919
+ // }
3920
+ // ```
3921
+ repeated google.protobuf.Duration in = 7 [(priv.field).cel = {
3922
+ id: "duration.in"
3923
+ expression: "!(this in dyn(rules)['in']) ? 'value must be in list %s'.format([dyn(rules)['in']]) : ''"
3924
+ }];
3925
+
3926
+ // `not_in` denotes that the field must not be equal to
3927
+ // any of the specified values of the `google.protobuf.Duration` type.
3928
+ // If the field's value matches any of these values, an error message will be
3929
+ // generated.
3930
+ //
3931
+ // ```proto
3932
+ // message MyDuration {
3933
+ // // value must not be in list [1s, 2s, 3s]
3934
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
3935
+ // }
3936
+ // ```
3937
+ repeated google.protobuf.Duration not_in = 8 [(priv.field).cel = {
3938
+ id: "duration.not_in"
3939
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
3940
+ }];
3941
+ }
3942
+
3943
+ // TimestampRules describe the constraints applied exclusively to the `google.protobuf.Timestamp` well-known type.
3944
+ message TimestampRules {
3945
+ // `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
3946
+ //
3947
+ // ```proto
3948
+ // message MyTimestamp {
3949
+ // // value must equal 2023-05-03T10:00:00Z
3950
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
3951
+ // }
3952
+ // ```
3953
+ optional google.protobuf.Timestamp const = 2 [(priv.field).cel = {
3954
+ id: "timestamp.const"
3955
+ expression: "this != rules.const ? 'value must equal %s'.format([rules.const]) : ''"
3956
+ }];
3957
+ oneof less_than {
3958
+ // requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.
3959
+ //
3960
+ // ```proto
3961
+ // message MyDuration {
3962
+ // // duration must be less than 'P3D' [duration.lt]
3963
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
3964
+ // }
3965
+ // ```
3966
+ google.protobuf.Timestamp lt = 3 [(priv.field).cel = {
3967
+ id: "timestamp.lt"
3968
+ expression:
3969
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
3970
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
3971
+ }];
3972
+
3973
+ // requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.
3974
+ //
3975
+ // ```proto
3976
+ // message MyTimestamp {
3977
+ // // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
3978
+ // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
3979
+ // }
3980
+ // ```
3981
+ google.protobuf.Timestamp lte = 4 [(priv.field).cel = {
3982
+ id: "timestamp.lte"
3983
+ expression:
3984
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
3985
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
3986
+ }];
3987
+
3988
+ // `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
3989
+ //
3990
+ // ```proto
3991
+ // message MyTimestamp {
3992
+ // // value must be less than now
3993
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
3994
+ // }
3995
+ // ```
3996
+ bool lt_now = 7 [(priv.field).cel = {
3997
+ id: "timestamp.lt_now"
3998
+ expression: "this > now ? 'value must be less than now' : ''"
3999
+ }];
4000
+ }
4001
+ oneof greater_than {
4002
+ // `gt` requires the timestamp field value to be greater than the specified
4003
+ // value (exclusive). If the value of `gt` is larger than a specified `lt`
4004
+ // or `lte`, the range is reversed, and the field value must be outside the
4005
+ // specified range. If the field value doesn't meet the required conditions,
4006
+ // an error message is generated.
4007
+ //
4008
+ // ```proto
4009
+ // message MyTimestamp {
4010
+ // // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
4011
+ // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
4012
+ //
4013
+ // // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
4014
+ // google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4015
+ //
4016
+ // // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
4017
+ // google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4018
+ // }
4019
+ // ```
4020
+ google.protobuf.Timestamp gt = 5 [
4021
+ (priv.field).cel = {
4022
+ id: "timestamp.gt"
4023
+ expression:
4024
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
4025
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
4026
+ },
4027
+ (priv.field).cel = {
4028
+ id: "timestamp.gt_lt"
4029
+ expression:
4030
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
4031
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
4032
+ },
4033
+ (priv.field).cel = {
4034
+ id: "timestamp.gt_lt_exclusive"
4035
+ expression:
4036
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
4037
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
4038
+ },
4039
+ (priv.field).cel = {
4040
+ id: "timestamp.gt_lte"
4041
+ expression:
4042
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
4043
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
4044
+ },
4045
+ (priv.field).cel = {
4046
+ id: "timestamp.gt_lte_exclusive"
4047
+ expression:
4048
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
4049
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
4050
+ }
4051
+ ];
4052
+
4053
+ // `gte` requires the timestamp field value to be greater than or equal to the
4054
+ // specified value (exclusive). If the value of `gte` is larger than a
4055
+ // specified `lt` or `lte`, the range is reversed, and the field value
4056
+ // must be outside the specified range. If the field value doesn't meet
4057
+ // the required conditions, an error message is generated.
4058
+ //
4059
+ // ```proto
4060
+ // message MyTimestamp {
4061
+ // // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
4062
+ // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
4063
+ //
4064
+ // // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
4065
+ // google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4066
+ //
4067
+ // // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
4068
+ // google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4069
+ // }
4070
+ // ```
4071
+ google.protobuf.Timestamp gte = 6 [
4072
+ (priv.field).cel = {
4073
+ id: "timestamp.gte"
4074
+ expression:
4075
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
4076
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
4077
+ },
4078
+ (priv.field).cel = {
4079
+ id: "timestamp.gte_lt"
4080
+ expression:
4081
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
4082
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
4083
+ },
4084
+ (priv.field).cel = {
4085
+ id: "timestamp.gte_lt_exclusive"
4086
+ expression:
4087
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
4088
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
4089
+ },
4090
+ (priv.field).cel = {
4091
+ id: "timestamp.gte_lte"
4092
+ expression:
4093
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
4094
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
4095
+ },
4096
+ (priv.field).cel = {
4097
+ id: "timestamp.gte_lte_exclusive"
4098
+ expression:
4099
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
4100
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
4101
+ }
4102
+ ];
4103
+
4104
+ // `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
4105
+ //
4106
+ // ```proto
4107
+ // message MyTimestamp {
4108
+ // // value must be greater than now
4109
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
4110
+ // }
4111
+ // ```
4112
+ bool gt_now = 8 [(priv.field).cel = {
4113
+ id: "timestamp.gt_now"
4114
+ expression: "this < now ? 'value must be greater than now' : ''"
4115
+ }];
4116
+ }
4117
+
4118
+ // `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
4119
+ //
4120
+ // ```proto
4121
+ // message MyTimestamp {
4122
+ // // value must be within 1 hour of now
4123
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
4124
+ // }
4125
+ // ```
4126
+ optional google.protobuf.Duration within = 9 [(priv.field).cel = {
4127
+ id: "timestamp.within"
4128
+ expression: "this < now-rules.within || this > now+rules.within ? 'value must be within %s of now'.format([rules.within]) : ''"
4129
+ }];
4130
+ }