planetscale 0.1.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 (378) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +24 -0
  3. data/.github/workflows/gem-push.yml +38 -0
  4. data/.github/workflows/licensed.yml +43 -0
  5. data/.gitignore +10 -0
  6. data/.licensed.yml +9 -0
  7. data/.licenses/go/github.com/armon/circbuf.dep.yml +31 -0
  8. data/.licenses/go/github.com/gorilla/mux.dep.yml +41 -0
  9. data/.licenses/go/github.com/hashicorp/go-cleanhttp.dep.yml +375 -0
  10. data/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +32 -0
  11. data/.licenses/go/github.com/pkg/errors.dep.yml +36 -0
  12. data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +160 -0
  13. data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +180 -0
  14. data/.licenses/go/go.uber.org/atomic.dep.yml +31 -0
  15. data/.licenses/go/go.uber.org/multierr.dep.yml +30 -0
  16. data/.licenses/go/go.uber.org/zap.dep.yml +30 -0
  17. data/.licenses/go/go.uber.org/zap/buffer.dep.yml +30 -0
  18. data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +30 -0
  19. data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +30 -0
  20. data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +31 -0
  21. data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +31 -0
  22. data/.licenses/go/golang.org/x/net/context/ctxhttp.dep.yml +63 -0
  23. data/.licenses/go/golang.org/x/oauth2.dep.yml +44 -0
  24. data/.licenses/go/golang.org/x/oauth2/internal.dep.yml +38 -0
  25. data/.ruby_version +1 -0
  26. data/Gemfile +8 -0
  27. data/LICENSE +201 -0
  28. data/README.md +88 -0
  29. data/Rakefile +10 -0
  30. data/bin/console +15 -0
  31. data/bin/setup +17 -0
  32. data/controller.go +255 -0
  33. data/go.mod +16 -0
  34. data/go.sum +428 -0
  35. data/lib/generators/planetscale/install_generator.rb +58 -0
  36. data/lib/planetscale.rb +137 -0
  37. data/lib/planetscale/version.rb +5 -0
  38. data/planetscale.gemspec +44 -0
  39. data/proxy.go +128 -0
  40. data/vendor/github.com/armon/circbuf/.gitignore +22 -0
  41. data/vendor/github.com/armon/circbuf/LICENSE +20 -0
  42. data/vendor/github.com/armon/circbuf/README.md +28 -0
  43. data/vendor/github.com/armon/circbuf/circbuf.go +92 -0
  44. data/vendor/github.com/armon/circbuf/go.mod +1 -0
  45. data/vendor/github.com/golang/protobuf/AUTHORS +3 -0
  46. data/vendor/github.com/golang/protobuf/CONTRIBUTORS +3 -0
  47. data/vendor/github.com/golang/protobuf/LICENSE +28 -0
  48. data/vendor/github.com/golang/protobuf/proto/buffer.go +324 -0
  49. data/vendor/github.com/golang/protobuf/proto/defaults.go +63 -0
  50. data/vendor/github.com/golang/protobuf/proto/deprecated.go +113 -0
  51. data/vendor/github.com/golang/protobuf/proto/discard.go +58 -0
  52. data/vendor/github.com/golang/protobuf/proto/extensions.go +356 -0
  53. data/vendor/github.com/golang/protobuf/proto/properties.go +306 -0
  54. data/vendor/github.com/golang/protobuf/proto/proto.go +167 -0
  55. data/vendor/github.com/golang/protobuf/proto/registry.go +317 -0
  56. data/vendor/github.com/golang/protobuf/proto/text_decode.go +801 -0
  57. data/vendor/github.com/golang/protobuf/proto/text_encode.go +560 -0
  58. data/vendor/github.com/golang/protobuf/proto/wire.go +78 -0
  59. data/vendor/github.com/golang/protobuf/proto/wrappers.go +34 -0
  60. data/vendor/github.com/gorilla/mux/AUTHORS +8 -0
  61. data/vendor/github.com/gorilla/mux/LICENSE +27 -0
  62. data/vendor/github.com/gorilla/mux/README.md +805 -0
  63. data/vendor/github.com/gorilla/mux/doc.go +306 -0
  64. data/vendor/github.com/gorilla/mux/go.mod +3 -0
  65. data/vendor/github.com/gorilla/mux/middleware.go +74 -0
  66. data/vendor/github.com/gorilla/mux/mux.go +606 -0
  67. data/vendor/github.com/gorilla/mux/regexp.go +388 -0
  68. data/vendor/github.com/gorilla/mux/route.go +736 -0
  69. data/vendor/github.com/gorilla/mux/test_helpers.go +19 -0
  70. data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +363 -0
  71. data/vendor/github.com/hashicorp/go-cleanhttp/README.md +30 -0
  72. data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +58 -0
  73. data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +20 -0
  74. data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +3 -0
  75. data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +48 -0
  76. data/vendor/github.com/mitchellh/go-homedir/LICENSE +21 -0
  77. data/vendor/github.com/mitchellh/go-homedir/README.md +14 -0
  78. data/vendor/github.com/mitchellh/go-homedir/go.mod +1 -0
  79. data/vendor/github.com/mitchellh/go-homedir/homedir.go +167 -0
  80. data/vendor/github.com/pkg/errors/.gitignore +24 -0
  81. data/vendor/github.com/pkg/errors/.travis.yml +10 -0
  82. data/vendor/github.com/pkg/errors/LICENSE +23 -0
  83. data/vendor/github.com/pkg/errors/Makefile +44 -0
  84. data/vendor/github.com/pkg/errors/README.md +59 -0
  85. data/vendor/github.com/pkg/errors/appveyor.yml +32 -0
  86. data/vendor/github.com/pkg/errors/errors.go +288 -0
  87. data/vendor/github.com/pkg/errors/go113.go +38 -0
  88. data/vendor/github.com/pkg/errors/stack.go +177 -0
  89. data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +139 -0
  90. data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +258 -0
  91. data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +142 -0
  92. data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +305 -0
  93. data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +131 -0
  94. data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +368 -0
  95. data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +78 -0
  96. data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +163 -0
  97. data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +467 -0
  98. data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +73 -0
  99. data/vendor/go.uber.org/atomic/.codecov.yml +19 -0
  100. data/vendor/go.uber.org/atomic/.gitignore +12 -0
  101. data/vendor/go.uber.org/atomic/.travis.yml +27 -0
  102. data/vendor/go.uber.org/atomic/CHANGELOG.md +76 -0
  103. data/vendor/go.uber.org/atomic/LICENSE.txt +19 -0
  104. data/vendor/go.uber.org/atomic/Makefile +78 -0
  105. data/vendor/go.uber.org/atomic/README.md +63 -0
  106. data/vendor/go.uber.org/atomic/bool.go +81 -0
  107. data/vendor/go.uber.org/atomic/bool_ext.go +53 -0
  108. data/vendor/go.uber.org/atomic/doc.go +23 -0
  109. data/vendor/go.uber.org/atomic/duration.go +82 -0
  110. data/vendor/go.uber.org/atomic/duration_ext.go +40 -0
  111. data/vendor/go.uber.org/atomic/error.go +51 -0
  112. data/vendor/go.uber.org/atomic/error_ext.go +39 -0
  113. data/vendor/go.uber.org/atomic/float64.go +76 -0
  114. data/vendor/go.uber.org/atomic/float64_ext.go +47 -0
  115. data/vendor/go.uber.org/atomic/gen.go +26 -0
  116. data/vendor/go.uber.org/atomic/go.mod +8 -0
  117. data/vendor/go.uber.org/atomic/go.sum +9 -0
  118. data/vendor/go.uber.org/atomic/int32.go +102 -0
  119. data/vendor/go.uber.org/atomic/int64.go +102 -0
  120. data/vendor/go.uber.org/atomic/nocmp.go +35 -0
  121. data/vendor/go.uber.org/atomic/string.go +54 -0
  122. data/vendor/go.uber.org/atomic/string_ext.go +43 -0
  123. data/vendor/go.uber.org/atomic/uint32.go +102 -0
  124. data/vendor/go.uber.org/atomic/uint64.go +102 -0
  125. data/vendor/go.uber.org/atomic/value.go +31 -0
  126. data/vendor/go.uber.org/multierr/.codecov.yml +15 -0
  127. data/vendor/go.uber.org/multierr/.gitignore +4 -0
  128. data/vendor/go.uber.org/multierr/.travis.yml +23 -0
  129. data/vendor/go.uber.org/multierr/CHANGELOG.md +60 -0
  130. data/vendor/go.uber.org/multierr/LICENSE.txt +19 -0
  131. data/vendor/go.uber.org/multierr/Makefile +42 -0
  132. data/vendor/go.uber.org/multierr/README.md +23 -0
  133. data/vendor/go.uber.org/multierr/error.go +449 -0
  134. data/vendor/go.uber.org/multierr/glide.yaml +8 -0
  135. data/vendor/go.uber.org/multierr/go.mod +8 -0
  136. data/vendor/go.uber.org/multierr/go.sum +11 -0
  137. data/vendor/go.uber.org/multierr/go113.go +52 -0
  138. data/vendor/go.uber.org/zap/.codecov.yml +17 -0
  139. data/vendor/go.uber.org/zap/.gitignore +32 -0
  140. data/vendor/go.uber.org/zap/.readme.tmpl +109 -0
  141. data/vendor/go.uber.org/zap/.travis.yml +23 -0
  142. data/vendor/go.uber.org/zap/CHANGELOG.md +432 -0
  143. data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +75 -0
  144. data/vendor/go.uber.org/zap/CONTRIBUTING.md +81 -0
  145. data/vendor/go.uber.org/zap/FAQ.md +156 -0
  146. data/vendor/go.uber.org/zap/LICENSE.txt +19 -0
  147. data/vendor/go.uber.org/zap/Makefile +63 -0
  148. data/vendor/go.uber.org/zap/README.md +134 -0
  149. data/vendor/go.uber.org/zap/array.go +320 -0
  150. data/vendor/go.uber.org/zap/buffer/buffer.go +123 -0
  151. data/vendor/go.uber.org/zap/buffer/pool.go +49 -0
  152. data/vendor/go.uber.org/zap/checklicense.sh +17 -0
  153. data/vendor/go.uber.org/zap/config.go +264 -0
  154. data/vendor/go.uber.org/zap/doc.go +113 -0
  155. data/vendor/go.uber.org/zap/encoder.go +79 -0
  156. data/vendor/go.uber.org/zap/error.go +80 -0
  157. data/vendor/go.uber.org/zap/field.go +539 -0
  158. data/vendor/go.uber.org/zap/flag.go +39 -0
  159. data/vendor/go.uber.org/zap/glide.yaml +34 -0
  160. data/vendor/go.uber.org/zap/global.go +168 -0
  161. data/vendor/go.uber.org/zap/global_go112.go +26 -0
  162. data/vendor/go.uber.org/zap/global_prego112.go +26 -0
  163. data/vendor/go.uber.org/zap/go.mod +13 -0
  164. data/vendor/go.uber.org/zap/go.sum +56 -0
  165. data/vendor/go.uber.org/zap/http_handler.go +81 -0
  166. data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +31 -0
  167. data/vendor/go.uber.org/zap/internal/color/color.go +44 -0
  168. data/vendor/go.uber.org/zap/internal/exit/exit.go +64 -0
  169. data/vendor/go.uber.org/zap/level.go +132 -0
  170. data/vendor/go.uber.org/zap/logger.go +344 -0
  171. data/vendor/go.uber.org/zap/options.go +140 -0
  172. data/vendor/go.uber.org/zap/sink.go +161 -0
  173. data/vendor/go.uber.org/zap/stacktrace.go +85 -0
  174. data/vendor/go.uber.org/zap/sugar.go +304 -0
  175. data/vendor/go.uber.org/zap/time.go +27 -0
  176. data/vendor/go.uber.org/zap/writer.go +99 -0
  177. data/vendor/go.uber.org/zap/zapcore/console_encoder.go +161 -0
  178. data/vendor/go.uber.org/zap/zapcore/core.go +113 -0
  179. data/vendor/go.uber.org/zap/zapcore/doc.go +24 -0
  180. data/vendor/go.uber.org/zap/zapcore/encoder.go +443 -0
  181. data/vendor/go.uber.org/zap/zapcore/entry.go +264 -0
  182. data/vendor/go.uber.org/zap/zapcore/error.go +115 -0
  183. data/vendor/go.uber.org/zap/zapcore/field.go +227 -0
  184. data/vendor/go.uber.org/zap/zapcore/hook.go +68 -0
  185. data/vendor/go.uber.org/zap/zapcore/increase_level.go +66 -0
  186. data/vendor/go.uber.org/zap/zapcore/json_encoder.go +534 -0
  187. data/vendor/go.uber.org/zap/zapcore/level.go +175 -0
  188. data/vendor/go.uber.org/zap/zapcore/level_strings.go +46 -0
  189. data/vendor/go.uber.org/zap/zapcore/marshaler.go +61 -0
  190. data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +179 -0
  191. data/vendor/go.uber.org/zap/zapcore/sampler.go +208 -0
  192. data/vendor/go.uber.org/zap/zapcore/tee.go +81 -0
  193. data/vendor/go.uber.org/zap/zapcore/write_syncer.go +123 -0
  194. data/vendor/golang.org/x/net/AUTHORS +3 -0
  195. data/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
  196. data/vendor/golang.org/x/net/LICENSE +27 -0
  197. data/vendor/golang.org/x/net/PATENTS +22 -0
  198. data/vendor/golang.org/x/net/context/context.go +56 -0
  199. data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +71 -0
  200. data/vendor/golang.org/x/net/context/go17.go +73 -0
  201. data/vendor/golang.org/x/net/context/go19.go +21 -0
  202. data/vendor/golang.org/x/net/context/pre_go17.go +301 -0
  203. data/vendor/golang.org/x/net/context/pre_go19.go +110 -0
  204. data/vendor/golang.org/x/oauth2/.travis.yml +13 -0
  205. data/vendor/golang.org/x/oauth2/AUTHORS +3 -0
  206. data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +26 -0
  207. data/vendor/golang.org/x/oauth2/CONTRIBUTORS +3 -0
  208. data/vendor/golang.org/x/oauth2/LICENSE +27 -0
  209. data/vendor/golang.org/x/oauth2/README.md +36 -0
  210. data/vendor/golang.org/x/oauth2/go.mod +9 -0
  211. data/vendor/golang.org/x/oauth2/go.sum +361 -0
  212. data/vendor/golang.org/x/oauth2/internal/client_appengine.go +14 -0
  213. data/vendor/golang.org/x/oauth2/internal/doc.go +6 -0
  214. data/vendor/golang.org/x/oauth2/internal/oauth2.go +37 -0
  215. data/vendor/golang.org/x/oauth2/internal/token.go +294 -0
  216. data/vendor/golang.org/x/oauth2/internal/transport.go +33 -0
  217. data/vendor/golang.org/x/oauth2/oauth2.go +381 -0
  218. data/vendor/golang.org/x/oauth2/token.go +178 -0
  219. data/vendor/golang.org/x/oauth2/transport.go +89 -0
  220. data/vendor/google.golang.org/appengine/LICENSE +202 -0
  221. data/vendor/google.golang.org/appengine/internal/api.go +678 -0
  222. data/vendor/google.golang.org/appengine/internal/api_classic.go +169 -0
  223. data/vendor/google.golang.org/appengine/internal/api_common.go +123 -0
  224. data/vendor/google.golang.org/appengine/internal/app_id.go +28 -0
  225. data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +308 -0
  226. data/vendor/google.golang.org/appengine/internal/base/api_base.proto +33 -0
  227. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +4367 -0
  228. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +551 -0
  229. data/vendor/google.golang.org/appengine/internal/identity.go +55 -0
  230. data/vendor/google.golang.org/appengine/internal/identity_classic.go +61 -0
  231. data/vendor/google.golang.org/appengine/internal/identity_flex.go +11 -0
  232. data/vendor/google.golang.org/appengine/internal/identity_vm.go +134 -0
  233. data/vendor/google.golang.org/appengine/internal/internal.go +110 -0
  234. data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +1313 -0
  235. data/vendor/google.golang.org/appengine/internal/log/log_service.proto +150 -0
  236. data/vendor/google.golang.org/appengine/internal/main.go +16 -0
  237. data/vendor/google.golang.org/appengine/internal/main_common.go +7 -0
  238. data/vendor/google.golang.org/appengine/internal/main_vm.go +69 -0
  239. data/vendor/google.golang.org/appengine/internal/metadata.go +60 -0
  240. data/vendor/google.golang.org/appengine/internal/net.go +56 -0
  241. data/vendor/google.golang.org/appengine/internal/regen.sh +40 -0
  242. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +361 -0
  243. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +44 -0
  244. data/vendor/google.golang.org/appengine/internal/transaction.go +115 -0
  245. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +527 -0
  246. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +64 -0
  247. data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +210 -0
  248. data/vendor/google.golang.org/protobuf/AUTHORS +3 -0
  249. data/vendor/google.golang.org/protobuf/CONTRIBUTORS +3 -0
  250. data/vendor/google.golang.org/protobuf/LICENSE +27 -0
  251. data/vendor/google.golang.org/protobuf/PATENTS +22 -0
  252. data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +773 -0
  253. data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +7 -0
  254. data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +371 -0
  255. data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +538 -0
  256. data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +318 -0
  257. data/vendor/google.golang.org/protobuf/internal/descopts/options.go +29 -0
  258. data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +69 -0
  259. data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +213 -0
  260. data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +241 -0
  261. data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +207 -0
  262. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +665 -0
  263. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +190 -0
  264. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +161 -0
  265. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +373 -0
  266. data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +29 -0
  267. data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +265 -0
  268. data/vendor/google.golang.org/protobuf/internal/errors/errors.go +89 -0
  269. data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +39 -0
  270. data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +12 -0
  271. data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +158 -0
  272. data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +631 -0
  273. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +471 -0
  274. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +704 -0
  275. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +450 -0
  276. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +356 -0
  277. data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +107 -0
  278. data/vendor/google.golang.org/protobuf/internal/filetype/build.go +297 -0
  279. data/vendor/google.golang.org/protobuf/internal/flags/flags.go +24 -0
  280. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +9 -0
  281. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +9 -0
  282. data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +34 -0
  283. data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +106 -0
  284. data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +829 -0
  285. data/vendor/google.golang.org/protobuf/internal/genid/doc.go +11 -0
  286. data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +34 -0
  287. data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +19 -0
  288. data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +31 -0
  289. data/vendor/google.golang.org/protobuf/internal/genid/goname.go +25 -0
  290. data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +16 -0
  291. data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +31 -0
  292. data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +116 -0
  293. data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +34 -0
  294. data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +184 -0
  295. data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +13 -0
  296. data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +175 -0
  297. data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +177 -0
  298. data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +141 -0
  299. data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +223 -0
  300. data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +830 -0
  301. data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +5637 -0
  302. data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +388 -0
  303. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +37 -0
  304. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +11 -0
  305. data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +217 -0
  306. data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +123 -0
  307. data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +209 -0
  308. data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +557 -0
  309. data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +17 -0
  310. data/vendor/google.golang.org/protobuf/internal/impl/convert.go +496 -0
  311. data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +141 -0
  312. data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +121 -0
  313. data/vendor/google.golang.org/protobuf/internal/impl/decode.go +276 -0
  314. data/vendor/google.golang.org/protobuf/internal/impl/encode.go +201 -0
  315. data/vendor/google.golang.org/protobuf/internal/impl/enum.go +21 -0
  316. data/vendor/google.golang.org/protobuf/internal/impl/extension.go +156 -0
  317. data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +219 -0
  318. data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +92 -0
  319. data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +176 -0
  320. data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +81 -0
  321. data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +558 -0
  322. data/vendor/google.golang.org/protobuf/internal/impl/merge.go +176 -0
  323. data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +209 -0
  324. data/vendor/google.golang.org/protobuf/internal/impl/message.go +276 -0
  325. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +465 -0
  326. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +543 -0
  327. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +249 -0
  328. data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +178 -0
  329. data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +174 -0
  330. data/vendor/google.golang.org/protobuf/internal/impl/validate.go +576 -0
  331. data/vendor/google.golang.org/protobuf/internal/impl/weak.go +74 -0
  332. data/vendor/google.golang.org/protobuf/internal/order/order.go +89 -0
  333. data/vendor/google.golang.org/protobuf/internal/order/range.go +115 -0
  334. data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +29 -0
  335. data/vendor/google.golang.org/protobuf/internal/set/ints.go +58 -0
  336. data/vendor/google.golang.org/protobuf/internal/strs/strings.go +196 -0
  337. data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +27 -0
  338. data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +94 -0
  339. data/vendor/google.golang.org/protobuf/internal/version/version.go +79 -0
  340. data/vendor/google.golang.org/protobuf/proto/checkinit.go +71 -0
  341. data/vendor/google.golang.org/protobuf/proto/decode.go +278 -0
  342. data/vendor/google.golang.org/protobuf/proto/decode_gen.go +603 -0
  343. data/vendor/google.golang.org/protobuf/proto/doc.go +94 -0
  344. data/vendor/google.golang.org/protobuf/proto/encode.go +319 -0
  345. data/vendor/google.golang.org/protobuf/proto/encode_gen.go +97 -0
  346. data/vendor/google.golang.org/protobuf/proto/equal.go +167 -0
  347. data/vendor/google.golang.org/protobuf/proto/extension.go +92 -0
  348. data/vendor/google.golang.org/protobuf/proto/merge.go +139 -0
  349. data/vendor/google.golang.org/protobuf/proto/messageset.go +93 -0
  350. data/vendor/google.golang.org/protobuf/proto/proto.go +43 -0
  351. data/vendor/google.golang.org/protobuf/proto/proto_methods.go +19 -0
  352. data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +19 -0
  353. data/vendor/google.golang.org/protobuf/proto/reset.go +43 -0
  354. data/vendor/google.golang.org/protobuf/proto/size.go +97 -0
  355. data/vendor/google.golang.org/protobuf/proto/size_gen.go +55 -0
  356. data/vendor/google.golang.org/protobuf/proto/wrappers.go +29 -0
  357. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +276 -0
  358. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +248 -0
  359. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +286 -0
  360. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +374 -0
  361. data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +252 -0
  362. data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +77 -0
  363. data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +504 -0
  364. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +128 -0
  365. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +461 -0
  366. data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +665 -0
  367. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +285 -0
  368. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +59 -0
  369. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +411 -0
  370. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +98 -0
  371. data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +869 -0
  372. data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +15 -0
  373. data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +167 -0
  374. data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +44 -0
  375. data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +56 -0
  376. data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +4039 -0
  377. data/vendor/modules.txt +79 -0
  378. metadata +495 -0
