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,223 @@
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
+ "sync"
9
+ "sync/atomic"
10
+
11
+ "google.golang.org/protobuf/encoding/protowire"
12
+ "google.golang.org/protobuf/internal/errors"
13
+ pref "google.golang.org/protobuf/reflect/protoreflect"
14
+ )
15
+
16
+ type extensionFieldInfo struct {
17
+ wiretag uint64
18
+ tagsize int
19
+ unmarshalNeedsValue bool
20
+ funcs valueCoderFuncs
21
+ validation validationInfo
22
+ }
23
+
24
+ var legacyExtensionFieldInfoCache sync.Map // map[protoreflect.ExtensionType]*extensionFieldInfo
25
+
26
+ func getExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo {
27
+ if xi, ok := xt.(*ExtensionInfo); ok {
28
+ xi.lazyInit()
29
+ return xi.info
30
+ }
31
+ return legacyLoadExtensionFieldInfo(xt)
32
+ }
33
+
34
+ // legacyLoadExtensionFieldInfo dynamically loads a *ExtensionInfo for xt.
35
+ func legacyLoadExtensionFieldInfo(xt pref.ExtensionType) *extensionFieldInfo {
36
+ if xi, ok := legacyExtensionFieldInfoCache.Load(xt); ok {
37
+ return xi.(*extensionFieldInfo)
38
+ }
39
+ e := makeExtensionFieldInfo(xt.TypeDescriptor())
40
+ if e, ok := legacyMessageTypeCache.LoadOrStore(xt, e); ok {
41
+ return e.(*extensionFieldInfo)
42
+ }
43
+ return e
44
+ }
45
+
46
+ func makeExtensionFieldInfo(xd pref.ExtensionDescriptor) *extensionFieldInfo {
47
+ var wiretag uint64
48
+ if !xd.IsPacked() {
49
+ wiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()])
50
+ } else {
51
+ wiretag = protowire.EncodeTag(xd.Number(), protowire.BytesType)
52
+ }
53
+ e := &extensionFieldInfo{
54
+ wiretag: wiretag,
55
+ tagsize: protowire.SizeVarint(wiretag),
56
+ funcs: encoderFuncsForValue(xd),
57
+ }
58
+ // Does the unmarshal function need a value passed to it?
59
+ // This is true for composite types, where we pass in a message, list, or map to fill in,
60
+ // and for enums, where we pass in a prototype value to specify the concrete enum type.
61
+ switch xd.Kind() {
62
+ case pref.MessageKind, pref.GroupKind, pref.EnumKind:
63
+ e.unmarshalNeedsValue = true
64
+ default:
65
+ if xd.Cardinality() == pref.Repeated {
66
+ e.unmarshalNeedsValue = true
67
+ }
68
+ }
69
+ return e
70
+ }
71
+
72
+ type lazyExtensionValue struct {
73
+ atomicOnce uint32 // atomically set if value is valid
74
+ mu sync.Mutex
75
+ xi *extensionFieldInfo
76
+ value pref.Value
77
+ b []byte
78
+ fn func() pref.Value
79
+ }
80
+
81
+ type ExtensionField struct {
82
+ typ pref.ExtensionType
83
+
84
+ // value is either the value of GetValue,
85
+ // or a *lazyExtensionValue that then returns the value of GetValue.
86
+ value pref.Value
87
+ lazy *lazyExtensionValue
88
+ }
89
+
90
+ func (f *ExtensionField) appendLazyBytes(xt pref.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) {
91
+ if f.lazy == nil {
92
+ f.lazy = &lazyExtensionValue{xi: xi}
93
+ }
94
+ f.typ = xt
95
+ f.lazy.xi = xi
96
+ f.lazy.b = protowire.AppendTag(f.lazy.b, num, wtyp)
97
+ f.lazy.b = append(f.lazy.b, b...)
98
+ }
99
+
100
+ func (f *ExtensionField) canLazy(xt pref.ExtensionType) bool {
101
+ if f.typ == nil {
102
+ return true
103
+ }
104
+ if f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {
105
+ return true
106
+ }
107
+ return false
108
+ }
109
+
110
+ func (f *ExtensionField) lazyInit() {
111
+ f.lazy.mu.Lock()
112
+ defer f.lazy.mu.Unlock()
113
+ if atomic.LoadUint32(&f.lazy.atomicOnce) == 1 {
114
+ return
115
+ }
116
+ if f.lazy.xi != nil {
117
+ b := f.lazy.b
118
+ val := f.typ.New()
119
+ for len(b) > 0 {
120
+ var tag uint64
121
+ if b[0] < 0x80 {
122
+ tag = uint64(b[0])
123
+ b = b[1:]
124
+ } else if len(b) >= 2 && b[1] < 128 {
125
+ tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
126
+ b = b[2:]
127
+ } else {
128
+ var n int
129
+ tag, n = protowire.ConsumeVarint(b)
130
+ if n < 0 {
131
+ panic(errors.New("bad tag in lazy extension decoding"))
132
+ }
133
+ b = b[n:]
134
+ }
135
+ num := protowire.Number(tag >> 3)
136
+ wtyp := protowire.Type(tag & 7)
137
+ var out unmarshalOutput
138
+ var err error
139
+ val, out, err = f.lazy.xi.funcs.unmarshal(b, val, num, wtyp, lazyUnmarshalOptions)
140
+ if err != nil {
141
+ panic(errors.New("decode failure in lazy extension decoding: %v", err))
142
+ }
143
+ b = b[out.n:]
144
+ }
145
+ f.lazy.value = val
146
+ } else {
147
+ f.lazy.value = f.lazy.fn()
148
+ }
149
+ f.lazy.xi = nil
150
+ f.lazy.fn = nil
151
+ f.lazy.b = nil
152
+ atomic.StoreUint32(&f.lazy.atomicOnce, 1)
153
+ }
154
+
155
+ // Set sets the type and value of the extension field.
156
+ // This must not be called concurrently.
157
+ func (f *ExtensionField) Set(t pref.ExtensionType, v pref.Value) {
158
+ f.typ = t
159
+ f.value = v
160
+ f.lazy = nil
161
+ }
162
+
163
+ // SetLazy sets the type and a value that is to be lazily evaluated upon first use.
164
+ // This must not be called concurrently.
165
+ func (f *ExtensionField) SetLazy(t pref.ExtensionType, fn func() pref.Value) {
166
+ f.typ = t
167
+ f.lazy = &lazyExtensionValue{fn: fn}
168
+ }
169
+
170
+ // Value returns the value of the extension field.
171
+ // This may be called concurrently.
172
+ func (f *ExtensionField) Value() pref.Value {
173
+ if f.lazy != nil {
174
+ if atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {
175
+ f.lazyInit()
176
+ }
177
+ return f.lazy.value
178
+ }
179
+ return f.value
180
+ }
181
+
182
+ // Type returns the type of the extension field.
183
+ // This may be called concurrently.
184
+ func (f ExtensionField) Type() pref.ExtensionType {
185
+ return f.typ
186
+ }
187
+
188
+ // IsSet returns whether the extension field is set.
189
+ // This may be called concurrently.
190
+ func (f ExtensionField) IsSet() bool {
191
+ return f.typ != nil
192
+ }
193
+
194
+ // IsLazy reports whether a field is lazily encoded.
195
+ // It is exported for testing.
196
+ func IsLazy(m pref.Message, fd pref.FieldDescriptor) bool {
197
+ var mi *MessageInfo
198
+ var p pointer
199
+ switch m := m.(type) {
200
+ case *messageState:
201
+ mi = m.messageInfo()
202
+ p = m.pointer()
203
+ case *messageReflectWrapper:
204
+ mi = m.messageInfo()
205
+ p = m.pointer()
206
+ default:
207
+ return false
208
+ }
209
+ xd, ok := fd.(pref.ExtensionTypeDescriptor)
210
+ if !ok {
211
+ return false
212
+ }
213
+ xt := xd.Type()
214
+ ext := mi.extensionMap(p)
215
+ if ext == nil {
216
+ return false
217
+ }
218
+ f, ok := (*ext)[int32(fd.Number())]
219
+ if !ok {
220
+ return false
221
+ }
222
+ return f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0
223
+ }
@@ -0,0 +1,830 @@
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
+ "reflect"
10
+ "sync"
11
+
12
+ "google.golang.org/protobuf/encoding/protowire"
13
+ "google.golang.org/protobuf/internal/errors"
14
+ "google.golang.org/protobuf/proto"
15
+ pref "google.golang.org/protobuf/reflect/protoreflect"
16
+ preg "google.golang.org/protobuf/reflect/protoregistry"
17
+ piface "google.golang.org/protobuf/runtime/protoiface"
18
+ )
19
+
20
+ type errInvalidUTF8 struct{}
21
+
22
+ func (errInvalidUTF8) Error() string { return "string field contains invalid UTF-8" }
23
+ func (errInvalidUTF8) InvalidUTF8() bool { return true }
24
+ func (errInvalidUTF8) Unwrap() error { return errors.Error }
25
+
26
+ // initOneofFieldCoders initializes the fast-path functions for the fields in a oneof.
27
+ //
28
+ // For size, marshal, and isInit operations, functions are set only on the first field
29
+ // in the oneof. The functions are called when the oneof is non-nil, and will dispatch
30
+ // to the appropriate field-specific function as necessary.
31
+ //
32
+ // The unmarshal function is set on each field individually as usual.
33
+ func (mi *MessageInfo) initOneofFieldCoders(od pref.OneofDescriptor, si structInfo) {
34
+ fs := si.oneofsByName[od.Name()]
35
+ ft := fs.Type
36
+ oneofFields := make(map[reflect.Type]*coderFieldInfo)
37
+ needIsInit := false
38
+ fields := od.Fields()
39
+ for i, lim := 0, fields.Len(); i < lim; i++ {
40
+ fd := od.Fields().Get(i)
41
+ num := fd.Number()
42
+ // Make a copy of the original coderFieldInfo for use in unmarshaling.
43
+ //
44
+ // oneofFields[oneofType].funcs.marshal is the field-specific marshal function.
45
+ //
46
+ // mi.coderFields[num].marshal is set on only the first field in the oneof,
47
+ // and dispatches to the field-specific marshaler in oneofFields.
48
+ cf := *mi.coderFields[num]
49
+ ot := si.oneofWrappersByNumber[num]
50
+ cf.ft = ot.Field(0).Type
51
+ cf.mi, cf.funcs = fieldCoder(fd, cf.ft)
52
+ oneofFields[ot] = &cf
53
+ if cf.funcs.isInit != nil {
54
+ needIsInit = true
55
+ }
56
+ mi.coderFields[num].funcs.unmarshal = func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
57
+ var vw reflect.Value // pointer to wrapper type
58
+ vi := p.AsValueOf(ft).Elem() // oneof field value of interface kind
59
+ if !vi.IsNil() && !vi.Elem().IsNil() && vi.Elem().Elem().Type() == ot {
60
+ vw = vi.Elem()
61
+ } else {
62
+ vw = reflect.New(ot)
63
+ }
64
+ out, err := cf.funcs.unmarshal(b, pointerOfValue(vw).Apply(zeroOffset), wtyp, &cf, opts)
65
+ if err != nil {
66
+ return out, err
67
+ }
68
+ vi.Set(vw)
69
+ return out, nil
70
+ }
71
+ }
72
+ getInfo := func(p pointer) (pointer, *coderFieldInfo) {
73
+ v := p.AsValueOf(ft).Elem()
74
+ if v.IsNil() {
75
+ return pointer{}, nil
76
+ }
77
+ v = v.Elem() // interface -> *struct
78
+ if v.IsNil() {
79
+ return pointer{}, nil
80
+ }
81
+ return pointerOfValue(v).Apply(zeroOffset), oneofFields[v.Elem().Type()]
82
+ }
83
+ first := mi.coderFields[od.Fields().Get(0).Number()]
84
+ first.funcs.size = func(p pointer, _ *coderFieldInfo, opts marshalOptions) int {
85
+ p, info := getInfo(p)
86
+ if info == nil || info.funcs.size == nil {
87
+ return 0
88
+ }
89
+ return info.funcs.size(p, info, opts)
90
+ }
91
+ first.funcs.marshal = func(b []byte, p pointer, _ *coderFieldInfo, opts marshalOptions) ([]byte, error) {
92
+ p, info := getInfo(p)
93
+ if info == nil || info.funcs.marshal == nil {
94
+ return b, nil
95
+ }
96
+ return info.funcs.marshal(b, p, info, opts)
97
+ }
98
+ first.funcs.merge = func(dst, src pointer, _ *coderFieldInfo, opts mergeOptions) {
99
+ srcp, srcinfo := getInfo(src)
100
+ if srcinfo == nil || srcinfo.funcs.merge == nil {
101
+ return
102
+ }
103
+ dstp, dstinfo := getInfo(dst)
104
+ if dstinfo != srcinfo {
105
+ dst.AsValueOf(ft).Elem().Set(reflect.New(src.AsValueOf(ft).Elem().Elem().Elem().Type()))
106
+ dstp = pointerOfValue(dst.AsValueOf(ft).Elem().Elem()).Apply(zeroOffset)
107
+ }
108
+ srcinfo.funcs.merge(dstp, srcp, srcinfo, opts)
109
+ }
110
+ if needIsInit {
111
+ first.funcs.isInit = func(p pointer, _ *coderFieldInfo) error {
112
+ p, info := getInfo(p)
113
+ if info == nil || info.funcs.isInit == nil {
114
+ return nil
115
+ }
116
+ return info.funcs.isInit(p, info)
117
+ }
118
+ }
119
+ }
120
+
121
+ func makeWeakMessageFieldCoder(fd pref.FieldDescriptor) pointerCoderFuncs {
122
+ var once sync.Once
123
+ var messageType pref.MessageType
124
+ lazyInit := func() {
125
+ once.Do(func() {
126
+ messageName := fd.Message().FullName()
127
+ messageType, _ = preg.GlobalTypes.FindMessageByName(messageName)
128
+ })
129
+ }
130
+
131
+ return pointerCoderFuncs{
132
+ size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
133
+ m, ok := p.WeakFields().get(f.num)
134
+ if !ok {
135
+ return 0
136
+ }
137
+ lazyInit()
138
+ if messageType == nil {
139
+ panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName()))
140
+ }
141
+ return sizeMessage(m, f.tagsize, opts)
142
+ },
143
+ marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
144
+ m, ok := p.WeakFields().get(f.num)
145
+ if !ok {
146
+ return b, nil
147
+ }
148
+ lazyInit()
149
+ if messageType == nil {
150
+ panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName()))
151
+ }
152
+ return appendMessage(b, m, f.wiretag, opts)
153
+ },
154
+ unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
155
+ fs := p.WeakFields()
156
+ m, ok := fs.get(f.num)
157
+ if !ok {
158
+ lazyInit()
159
+ if messageType == nil {
160
+ return unmarshalOutput{}, errUnknown
161
+ }
162
+ m = messageType.New().Interface()
163
+ fs.set(f.num, m)
164
+ }
165
+ return consumeMessage(b, m, wtyp, opts)
166
+ },
167
+ isInit: func(p pointer, f *coderFieldInfo) error {
168
+ m, ok := p.WeakFields().get(f.num)
169
+ if !ok {
170
+ return nil
171
+ }
172
+ return proto.CheckInitialized(m)
173
+ },
174
+ merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
175
+ sm, ok := src.WeakFields().get(f.num)
176
+ if !ok {
177
+ return
178
+ }
179
+ dm, ok := dst.WeakFields().get(f.num)
180
+ if !ok {
181
+ lazyInit()
182
+ if messageType == nil {
183
+ panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName()))
184
+ }
185
+ dm = messageType.New().Interface()
186
+ dst.WeakFields().set(f.num, dm)
187
+ }
188
+ opts.Merge(dm, sm)
189
+ },
190
+ }
191
+ }
192
+
193
+ func makeMessageFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
194
+ if mi := getMessageInfo(ft); mi != nil {
195
+ funcs := pointerCoderFuncs{
196
+ size: sizeMessageInfo,
197
+ marshal: appendMessageInfo,
198
+ unmarshal: consumeMessageInfo,
199
+ merge: mergeMessage,
200
+ }
201
+ if needsInitCheck(mi.Desc) {
202
+ funcs.isInit = isInitMessageInfo
203
+ }
204
+ return funcs
205
+ } else {
206
+ return pointerCoderFuncs{
207
+ size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
208
+ m := asMessage(p.AsValueOf(ft).Elem())
209
+ return sizeMessage(m, f.tagsize, opts)
210
+ },
211
+ marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
212
+ m := asMessage(p.AsValueOf(ft).Elem())
213
+ return appendMessage(b, m, f.wiretag, opts)
214
+ },
215
+ unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
216
+ mp := p.AsValueOf(ft).Elem()
217
+ if mp.IsNil() {
218
+ mp.Set(reflect.New(ft.Elem()))
219
+ }
220
+ return consumeMessage(b, asMessage(mp), wtyp, opts)
221
+ },
222
+ isInit: func(p pointer, f *coderFieldInfo) error {
223
+ m := asMessage(p.AsValueOf(ft).Elem())
224
+ return proto.CheckInitialized(m)
225
+ },
226
+ merge: mergeMessage,
227
+ }
228
+ }
229
+ }
230
+
231
+ func sizeMessageInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {
232
+ return protowire.SizeBytes(f.mi.sizePointer(p.Elem(), opts)) + f.tagsize
233
+ }
234
+
235
+ func appendMessageInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
236
+ b = protowire.AppendVarint(b, f.wiretag)
237
+ b = protowire.AppendVarint(b, uint64(f.mi.sizePointer(p.Elem(), opts)))
238
+ return f.mi.marshalAppendPointer(b, p.Elem(), opts)
239
+ }
240
+
241
+ func consumeMessageInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
242
+ if wtyp != protowire.BytesType {
243
+ return out, errUnknown
244
+ }
245
+ v, n := protowire.ConsumeBytes(b)
246
+ if n < 0 {
247
+ return out, errDecode
248
+ }
249
+ if p.Elem().IsNil() {
250
+ p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
251
+ }
252
+ o, err := f.mi.unmarshalPointer(v, p.Elem(), 0, opts)
253
+ if err != nil {
254
+ return out, err
255
+ }
256
+ out.n = n
257
+ out.initialized = o.initialized
258
+ return out, nil
259
+ }
260
+
261
+ func isInitMessageInfo(p pointer, f *coderFieldInfo) error {
262
+ return f.mi.checkInitializedPointer(p.Elem())
263
+ }
264
+
265
+ func sizeMessage(m proto.Message, tagsize int, _ marshalOptions) int {
266
+ return protowire.SizeBytes(proto.Size(m)) + tagsize
267
+ }
268
+
269
+ func appendMessage(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) {
270
+ b = protowire.AppendVarint(b, wiretag)
271
+ b = protowire.AppendVarint(b, uint64(proto.Size(m)))
272
+ return opts.Options().MarshalAppend(b, m)
273
+ }
274
+
275
+ func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
276
+ if wtyp != protowire.BytesType {
277
+ return out, errUnknown
278
+ }
279
+ v, n := protowire.ConsumeBytes(b)
280
+ if n < 0 {
281
+ return out, errDecode
282
+ }
283
+ o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
284
+ Buf: v,
285
+ Message: m.ProtoReflect(),
286
+ })
287
+ if err != nil {
288
+ return out, err
289
+ }
290
+ out.n = n
291
+ out.initialized = o.Flags&piface.UnmarshalInitialized != 0
292
+ return out, nil
293
+ }
294
+
295
+ func sizeMessageValue(v pref.Value, tagsize int, opts marshalOptions) int {
296
+ m := v.Message().Interface()
297
+ return sizeMessage(m, tagsize, opts)
298
+ }
299
+
300
+ func appendMessageValue(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
301
+ m := v.Message().Interface()
302
+ return appendMessage(b, m, wiretag, opts)
303
+ }
304
+
305
+ func consumeMessageValue(b []byte, v pref.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) {
306
+ m := v.Message().Interface()
307
+ out, err := consumeMessage(b, m, wtyp, opts)
308
+ return v, out, err
309
+ }
310
+
311
+ func isInitMessageValue(v pref.Value) error {
312
+ m := v.Message().Interface()
313
+ return proto.CheckInitialized(m)
314
+ }
315
+
316
+ var coderMessageValue = valueCoderFuncs{
317
+ size: sizeMessageValue,
318
+ marshal: appendMessageValue,
319
+ unmarshal: consumeMessageValue,
320
+ isInit: isInitMessageValue,
321
+ merge: mergeMessageValue,
322
+ }
323
+
324
+ func sizeGroupValue(v pref.Value, tagsize int, opts marshalOptions) int {
325
+ m := v.Message().Interface()
326
+ return sizeGroup(m, tagsize, opts)
327
+ }
328
+
329
+ func appendGroupValue(b []byte, v pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
330
+ m := v.Message().Interface()
331
+ return appendGroup(b, m, wiretag, opts)
332
+ }
333
+
334
+ func consumeGroupValue(b []byte, v pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (pref.Value, unmarshalOutput, error) {
335
+ m := v.Message().Interface()
336
+ out, err := consumeGroup(b, m, num, wtyp, opts)
337
+ return v, out, err
338
+ }
339
+
340
+ var coderGroupValue = valueCoderFuncs{
341
+ size: sizeGroupValue,
342
+ marshal: appendGroupValue,
343
+ unmarshal: consumeGroupValue,
344
+ isInit: isInitMessageValue,
345
+ merge: mergeMessageValue,
346
+ }
347
+
348
+ func makeGroupFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
349
+ num := fd.Number()
350
+ if mi := getMessageInfo(ft); mi != nil {
351
+ funcs := pointerCoderFuncs{
352
+ size: sizeGroupType,
353
+ marshal: appendGroupType,
354
+ unmarshal: consumeGroupType,
355
+ merge: mergeMessage,
356
+ }
357
+ if needsInitCheck(mi.Desc) {
358
+ funcs.isInit = isInitMessageInfo
359
+ }
360
+ return funcs
361
+ } else {
362
+ return pointerCoderFuncs{
363
+ size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
364
+ m := asMessage(p.AsValueOf(ft).Elem())
365
+ return sizeGroup(m, f.tagsize, opts)
366
+ },
367
+ marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
368
+ m := asMessage(p.AsValueOf(ft).Elem())
369
+ return appendGroup(b, m, f.wiretag, opts)
370
+ },
371
+ unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
372
+ mp := p.AsValueOf(ft).Elem()
373
+ if mp.IsNil() {
374
+ mp.Set(reflect.New(ft.Elem()))
375
+ }
376
+ return consumeGroup(b, asMessage(mp), num, wtyp, opts)
377
+ },
378
+ isInit: func(p pointer, f *coderFieldInfo) error {
379
+ m := asMessage(p.AsValueOf(ft).Elem())
380
+ return proto.CheckInitialized(m)
381
+ },
382
+ merge: mergeMessage,
383
+ }
384
+ }
385
+ }
386
+
387
+ func sizeGroupType(p pointer, f *coderFieldInfo, opts marshalOptions) int {
388
+ return 2*f.tagsize + f.mi.sizePointer(p.Elem(), opts)
389
+ }
390
+
391
+ func appendGroupType(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
392
+ b = protowire.AppendVarint(b, f.wiretag) // start group
393
+ b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts)
394
+ b = protowire.AppendVarint(b, f.wiretag+1) // end group
395
+ return b, err
396
+ }
397
+
398
+ func consumeGroupType(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
399
+ if wtyp != protowire.StartGroupType {
400
+ return out, errUnknown
401
+ }
402
+ if p.Elem().IsNil() {
403
+ p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
404
+ }
405
+ return f.mi.unmarshalPointer(b, p.Elem(), f.num, opts)
406
+ }
407
+
408
+ func sizeGroup(m proto.Message, tagsize int, _ marshalOptions) int {
409
+ return 2*tagsize + proto.Size(m)
410
+ }
411
+
412
+ func appendGroup(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) {
413
+ b = protowire.AppendVarint(b, wiretag) // start group
414
+ b, err := opts.Options().MarshalAppend(b, m)
415
+ b = protowire.AppendVarint(b, wiretag+1) // end group
416
+ return b, err
417
+ }
418
+
419
+ func consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
420
+ if wtyp != protowire.StartGroupType {
421
+ return out, errUnknown
422
+ }
423
+ b, n := protowire.ConsumeGroup(num, b)
424
+ if n < 0 {
425
+ return out, errDecode
426
+ }
427
+ o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
428
+ Buf: b,
429
+ Message: m.ProtoReflect(),
430
+ })
431
+ if err != nil {
432
+ return out, err
433
+ }
434
+ out.n = n
435
+ out.initialized = o.Flags&piface.UnmarshalInitialized != 0
436
+ return out, nil
437
+ }
438
+
439
+ func makeMessageSliceFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
440
+ if mi := getMessageInfo(ft); mi != nil {
441
+ funcs := pointerCoderFuncs{
442
+ size: sizeMessageSliceInfo,
443
+ marshal: appendMessageSliceInfo,
444
+ unmarshal: consumeMessageSliceInfo,
445
+ merge: mergeMessageSlice,
446
+ }
447
+ if needsInitCheck(mi.Desc) {
448
+ funcs.isInit = isInitMessageSliceInfo
449
+ }
450
+ return funcs
451
+ }
452
+ return pointerCoderFuncs{
453
+ size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
454
+ return sizeMessageSlice(p, ft, f.tagsize, opts)
455
+ },
456
+ marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
457
+ return appendMessageSlice(b, p, f.wiretag, ft, opts)
458
+ },
459
+ unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
460
+ return consumeMessageSlice(b, p, ft, wtyp, opts)
461
+ },
462
+ isInit: func(p pointer, f *coderFieldInfo) error {
463
+ return isInitMessageSlice(p, ft)
464
+ },
465
+ merge: mergeMessageSlice,
466
+ }
467
+ }
468
+
469
+ func sizeMessageSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {
470
+ s := p.PointerSlice()
471
+ n := 0
472
+ for _, v := range s {
473
+ n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize
474
+ }
475
+ return n
476
+ }
477
+
478
+ func appendMessageSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
479
+ s := p.PointerSlice()
480
+ var err error
481
+ for _, v := range s {
482
+ b = protowire.AppendVarint(b, f.wiretag)
483
+ siz := f.mi.sizePointer(v, opts)
484
+ b = protowire.AppendVarint(b, uint64(siz))
485
+ b, err = f.mi.marshalAppendPointer(b, v, opts)
486
+ if err != nil {
487
+ return b, err
488
+ }
489
+ }
490
+ return b, nil
491
+ }
492
+
493
+ func consumeMessageSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
494
+ if wtyp != protowire.BytesType {
495
+ return out, errUnknown
496
+ }
497
+ v, n := protowire.ConsumeBytes(b)
498
+ if n < 0 {
499
+ return out, errDecode
500
+ }
501
+ m := reflect.New(f.mi.GoReflectType.Elem()).Interface()
502
+ mp := pointerOfIface(m)
503
+ o, err := f.mi.unmarshalPointer(v, mp, 0, opts)
504
+ if err != nil {
505
+ return out, err
506
+ }
507
+ p.AppendPointerSlice(mp)
508
+ out.n = n
509
+ out.initialized = o.initialized
510
+ return out, nil
511
+ }
512
+
513
+ func isInitMessageSliceInfo(p pointer, f *coderFieldInfo) error {
514
+ s := p.PointerSlice()
515
+ for _, v := range s {
516
+ if err := f.mi.checkInitializedPointer(v); err != nil {
517
+ return err
518
+ }
519
+ }
520
+ return nil
521
+ }
522
+
523
+ func sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, _ marshalOptions) int {
524
+ s := p.PointerSlice()
525
+ n := 0
526
+ for _, v := range s {
527
+ m := asMessage(v.AsValueOf(goType.Elem()))
528
+ n += protowire.SizeBytes(proto.Size(m)) + tagsize
529
+ }
530
+ return n
531
+ }
532
+
533
+ func appendMessageSlice(b []byte, p pointer, wiretag uint64, goType reflect.Type, opts marshalOptions) ([]byte, error) {
534
+ s := p.PointerSlice()
535
+ var err error
536
+ for _, v := range s {
537
+ m := asMessage(v.AsValueOf(goType.Elem()))
538
+ b = protowire.AppendVarint(b, wiretag)
539
+ siz := proto.Size(m)
540
+ b = protowire.AppendVarint(b, uint64(siz))
541
+ b, err = opts.Options().MarshalAppend(b, m)
542
+ if err != nil {
543
+ return b, err
544
+ }
545
+ }
546
+ return b, nil
547
+ }
548
+
549
+ func consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
550
+ if wtyp != protowire.BytesType {
551
+ return out, errUnknown
552
+ }
553
+ v, n := protowire.ConsumeBytes(b)
554
+ if n < 0 {
555
+ return out, errDecode
556
+ }
557
+ mp := reflect.New(goType.Elem())
558
+ o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
559
+ Buf: v,
560
+ Message: asMessage(mp).ProtoReflect(),
561
+ })
562
+ if err != nil {
563
+ return out, err
564
+ }
565
+ p.AppendPointerSlice(pointerOfValue(mp))
566
+ out.n = n
567
+ out.initialized = o.Flags&piface.UnmarshalInitialized != 0
568
+ return out, nil
569
+ }
570
+
571
+ func isInitMessageSlice(p pointer, goType reflect.Type) error {
572
+ s := p.PointerSlice()
573
+ for _, v := range s {
574
+ m := asMessage(v.AsValueOf(goType.Elem()))
575
+ if err := proto.CheckInitialized(m); err != nil {
576
+ return err
577
+ }
578
+ }
579
+ return nil
580
+ }
581
+
582
+ // Slices of messages
583
+
584
+ func sizeMessageSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int {
585
+ list := listv.List()
586
+ n := 0
587
+ for i, llen := 0, list.Len(); i < llen; i++ {
588
+ m := list.Get(i).Message().Interface()
589
+ n += protowire.SizeBytes(proto.Size(m)) + tagsize
590
+ }
591
+ return n
592
+ }
593
+
594
+ func appendMessageSliceValue(b []byte, listv pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
595
+ list := listv.List()
596
+ mopts := opts.Options()
597
+ for i, llen := 0, list.Len(); i < llen; i++ {
598
+ m := list.Get(i).Message().Interface()
599
+ b = protowire.AppendVarint(b, wiretag)
600
+ siz := proto.Size(m)
601
+ b = protowire.AppendVarint(b, uint64(siz))
602
+ var err error
603
+ b, err = mopts.MarshalAppend(b, m)
604
+ if err != nil {
605
+ return b, err
606
+ }
607
+ }
608
+ return b, nil
609
+ }
610
+
611
+ func consumeMessageSliceValue(b []byte, listv pref.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ pref.Value, out unmarshalOutput, err error) {
612
+ list := listv.List()
613
+ if wtyp != protowire.BytesType {
614
+ return pref.Value{}, out, errUnknown
615
+ }
616
+ v, n := protowire.ConsumeBytes(b)
617
+ if n < 0 {
618
+ return pref.Value{}, out, errDecode
619
+ }
620
+ m := list.NewElement()
621
+ o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
622
+ Buf: v,
623
+ Message: m.Message(),
624
+ })
625
+ if err != nil {
626
+ return pref.Value{}, out, err
627
+ }
628
+ list.Append(m)
629
+ out.n = n
630
+ out.initialized = o.Flags&piface.UnmarshalInitialized != 0
631
+ return listv, out, nil
632
+ }
633
+
634
+ func isInitMessageSliceValue(listv pref.Value) error {
635
+ list := listv.List()
636
+ for i, llen := 0, list.Len(); i < llen; i++ {
637
+ m := list.Get(i).Message().Interface()
638
+ if err := proto.CheckInitialized(m); err != nil {
639
+ return err
640
+ }
641
+ }
642
+ return nil
643
+ }
644
+
645
+ var coderMessageSliceValue = valueCoderFuncs{
646
+ size: sizeMessageSliceValue,
647
+ marshal: appendMessageSliceValue,
648
+ unmarshal: consumeMessageSliceValue,
649
+ isInit: isInitMessageSliceValue,
650
+ merge: mergeMessageListValue,
651
+ }
652
+
653
+ func sizeGroupSliceValue(listv pref.Value, tagsize int, opts marshalOptions) int {
654
+ list := listv.List()
655
+ n := 0
656
+ for i, llen := 0, list.Len(); i < llen; i++ {
657
+ m := list.Get(i).Message().Interface()
658
+ n += 2*tagsize + proto.Size(m)
659
+ }
660
+ return n
661
+ }
662
+
663
+ func appendGroupSliceValue(b []byte, listv pref.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
664
+ list := listv.List()
665
+ mopts := opts.Options()
666
+ for i, llen := 0, list.Len(); i < llen; i++ {
667
+ m := list.Get(i).Message().Interface()
668
+ b = protowire.AppendVarint(b, wiretag) // start group
669
+ var err error
670
+ b, err = mopts.MarshalAppend(b, m)
671
+ if err != nil {
672
+ return b, err
673
+ }
674
+ b = protowire.AppendVarint(b, wiretag+1) // end group
675
+ }
676
+ return b, nil
677
+ }
678
+
679
+ func consumeGroupSliceValue(b []byte, listv pref.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ pref.Value, out unmarshalOutput, err error) {
680
+ list := listv.List()
681
+ if wtyp != protowire.StartGroupType {
682
+ return pref.Value{}, out, errUnknown
683
+ }
684
+ b, n := protowire.ConsumeGroup(num, b)
685
+ if n < 0 {
686
+ return pref.Value{}, out, errDecode
687
+ }
688
+ m := list.NewElement()
689
+ o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
690
+ Buf: b,
691
+ Message: m.Message(),
692
+ })
693
+ if err != nil {
694
+ return pref.Value{}, out, err
695
+ }
696
+ list.Append(m)
697
+ out.n = n
698
+ out.initialized = o.Flags&piface.UnmarshalInitialized != 0
699
+ return listv, out, nil
700
+ }
701
+
702
+ var coderGroupSliceValue = valueCoderFuncs{
703
+ size: sizeGroupSliceValue,
704
+ marshal: appendGroupSliceValue,
705
+ unmarshal: consumeGroupSliceValue,
706
+ isInit: isInitMessageSliceValue,
707
+ merge: mergeMessageListValue,
708
+ }
709
+
710
+ func makeGroupSliceFieldCoder(fd pref.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
711
+ num := fd.Number()
712
+ if mi := getMessageInfo(ft); mi != nil {
713
+ funcs := pointerCoderFuncs{
714
+ size: sizeGroupSliceInfo,
715
+ marshal: appendGroupSliceInfo,
716
+ unmarshal: consumeGroupSliceInfo,
717
+ merge: mergeMessageSlice,
718
+ }
719
+ if needsInitCheck(mi.Desc) {
720
+ funcs.isInit = isInitMessageSliceInfo
721
+ }
722
+ return funcs
723
+ }
724
+ return pointerCoderFuncs{
725
+ size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
726
+ return sizeGroupSlice(p, ft, f.tagsize, opts)
727
+ },
728
+ marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
729
+ return appendGroupSlice(b, p, f.wiretag, ft, opts)
730
+ },
731
+ unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
732
+ return consumeGroupSlice(b, p, num, wtyp, ft, opts)
733
+ },
734
+ isInit: func(p pointer, f *coderFieldInfo) error {
735
+ return isInitMessageSlice(p, ft)
736
+ },
737
+ merge: mergeMessageSlice,
738
+ }
739
+ }
740
+
741
+ func sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, _ marshalOptions) int {
742
+ s := p.PointerSlice()
743
+ n := 0
744
+ for _, v := range s {
745
+ m := asMessage(v.AsValueOf(messageType.Elem()))
746
+ n += 2*tagsize + proto.Size(m)
747
+ }
748
+ return n
749
+ }
750
+
751
+ func appendGroupSlice(b []byte, p pointer, wiretag uint64, messageType reflect.Type, opts marshalOptions) ([]byte, error) {
752
+ s := p.PointerSlice()
753
+ var err error
754
+ for _, v := range s {
755
+ m := asMessage(v.AsValueOf(messageType.Elem()))
756
+ b = protowire.AppendVarint(b, wiretag) // start group
757
+ b, err = opts.Options().MarshalAppend(b, m)
758
+ if err != nil {
759
+ return b, err
760
+ }
761
+ b = protowire.AppendVarint(b, wiretag+1) // end group
762
+ }
763
+ return b, nil
764
+ }
765
+
766
+ func consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire.Type, goType reflect.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
767
+ if wtyp != protowire.StartGroupType {
768
+ return out, errUnknown
769
+ }
770
+ b, n := protowire.ConsumeGroup(num, b)
771
+ if n < 0 {
772
+ return out, errDecode
773
+ }
774
+ mp := reflect.New(goType.Elem())
775
+ o, err := opts.Options().UnmarshalState(piface.UnmarshalInput{
776
+ Buf: b,
777
+ Message: asMessage(mp).ProtoReflect(),
778
+ })
779
+ if err != nil {
780
+ return out, err
781
+ }
782
+ p.AppendPointerSlice(pointerOfValue(mp))
783
+ out.n = n
784
+ out.initialized = o.Flags&piface.UnmarshalInitialized != 0
785
+ return out, nil
786
+ }
787
+
788
+ func sizeGroupSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {
789
+ s := p.PointerSlice()
790
+ n := 0
791
+ for _, v := range s {
792
+ n += 2*f.tagsize + f.mi.sizePointer(v, opts)
793
+ }
794
+ return n
795
+ }
796
+
797
+ func appendGroupSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
798
+ s := p.PointerSlice()
799
+ var err error
800
+ for _, v := range s {
801
+ b = protowire.AppendVarint(b, f.wiretag) // start group
802
+ b, err = f.mi.marshalAppendPointer(b, v, opts)
803
+ if err != nil {
804
+ return b, err
805
+ }
806
+ b = protowire.AppendVarint(b, f.wiretag+1) // end group
807
+ }
808
+ return b, nil
809
+ }
810
+
811
+ func consumeGroupSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
812
+ if wtyp != protowire.StartGroupType {
813
+ return unmarshalOutput{}, errUnknown
814
+ }
815
+ m := reflect.New(f.mi.GoReflectType.Elem()).Interface()
816
+ mp := pointerOfIface(m)
817
+ out, err := f.mi.unmarshalPointer(b, mp, f.num, opts)
818
+ if err != nil {
819
+ return out, err
820
+ }
821
+ p.AppendPointerSlice(mp)
822
+ return out, nil
823
+ }
824
+
825
+ func asMessage(v reflect.Value) pref.ProtoMessage {
826
+ if m, ok := v.Interface().(pref.ProtoMessage); ok {
827
+ return m
828
+ }
829
+ return legacyWrapMessage(v).Interface()
830
+ }