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,249 @@
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
+ // Code generated by generate-types. DO NOT EDIT.
6
+
7
+ package impl
8
+
9
+ import (
10
+ "google.golang.org/protobuf/reflect/protoreflect"
11
+ "google.golang.org/protobuf/runtime/protoiface"
12
+ )
13
+
14
+ func (m *messageState) Descriptor() protoreflect.MessageDescriptor {
15
+ return m.messageInfo().Desc
16
+ }
17
+ func (m *messageState) Type() protoreflect.MessageType {
18
+ return m.messageInfo()
19
+ }
20
+ func (m *messageState) New() protoreflect.Message {
21
+ return m.messageInfo().New()
22
+ }
23
+ func (m *messageState) Interface() protoreflect.ProtoMessage {
24
+ return m.protoUnwrap().(protoreflect.ProtoMessage)
25
+ }
26
+ func (m *messageState) protoUnwrap() interface{} {
27
+ return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
28
+ }
29
+ func (m *messageState) ProtoMethods() *protoiface.Methods {
30
+ m.messageInfo().init()
31
+ return &m.messageInfo().methods
32
+ }
33
+
34
+ // ProtoMessageInfo is a pseudo-internal API for allowing the v1 code
35
+ // to be able to retrieve a v2 MessageInfo struct.
36
+ //
37
+ // WARNING: This method is exempt from the compatibility promise and
38
+ // may be removed in the future without warning.
39
+ func (m *messageState) ProtoMessageInfo() *MessageInfo {
40
+ return m.messageInfo()
41
+ }
42
+
43
+ func (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
44
+ m.messageInfo().init()
45
+ for _, ri := range m.messageInfo().rangeInfos {
46
+ switch ri := ri.(type) {
47
+ case *fieldInfo:
48
+ if ri.has(m.pointer()) {
49
+ if !f(ri.fieldDesc, ri.get(m.pointer())) {
50
+ return
51
+ }
52
+ }
53
+ case *oneofInfo:
54
+ if n := ri.which(m.pointer()); n > 0 {
55
+ fi := m.messageInfo().fields[n]
56
+ if !f(fi.fieldDesc, fi.get(m.pointer())) {
57
+ return
58
+ }
59
+ }
60
+ }
61
+ }
62
+ m.messageInfo().extensionMap(m.pointer()).Range(f)
63
+ }
64
+ func (m *messageState) Has(fd protoreflect.FieldDescriptor) bool {
65
+ m.messageInfo().init()
66
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
67
+ return fi.has(m.pointer())
68
+ } else {
69
+ return m.messageInfo().extensionMap(m.pointer()).Has(xt)
70
+ }
71
+ }
72
+ func (m *messageState) Clear(fd protoreflect.FieldDescriptor) {
73
+ m.messageInfo().init()
74
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
75
+ fi.clear(m.pointer())
76
+ } else {
77
+ m.messageInfo().extensionMap(m.pointer()).Clear(xt)
78
+ }
79
+ }
80
+ func (m *messageState) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
81
+ m.messageInfo().init()
82
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
83
+ return fi.get(m.pointer())
84
+ } else {
85
+ return m.messageInfo().extensionMap(m.pointer()).Get(xt)
86
+ }
87
+ }
88
+ func (m *messageState) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) {
89
+ m.messageInfo().init()
90
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
91
+ fi.set(m.pointer(), v)
92
+ } else {
93
+ m.messageInfo().extensionMap(m.pointer()).Set(xt, v)
94
+ }
95
+ }
96
+ func (m *messageState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
97
+ m.messageInfo().init()
98
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
99
+ return fi.mutable(m.pointer())
100
+ } else {
101
+ return m.messageInfo().extensionMap(m.pointer()).Mutable(xt)
102
+ }
103
+ }
104
+ func (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
105
+ m.messageInfo().init()
106
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
107
+ return fi.newField()
108
+ } else {
109
+ return xt.New()
110
+ }
111
+ }
112
+ func (m *messageState) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
113
+ m.messageInfo().init()
114
+ if oi := m.messageInfo().oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {
115
+ return od.Fields().ByNumber(oi.which(m.pointer()))
116
+ }
117
+ panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName()))
118
+ }
119
+ func (m *messageState) GetUnknown() protoreflect.RawFields {
120
+ m.messageInfo().init()
121
+ return m.messageInfo().getUnknown(m.pointer())
122
+ }
123
+ func (m *messageState) SetUnknown(b protoreflect.RawFields) {
124
+ m.messageInfo().init()
125
+ m.messageInfo().setUnknown(m.pointer(), b)
126
+ }
127
+ func (m *messageState) IsValid() bool {
128
+ return !m.pointer().IsNil()
129
+ }
130
+
131
+ func (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor {
132
+ return m.messageInfo().Desc
133
+ }
134
+ func (m *messageReflectWrapper) Type() protoreflect.MessageType {
135
+ return m.messageInfo()
136
+ }
137
+ func (m *messageReflectWrapper) New() protoreflect.Message {
138
+ return m.messageInfo().New()
139
+ }
140
+ func (m *messageReflectWrapper) Interface() protoreflect.ProtoMessage {
141
+ if m, ok := m.protoUnwrap().(protoreflect.ProtoMessage); ok {
142
+ return m
143
+ }
144
+ return (*messageIfaceWrapper)(m)
145
+ }
146
+ func (m *messageReflectWrapper) protoUnwrap() interface{} {
147
+ return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
148
+ }
149
+ func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods {
150
+ m.messageInfo().init()
151
+ return &m.messageInfo().methods
152
+ }
153
+
154
+ // ProtoMessageInfo is a pseudo-internal API for allowing the v1 code
155
+ // to be able to retrieve a v2 MessageInfo struct.
156
+ //
157
+ // WARNING: This method is exempt from the compatibility promise and
158
+ // may be removed in the future without warning.
159
+ func (m *messageReflectWrapper) ProtoMessageInfo() *MessageInfo {
160
+ return m.messageInfo()
161
+ }
162
+
163
+ func (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
164
+ m.messageInfo().init()
165
+ for _, ri := range m.messageInfo().rangeInfos {
166
+ switch ri := ri.(type) {
167
+ case *fieldInfo:
168
+ if ri.has(m.pointer()) {
169
+ if !f(ri.fieldDesc, ri.get(m.pointer())) {
170
+ return
171
+ }
172
+ }
173
+ case *oneofInfo:
174
+ if n := ri.which(m.pointer()); n > 0 {
175
+ fi := m.messageInfo().fields[n]
176
+ if !f(fi.fieldDesc, fi.get(m.pointer())) {
177
+ return
178
+ }
179
+ }
180
+ }
181
+ }
182
+ m.messageInfo().extensionMap(m.pointer()).Range(f)
183
+ }
184
+ func (m *messageReflectWrapper) Has(fd protoreflect.FieldDescriptor) bool {
185
+ m.messageInfo().init()
186
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
187
+ return fi.has(m.pointer())
188
+ } else {
189
+ return m.messageInfo().extensionMap(m.pointer()).Has(xt)
190
+ }
191
+ }
192
+ func (m *messageReflectWrapper) Clear(fd protoreflect.FieldDescriptor) {
193
+ m.messageInfo().init()
194
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
195
+ fi.clear(m.pointer())
196
+ } else {
197
+ m.messageInfo().extensionMap(m.pointer()).Clear(xt)
198
+ }
199
+ }
200
+ func (m *messageReflectWrapper) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
201
+ m.messageInfo().init()
202
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
203
+ return fi.get(m.pointer())
204
+ } else {
205
+ return m.messageInfo().extensionMap(m.pointer()).Get(xt)
206
+ }
207
+ }
208
+ func (m *messageReflectWrapper) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) {
209
+ m.messageInfo().init()
210
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
211
+ fi.set(m.pointer(), v)
212
+ } else {
213
+ m.messageInfo().extensionMap(m.pointer()).Set(xt, v)
214
+ }
215
+ }
216
+ func (m *messageReflectWrapper) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
217
+ m.messageInfo().init()
218
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
219
+ return fi.mutable(m.pointer())
220
+ } else {
221
+ return m.messageInfo().extensionMap(m.pointer()).Mutable(xt)
222
+ }
223
+ }
224
+ func (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
225
+ m.messageInfo().init()
226
+ if fi, xt := m.messageInfo().checkField(fd); fi != nil {
227
+ return fi.newField()
228
+ } else {
229
+ return xt.New()
230
+ }
231
+ }
232
+ func (m *messageReflectWrapper) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
233
+ m.messageInfo().init()
234
+ if oi := m.messageInfo().oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {
235
+ return od.Fields().ByNumber(oi.which(m.pointer()))
236
+ }
237
+ panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName()))
238
+ }
239
+ func (m *messageReflectWrapper) GetUnknown() protoreflect.RawFields {
240
+ m.messageInfo().init()
241
+ return m.messageInfo().getUnknown(m.pointer())
242
+ }
243
+ func (m *messageReflectWrapper) SetUnknown(b protoreflect.RawFields) {
244
+ m.messageInfo().init()
245
+ m.messageInfo().setUnknown(m.pointer(), b)
246
+ }
247
+ func (m *messageReflectWrapper) IsValid() bool {
248
+ return !m.pointer().IsNil()
249
+ }
@@ -0,0 +1,178 @@
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
+ // +build purego appengine
6
+
7
+ package impl
8
+
9
+ import (
10
+ "fmt"
11
+ "reflect"
12
+ "sync"
13
+ )
14
+
15
+ const UnsafeEnabled = false
16
+
17
+ // Pointer is an opaque pointer type.
18
+ type Pointer interface{}
19
+
20
+ // offset represents the offset to a struct field, accessible from a pointer.
21
+ // The offset is the field index into a struct.
22
+ type offset struct {
23
+ index int
24
+ export exporter
25
+ }
26
+
27
+ // offsetOf returns a field offset for the struct field.
28
+ func offsetOf(f reflect.StructField, x exporter) offset {
29
+ if len(f.Index) != 1 {
30
+ panic("embedded structs are not supported")
31
+ }
32
+ if f.PkgPath == "" {
33
+ return offset{index: f.Index[0]} // field is already exported
34
+ }
35
+ if x == nil {
36
+ panic("exporter must be provided for unexported field")
37
+ }
38
+ return offset{index: f.Index[0], export: x}
39
+ }
40
+
41
+ // IsValid reports whether the offset is valid.
42
+ func (f offset) IsValid() bool { return f.index >= 0 }
43
+
44
+ // invalidOffset is an invalid field offset.
45
+ var invalidOffset = offset{index: -1}
46
+
47
+ // zeroOffset is a noop when calling pointer.Apply.
48
+ var zeroOffset = offset{index: 0}
49
+
50
+ // pointer is an abstract representation of a pointer to a struct or field.
51
+ type pointer struct{ v reflect.Value }
52
+
53
+ // pointerOf returns p as a pointer.
54
+ func pointerOf(p Pointer) pointer {
55
+ return pointerOfIface(p)
56
+ }
57
+
58
+ // pointerOfValue returns v as a pointer.
59
+ func pointerOfValue(v reflect.Value) pointer {
60
+ return pointer{v: v}
61
+ }
62
+
63
+ // pointerOfIface returns the pointer portion of an interface.
64
+ func pointerOfIface(v interface{}) pointer {
65
+ return pointer{v: reflect.ValueOf(v)}
66
+ }
67
+
68
+ // IsNil reports whether the pointer is nil.
69
+ func (p pointer) IsNil() bool {
70
+ return p.v.IsNil()
71
+ }
72
+
73
+ // Apply adds an offset to the pointer to derive a new pointer
74
+ // to a specified field. The current pointer must be pointing at a struct.
75
+ func (p pointer) Apply(f offset) pointer {
76
+ if f.export != nil {
77
+ if v := reflect.ValueOf(f.export(p.v.Interface(), f.index)); v.IsValid() {
78
+ return pointer{v: v}
79
+ }
80
+ }
81
+ return pointer{v: p.v.Elem().Field(f.index).Addr()}
82
+ }
83
+
84
+ // AsValueOf treats p as a pointer to an object of type t and returns the value.
85
+ // It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))
86
+ func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
87
+ if got := p.v.Type().Elem(); got != t {
88
+ panic(fmt.Sprintf("invalid type: got %v, want %v", got, t))
89
+ }
90
+ return p.v
91
+ }
92
+
93
+ // AsIfaceOf treats p as a pointer to an object of type t and returns the value.
94
+ // It is equivalent to p.AsValueOf(t).Interface()
95
+ func (p pointer) AsIfaceOf(t reflect.Type) interface{} {
96
+ return p.AsValueOf(t).Interface()
97
+ }
98
+
99
+ func (p pointer) Bool() *bool { return p.v.Interface().(*bool) }
100
+ func (p pointer) BoolPtr() **bool { return p.v.Interface().(**bool) }
101
+ func (p pointer) BoolSlice() *[]bool { return p.v.Interface().(*[]bool) }
102
+ func (p pointer) Int32() *int32 { return p.v.Interface().(*int32) }
103
+ func (p pointer) Int32Ptr() **int32 { return p.v.Interface().(**int32) }
104
+ func (p pointer) Int32Slice() *[]int32 { return p.v.Interface().(*[]int32) }
105
+ func (p pointer) Int64() *int64 { return p.v.Interface().(*int64) }
106
+ func (p pointer) Int64Ptr() **int64 { return p.v.Interface().(**int64) }
107
+ func (p pointer) Int64Slice() *[]int64 { return p.v.Interface().(*[]int64) }
108
+ func (p pointer) Uint32() *uint32 { return p.v.Interface().(*uint32) }
109
+ func (p pointer) Uint32Ptr() **uint32 { return p.v.Interface().(**uint32) }
110
+ func (p pointer) Uint32Slice() *[]uint32 { return p.v.Interface().(*[]uint32) }
111
+ func (p pointer) Uint64() *uint64 { return p.v.Interface().(*uint64) }
112
+ func (p pointer) Uint64Ptr() **uint64 { return p.v.Interface().(**uint64) }
113
+ func (p pointer) Uint64Slice() *[]uint64 { return p.v.Interface().(*[]uint64) }
114
+ func (p pointer) Float32() *float32 { return p.v.Interface().(*float32) }
115
+ func (p pointer) Float32Ptr() **float32 { return p.v.Interface().(**float32) }
116
+ func (p pointer) Float32Slice() *[]float32 { return p.v.Interface().(*[]float32) }
117
+ func (p pointer) Float64() *float64 { return p.v.Interface().(*float64) }
118
+ func (p pointer) Float64Ptr() **float64 { return p.v.Interface().(**float64) }
119
+ func (p pointer) Float64Slice() *[]float64 { return p.v.Interface().(*[]float64) }
120
+ func (p pointer) String() *string { return p.v.Interface().(*string) }
121
+ func (p pointer) StringPtr() **string { return p.v.Interface().(**string) }
122
+ func (p pointer) StringSlice() *[]string { return p.v.Interface().(*[]string) }
123
+ func (p pointer) Bytes() *[]byte { return p.v.Interface().(*[]byte) }
124
+ func (p pointer) BytesPtr() **[]byte { return p.v.Interface().(**[]byte) }
125
+ func (p pointer) BytesSlice() *[][]byte { return p.v.Interface().(*[][]byte) }
126
+ func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.v.Interface().(*WeakFields)) }
127
+ func (p pointer) Extensions() *map[int32]ExtensionField {
128
+ return p.v.Interface().(*map[int32]ExtensionField)
129
+ }
130
+
131
+ func (p pointer) Elem() pointer {
132
+ return pointer{v: p.v.Elem()}
133
+ }
134
+
135
+ // PointerSlice copies []*T from p as a new []pointer.
136
+ // This behavior differs from the implementation in pointer_unsafe.go.
137
+ func (p pointer) PointerSlice() []pointer {
138
+ // TODO: reconsider this
139
+ if p.v.IsNil() {
140
+ return nil
141
+ }
142
+ n := p.v.Elem().Len()
143
+ s := make([]pointer, n)
144
+ for i := 0; i < n; i++ {
145
+ s[i] = pointer{v: p.v.Elem().Index(i)}
146
+ }
147
+ return s
148
+ }
149
+
150
+ // AppendPointerSlice appends v to p, which must be a []*T.
151
+ func (p pointer) AppendPointerSlice(v pointer) {
152
+ sp := p.v.Elem()
153
+ sp.Set(reflect.Append(sp, v.v))
154
+ }
155
+
156
+ // SetPointer sets *p to v.
157
+ func (p pointer) SetPointer(v pointer) {
158
+ p.v.Elem().Set(v.v)
159
+ }
160
+
161
+ func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") }
162
+ func (ms *messageState) pointer() pointer { panic("not supported") }
163
+ func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") }
164
+ func (ms *messageState) LoadMessageInfo() *MessageInfo { panic("not supported") }
165
+ func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { panic("not supported") }
166
+
167
+ type atomicNilMessage struct {
168
+ once sync.Once
169
+ m messageReflectWrapper
170
+ }
171
+
172
+ func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {
173
+ m.once.Do(func() {
174
+ m.m.p = pointerOfIface(reflect.Zero(mi.GoReflectType).Interface())
175
+ m.m.mi = mi
176
+ })
177
+ return &m.m
178
+ }
@@ -0,0 +1,174 @@
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
+ // +build !purego,!appengine
6
+
7
+ package impl
8
+
9
+ import (
10
+ "reflect"
11
+ "sync/atomic"
12
+ "unsafe"
13
+ )
14
+
15
+ const UnsafeEnabled = true
16
+
17
+ // Pointer is an opaque pointer type.
18
+ type Pointer unsafe.Pointer
19
+
20
+ // offset represents the offset to a struct field, accessible from a pointer.
21
+ // The offset is the byte offset to the field from the start of the struct.
22
+ type offset uintptr
23
+
24
+ // offsetOf returns a field offset for the struct field.
25
+ func offsetOf(f reflect.StructField, x exporter) offset {
26
+ return offset(f.Offset)
27
+ }
28
+
29
+ // IsValid reports whether the offset is valid.
30
+ func (f offset) IsValid() bool { return f != invalidOffset }
31
+
32
+ // invalidOffset is an invalid field offset.
33
+ var invalidOffset = ^offset(0)
34
+
35
+ // zeroOffset is a noop when calling pointer.Apply.
36
+ var zeroOffset = offset(0)
37
+
38
+ // pointer is a pointer to a message struct or field.
39
+ type pointer struct{ p unsafe.Pointer }
40
+
41
+ // pointerOf returns p as a pointer.
42
+ func pointerOf(p Pointer) pointer {
43
+ return pointer{p: unsafe.Pointer(p)}
44
+ }
45
+
46
+ // pointerOfValue returns v as a pointer.
47
+ func pointerOfValue(v reflect.Value) pointer {
48
+ return pointer{p: unsafe.Pointer(v.Pointer())}
49
+ }
50
+
51
+ // pointerOfIface returns the pointer portion of an interface.
52
+ func pointerOfIface(v interface{}) pointer {
53
+ type ifaceHeader struct {
54
+ Type unsafe.Pointer
55
+ Data unsafe.Pointer
56
+ }
57
+ return pointer{p: (*ifaceHeader)(unsafe.Pointer(&v)).Data}
58
+ }
59
+
60
+ // IsNil reports whether the pointer is nil.
61
+ func (p pointer) IsNil() bool {
62
+ return p.p == nil
63
+ }
64
+
65
+ // Apply adds an offset to the pointer to derive a new pointer
66
+ // to a specified field. The pointer must be valid and pointing at a struct.
67
+ func (p pointer) Apply(f offset) pointer {
68
+ if p.IsNil() {
69
+ panic("invalid nil pointer")
70
+ }
71
+ return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
72
+ }
73
+
74
+ // AsValueOf treats p as a pointer to an object of type t and returns the value.
75
+ // It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))
76
+ func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
77
+ return reflect.NewAt(t, p.p)
78
+ }
79
+
80
+ // AsIfaceOf treats p as a pointer to an object of type t and returns the value.
81
+ // It is equivalent to p.AsValueOf(t).Interface()
82
+ func (p pointer) AsIfaceOf(t reflect.Type) interface{} {
83
+ // TODO: Use tricky unsafe magic to directly create ifaceHeader.
84
+ return p.AsValueOf(t).Interface()
85
+ }
86
+
87
+ func (p pointer) Bool() *bool { return (*bool)(p.p) }
88
+ func (p pointer) BoolPtr() **bool { return (**bool)(p.p) }
89
+ func (p pointer) BoolSlice() *[]bool { return (*[]bool)(p.p) }
90
+ func (p pointer) Int32() *int32 { return (*int32)(p.p) }
91
+ func (p pointer) Int32Ptr() **int32 { return (**int32)(p.p) }
92
+ func (p pointer) Int32Slice() *[]int32 { return (*[]int32)(p.p) }
93
+ func (p pointer) Int64() *int64 { return (*int64)(p.p) }
94
+ func (p pointer) Int64Ptr() **int64 { return (**int64)(p.p) }
95
+ func (p pointer) Int64Slice() *[]int64 { return (*[]int64)(p.p) }
96
+ func (p pointer) Uint32() *uint32 { return (*uint32)(p.p) }
97
+ func (p pointer) Uint32Ptr() **uint32 { return (**uint32)(p.p) }
98
+ func (p pointer) Uint32Slice() *[]uint32 { return (*[]uint32)(p.p) }
99
+ func (p pointer) Uint64() *uint64 { return (*uint64)(p.p) }
100
+ func (p pointer) Uint64Ptr() **uint64 { return (**uint64)(p.p) }
101
+ func (p pointer) Uint64Slice() *[]uint64 { return (*[]uint64)(p.p) }
102
+ func (p pointer) Float32() *float32 { return (*float32)(p.p) }
103
+ func (p pointer) Float32Ptr() **float32 { return (**float32)(p.p) }
104
+ func (p pointer) Float32Slice() *[]float32 { return (*[]float32)(p.p) }
105
+ func (p pointer) Float64() *float64 { return (*float64)(p.p) }
106
+ func (p pointer) Float64Ptr() **float64 { return (**float64)(p.p) }
107
+ func (p pointer) Float64Slice() *[]float64 { return (*[]float64)(p.p) }
108
+ func (p pointer) String() *string { return (*string)(p.p) }
109
+ func (p pointer) StringPtr() **string { return (**string)(p.p) }
110
+ func (p pointer) StringSlice() *[]string { return (*[]string)(p.p) }
111
+ func (p pointer) Bytes() *[]byte { return (*[]byte)(p.p) }
112
+ func (p pointer) BytesPtr() **[]byte { return (**[]byte)(p.p) }
113
+ func (p pointer) BytesSlice() *[][]byte { return (*[][]byte)(p.p) }
114
+ func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.p) }
115
+ func (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) }
116
+
117
+ func (p pointer) Elem() pointer {
118
+ return pointer{p: *(*unsafe.Pointer)(p.p)}
119
+ }
120
+
121
+ // PointerSlice loads []*T from p as a []pointer.
122
+ // The value returned is aliased with the original slice.
123
+ // This behavior differs from the implementation in pointer_reflect.go.
124
+ func (p pointer) PointerSlice() []pointer {
125
+ // Super-tricky - p should point to a []*T where T is a
126
+ // message type. We load it as []pointer.
127
+ return *(*[]pointer)(p.p)
128
+ }
129
+
130
+ // AppendPointerSlice appends v to p, which must be a []*T.
131
+ func (p pointer) AppendPointerSlice(v pointer) {
132
+ *(*[]pointer)(p.p) = append(*(*[]pointer)(p.p), v)
133
+ }
134
+
135
+ // SetPointer sets *p to v.
136
+ func (p pointer) SetPointer(v pointer) {
137
+ *(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p)
138
+ }
139
+
140
+ // Static check that MessageState does not exceed the size of a pointer.
141
+ const _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{}))
142
+
143
+ func (Export) MessageStateOf(p Pointer) *messageState {
144
+ // Super-tricky - see documentation on MessageState.
145
+ return (*messageState)(unsafe.Pointer(p))
146
+ }
147
+ func (ms *messageState) pointer() pointer {
148
+ // Super-tricky - see documentation on MessageState.
149
+ return pointer{p: unsafe.Pointer(ms)}
150
+ }
151
+ func (ms *messageState) messageInfo() *MessageInfo {
152
+ mi := ms.LoadMessageInfo()
153
+ if mi == nil {
154
+ panic("invalid nil message info; this suggests memory corruption due to a race or shallow copy on the message struct")
155
+ }
156
+ return mi
157
+ }
158
+ func (ms *messageState) LoadMessageInfo() *MessageInfo {
159
+ return (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo))))
160
+ }
161
+ func (ms *messageState) StoreMessageInfo(mi *MessageInfo) {
162
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)), unsafe.Pointer(mi))
163
+ }
164
+
165
+ type atomicNilMessage struct{ p unsafe.Pointer } // p is a *messageReflectWrapper
166
+
167
+ func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {
168
+ if p := atomic.LoadPointer(&m.p); p != nil {
169
+ return (*messageReflectWrapper)(p)
170
+ }
171
+ w := &messageReflectWrapper{mi: mi}
172
+ atomic.CompareAndSwapPointer(&m.p, nil, (unsafe.Pointer)(w))
173
+ return (*messageReflectWrapper)(atomic.LoadPointer(&m.p))
174
+ }