@@ -0,0 +1,576 @@
1
+ // Copyright 2019 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ package impl
6
+
7
+ import (
8
+ "fmt"
9
+ "math"
10
+ "math/bits"
11
+ "reflect"
12
+ "unicode/utf8"
13
+
14
+ "google.golang.org/protobuf/encoding/protowire"
15
+ "google.golang.org/protobuf/internal/encoding/messageset"
16
+ "google.golang.org/protobuf/internal/flags"
17
+ "google.golang.org/protobuf/internal/genid"
18
+ "google.golang.org/protobuf/internal/strs"
19
+ pref "google.golang.org/protobuf/reflect/protoreflect"
20
+ preg "google.golang.org/protobuf/reflect/protoregistry"
21
+ piface "google.golang.org/protobuf/runtime/protoiface"
22
+ )
23
+
24
+ // ValidationStatus is the result of validating the wire-format encoding of a message.
25
+ type ValidationStatus int
26
+
27
+ const (
28
+ // ValidationUnknown indicates that unmarshaling the message might succeed or fail.
29
+ // The validator was unable to render a judgement.
30
+ //
31
+ // The only causes of this status are an aberrant message type appearing somewhere
32
+ // in the message or a failure in the extension resolver.
33
+ ValidationUnknown ValidationStatus = iota + 1
34
+
35
+ // ValidationInvalid indicates that unmarshaling the message will fail.
36
+ ValidationInvalid
37
+
38
+ // ValidationValid indicates that unmarshaling the message will succeed.
39
+ ValidationValid
40
+ )
41
+
42
+ func (v ValidationStatus) String() string {
43
+ switch v {
44
+ case ValidationUnknown:
45
+ return "ValidationUnknown"
46
+ case ValidationInvalid:
47
+ return "ValidationInvalid"
48
+ case ValidationValid:
49
+ return "ValidationValid"
50
+ default:
51
+ return fmt.Sprintf("ValidationStatus(%d)", int(v))
52
+ }
53
+ }
54
+
55
+ // Validate determines whether the contents of the buffer are a valid wire encoding
56
+ // of the message type.
57
+ //
58
+ // This function is exposed for testing.
59
+ func Validate(mt pref.MessageType, in piface.UnmarshalInput) (out piface.UnmarshalOutput, _ ValidationStatus) {
60
+ mi, ok := mt.(*MessageInfo)
61
+ if !ok {
62
+ return out, ValidationUnknown
63
+ }
64
+ if in.Resolver == nil {
65
+ in.Resolver = preg.GlobalTypes
66
+ }
67
+ o, st := mi.validate(in.Buf, 0, unmarshalOptions{
68
+ flags: in.Flags,
69
+ resolver: in.Resolver,
70
+ })
71
+ if o.initialized {
72
+ out.Flags |= piface.UnmarshalInitialized
73
+ }
74
+ return out, st
75
+ }
76
+
77
+ type validationInfo struct {
78
+ mi *MessageInfo
79
+ typ validationType
80
+ keyType, valType validationType
81
+
82
+ // For non-required fields, requiredBit is 0.
83
+ //
84
+ // For required fields, requiredBit's nth bit is set, where n is a
85
+ // unique index in the range [0, MessageInfo.numRequiredFields).
86
+ //
87
+ // If there are more than 64 required fields, requiredBit is 0.
88
+ requiredBit uint64
89
+ }
90
+
91
+ type validationType uint8
92
+
93
+ const (
94
+ validationTypeOther validationType = iota
95
+ validationTypeMessage
96
+ validationTypeGroup
97
+ validationTypeMap
98
+ validationTypeRepeatedVarint
99
+ validationTypeRepeatedFixed32
100
+ validationTypeRepeatedFixed64
101
+ validationTypeVarint
102
+ validationTypeFixed32
103
+ validationTypeFixed64
104
+ validationTypeBytes
105
+ validationTypeUTF8String
106
+ validationTypeMessageSetItem
107
+ )
108
+
109
+ func newFieldValidationInfo(mi *MessageInfo, si structInfo, fd pref.FieldDescriptor, ft reflect.Type) validationInfo {
110
+ var vi validationInfo
111
+ switch {
112
+ case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():
113
+ switch fd.Kind() {
114
+ case pref.MessageKind:
115
+ vi.typ = validationTypeMessage
116
+ if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok {
117
+ vi.mi = getMessageInfo(ot.Field(0).Type)
118
+ }
119
+ case pref.GroupKind:
120
+ vi.typ = validationTypeGroup
121
+ if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok {
122
+ vi.mi = getMessageInfo(ot.Field(0).Type)
123
+ }
124
+ case pref.StringKind:
125
+ if strs.EnforceUTF8(fd) {
126
+ vi.typ = validationTypeUTF8String
127
+ }
128
+ }
129
+ default:
130
+ vi = newValidationInfo(fd, ft)
131
+ }
132
+ if fd.Cardinality() == pref.Required {
133
+ // Avoid overflow. The required field check is done with a 64-bit mask, with
134
+ // any message containing more than 64 required fields always reported as
135
+ // potentially uninitialized, so it is not important to get a precise count
136
+ // of the required fields past 64.
137
+ if mi.numRequiredFields < math.MaxUint8 {
138
+ mi.numRequiredFields++
139
+ vi.requiredBit = 1 << (mi.numRequiredFields - 1)
140
+ }
141
+ }
142
+ return vi
143
+ }
144
+
145
+ func newValidationInfo(fd pref.FieldDescriptor, ft reflect.Type) validationInfo {
146
+ var vi validationInfo
147
+ switch {
148
+ case fd.IsList():
149
+ switch fd.Kind() {
150
+ case pref.MessageKind:
151
+ vi.typ = validationTypeMessage
152
+ if ft.Kind() == reflect.Slice {
153
+ vi.mi = getMessageInfo(ft.Elem())
154
+ }
155
+ case pref.GroupKind:
156
+ vi.typ = validationTypeGroup
157
+ if ft.Kind() == reflect.Slice {
158
+ vi.mi = getMessageInfo(ft.Elem())
159
+ }
160
+ case pref.StringKind:
161
+ vi.typ = validationTypeBytes
162
+ if strs.EnforceUTF8(fd) {
163
+ vi.typ = validationTypeUTF8String
164
+ }
165
+ default:
166
+ switch wireTypes[fd.Kind()] {
167
+ case protowire.VarintType:
168
+ vi.typ = validationTypeRepeatedVarint
169
+ case protowire.Fixed32Type:
170
+ vi.typ = validationTypeRepeatedFixed32
171
+ case protowire.Fixed64Type:
172
+ vi.typ = validationTypeRepeatedFixed64
173
+ }
174
+ }
175
+ case fd.IsMap():
176
+ vi.typ = validationTypeMap
177
+ switch fd.MapKey().Kind() {
178
+ case pref.StringKind:
179
+ if strs.EnforceUTF8(fd) {
180
+ vi.keyType = validationTypeUTF8String
181
+ }
182
+ }
183
+ switch fd.MapValue().Kind() {
184
+ case pref.MessageKind:
185
+ vi.valType = validationTypeMessage
186
+ if ft.Kind() == reflect.Map {
187
+ vi.mi = getMessageInfo(ft.Elem())
188
+ }
189
+ case pref.StringKind:
190
+ if strs.EnforceUTF8(fd) {
191
+ vi.valType = validationTypeUTF8String
192
+ }
193
+ }
194
+ default:
195
+ switch fd.Kind() {
196
+ case pref.MessageKind:
197
+ vi.typ = validationTypeMessage
198
+ if !fd.IsWeak() {
199
+ vi.mi = getMessageInfo(ft)
200
+ }
201
+ case pref.GroupKind:
202
+ vi.typ = validationTypeGroup
203
+ vi.mi = getMessageInfo(ft)
204
+ case pref.StringKind:
205
+ vi.typ = validationTypeBytes
206
+ if strs.EnforceUTF8(fd) {
207
+ vi.typ = validationTypeUTF8String
208
+ }
209
+ default:
210
+ switch wireTypes[fd.Kind()] {
211
+ case protowire.VarintType:
212
+ vi.typ = validationTypeVarint
213
+ case protowire.Fixed32Type:
214
+ vi.typ = validationTypeFixed32
215
+ case protowire.Fixed64Type:
216
+ vi.typ = validationTypeFixed64
217
+ case protowire.BytesType:
218
+ vi.typ = validationTypeBytes
219
+ }
220
+ }
221
+ }
222
+ return vi
223
+ }
224
+
225
+ func (mi *MessageInfo) validate(b []byte, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, result ValidationStatus) {
226
+ mi.init()
227
+ type validationState struct {
228
+ typ validationType
229
+ keyType, valType validationType
230
+ endGroup protowire.Number
231
+ mi *MessageInfo
232
+ tail []byte
233
+ requiredMask uint64
234
+ }
235
+
236
+ // Pre-allocate some slots to avoid repeated slice reallocation.
237
+ states := make([]validationState, 0, 16)
238
+ states = append(states, validationState{
239
+ typ: validationTypeMessage,
240
+ mi: mi,
241
+ })
242
+ if groupTag > 0 {
243
+ states[0].typ = validationTypeGroup
244
+ states[0].endGroup = groupTag
245
+ }
246
+ initialized := true
247
+ start := len(b)
248
+ State:
249
+ for len(states) > 0 {
250
+ st := &states[len(states)-1]
251
+ for len(b) > 0 {
252
+ // Parse the tag (field number and wire type).
253
+ var tag uint64
254
+ if b[0] < 0x80 {
255
+ tag = uint64(b[0])
256
+ b = b[1:]
257
+ } else if len(b) >= 2 && b[1] < 128 {
258
+ tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
259
+ b = b[2:]
260
+ } else {
261
+ var n int
262
+ tag, n = protowire.ConsumeVarint(b)
263
+ if n < 0 {
264
+ return out, ValidationInvalid
265
+ }
266
+ b = b[n:]
267
+ }
268
+ var num protowire.Number
269
+ if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {
270
+ return out, ValidationInvalid
271
+ } else {
272
+ num = protowire.Number(n)
273
+ }
274
+ wtyp := protowire.Type(tag & 7)
275
+
276
+ if wtyp == protowire.EndGroupType {
277
+ if st.endGroup == num {
278
+ goto PopState
279
+ }
280
+ return out, ValidationInvalid
281
+ }
282
+ var vi validationInfo
283
+ switch {
284
+ case st.typ == validationTypeMap:
285
+ switch num {
286
+ case genid.MapEntry_Key_field_number:
287
+ vi.typ = st.keyType
288
+ case genid.MapEntry_Value_field_number:
289
+ vi.typ = st.valType
290
+ vi.mi = st.mi
291
+ vi.requiredBit = 1
292
+ }
293
+ case flags.ProtoLegacy && st.mi.isMessageSet:
294
+ switch num {
295
+ case messageset.FieldItem:
296
+ vi.typ = validationTypeMessageSetItem
297
+ }
298
+ default:
299
+ var f *coderFieldInfo
300
+ if int(num) < len(st.mi.denseCoderFields) {
301
+ f = st.mi.denseCoderFields[num]
302
+ } else {
303
+ f = st.mi.coderFields[num]
304
+ }
305
+ if f != nil {
306
+ vi = f.validation
307
+ if vi.typ == validationTypeMessage && vi.mi == nil {
308
+ // Probable weak field.
309
+ //
310
+ // TODO: Consider storing the results of this lookup somewhere
311
+ // rather than recomputing it on every validation.
312
+ fd := st.mi.Desc.Fields().ByNumber(num)
313
+ if fd == nil || !fd.IsWeak() {
314
+ break
315
+ }
316
+ messageName := fd.Message().FullName()
317
+ messageType, err := preg.GlobalTypes.FindMessageByName(messageName)
318
+ switch err {
319
+ case nil:
320
+ vi.mi, _ = messageType.(*MessageInfo)
321
+ case preg.NotFound:
322
+ vi.typ = validationTypeBytes
323
+ default:
324
+ return out, ValidationUnknown
325
+ }
326
+ }
327
+ break
328
+ }
329
+ // Possible extension field.
330
+ //
331
+ // TODO: We should return ValidationUnknown when:
332
+ // 1. The resolver is not frozen. (More extensions may be added to it.)
333
+ // 2. The resolver returns preg.NotFound.
334
+ // In this case, a type added to the resolver in the future could cause
335
+ // unmarshaling to begin failing. Supporting this requires some way to
336
+ // determine if the resolver is frozen.
337
+ xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), num)
338
+ if err != nil && err != preg.NotFound {
339
+ return out, ValidationUnknown
340
+ }
341
+ if err == nil {
342
+ vi = getExtensionFieldInfo(xt).validation
343
+ }
344
+ }
345
+ if vi.requiredBit != 0 {
346
+ // Check that the field has a compatible wire type.
347
+ // We only need to consider non-repeated field types,
348
+ // since repeated fields (and maps) can never be required.
349
+ ok := false
350
+ switch vi.typ {
351
+ case validationTypeVarint:
352
+ ok = wtyp == protowire.VarintType
353
+ case validationTypeFixed32:
354
+ ok = wtyp == protowire.Fixed32Type
355
+ case validationTypeFixed64:
356
+ ok = wtyp == protowire.Fixed64Type
357
+ case validationTypeBytes, validationTypeUTF8String, validationTypeMessage:
358
+ ok = wtyp == protowire.BytesType
359
+ case validationTypeGroup:
360
+ ok = wtyp == protowire.StartGroupType
361
+ }
362
+ if ok {
363
+ st.requiredMask |= vi.requiredBit
364
+ }
365
+ }
366
+
367
+ switch wtyp {
368
+ case protowire.VarintType:
369
+ if len(b) >= 10 {
370
+ switch {
371
+ case b[0] < 0x80:
372
+ b = b[1:]
373
+ case b[1] < 0x80:
374
+ b = b[2:]
375
+ case b[2] < 0x80:
376
+ b = b[3:]
377
+ case b[3] < 0x80:
378
+ b = b[4:]
379
+ case b[4] < 0x80:
380
+ b = b[5:]
381
+ case b[5] < 0x80:
382
+ b = b[6:]
383
+ case b[6] < 0x80:
384
+ b = b[7:]
385
+ case b[7] < 0x80:
386
+ b = b[8:]
387
+ case b[8] < 0x80:
388
+ b = b[9:]
389
+ case b[9] < 0x80 && b[9] < 2:
390
+ b = b[10:]
391
+ default:
392
+ return out, ValidationInvalid
393
+ }
394
+ } else {
395
+ switch {
396
+ case len(b) > 0 && b[0] < 0x80:
397
+ b = b[1:]
398
+ case len(b) > 1 && b[1] < 0x80:
399
+ b = b[2:]
400
+ case len(b) > 2 && b[2] < 0x80:
401
+ b = b[3:]
402
+ case len(b) > 3 && b[3] < 0x80:
403
+ b = b[4:]
404
+ case len(b) > 4 && b[4] < 0x80:
405
+ b = b[5:]
406
+ case len(b) > 5 && b[5] < 0x80:
407
+ b = b[6:]
408
+ case len(b) > 6 && b[6] < 0x80:
409
+ b = b[7:]
410
+ case len(b) > 7 && b[7] < 0x80:
411
+ b = b[8:]
412
+ case len(b) > 8 && b[8] < 0x80:
413
+ b = b[9:]
414
+ case len(b) > 9 && b[9] < 2:
415
+ b = b[10:]
416
+ default:
417
+ return out, ValidationInvalid
418
+ }
419
+ }
420
+ continue State
421
+ case protowire.BytesType:
422
+ var size uint64
423
+ if len(b) >= 1 && b[0] < 0x80 {
424
+ size = uint64(b[0])
425
+ b = b[1:]
426
+ } else if len(b) >= 2 && b[1] < 128 {
427
+ size = uint64(b[0]&0x7f) + uint64(b[1])<<7
428
+ b = b[2:]
429
+ } else {
430
+ var n int
431
+ size, n = protowire.ConsumeVarint(b)
432
+ if n < 0 {
433
+ return out, ValidationInvalid
434
+ }
435
+ b = b[n:]
436
+ }
437
+ if size > uint64(len(b)) {
438
+ return out, ValidationInvalid
439
+ }
440
+ v := b[:size]
441
+ b = b[size:]
442
+ switch vi.typ {
443
+ case validationTypeMessage:
444
+ if vi.mi == nil {
445
+ return out, ValidationUnknown
446
+ }
447
+ vi.mi.init()
448
+ fallthrough
449
+ case validationTypeMap:
450
+ if vi.mi != nil {
451
+ vi.mi.init()
452
+ }
453
+ states = append(states, validationState{
454
+ typ: vi.typ,
455
+ keyType: vi.keyType,
456
+ valType: vi.valType,
457
+ mi: vi.mi,
458
+ tail: b,
459
+ })
460
+ b = v
461
+ continue State
462
+ case validationTypeRepeatedVarint:
463
+ // Packed field.
464
+ for len(v) > 0 {
465
+ _, n := protowire.ConsumeVarint(v)
466
+ if n < 0 {
467
+ return out, ValidationInvalid
468
+ }
469
+ v = v[n:]
470
+ }
471
+ case validationTypeRepeatedFixed32:
472
+ // Packed field.
473
+ if len(v)%4 != 0 {
474
+ return out, ValidationInvalid
475
+ }
476
+ case validationTypeRepeatedFixed64:
477
+ // Packed field.
478
+ if len(v)%8 != 0 {
479
+ return out, ValidationInvalid
480
+ }
481
+ case validationTypeUTF8String:
482
+ if !utf8.Valid(v) {
483
+ return out, ValidationInvalid
484
+ }
485
+ }
486
+ case protowire.Fixed32Type:
487
+ if len(b) < 4 {
488
+ return out, ValidationInvalid
489
+ }
490
+ b = b[4:]
491
+ case protowire.Fixed64Type:
492
+ if len(b) < 8 {
493
+ return out, ValidationInvalid
494
+ }
495
+ b = b[8:]
496
+ case protowire.StartGroupType:
497
+ switch {
498
+ case vi.typ == validationTypeGroup:
499
+ if vi.mi == nil {
500
+ return out, ValidationUnknown
501
+ }
502
+ vi.mi.init()
503
+ states = append(states, validationState{
504
+ typ: validationTypeGroup,
505
+ mi: vi.mi,
506
+ endGroup: num,
507
+ })
508
+ continue State
509
+ case flags.ProtoLegacy && vi.typ == validationTypeMessageSetItem:
510
+ typeid, v, n, err := messageset.ConsumeFieldValue(b, false)
511
+ if err != nil {
512
+ return out, ValidationInvalid
513
+ }
514
+ xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), typeid)
515
+ switch {
516
+ case err == preg.NotFound:
517
+ b = b[n:]
518
+ case err != nil:
519
+ return out, ValidationUnknown
520
+ default:
521
+ xvi := getExtensionFieldInfo(xt).validation
522
+ if xvi.mi != nil {
523
+ xvi.mi.init()
524
+ }
525
+ states = append(states, validationState{
526
+ typ: xvi.typ,
527
+ mi: xvi.mi,
528
+ tail: b[n:],
529
+ })
530
+ b = v
531
+ continue State
532
+ }
533
+ default:
534
+ n := protowire.ConsumeFieldValue(num, wtyp, b)
535
+ if n < 0 {
536
+ return out, ValidationInvalid
537
+ }
538
+ b = b[n:]
539
+ }
540
+ default:
541
+ return out, ValidationInvalid
542
+ }
543
+ }
544
+ if st.endGroup != 0 {
545
+ return out, ValidationInvalid
546
+ }
547
+ if len(b) != 0 {
548
+ return out, ValidationInvalid
549
+ }
550
+ b = st.tail
551
+ PopState:
552
+ numRequiredFields := 0
553
+ switch st.typ {
554
+ case validationTypeMessage, validationTypeGroup:
555
+ numRequiredFields = int(st.mi.numRequiredFields)
556
+ case validationTypeMap:
557
+ // If this is a map field with a message value that contains
558
+ // required fields, require that the value be present.
559
+ if st.mi != nil && st.mi.numRequiredFields > 0 {
560
+ numRequiredFields = 1
561
+ }
562
+ }
563
+ // If there are more than 64 required fields, this check will
564
+ // always fail and we will report that the message is potentially
565
+ // uninitialized.
566
+ if numRequiredFields > 0 && bits.OnesCount64(st.requiredMask) != numRequiredFields {
567
+ initialized = false
568
+ }
569
+ states = states[:len(states)-1]
570
+ }
571
+ out.n = start - len(b)
572
+ if initialized {
573
+ out.initialized = true
574
+ }
575
+ return out, ValidationValid
576
+ }