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,22 @@
1
+ Additional IP Rights Grant (Patents)
2
+
3
+ "This implementation" means the copyrightable works distributed by
4
+ Google as part of the Go project.
5
+
6
+ Google hereby grants to You a perpetual, worldwide, non-exclusive,
7
+ no-charge, royalty-free, irrevocable (except as stated in this section)
8
+ patent license to make, have made, use, offer to sell, sell, import,
9
+ transfer and otherwise run, modify and propagate the contents of this
10
+ implementation of Go, where such license applies only to those patent
11
+ claims, both currently owned or controlled by Google and acquired in
12
+ the future, licensable by Google that are necessarily infringed by this
13
+ implementation of Go. This grant does not include claims that would be
14
+ infringed only as a consequence of further modification of this
15
+ implementation. If you or your agent or exclusive licensee institute or
16
+ order or agree to the institution of patent litigation against any
17
+ entity (including a cross-claim or counterclaim in a lawsuit) alleging
18
+ that this implementation of Go or any code incorporated within this
19
+ implementation of Go constitutes direct or contributory patent
20
+ infringement, or inducement of patent infringement, then any patent
21
+ rights granted to you under this License for this implementation of Go
22
+ shall terminate as of the date such litigation is filed.
@@ -0,0 +1,56 @@
1
+ // Copyright 2014 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 context defines the Context type, which carries deadlines,
6
+ // cancelation signals, and other request-scoped values across API boundaries
7
+ // and between processes.
8
+ // As of Go 1.7 this package is available in the standard library under the
9
+ // name context. https://golang.org/pkg/context.
10
+ //
11
+ // Incoming requests to a server should create a Context, and outgoing calls to
12
+ // servers should accept a Context. The chain of function calls between must
13
+ // propagate the Context, optionally replacing it with a modified copy created
14
+ // using WithDeadline, WithTimeout, WithCancel, or WithValue.
15
+ //
16
+ // Programs that use Contexts should follow these rules to keep interfaces
17
+ // consistent across packages and enable static analysis tools to check context
18
+ // propagation:
19
+ //
20
+ // Do not store Contexts inside a struct type; instead, pass a Context
21
+ // explicitly to each function that needs it. The Context should be the first
22
+ // parameter, typically named ctx:
23
+ //
24
+ // func DoSomething(ctx context.Context, arg Arg) error {
25
+ // // ... use ctx ...
26
+ // }
27
+ //
28
+ // Do not pass a nil Context, even if a function permits it. Pass context.TODO
29
+ // if you are unsure about which Context to use.
30
+ //
31
+ // Use context Values only for request-scoped data that transits processes and
32
+ // APIs, not for passing optional parameters to functions.
33
+ //
34
+ // The same Context may be passed to functions running in different goroutines;
35
+ // Contexts are safe for simultaneous use by multiple goroutines.
36
+ //
37
+ // See http://blog.golang.org/context for example code for a server that uses
38
+ // Contexts.
39
+ package context // import "golang.org/x/net/context"
40
+
41
+ // Background returns a non-nil, empty Context. It is never canceled, has no
42
+ // values, and has no deadline. It is typically used by the main function,
43
+ // initialization, and tests, and as the top-level Context for incoming
44
+ // requests.
45
+ func Background() Context {
46
+ return background
47
+ }
48
+
49
+ // TODO returns a non-nil, empty Context. Code should use context.TODO when
50
+ // it's unclear which Context to use or it is not yet available (because the
51
+ // surrounding function has not yet been extended to accept a Context
52
+ // parameter). TODO is recognized by static analysis tools that determine
53
+ // whether Contexts are propagated correctly in a program.
54
+ func TODO() Context {
55
+ return todo
56
+ }
@@ -0,0 +1,71 @@
1
+ // Copyright 2016 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 ctxhttp provides helper functions for performing context-aware HTTP requests.
6
+ package ctxhttp // import "golang.org/x/net/context/ctxhttp"
7
+
8
+ import (
9
+ "context"
10
+ "io"
11
+ "net/http"
12
+ "net/url"
13
+ "strings"
14
+ )
15
+
16
+ // Do sends an HTTP request with the provided http.Client and returns
17
+ // an HTTP response.
18
+ //
19
+ // If the client is nil, http.DefaultClient is used.
20
+ //
21
+ // The provided ctx must be non-nil. If it is canceled or times out,
22
+ // ctx.Err() will be returned.
23
+ func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
24
+ if client == nil {
25
+ client = http.DefaultClient
26
+ }
27
+ resp, err := client.Do(req.WithContext(ctx))
28
+ // If we got an error, and the context has been canceled,
29
+ // the context's error is probably more useful.
30
+ if err != nil {
31
+ select {
32
+ case <-ctx.Done():
33
+ err = ctx.Err()
34
+ default:
35
+ }
36
+ }
37
+ return resp, err
38
+ }
39
+
40
+ // Get issues a GET request via the Do function.
41
+ func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
42
+ req, err := http.NewRequest("GET", url, nil)
43
+ if err != nil {
44
+ return nil, err
45
+ }
46
+ return Do(ctx, client, req)
47
+ }
48
+
49
+ // Head issues a HEAD request via the Do function.
50
+ func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
51
+ req, err := http.NewRequest("HEAD", url, nil)
52
+ if err != nil {
53
+ return nil, err
54
+ }
55
+ return Do(ctx, client, req)
56
+ }
57
+
58
+ // Post issues a POST request via the Do function.
59
+ func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) {
60
+ req, err := http.NewRequest("POST", url, body)
61
+ if err != nil {
62
+ return nil, err
63
+ }
64
+ req.Header.Set("Content-Type", bodyType)
65
+ return Do(ctx, client, req)
66
+ }
67
+
68
+ // PostForm issues a POST request via the Do function.
69
+ func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) {
70
+ return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
71
+ }
@@ -0,0 +1,73 @@
1
+ // Copyright 2016 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
+ //go:build go1.7
6
+ // +build go1.7
7
+
8
+ package context
9
+
10
+ import (
11
+ "context" // standard library's context, as of Go 1.7
12
+ "time"
13
+ )
14
+
15
+ var (
16
+ todo = context.TODO()
17
+ background = context.Background()
18
+ )
19
+
20
+ // Canceled is the error returned by Context.Err when the context is canceled.
21
+ var Canceled = context.Canceled
22
+
23
+ // DeadlineExceeded is the error returned by Context.Err when the context's
24
+ // deadline passes.
25
+ var DeadlineExceeded = context.DeadlineExceeded
26
+
27
+ // WithCancel returns a copy of parent with a new Done channel. The returned
28
+ // context's Done channel is closed when the returned cancel function is called
29
+ // or when the parent context's Done channel is closed, whichever happens first.
30
+ //
31
+ // Canceling this context releases resources associated with it, so code should
32
+ // call cancel as soon as the operations running in this Context complete.
33
+ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
34
+ ctx, f := context.WithCancel(parent)
35
+ return ctx, CancelFunc(f)
36
+ }
37
+
38
+ // WithDeadline returns a copy of the parent context with the deadline adjusted
39
+ // to be no later than d. If the parent's deadline is already earlier than d,
40
+ // WithDeadline(parent, d) is semantically equivalent to parent. The returned
41
+ // context's Done channel is closed when the deadline expires, when the returned
42
+ // cancel function is called, or when the parent context's Done channel is
43
+ // closed, whichever happens first.
44
+ //
45
+ // Canceling this context releases resources associated with it, so code should
46
+ // call cancel as soon as the operations running in this Context complete.
47
+ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
48
+ ctx, f := context.WithDeadline(parent, deadline)
49
+ return ctx, CancelFunc(f)
50
+ }
51
+
52
+ // WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
53
+ //
54
+ // Canceling this context releases resources associated with it, so code should
55
+ // call cancel as soon as the operations running in this Context complete:
56
+ //
57
+ // func slowOperationWithTimeout(ctx context.Context) (Result, error) {
58
+ // ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
59
+ // defer cancel() // releases resources if slowOperation completes before timeout elapses
60
+ // return slowOperation(ctx)
61
+ // }
62
+ func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
63
+ return WithDeadline(parent, time.Now().Add(timeout))
64
+ }
65
+
66
+ // WithValue returns a copy of parent in which the value associated with key is
67
+ // val.
68
+ //
69
+ // Use context Values only for request-scoped data that transits processes and
70
+ // APIs, not for passing optional parameters to functions.
71
+ func WithValue(parent Context, key interface{}, val interface{}) Context {
72
+ return context.WithValue(parent, key, val)
73
+ }
@@ -0,0 +1,21 @@
1
+ // Copyright 2017 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
+ //go:build go1.9
6
+ // +build go1.9
7
+
8
+ package context
9
+
10
+ import "context" // standard library's context, as of Go 1.7
11
+
12
+ // A Context carries a deadline, a cancelation signal, and other values across
13
+ // API boundaries.
14
+ //
15
+ // Context's methods may be called by multiple goroutines simultaneously.
16
+ type Context = context.Context
17
+
18
+ // A CancelFunc tells an operation to abandon its work.
19
+ // A CancelFunc does not wait for the work to stop.
20
+ // After the first call, subsequent calls to a CancelFunc do nothing.
21
+ type CancelFunc = context.CancelFunc
@@ -0,0 +1,301 @@
1
+ // Copyright 2014 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
+ //go:build !go1.7
6
+ // +build !go1.7
7
+
8
+ package context
9
+
10
+ import (
11
+ "errors"
12
+ "fmt"
13
+ "sync"
14
+ "time"
15
+ )
16
+
17
+ // An emptyCtx is never canceled, has no values, and has no deadline. It is not
18
+ // struct{}, since vars of this type must have distinct addresses.
19
+ type emptyCtx int
20
+
21
+ func (*emptyCtx) Deadline() (deadline time.Time, ok bool) {
22
+ return
23
+ }
24
+
25
+ func (*emptyCtx) Done() <-chan struct{} {
26
+ return nil
27
+ }
28
+
29
+ func (*emptyCtx) Err() error {
30
+ return nil
31
+ }
32
+
33
+ func (*emptyCtx) Value(key interface{}) interface{} {
34
+ return nil
35
+ }
36
+
37
+ func (e *emptyCtx) String() string {
38
+ switch e {
39
+ case background:
40
+ return "context.Background"
41
+ case todo:
42
+ return "context.TODO"
43
+ }
44
+ return "unknown empty Context"
45
+ }
46
+
47
+ var (
48
+ background = new(emptyCtx)
49
+ todo = new(emptyCtx)
50
+ )
51
+
52
+ // Canceled is the error returned by Context.Err when the context is canceled.
53
+ var Canceled = errors.New("context canceled")
54
+
55
+ // DeadlineExceeded is the error returned by Context.Err when the context's
56
+ // deadline passes.
57
+ var DeadlineExceeded = errors.New("context deadline exceeded")
58
+
59
+ // WithCancel returns a copy of parent with a new Done channel. The returned
60
+ // context's Done channel is closed when the returned cancel function is called
61
+ // or when the parent context's Done channel is closed, whichever happens first.
62
+ //
63
+ // Canceling this context releases resources associated with it, so code should
64
+ // call cancel as soon as the operations running in this Context complete.
65
+ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
66
+ c := newCancelCtx(parent)
67
+ propagateCancel(parent, c)
68
+ return c, func() { c.cancel(true, Canceled) }
69
+ }
70
+
71
+ // newCancelCtx returns an initialized cancelCtx.
72
+ func newCancelCtx(parent Context) *cancelCtx {
73
+ return &cancelCtx{
74
+ Context: parent,
75
+ done: make(chan struct{}),
76
+ }
77
+ }
78
+
79
+ // propagateCancel arranges for child to be canceled when parent is.
80
+ func propagateCancel(parent Context, child canceler) {
81
+ if parent.Done() == nil {
82
+ return // parent is never canceled
83
+ }
84
+ if p, ok := parentCancelCtx(parent); ok {
85
+ p.mu.Lock()
86
+ if p.err != nil {
87
+ // parent has already been canceled
88
+ child.cancel(false, p.err)
89
+ } else {
90
+ if p.children == nil {
91
+ p.children = make(map[canceler]bool)
92
+ }
93
+ p.children[child] = true
94
+ }
95
+ p.mu.Unlock()
96
+ } else {
97
+ go func() {
98
+ select {
99
+ case <-parent.Done():
100
+ child.cancel(false, parent.Err())
101
+ case <-child.Done():
102
+ }
103
+ }()
104
+ }
105
+ }
106
+
107
+ // parentCancelCtx follows a chain of parent references until it finds a
108
+ // *cancelCtx. This function understands how each of the concrete types in this
109
+ // package represents its parent.
110
+ func parentCancelCtx(parent Context) (*cancelCtx, bool) {
111
+ for {
112
+ switch c := parent.(type) {
113
+ case *cancelCtx:
114
+ return c, true
115
+ case *timerCtx:
116
+ return c.cancelCtx, true
117
+ case *valueCtx:
118
+ parent = c.Context
119
+ default:
120
+ return nil, false
121
+ }
122
+ }
123
+ }
124
+
125
+ // removeChild removes a context from its parent.
126
+ func removeChild(parent Context, child canceler) {
127
+ p, ok := parentCancelCtx(parent)
128
+ if !ok {
129
+ return
130
+ }
131
+ p.mu.Lock()
132
+ if p.children != nil {
133
+ delete(p.children, child)
134
+ }
135
+ p.mu.Unlock()
136
+ }
137
+
138
+ // A canceler is a context type that can be canceled directly. The
139
+ // implementations are *cancelCtx and *timerCtx.
140
+ type canceler interface {
141
+ cancel(removeFromParent bool, err error)
142
+ Done() <-chan struct{}
143
+ }
144
+
145
+ // A cancelCtx can be canceled. When canceled, it also cancels any children
146
+ // that implement canceler.
147
+ type cancelCtx struct {
148
+ Context
149
+
150
+ done chan struct{} // closed by the first cancel call.
151
+
152
+ mu sync.Mutex
153
+ children map[canceler]bool // set to nil by the first cancel call
154
+ err error // set to non-nil by the first cancel call
155
+ }
156
+
157
+ func (c *cancelCtx) Done() <-chan struct{} {
158
+ return c.done
159
+ }
160
+
161
+ func (c *cancelCtx) Err() error {
162
+ c.mu.Lock()
163
+ defer c.mu.Unlock()
164
+ return c.err
165
+ }
166
+
167
+ func (c *cancelCtx) String() string {
168
+ return fmt.Sprintf("%v.WithCancel", c.Context)
169
+ }
170
+
171
+ // cancel closes c.done, cancels each of c's children, and, if
172
+ // removeFromParent is true, removes c from its parent's children.
173
+ func (c *cancelCtx) cancel(removeFromParent bool, err error) {
174
+ if err == nil {
175
+ panic("context: internal error: missing cancel error")
176
+ }
177
+ c.mu.Lock()
178
+ if c.err != nil {
179
+ c.mu.Unlock()
180
+ return // already canceled
181
+ }
182
+ c.err = err
183
+ close(c.done)
184
+ for child := range c.children {
185
+ // NOTE: acquiring the child's lock while holding parent's lock.
186
+ child.cancel(false, err)
187
+ }
188
+ c.children = nil
189
+ c.mu.Unlock()
190
+
191
+ if removeFromParent {
192
+ removeChild(c.Context, c)
193
+ }
194
+ }
195
+
196
+ // WithDeadline returns a copy of the parent context with the deadline adjusted
197
+ // to be no later than d. If the parent's deadline is already earlier than d,
198
+ // WithDeadline(parent, d) is semantically equivalent to parent. The returned
199
+ // context's Done channel is closed when the deadline expires, when the returned
200
+ // cancel function is called, or when the parent context's Done channel is
201
+ // closed, whichever happens first.
202
+ //
203
+ // Canceling this context releases resources associated with it, so code should
204
+ // call cancel as soon as the operations running in this Context complete.
205
+ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
206
+ if cur, ok := parent.Deadline(); ok && cur.Before(deadline) {
207
+ // The current deadline is already sooner than the new one.
208
+ return WithCancel(parent)
209
+ }
210
+ c := &timerCtx{
211
+ cancelCtx: newCancelCtx(parent),
212
+ deadline: deadline,
213
+ }
214
+ propagateCancel(parent, c)
215
+ d := deadline.Sub(time.Now())
216
+ if d <= 0 {
217
+ c.cancel(true, DeadlineExceeded) // deadline has already passed
218
+ return c, func() { c.cancel(true, Canceled) }
219
+ }
220
+ c.mu.Lock()
221
+ defer c.mu.Unlock()
222
+ if c.err == nil {
223
+ c.timer = time.AfterFunc(d, func() {
224
+ c.cancel(true, DeadlineExceeded)
225
+ })
226
+ }
227
+ return c, func() { c.cancel(true, Canceled) }
228
+ }
229
+
230
+ // A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
231
+ // implement Done and Err. It implements cancel by stopping its timer then
232
+ // delegating to cancelCtx.cancel.
233
+ type timerCtx struct {
234
+ *cancelCtx
235
+ timer *time.Timer // Under cancelCtx.mu.
236
+
237
+ deadline time.Time
238
+ }
239
+
240
+ func (c *timerCtx) Deadline() (deadline time.Time, ok bool) {
241
+ return c.deadline, true
242
+ }
243
+
244
+ func (c *timerCtx) String() string {
245
+ return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now()))
246
+ }
247
+
248
+ func (c *timerCtx) cancel(removeFromParent bool, err error) {
249
+ c.cancelCtx.cancel(false, err)
250
+ if removeFromParent {
251
+ // Remove this timerCtx from its parent cancelCtx's children.
252
+ removeChild(c.cancelCtx.Context, c)
253
+ }
254
+ c.mu.Lock()
255
+ if c.timer != nil {
256
+ c.timer.Stop()
257
+ c.timer = nil
258
+ }
259
+ c.mu.Unlock()
260
+ }
261
+
262
+ // WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
263
+ //
264
+ // Canceling this context releases resources associated with it, so code should
265
+ // call cancel as soon as the operations running in this Context complete:
266
+ //
267
+ // func slowOperationWithTimeout(ctx context.Context) (Result, error) {
268
+ // ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
269
+ // defer cancel() // releases resources if slowOperation completes before timeout elapses
270
+ // return slowOperation(ctx)
271
+ // }
272
+ func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
273
+ return WithDeadline(parent, time.Now().Add(timeout))
274
+ }
275
+
276
+ // WithValue returns a copy of parent in which the value associated with key is
277
+ // val.
278
+ //
279
+ // Use context Values only for request-scoped data that transits processes and
280
+ // APIs, not for passing optional parameters to functions.
281
+ func WithValue(parent Context, key interface{}, val interface{}) Context {
282
+ return &valueCtx{parent, key, val}
283
+ }
284
+
285
+ // A valueCtx carries a key-value pair. It implements Value for that key and
286
+ // delegates all other calls to the embedded Context.
287
+ type valueCtx struct {
288
+ Context
289
+ key, val interface{}
290
+ }
291
+
292
+ func (c *valueCtx) String() string {
293
+ return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val)
294
+ }
295
+
296
+ func (c *valueCtx) Value(key interface{}) interface{} {
297
+ if c.key == key {
298
+ return c.val
299
+ }
300
+ return c.Context.Value(key)
301
+ }