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,201 @@
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
+ "math"
9
+ "sort"
10
+ "sync/atomic"
11
+
12
+ "google.golang.org/protobuf/internal/flags"
13
+ proto "google.golang.org/protobuf/proto"
14
+ piface "google.golang.org/protobuf/runtime/protoiface"
15
+ )
16
+
17
+ type marshalOptions struct {
18
+ flags piface.MarshalInputFlags
19
+ }
20
+
21
+ func (o marshalOptions) Options() proto.MarshalOptions {
22
+ return proto.MarshalOptions{
23
+ AllowPartial: true,
24
+ Deterministic: o.Deterministic(),
25
+ UseCachedSize: o.UseCachedSize(),
26
+ }
27
+ }
28
+
29
+ func (o marshalOptions) Deterministic() bool { return o.flags&piface.MarshalDeterministic != 0 }
30
+ func (o marshalOptions) UseCachedSize() bool { return o.flags&piface.MarshalUseCachedSize != 0 }
31
+
32
+ // size is protoreflect.Methods.Size.
33
+ func (mi *MessageInfo) size(in piface.SizeInput) piface.SizeOutput {
34
+ var p pointer
35
+ if ms, ok := in.Message.(*messageState); ok {
36
+ p = ms.pointer()
37
+ } else {
38
+ p = in.Message.(*messageReflectWrapper).pointer()
39
+ }
40
+ size := mi.sizePointer(p, marshalOptions{
41
+ flags: in.Flags,
42
+ })
43
+ return piface.SizeOutput{Size: size}
44
+ }
45
+
46
+ func (mi *MessageInfo) sizePointer(p pointer, opts marshalOptions) (size int) {
47
+ mi.init()
48
+ if p.IsNil() {
49
+ return 0
50
+ }
51
+ if opts.UseCachedSize() && mi.sizecacheOffset.IsValid() {
52
+ if size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size >= 0 {
53
+ return int(size)
54
+ }
55
+ }
56
+ return mi.sizePointerSlow(p, opts)
57
+ }
58
+
59
+ func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int) {
60
+ if flags.ProtoLegacy && mi.isMessageSet {
61
+ size = sizeMessageSet(mi, p, opts)
62
+ if mi.sizecacheOffset.IsValid() {
63
+ atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size))
64
+ }
65
+ return size
66
+ }
67
+ if mi.extensionOffset.IsValid() {
68
+ e := p.Apply(mi.extensionOffset).Extensions()
69
+ size += mi.sizeExtensions(e, opts)
70
+ }
71
+ for _, f := range mi.orderedCoderFields {
72
+ if f.funcs.size == nil {
73
+ continue
74
+ }
75
+ fptr := p.Apply(f.offset)
76
+ if f.isPointer && fptr.Elem().IsNil() {
77
+ continue
78
+ }
79
+ size += f.funcs.size(fptr, f, opts)
80
+ }
81
+ if mi.unknownOffset.IsValid() {
82
+ if u := mi.getUnknownBytes(p); u != nil {
83
+ size += len(*u)
84
+ }
85
+ }
86
+ if mi.sizecacheOffset.IsValid() {
87
+ if size > math.MaxInt32 {
88
+ // The size is too large for the int32 sizecache field.
89
+ // We will need to recompute the size when encoding;
90
+ // unfortunately expensive, but better than invalid output.
91
+ atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), -1)
92
+ } else {
93
+ atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size))
94
+ }
95
+ }
96
+ return size
97
+ }
98
+
99
+ // marshal is protoreflect.Methods.Marshal.
100
+ func (mi *MessageInfo) marshal(in piface.MarshalInput) (out piface.MarshalOutput, err error) {
101
+ var p pointer
102
+ if ms, ok := in.Message.(*messageState); ok {
103
+ p = ms.pointer()
104
+ } else {
105
+ p = in.Message.(*messageReflectWrapper).pointer()
106
+ }
107
+ b, err := mi.marshalAppendPointer(in.Buf, p, marshalOptions{
108
+ flags: in.Flags,
109
+ })
110
+ return piface.MarshalOutput{Buf: b}, err
111
+ }
112
+
113
+ func (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOptions) ([]byte, error) {
114
+ mi.init()
115
+ if p.IsNil() {
116
+ return b, nil
117
+ }
118
+ if flags.ProtoLegacy && mi.isMessageSet {
119
+ return marshalMessageSet(mi, b, p, opts)
120
+ }
121
+ var err error
122
+ // The old marshaler encodes extensions at beginning.
123
+ if mi.extensionOffset.IsValid() {
124
+ e := p.Apply(mi.extensionOffset).Extensions()
125
+ // TODO: Special handling for MessageSet?
126
+ b, err = mi.appendExtensions(b, e, opts)
127
+ if err != nil {
128
+ return b, err
129
+ }
130
+ }
131
+ for _, f := range mi.orderedCoderFields {
132
+ if f.funcs.marshal == nil {
133
+ continue
134
+ }
135
+ fptr := p.Apply(f.offset)
136
+ if f.isPointer && fptr.Elem().IsNil() {
137
+ continue
138
+ }
139
+ b, err = f.funcs.marshal(b, fptr, f, opts)
140
+ if err != nil {
141
+ return b, err
142
+ }
143
+ }
144
+ if mi.unknownOffset.IsValid() && !mi.isMessageSet {
145
+ if u := mi.getUnknownBytes(p); u != nil {
146
+ b = append(b, (*u)...)
147
+ }
148
+ }
149
+ return b, nil
150
+ }
151
+
152
+ func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) {
153
+ if ext == nil {
154
+ return 0
155
+ }
156
+ for _, x := range *ext {
157
+ xi := getExtensionFieldInfo(x.Type())
158
+ if xi.funcs.size == nil {
159
+ continue
160
+ }
161
+ n += xi.funcs.size(x.Value(), xi.tagsize, opts)
162
+ }
163
+ return n
164
+ }
165
+
166
+ func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField, opts marshalOptions) ([]byte, error) {
167
+ if ext == nil {
168
+ return b, nil
169
+ }
170
+
171
+ switch len(*ext) {
172
+ case 0:
173
+ return b, nil
174
+ case 1:
175
+ // Fast-path for one extension: Don't bother sorting the keys.
176
+ var err error
177
+ for _, x := range *ext {
178
+ xi := getExtensionFieldInfo(x.Type())
179
+ b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
180
+ }
181
+ return b, err
182
+ default:
183
+ // Sort the keys to provide a deterministic encoding.
184
+ // Not sure this is required, but the old code does it.
185
+ keys := make([]int, 0, len(*ext))
186
+ for k := range *ext {
187
+ keys = append(keys, int(k))
188
+ }
189
+ sort.Ints(keys)
190
+ var err error
191
+ for _, k := range keys {
192
+ x := (*ext)[int32(k)]
193
+ xi := getExtensionFieldInfo(x.Type())
194
+ b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
195
+ if err != nil {
196
+ return b, err
197
+ }
198
+ }
199
+ return b, nil
200
+ }
201
+ }
@@ -0,0 +1,21 @@
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
+ "reflect"
9
+
10
+ pref "google.golang.org/protobuf/reflect/protoreflect"
11
+ )
12
+
13
+ type EnumInfo struct {
14
+ GoReflectType reflect.Type // int32 kind
15
+ Desc pref.EnumDescriptor
16
+ }
17
+
18
+ func (t *EnumInfo) New(n pref.EnumNumber) pref.Enum {
19
+ return reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(pref.Enum)
20
+ }
21
+ func (t *EnumInfo) Descriptor() pref.EnumDescriptor { return t.Desc }
@@ -0,0 +1,156 @@
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
+ "reflect"
9
+ "sync"
10
+ "sync/atomic"
11
+
12
+ pref "google.golang.org/protobuf/reflect/protoreflect"
13
+ piface "google.golang.org/protobuf/runtime/protoiface"
14
+ )
15
+
16
+ // ExtensionInfo implements ExtensionType.
17
+ //
18
+ // This type contains a number of exported fields for legacy compatibility.
19
+ // The only non-deprecated use of this type is through the methods of the
20
+ // ExtensionType interface.
21
+ type ExtensionInfo struct {
22
+ // An ExtensionInfo may exist in several stages of initialization.
23
+ //
24
+ // extensionInfoUninitialized: Some or all of the legacy exported
25
+ // fields may be set, but none of the unexported fields have been
26
+ // initialized. This is the starting state for an ExtensionInfo
27
+ // in legacy generated code.
28
+ //
29
+ // extensionInfoDescInit: The desc field is set, but other unexported fields
30
+ // may not be initialized. Legacy exported fields may or may not be set.
31
+ // This is the starting state for an ExtensionInfo in newly generated code.
32
+ //
33
+ // extensionInfoFullInit: The ExtensionInfo is fully initialized.
34
+ // This state is only entered after lazy initialization is complete.
35
+ init uint32
36
+ mu sync.Mutex
37
+
38
+ goType reflect.Type
39
+ desc extensionTypeDescriptor
40
+ conv Converter
41
+ info *extensionFieldInfo // for fast-path method implementations
42
+
43
+ // ExtendedType is a typed nil-pointer to the parent message type that
44
+ // is being extended. It is possible for this to be unpopulated in v2
45
+ // since the message may no longer implement the MessageV1 interface.
46
+ //
47
+ // Deprecated: Use the ExtendedType method instead.
48
+ ExtendedType piface.MessageV1
49
+
50
+ // ExtensionType is the zero value of the extension type.
51
+ //
52
+ // For historical reasons, reflect.TypeOf(ExtensionType) and the
53
+ // type returned by InterfaceOf may not be identical.
54
+ //
55
+ // Deprecated: Use InterfaceOf(xt.Zero()) instead.
56
+ ExtensionType interface{}
57
+
58
+ // Field is the field number of the extension.
59
+ //
60
+ // Deprecated: Use the Descriptor().Number method instead.
61
+ Field int32
62
+
63
+ // Name is the fully qualified name of extension.
64
+ //
65
+ // Deprecated: Use the Descriptor().FullName method instead.
66
+ Name string
67
+
68
+ // Tag is the protobuf struct tag used in the v1 API.
69
+ //
70
+ // Deprecated: Do not use.
71
+ Tag string
72
+
73
+ // Filename is the proto filename in which the extension is defined.
74
+ //
75
+ // Deprecated: Use Descriptor().ParentFile().Path() instead.
76
+ Filename string
77
+ }
78
+
79
+ // Stages of initialization: See the ExtensionInfo.init field.
80
+ const (
81
+ extensionInfoUninitialized = 0
82
+ extensionInfoDescInit = 1
83
+ extensionInfoFullInit = 2
84
+ )
85
+
86
+ func InitExtensionInfo(xi *ExtensionInfo, xd pref.ExtensionDescriptor, goType reflect.Type) {
87
+ xi.goType = goType
88
+ xi.desc = extensionTypeDescriptor{xd, xi}
89
+ xi.init = extensionInfoDescInit
90
+ }
91
+
92
+ func (xi *ExtensionInfo) New() pref.Value {
93
+ return xi.lazyInit().New()
94
+ }
95
+ func (xi *ExtensionInfo) Zero() pref.Value {
96
+ return xi.lazyInit().Zero()
97
+ }
98
+ func (xi *ExtensionInfo) ValueOf(v interface{}) pref.Value {
99
+ return xi.lazyInit().PBValueOf(reflect.ValueOf(v))
100
+ }
101
+ func (xi *ExtensionInfo) InterfaceOf(v pref.Value) interface{} {
102
+ return xi.lazyInit().GoValueOf(v).Interface()
103
+ }
104
+ func (xi *ExtensionInfo) IsValidValue(v pref.Value) bool {
105
+ return xi.lazyInit().IsValidPB(v)
106
+ }
107
+ func (xi *ExtensionInfo) IsValidInterface(v interface{}) bool {
108
+ return xi.lazyInit().IsValidGo(reflect.ValueOf(v))
109
+ }
110
+ func (xi *ExtensionInfo) TypeDescriptor() pref.ExtensionTypeDescriptor {
111
+ if atomic.LoadUint32(&xi.init) < extensionInfoDescInit {
112
+ xi.lazyInitSlow()
113
+ }
114
+ return &xi.desc
115
+ }
116
+
117
+ func (xi *ExtensionInfo) lazyInit() Converter {
118
+ if atomic.LoadUint32(&xi.init) < extensionInfoFullInit {
119
+ xi.lazyInitSlow()
120
+ }
121
+ return xi.conv
122
+ }
123
+
124
+ func (xi *ExtensionInfo) lazyInitSlow() {
125
+ xi.mu.Lock()
126
+ defer xi.mu.Unlock()
127
+
128
+ if xi.init == extensionInfoFullInit {
129
+ return
130
+ }
131
+ defer atomic.StoreUint32(&xi.init, extensionInfoFullInit)
132
+
133
+ if xi.desc.ExtensionDescriptor == nil {
134
+ xi.initFromLegacy()
135
+ }
136
+ if !xi.desc.ExtensionDescriptor.IsPlaceholder() {
137
+ if xi.ExtensionType == nil {
138
+ xi.initToLegacy()
139
+ }
140
+ xi.conv = NewConverter(xi.goType, xi.desc.ExtensionDescriptor)
141
+ xi.info = makeExtensionFieldInfo(xi.desc.ExtensionDescriptor)
142
+ xi.info.validation = newValidationInfo(xi.desc.ExtensionDescriptor, xi.goType)
143
+ }
144
+ }
145
+
146
+ type extensionTypeDescriptor struct {
147
+ pref.ExtensionDescriptor
148
+ xi *ExtensionInfo
149
+ }
150
+
151
+ func (xtd *extensionTypeDescriptor) Type() pref.ExtensionType {
152
+ return xtd.xi
153
+ }
154
+ func (xtd *extensionTypeDescriptor) Descriptor() pref.ExtensionDescriptor {
155
+ return xtd.ExtensionDescriptor
156
+ }
@@ -0,0 +1,219 @@
1
+ // Copyright 2018 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
+ "strings"
11
+ "sync"
12
+
13
+ "google.golang.org/protobuf/internal/filedesc"
14
+ "google.golang.org/protobuf/internal/strs"
15
+ "google.golang.org/protobuf/reflect/protoreflect"
16
+ pref "google.golang.org/protobuf/reflect/protoreflect"
17
+ )
18
+
19
+ // legacyEnumName returns the name of enums used in legacy code.
20
+ // It is neither the protobuf full name nor the qualified Go name,
21
+ // but rather an odd hybrid of both.
22
+ func legacyEnumName(ed pref.EnumDescriptor) string {
23
+ var protoPkg string
24
+ enumName := string(ed.FullName())
25
+ if fd := ed.ParentFile(); fd != nil {
26
+ protoPkg = string(fd.Package())
27
+ enumName = strings.TrimPrefix(enumName, protoPkg+".")
28
+ }
29
+ if protoPkg == "" {
30
+ return strs.GoCamelCase(enumName)
31
+ }
32
+ return protoPkg + "." + strs.GoCamelCase(enumName)
33
+ }
34
+
35
+ // legacyWrapEnum wraps v as a protoreflect.Enum,
36
+ // where v must be a int32 kind and not implement the v2 API already.
37
+ func legacyWrapEnum(v reflect.Value) pref.Enum {
38
+ et := legacyLoadEnumType(v.Type())
39
+ return et.New(pref.EnumNumber(v.Int()))
40
+ }
41
+
42
+ var legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType
43
+
44
+ // legacyLoadEnumType dynamically loads a protoreflect.EnumType for t,
45
+ // where t must be an int32 kind and not implement the v2 API already.
46
+ func legacyLoadEnumType(t reflect.Type) pref.EnumType {
47
+ // Fast-path: check if a EnumType is cached for this concrete type.
48
+ if et, ok := legacyEnumTypeCache.Load(t); ok {
49
+ return et.(pref.EnumType)
50
+ }
51
+
52
+ // Slow-path: derive enum descriptor and initialize EnumType.
53
+ var et pref.EnumType
54
+ ed := LegacyLoadEnumDesc(t)
55
+ et = &legacyEnumType{
56
+ desc: ed,
57
+ goType: t,
58
+ }
59
+ if et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok {
60
+ return et.(pref.EnumType)
61
+ }
62
+ return et
63
+ }
64
+
65
+ type legacyEnumType struct {
66
+ desc pref.EnumDescriptor
67
+ goType reflect.Type
68
+ m sync.Map // map[protoreflect.EnumNumber]proto.Enum
69
+ }
70
+
71
+ func (t *legacyEnumType) New(n pref.EnumNumber) pref.Enum {
72
+ if e, ok := t.m.Load(n); ok {
73
+ return e.(pref.Enum)
74
+ }
75
+ e := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType}
76
+ t.m.Store(n, e)
77
+ return e
78
+ }
79
+ func (t *legacyEnumType) Descriptor() pref.EnumDescriptor {
80
+ return t.desc
81
+ }
82
+
83
+ type legacyEnumWrapper struct {
84
+ num pref.EnumNumber
85
+ pbTyp pref.EnumType
86
+ goTyp reflect.Type
87
+ }
88
+
89
+ func (e *legacyEnumWrapper) Descriptor() pref.EnumDescriptor {
90
+ return e.pbTyp.Descriptor()
91
+ }
92
+ func (e *legacyEnumWrapper) Type() pref.EnumType {
93
+ return e.pbTyp
94
+ }
95
+ func (e *legacyEnumWrapper) Number() pref.EnumNumber {
96
+ return e.num
97
+ }
98
+ func (e *legacyEnumWrapper) ProtoReflect() pref.Enum {
99
+ return e
100
+ }
101
+ func (e *legacyEnumWrapper) protoUnwrap() interface{} {
102
+ v := reflect.New(e.goTyp).Elem()
103
+ v.SetInt(int64(e.num))
104
+ return v.Interface()
105
+ }
106
+
107
+ var (
108
+ _ pref.Enum = (*legacyEnumWrapper)(nil)
109
+ _ unwrapper = (*legacyEnumWrapper)(nil)
110
+ )
111
+
112
+ var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
113
+
114
+ // LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type,
115
+ // which must be an int32 kind and not implement the v2 API already.
116
+ //
117
+ // This is exported for testing purposes.
118
+ func LegacyLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
119
+ // Fast-path: check if an EnumDescriptor is cached for this concrete type.
120
+ if ed, ok := legacyEnumDescCache.Load(t); ok {
121
+ return ed.(pref.EnumDescriptor)
122
+ }
123
+
124
+ // Slow-path: initialize EnumDescriptor from the raw descriptor.
125
+ ev := reflect.Zero(t).Interface()
126
+ if _, ok := ev.(pref.Enum); ok {
127
+ panic(fmt.Sprintf("%v already implements proto.Enum", t))
128
+ }
129
+ edV1, ok := ev.(enumV1)
130
+ if !ok {
131
+ return aberrantLoadEnumDesc(t)
132
+ }
133
+ b, idxs := edV1.EnumDescriptor()
134
+
135
+ var ed pref.EnumDescriptor
136
+ if len(idxs) == 1 {
137
+ ed = legacyLoadFileDesc(b).Enums().Get(idxs[0])
138
+ } else {
139
+ md := legacyLoadFileDesc(b).Messages().Get(idxs[0])
140
+ for _, i := range idxs[1 : len(idxs)-1] {
141
+ md = md.Messages().Get(i)
142
+ }
143
+ ed = md.Enums().Get(idxs[len(idxs)-1])
144
+ }
145
+ if ed, ok := legacyEnumDescCache.LoadOrStore(t, ed); ok {
146
+ return ed.(protoreflect.EnumDescriptor)
147
+ }
148
+ return ed
149
+ }
150
+
151
+ var aberrantEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
152
+
153
+ // aberrantLoadEnumDesc returns an EnumDescriptor derived from the Go type,
154
+ // which must not implement protoreflect.Enum or enumV1.
155
+ //
156
+ // If the type does not implement enumV1, then there is no reliable
157
+ // way to derive the original protobuf type information.
158
+ // We are unable to use the global enum registry since it is
159
+ // unfortunately keyed by the protobuf full name, which we also do not know.
160
+ // Thus, this produces some bogus enum descriptor based on the Go type name.
161
+ func aberrantLoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
162
+ // Fast-path: check if an EnumDescriptor is cached for this concrete type.
163
+ if ed, ok := aberrantEnumDescCache.Load(t); ok {
164
+ return ed.(pref.EnumDescriptor)
165
+ }
166
+
167
+ // Slow-path: construct a bogus, but unique EnumDescriptor.
168
+ ed := &filedesc.Enum{L2: new(filedesc.EnumL2)}
169
+ ed.L0.FullName = AberrantDeriveFullName(t) // e.g., github_com.user.repo.MyEnum
170
+ ed.L0.ParentFile = filedesc.SurrogateProto3
171
+ ed.L2.Values.List = append(ed.L2.Values.List, filedesc.EnumValue{})
172
+
173
+ // TODO: Use the presence of a UnmarshalJSON method to determine proto2?
174
+
175
+ vd := &ed.L2.Values.List[0]
176
+ vd.L0.FullName = ed.L0.FullName + "_UNKNOWN" // e.g., github_com.user.repo.MyEnum_UNKNOWN
177
+ vd.L0.ParentFile = ed.L0.ParentFile
178
+ vd.L0.Parent = ed
179
+
180
+ // TODO: We could use the String method to obtain some enum value names by
181
+ // starting at 0 and print the enum until it produces invalid identifiers.
182
+ // An exhaustive query is clearly impractical, but can be best-effort.
183
+
184
+ if ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok {
185
+ return ed.(pref.EnumDescriptor)
186
+ }
187
+ return ed
188
+ }
189
+
190
+ // AberrantDeriveFullName derives a fully qualified protobuf name for the given Go type
191
+ // The provided name is not guaranteed to be stable nor universally unique.
192
+ // It should be sufficiently unique within a program.
193
+ //
194
+ // This is exported for testing purposes.
195
+ func AberrantDeriveFullName(t reflect.Type) pref.FullName {
196
+ sanitize := func(r rune) rune {
197
+ switch {
198
+ case r == '/':
199
+ return '.'
200
+ case 'a' <= r && r <= 'z', 'A' <= r && r <= 'Z', '0' <= r && r <= '9':
201
+ return r
202
+ default:
203
+ return '_'
204
+ }
205
+ }
206
+ prefix := strings.Map(sanitize, t.PkgPath())
207
+ suffix := strings.Map(sanitize, t.Name())
208
+ if suffix == "" {
209
+ suffix = fmt.Sprintf("UnknownX%X", reflect.ValueOf(t).Pointer())
210
+ }
211
+
212
+ ss := append(strings.Split(prefix, "."), suffix)
213
+ for i, s := range ss {
214
+ if s == "" || ('0' <= s[0] && s[0] <= '9') {
215
+ ss[i] = "x" + s
216
+ }
217
+ }
218
+ return pref.FullName(strings.Join(ss, "."))
219
+ }