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,7 @@
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 prototext marshals and unmarshals protocol buffer messages as the
6
+ // textproto format.
7
+ package prototext
@@ -0,0 +1,371 @@
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 prototext
6
+
7
+ import (
8
+ "fmt"
9
+ "strconv"
10
+ "unicode/utf8"
11
+
12
+ "google.golang.org/protobuf/encoding/protowire"
13
+ "google.golang.org/protobuf/internal/encoding/messageset"
14
+ "google.golang.org/protobuf/internal/encoding/text"
15
+ "google.golang.org/protobuf/internal/errors"
16
+ "google.golang.org/protobuf/internal/flags"
17
+ "google.golang.org/protobuf/internal/genid"
18
+ "google.golang.org/protobuf/internal/order"
19
+ "google.golang.org/protobuf/internal/pragma"
20
+ "google.golang.org/protobuf/internal/strs"
21
+ "google.golang.org/protobuf/proto"
22
+ "google.golang.org/protobuf/reflect/protoreflect"
23
+ pref "google.golang.org/protobuf/reflect/protoreflect"
24
+ "google.golang.org/protobuf/reflect/protoregistry"
25
+ )
26
+
27
+ const defaultIndent = " "
28
+
29
+ // Format formats the message as a multiline string.
30
+ // This function is only intended for human consumption and ignores errors.
31
+ // Do not depend on the output being stable. It may change over time across
32
+ // different versions of the program.
33
+ func Format(m proto.Message) string {
34
+ return MarshalOptions{Multiline: true}.Format(m)
35
+ }
36
+
37
+ // Marshal writes the given proto.Message in textproto format using default
38
+ // options. Do not depend on the output being stable. It may change over time
39
+ // across different versions of the program.
40
+ func Marshal(m proto.Message) ([]byte, error) {
41
+ return MarshalOptions{}.Marshal(m)
42
+ }
43
+
44
+ // MarshalOptions is a configurable text format marshaler.
45
+ type MarshalOptions struct {
46
+ pragma.NoUnkeyedLiterals
47
+
48
+ // Multiline specifies whether the marshaler should format the output in
49
+ // indented-form with every textual element on a new line.
50
+ // If Indent is an empty string, then an arbitrary indent is chosen.
51
+ Multiline bool
52
+
53
+ // Indent specifies the set of indentation characters to use in a multiline
54
+ // formatted output such that every entry is preceded by Indent and
55
+ // terminated by a newline. If non-empty, then Multiline is treated as true.
56
+ // Indent can only be composed of space or tab characters.
57
+ Indent string
58
+
59
+ // EmitASCII specifies whether to format strings and bytes as ASCII only
60
+ // as opposed to using UTF-8 encoding when possible.
61
+ EmitASCII bool
62
+
63
+ // allowInvalidUTF8 specifies whether to permit the encoding of strings
64
+ // with invalid UTF-8. This is unexported as it is intended to only
65
+ // be specified by the Format method.
66
+ allowInvalidUTF8 bool
67
+
68
+ // AllowPartial allows messages that have missing required fields to marshal
69
+ // without returning an error. If AllowPartial is false (the default),
70
+ // Marshal will return error if there are any missing required fields.
71
+ AllowPartial bool
72
+
73
+ // EmitUnknown specifies whether to emit unknown fields in the output.
74
+ // If specified, the unmarshaler may be unable to parse the output.
75
+ // The default is to exclude unknown fields.
76
+ EmitUnknown bool
77
+
78
+ // Resolver is used for looking up types when expanding google.protobuf.Any
79
+ // messages. If nil, this defaults to using protoregistry.GlobalTypes.
80
+ Resolver interface {
81
+ protoregistry.ExtensionTypeResolver
82
+ protoregistry.MessageTypeResolver
83
+ }
84
+ }
85
+
86
+ // Format formats the message as a string.
87
+ // This method is only intended for human consumption and ignores errors.
88
+ // Do not depend on the output being stable. It may change over time across
89
+ // different versions of the program.
90
+ func (o MarshalOptions) Format(m proto.Message) string {
91
+ if m == nil || !m.ProtoReflect().IsValid() {
92
+ return "<nil>" // invalid syntax, but okay since this is for debugging
93
+ }
94
+ o.allowInvalidUTF8 = true
95
+ o.AllowPartial = true
96
+ o.EmitUnknown = true
97
+ b, _ := o.Marshal(m)
98
+ return string(b)
99
+ }
100
+
101
+ // Marshal writes the given proto.Message in textproto format using options in
102
+ // MarshalOptions object. Do not depend on the output being stable. It may
103
+ // change over time across different versions of the program.
104
+ func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) {
105
+ return o.marshal(m)
106
+ }
107
+
108
+ // marshal is a centralized function that all marshal operations go through.
109
+ // For profiling purposes, avoid changing the name of this function or
110
+ // introducing other code paths for marshal that do not go through this.
111
+ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) {
112
+ var delims = [2]byte{'{', '}'}
113
+
114
+ if o.Multiline && o.Indent == "" {
115
+ o.Indent = defaultIndent
116
+ }
117
+ if o.Resolver == nil {
118
+ o.Resolver = protoregistry.GlobalTypes
119
+ }
120
+
121
+ internalEnc, err := text.NewEncoder(o.Indent, delims, o.EmitASCII)
122
+ if err != nil {
123
+ return nil, err
124
+ }
125
+
126
+ // Treat nil message interface as an empty message,
127
+ // in which case there is nothing to output.
128
+ if m == nil {
129
+ return []byte{}, nil
130
+ }
131
+
132
+ enc := encoder{internalEnc, o}
133
+ err = enc.marshalMessage(m.ProtoReflect(), false)
134
+ if err != nil {
135
+ return nil, err
136
+ }
137
+ out := enc.Bytes()
138
+ if len(o.Indent) > 0 && len(out) > 0 {
139
+ out = append(out, '\n')
140
+ }
141
+ if o.AllowPartial {
142
+ return out, nil
143
+ }
144
+ return out, proto.CheckInitialized(m)
145
+ }
146
+
147
+ type encoder struct {
148
+ *text.Encoder
149
+ opts MarshalOptions
150
+ }
151
+
152
+ // marshalMessage marshals the given protoreflect.Message.
153
+ func (e encoder) marshalMessage(m pref.Message, inclDelims bool) error {
154
+ messageDesc := m.Descriptor()
155
+ if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
156
+ return errors.New("no support for proto1 MessageSets")
157
+ }
158
+
159
+ if inclDelims {
160
+ e.StartMessage()
161
+ defer e.EndMessage()
162
+ }
163
+
164
+ // Handle Any expansion.
165
+ if messageDesc.FullName() == genid.Any_message_fullname {
166
+ if e.marshalAny(m) {
167
+ return nil
168
+ }
169
+ // If unable to expand, continue on to marshal Any as a regular message.
170
+ }
171
+
172
+ // Marshal fields.
173
+ var err error
174
+ order.RangeFields(m, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
175
+ if err = e.marshalField(fd.TextName(), v, fd); err != nil {
176
+ return false
177
+ }
178
+ return true
179
+ })
180
+ if err != nil {
181
+ return err
182
+ }
183
+
184
+ // Marshal unknown fields.
185
+ if e.opts.EmitUnknown {
186
+ e.marshalUnknown(m.GetUnknown())
187
+ }
188
+
189
+ return nil
190
+ }
191
+
192
+ // marshalField marshals the given field with protoreflect.Value.
193
+ func (e encoder) marshalField(name string, val pref.Value, fd pref.FieldDescriptor) error {
194
+ switch {
195
+ case fd.IsList():
196
+ return e.marshalList(name, val.List(), fd)
197
+ case fd.IsMap():
198
+ return e.marshalMap(name, val.Map(), fd)
199
+ default:
200
+ e.WriteName(name)
201
+ return e.marshalSingular(val, fd)
202
+ }
203
+ }
204
+
205
+ // marshalSingular marshals the given non-repeated field value. This includes
206
+ // all scalar types, enums, messages, and groups.
207
+ func (e encoder) marshalSingular(val pref.Value, fd pref.FieldDescriptor) error {
208
+ kind := fd.Kind()
209
+ switch kind {
210
+ case pref.BoolKind:
211
+ e.WriteBool(val.Bool())
212
+
213
+ case pref.StringKind:
214
+ s := val.String()
215
+ if !e.opts.allowInvalidUTF8 && strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
216
+ return errors.InvalidUTF8(string(fd.FullName()))
217
+ }
218
+ e.WriteString(s)
219
+
220
+ case pref.Int32Kind, pref.Int64Kind,
221
+ pref.Sint32Kind, pref.Sint64Kind,
222
+ pref.Sfixed32Kind, pref.Sfixed64Kind:
223
+ e.WriteInt(val.Int())
224
+
225
+ case pref.Uint32Kind, pref.Uint64Kind,
226
+ pref.Fixed32Kind, pref.Fixed64Kind:
227
+ e.WriteUint(val.Uint())
228
+
229
+ case pref.FloatKind:
230
+ // Encoder.WriteFloat handles the special numbers NaN and infinites.
231
+ e.WriteFloat(val.Float(), 32)
232
+
233
+ case pref.DoubleKind:
234
+ // Encoder.WriteFloat handles the special numbers NaN and infinites.
235
+ e.WriteFloat(val.Float(), 64)
236
+
237
+ case pref.BytesKind:
238
+ e.WriteString(string(val.Bytes()))
239
+
240
+ case pref.EnumKind:
241
+ num := val.Enum()
242
+ if desc := fd.Enum().Values().ByNumber(num); desc != nil {
243
+ e.WriteLiteral(string(desc.Name()))
244
+ } else {
245
+ // Use numeric value if there is no enum description.
246
+ e.WriteInt(int64(num))
247
+ }
248
+
249
+ case pref.MessageKind, pref.GroupKind:
250
+ return e.marshalMessage(val.Message(), true)
251
+
252
+ default:
253
+ panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind))
254
+ }
255
+ return nil
256
+ }
257
+
258
+ // marshalList marshals the given protoreflect.List as multiple name-value fields.
259
+ func (e encoder) marshalList(name string, list pref.List, fd pref.FieldDescriptor) error {
260
+ size := list.Len()
261
+ for i := 0; i < size; i++ {
262
+ e.WriteName(name)
263
+ if err := e.marshalSingular(list.Get(i), fd); err != nil {
264
+ return err
265
+ }
266
+ }
267
+ return nil
268
+ }
269
+
270
+ // marshalMap marshals the given protoreflect.Map as multiple name-value fields.
271
+ func (e encoder) marshalMap(name string, mmap pref.Map, fd pref.FieldDescriptor) error {
272
+ var err error
273
+ order.RangeEntries(mmap, order.GenericKeyOrder, func(key pref.MapKey, val pref.Value) bool {
274
+ e.WriteName(name)
275
+ e.StartMessage()
276
+ defer e.EndMessage()
277
+
278
+ e.WriteName(string(genid.MapEntry_Key_field_name))
279
+ err = e.marshalSingular(key.Value(), fd.MapKey())
280
+ if err != nil {
281
+ return false
282
+ }
283
+
284
+ e.WriteName(string(genid.MapEntry_Value_field_name))
285
+ err = e.marshalSingular(val, fd.MapValue())
286
+ if err != nil {
287
+ return false
288
+ }
289
+ return true
290
+ })
291
+ return err
292
+ }
293
+
294
+ // marshalUnknown parses the given []byte and marshals fields out.
295
+ // This function assumes proper encoding in the given []byte.
296
+ func (e encoder) marshalUnknown(b []byte) {
297
+ const dec = 10
298
+ const hex = 16
299
+ for len(b) > 0 {
300
+ num, wtype, n := protowire.ConsumeTag(b)
301
+ b = b[n:]
302
+ e.WriteName(strconv.FormatInt(int64(num), dec))
303
+
304
+ switch wtype {
305
+ case protowire.VarintType:
306
+ var v uint64
307
+ v, n = protowire.ConsumeVarint(b)
308
+ e.WriteUint(v)
309
+ case protowire.Fixed32Type:
310
+ var v uint32
311
+ v, n = protowire.ConsumeFixed32(b)
312
+ e.WriteLiteral("0x" + strconv.FormatUint(uint64(v), hex))
313
+ case protowire.Fixed64Type:
314
+ var v uint64
315
+ v, n = protowire.ConsumeFixed64(b)
316
+ e.WriteLiteral("0x" + strconv.FormatUint(v, hex))
317
+ case protowire.BytesType:
318
+ var v []byte
319
+ v, n = protowire.ConsumeBytes(b)
320
+ e.WriteString(string(v))
321
+ case protowire.StartGroupType:
322
+ e.StartMessage()
323
+ var v []byte
324
+ v, n = protowire.ConsumeGroup(num, b)
325
+ e.marshalUnknown(v)
326
+ e.EndMessage()
327
+ default:
328
+ panic(fmt.Sprintf("prototext: error parsing unknown field wire type: %v", wtype))
329
+ }
330
+
331
+ b = b[n:]
332
+ }
333
+ }
334
+
335
+ // marshalAny marshals the given google.protobuf.Any message in expanded form.
336
+ // It returns true if it was able to marshal, else false.
337
+ func (e encoder) marshalAny(any pref.Message) bool {
338
+ // Construct the embedded message.
339
+ fds := any.Descriptor().Fields()
340
+ fdType := fds.ByNumber(genid.Any_TypeUrl_field_number)
341
+ typeURL := any.Get(fdType).String()
342
+ mt, err := e.opts.Resolver.FindMessageByURL(typeURL)
343
+ if err != nil {
344
+ return false
345
+ }
346
+ m := mt.New().Interface()
347
+
348
+ // Unmarshal bytes into embedded message.
349
+ fdValue := fds.ByNumber(genid.Any_Value_field_number)
350
+ value := any.Get(fdValue)
351
+ err = proto.UnmarshalOptions{
352
+ AllowPartial: true,
353
+ Resolver: e.opts.Resolver,
354
+ }.Unmarshal(value.Bytes(), m)
355
+ if err != nil {
356
+ return false
357
+ }
358
+
359
+ // Get current encoder position. If marshaling fails, reset encoder output
360
+ // back to this position.
361
+ pos := e.Snapshot()
362
+
363
+ // Field name is the proto field name enclosed in [].
364
+ e.WriteName("[" + typeURL + "]")
365
+ err = e.marshalMessage(m.ProtoReflect(), true)
366
+ if err != nil {
367
+ e.Reset(pos)
368
+ return false
369
+ }
370
+ return true
371
+ }
@@ -0,0 +1,538 @@
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 protowire parses and formats the raw wire encoding.
6
+ // See https://developers.google.com/protocol-buffers/docs/encoding.
7
+ //
8
+ // For marshaling and unmarshaling entire protobuf messages,
9
+ // use the "google.golang.org/protobuf/proto" package instead.
10
+ package protowire
11
+
12
+ import (
13
+ "io"
14
+ "math"
15
+ "math/bits"
16
+
17
+ "google.golang.org/protobuf/internal/errors"
18
+ )
19
+
20
+ // Number represents the field number.
21
+ type Number int32
22
+
23
+ const (
24
+ MinValidNumber Number = 1
25
+ FirstReservedNumber Number = 19000
26
+ LastReservedNumber Number = 19999
27
+ MaxValidNumber Number = 1<<29 - 1
28
+ )
29
+
30
+ // IsValid reports whether the field number is semantically valid.
31
+ //
32
+ // Note that while numbers within the reserved range are semantically invalid,
33
+ // they are syntactically valid in the wire format.
34
+ // Implementations may treat records with reserved field numbers as unknown.
35
+ func (n Number) IsValid() bool {
36
+ return MinValidNumber <= n && n < FirstReservedNumber || LastReservedNumber < n && n <= MaxValidNumber
37
+ }
38
+
39
+ // Type represents the wire type.
40
+ type Type int8
41
+
42
+ const (
43
+ VarintType Type = 0
44
+ Fixed32Type Type = 5
45
+ Fixed64Type Type = 1
46
+ BytesType Type = 2
47
+ StartGroupType Type = 3
48
+ EndGroupType Type = 4
49
+ )
50
+
51
+ const (
52
+ _ = -iota
53
+ errCodeTruncated
54
+ errCodeFieldNumber
55
+ errCodeOverflow
56
+ errCodeReserved
57
+ errCodeEndGroup
58
+ )
59
+
60
+ var (
61
+ errFieldNumber = errors.New("invalid field number")
62
+ errOverflow = errors.New("variable length integer overflow")
63
+ errReserved = errors.New("cannot parse reserved wire type")
64
+ errEndGroup = errors.New("mismatching end group marker")
65
+ errParse = errors.New("parse error")
66
+ )
67
+
68
+ // ParseError converts an error code into an error value.
69
+ // This returns nil if n is a non-negative number.
70
+ func ParseError(n int) error {
71
+ if n >= 0 {
72
+ return nil
73
+ }
74
+ switch n {
75
+ case errCodeTruncated:
76
+ return io.ErrUnexpectedEOF
77
+ case errCodeFieldNumber:
78
+ return errFieldNumber
79
+ case errCodeOverflow:
80
+ return errOverflow
81
+ case errCodeReserved:
82
+ return errReserved
83
+ case errCodeEndGroup:
84
+ return errEndGroup
85
+ default:
86
+ return errParse
87
+ }
88
+ }
89
+
90
+ // ConsumeField parses an entire field record (both tag and value) and returns
91
+ // the field number, the wire type, and the total length.
92
+ // This returns a negative length upon an error (see ParseError).
93
+ //
94
+ // The total length includes the tag header and the end group marker (if the
95
+ // field is a group).
96
+ func ConsumeField(b []byte) (Number, Type, int) {
97
+ num, typ, n := ConsumeTag(b)
98
+ if n < 0 {
99
+ return 0, 0, n // forward error code
100
+ }
101
+ m := ConsumeFieldValue(num, typ, b[n:])
102
+ if m < 0 {
103
+ return 0, 0, m // forward error code
104
+ }
105
+ return num, typ, n + m
106
+ }
107
+
108
+ // ConsumeFieldValue parses a field value and returns its length.
109
+ // This assumes that the field Number and wire Type have already been parsed.
110
+ // This returns a negative length upon an error (see ParseError).
111
+ //
112
+ // When parsing a group, the length includes the end group marker and
113
+ // the end group is verified to match the starting field number.
114
+ func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) {
115
+ switch typ {
116
+ case VarintType:
117
+ _, n = ConsumeVarint(b)
118
+ return n
119
+ case Fixed32Type:
120
+ _, n = ConsumeFixed32(b)
121
+ return n
122
+ case Fixed64Type:
123
+ _, n = ConsumeFixed64(b)
124
+ return n
125
+ case BytesType:
126
+ _, n = ConsumeBytes(b)
127
+ return n
128
+ case StartGroupType:
129
+ n0 := len(b)
130
+ for {
131
+ num2, typ2, n := ConsumeTag(b)
132
+ if n < 0 {
133
+ return n // forward error code
134
+ }
135
+ b = b[n:]
136
+ if typ2 == EndGroupType {
137
+ if num != num2 {
138
+ return errCodeEndGroup
139
+ }
140
+ return n0 - len(b)
141
+ }
142
+
143
+ n = ConsumeFieldValue(num2, typ2, b)
144
+ if n < 0 {
145
+ return n // forward error code
146
+ }
147
+ b = b[n:]
148
+ }
149
+ case EndGroupType:
150
+ return errCodeEndGroup
151
+ default:
152
+ return errCodeReserved
153
+ }
154
+ }
155
+
156
+ // AppendTag encodes num and typ as a varint-encoded tag and appends it to b.
157
+ func AppendTag(b []byte, num Number, typ Type) []byte {
158
+ return AppendVarint(b, EncodeTag(num, typ))
159
+ }
160
+
161
+ // ConsumeTag parses b as a varint-encoded tag, reporting its length.
162
+ // This returns a negative length upon an error (see ParseError).
163
+ func ConsumeTag(b []byte) (Number, Type, int) {
164
+ v, n := ConsumeVarint(b)
165
+ if n < 0 {
166
+ return 0, 0, n // forward error code
167
+ }
168
+ num, typ := DecodeTag(v)
169
+ if num < MinValidNumber {
170
+ return 0, 0, errCodeFieldNumber
171
+ }
172
+ return num, typ, n
173
+ }
174
+
175
+ func SizeTag(num Number) int {
176
+ return SizeVarint(EncodeTag(num, 0)) // wire type has no effect on size
177
+ }
178
+
179
+ // AppendVarint appends v to b as a varint-encoded uint64.
180
+ func AppendVarint(b []byte, v uint64) []byte {
181
+ switch {
182
+ case v < 1<<7:
183
+ b = append(b, byte(v))
184
+ case v < 1<<14:
185
+ b = append(b,
186
+ byte((v>>0)&0x7f|0x80),
187
+ byte(v>>7))
188
+ case v < 1<<21:
189
+ b = append(b,
190
+ byte((v>>0)&0x7f|0x80),
191
+ byte((v>>7)&0x7f|0x80),
192
+ byte(v>>14))
193
+ case v < 1<<28:
194
+ b = append(b,
195
+ byte((v>>0)&0x7f|0x80),
196
+ byte((v>>7)&0x7f|0x80),
197
+ byte((v>>14)&0x7f|0x80),
198
+ byte(v>>21))
199
+ case v < 1<<35:
200
+ b = append(b,
201
+ byte((v>>0)&0x7f|0x80),
202
+ byte((v>>7)&0x7f|0x80),
203
+ byte((v>>14)&0x7f|0x80),
204
+ byte((v>>21)&0x7f|0x80),
205
+ byte(v>>28))
206
+ case v < 1<<42:
207
+ b = append(b,
208
+ byte((v>>0)&0x7f|0x80),
209
+ byte((v>>7)&0x7f|0x80),
210
+ byte((v>>14)&0x7f|0x80),
211
+ byte((v>>21)&0x7f|0x80),
212
+ byte((v>>28)&0x7f|0x80),
213
+ byte(v>>35))
214
+ case v < 1<<49:
215
+ b = append(b,
216
+ byte((v>>0)&0x7f|0x80),
217
+ byte((v>>7)&0x7f|0x80),
218
+ byte((v>>14)&0x7f|0x80),
219
+ byte((v>>21)&0x7f|0x80),
220
+ byte((v>>28)&0x7f|0x80),
221
+ byte((v>>35)&0x7f|0x80),
222
+ byte(v>>42))
223
+ case v < 1<<56:
224
+ b = append(b,
225
+ byte((v>>0)&0x7f|0x80),
226
+ byte((v>>7)&0x7f|0x80),
227
+ byte((v>>14)&0x7f|0x80),
228
+ byte((v>>21)&0x7f|0x80),
229
+ byte((v>>28)&0x7f|0x80),
230
+ byte((v>>35)&0x7f|0x80),
231
+ byte((v>>42)&0x7f|0x80),
232
+ byte(v>>49))
233
+ case v < 1<<63:
234
+ b = append(b,
235
+ byte((v>>0)&0x7f|0x80),
236
+ byte((v>>7)&0x7f|0x80),
237
+ byte((v>>14)&0x7f|0x80),
238
+ byte((v>>21)&0x7f|0x80),
239
+ byte((v>>28)&0x7f|0x80),
240
+ byte((v>>35)&0x7f|0x80),
241
+ byte((v>>42)&0x7f|0x80),
242
+ byte((v>>49)&0x7f|0x80),
243
+ byte(v>>56))
244
+ default:
245
+ b = append(b,
246
+ byte((v>>0)&0x7f|0x80),
247
+ byte((v>>7)&0x7f|0x80),
248
+ byte((v>>14)&0x7f|0x80),
249
+ byte((v>>21)&0x7f|0x80),
250
+ byte((v>>28)&0x7f|0x80),
251
+ byte((v>>35)&0x7f|0x80),
252
+ byte((v>>42)&0x7f|0x80),
253
+ byte((v>>49)&0x7f|0x80),
254
+ byte((v>>56)&0x7f|0x80),
255
+ 1)
256
+ }
257
+ return b
258
+ }
259
+
260
+ // ConsumeVarint parses b as a varint-encoded uint64, reporting its length.
261
+ // This returns a negative length upon an error (see ParseError).
262
+ func ConsumeVarint(b []byte) (v uint64, n int) {
263
+ var y uint64
264
+ if len(b) <= 0 {
265
+ return 0, errCodeTruncated
266
+ }
267
+ v = uint64(b[0])
268
+ if v < 0x80 {
269
+ return v, 1
270
+ }
271
+ v -= 0x80
272
+
273
+ if len(b) <= 1 {
274
+ return 0, errCodeTruncated
275
+ }
276
+ y = uint64(b[1])
277
+ v += y << 7
278
+ if y < 0x80 {
279
+ return v, 2
280
+ }
281
+ v -= 0x80 << 7
282
+
283
+ if len(b) <= 2 {
284
+ return 0, errCodeTruncated
285
+ }
286
+ y = uint64(b[2])
287
+ v += y << 14
288
+ if y < 0x80 {
289
+ return v, 3
290
+ }
291
+ v -= 0x80 << 14
292
+
293
+ if len(b) <= 3 {
294
+ return 0, errCodeTruncated
295
+ }
296
+ y = uint64(b[3])
297
+ v += y << 21
298
+ if y < 0x80 {
299
+ return v, 4
300
+ }
301
+ v -= 0x80 << 21
302
+
303
+ if len(b) <= 4 {
304
+ return 0, errCodeTruncated
305
+ }
306
+ y = uint64(b[4])
307
+ v += y << 28
308
+ if y < 0x80 {
309
+ return v, 5
310
+ }
311
+ v -= 0x80 << 28
312
+
313
+ if len(b) <= 5 {
314
+ return 0, errCodeTruncated
315
+ }
316
+ y = uint64(b[5])
317
+ v += y << 35
318
+ if y < 0x80 {
319
+ return v, 6
320
+ }
321
+ v -= 0x80 << 35
322
+
323
+ if len(b) <= 6 {
324
+ return 0, errCodeTruncated
325
+ }
326
+ y = uint64(b[6])
327
+ v += y << 42
328
+ if y < 0x80 {
329
+ return v, 7
330
+ }
331
+ v -= 0x80 << 42
332
+
333
+ if len(b) <= 7 {
334
+ return 0, errCodeTruncated
335
+ }
336
+ y = uint64(b[7])
337
+ v += y << 49
338
+ if y < 0x80 {
339
+ return v, 8
340
+ }
341
+ v -= 0x80 << 49
342
+
343
+ if len(b) <= 8 {
344
+ return 0, errCodeTruncated
345
+ }
346
+ y = uint64(b[8])
347
+ v += y << 56
348
+ if y < 0x80 {
349
+ return v, 9
350
+ }
351
+ v -= 0x80 << 56
352
+
353
+ if len(b) <= 9 {
354
+ return 0, errCodeTruncated
355
+ }
356
+ y = uint64(b[9])
357
+ v += y << 63
358
+ if y < 2 {
359
+ return v, 10
360
+ }
361
+ return 0, errCodeOverflow
362
+ }
363
+
364
+ // SizeVarint returns the encoded size of a varint.
365
+ // The size is guaranteed to be within 1 and 10, inclusive.
366
+ func SizeVarint(v uint64) int {
367
+ // This computes 1 + (bits.Len64(v)-1)/7.
368
+ // 9/64 is a good enough approximation of 1/7
369
+ return int(9*uint32(bits.Len64(v))+64) / 64
370
+ }
371
+
372
+ // AppendFixed32 appends v to b as a little-endian uint32.
373
+ func AppendFixed32(b []byte, v uint32) []byte {
374
+ return append(b,
375
+ byte(v>>0),
376
+ byte(v>>8),
377
+ byte(v>>16),
378
+ byte(v>>24))
379
+ }
380
+
381
+ // ConsumeFixed32 parses b as a little-endian uint32, reporting its length.
382
+ // This returns a negative length upon an error (see ParseError).
383
+ func ConsumeFixed32(b []byte) (v uint32, n int) {
384
+ if len(b) < 4 {
385
+ return 0, errCodeTruncated
386
+ }
387
+ v = uint32(b[0])<<0 | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
388
+ return v, 4
389
+ }
390
+
391
+ // SizeFixed32 returns the encoded size of a fixed32; which is always 4.
392
+ func SizeFixed32() int {
393
+ return 4
394
+ }
395
+
396
+ // AppendFixed64 appends v to b as a little-endian uint64.
397
+ func AppendFixed64(b []byte, v uint64) []byte {
398
+ return append(b,
399
+ byte(v>>0),
400
+ byte(v>>8),
401
+ byte(v>>16),
402
+ byte(v>>24),
403
+ byte(v>>32),
404
+ byte(v>>40),
405
+ byte(v>>48),
406
+ byte(v>>56))
407
+ }
408
+
409
+ // ConsumeFixed64 parses b as a little-endian uint64, reporting its length.
410
+ // This returns a negative length upon an error (see ParseError).
411
+ func ConsumeFixed64(b []byte) (v uint64, n int) {
412
+ if len(b) < 8 {
413
+ return 0, errCodeTruncated
414
+ }
415
+ v = uint64(b[0])<<0 | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
416
+ return v, 8
417
+ }
418
+
419
+ // SizeFixed64 returns the encoded size of a fixed64; which is always 8.
420
+ func SizeFixed64() int {
421
+ return 8
422
+ }
423
+
424
+ // AppendBytes appends v to b as a length-prefixed bytes value.
425
+ func AppendBytes(b []byte, v []byte) []byte {
426
+ return append(AppendVarint(b, uint64(len(v))), v...)
427
+ }
428
+
429
+ // ConsumeBytes parses b as a length-prefixed bytes value, reporting its length.
430
+ // This returns a negative length upon an error (see ParseError).
431
+ func ConsumeBytes(b []byte) (v []byte, n int) {
432
+ m, n := ConsumeVarint(b)
433
+ if n < 0 {
434
+ return nil, n // forward error code
435
+ }
436
+ if m > uint64(len(b[n:])) {
437
+ return nil, errCodeTruncated
438
+ }
439
+ return b[n:][:m], n + int(m)
440
+ }
441
+
442
+ // SizeBytes returns the encoded size of a length-prefixed bytes value,
443
+ // given only the length.
444
+ func SizeBytes(n int) int {
445
+ return SizeVarint(uint64(n)) + n
446
+ }
447
+
448
+ // AppendString appends v to b as a length-prefixed bytes value.
449
+ func AppendString(b []byte, v string) []byte {
450
+ return append(AppendVarint(b, uint64(len(v))), v...)
451
+ }
452
+
453
+ // ConsumeString parses b as a length-prefixed bytes value, reporting its length.
454
+ // This returns a negative length upon an error (see ParseError).
455
+ func ConsumeString(b []byte) (v string, n int) {
456
+ bb, n := ConsumeBytes(b)
457
+ return string(bb), n
458
+ }
459
+
460
+ // AppendGroup appends v to b as group value, with a trailing end group marker.
461
+ // The value v must not contain the end marker.
462
+ func AppendGroup(b []byte, num Number, v []byte) []byte {
463
+ return AppendVarint(append(b, v...), EncodeTag(num, EndGroupType))
464
+ }
465
+
466
+ // ConsumeGroup parses b as a group value until the trailing end group marker,
467
+ // and verifies that the end marker matches the provided num. The value v
468
+ // does not contain the end marker, while the length does contain the end marker.
469
+ // This returns a negative length upon an error (see ParseError).
470
+ func ConsumeGroup(num Number, b []byte) (v []byte, n int) {
471
+ n = ConsumeFieldValue(num, StartGroupType, b)
472
+ if n < 0 {
473
+ return nil, n // forward error code
474
+ }
475
+ b = b[:n]
476
+
477
+ // Truncate off end group marker, but need to handle denormalized varints.
478
+ // Assuming end marker is never 0 (which is always the case since
479
+ // EndGroupType is non-zero), we can truncate all trailing bytes where the
480
+ // lower 7 bits are all zero (implying that the varint is denormalized).
481
+ for len(b) > 0 && b[len(b)-1]&0x7f == 0 {
482
+ b = b[:len(b)-1]
483
+ }
484
+ b = b[:len(b)-SizeTag(num)]
485
+ return b, n
486
+ }
487
+
488
+ // SizeGroup returns the encoded size of a group, given only the length.
489
+ func SizeGroup(num Number, n int) int {
490
+ return n + SizeTag(num)
491
+ }
492
+
493
+ // DecodeTag decodes the field Number and wire Type from its unified form.
494
+ // The Number is -1 if the decoded field number overflows int32.
495
+ // Other than overflow, this does not check for field number validity.
496
+ func DecodeTag(x uint64) (Number, Type) {
497
+ // NOTE: MessageSet allows for larger field numbers than normal.
498
+ if x>>3 > uint64(math.MaxInt32) {
499
+ return -1, 0
500
+ }
501
+ return Number(x >> 3), Type(x & 7)
502
+ }
503
+
504
+ // EncodeTag encodes the field Number and wire Type into its unified form.
505
+ func EncodeTag(num Number, typ Type) uint64 {
506
+ return uint64(num)<<3 | uint64(typ&7)
507
+ }
508
+
509
+ // DecodeZigZag decodes a zig-zag-encoded uint64 as an int64.
510
+ // Input: {…, 5, 3, 1, 0, 2, 4, 6, …}
511
+ // Output: {…, -3, -2, -1, 0, +1, +2, +3, …}
512
+ func DecodeZigZag(x uint64) int64 {
513
+ return int64(x>>1) ^ int64(x)<<63>>63
514
+ }
515
+
516
+ // EncodeZigZag encodes an int64 as a zig-zag-encoded uint64.
517
+ // Input: {…, -3, -2, -1, 0, +1, +2, +3, …}
518
+ // Output: {…, 5, 3, 1, 0, 2, 4, 6, …}
519
+ func EncodeZigZag(x int64) uint64 {
520
+ return uint64(x<<1) ^ uint64(x>>63)
521
+ }
522
+
523
+ // DecodeBool decodes a uint64 as a bool.
524
+ // Input: { 0, 1, 2, …}
525
+ // Output: {false, true, true, …}
526
+ func DecodeBool(x uint64) bool {
527
+ return x != 0
528
+ }
529
+
530
+ // EncodeBool encodes a bool as a uint64.
531
+ // Input: {false, true}
532
+ // Output: { 0, 1}
533
+ func EncodeBool(x bool) uint64 {
534
+ if x {
535
+ return 1
536
+ }
537
+ return 0
538
+ }