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.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +24 -0
- data/.github/workflows/gem-push.yml +38 -0
- data/.github/workflows/licensed.yml +43 -0
- data/.gitignore +10 -0
- data/.licensed.yml +9 -0
- data/.licenses/go/github.com/armon/circbuf.dep.yml +31 -0
- data/.licenses/go/github.com/gorilla/mux.dep.yml +41 -0
- data/.licenses/go/github.com/hashicorp/go-cleanhttp.dep.yml +375 -0
- data/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +32 -0
- data/.licenses/go/github.com/pkg/errors.dep.yml +36 -0
- data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +160 -0
- data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +180 -0
- data/.licenses/go/go.uber.org/atomic.dep.yml +31 -0
- data/.licenses/go/go.uber.org/multierr.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/buffer.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +30 -0
- data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +31 -0
- data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +31 -0
- data/.licenses/go/golang.org/x/net/context/ctxhttp.dep.yml +63 -0
- data/.licenses/go/golang.org/x/oauth2.dep.yml +44 -0
- data/.licenses/go/golang.org/x/oauth2/internal.dep.yml +38 -0
- data/.ruby_version +1 -0
- data/Gemfile +8 -0
- data/LICENSE +201 -0
- data/README.md +88 -0
- data/Rakefile +10 -0
- data/bin/console +15 -0
- data/bin/setup +17 -0
- data/controller.go +255 -0
- data/go.mod +16 -0
- data/go.sum +428 -0
- data/lib/generators/planetscale/install_generator.rb +58 -0
- data/lib/planetscale.rb +137 -0
- data/lib/planetscale/version.rb +5 -0
- data/planetscale.gemspec +44 -0
- data/proxy.go +128 -0
- data/vendor/github.com/armon/circbuf/.gitignore +22 -0
- data/vendor/github.com/armon/circbuf/LICENSE +20 -0
- data/vendor/github.com/armon/circbuf/README.md +28 -0
- data/vendor/github.com/armon/circbuf/circbuf.go +92 -0
- data/vendor/github.com/armon/circbuf/go.mod +1 -0
- data/vendor/github.com/golang/protobuf/AUTHORS +3 -0
- data/vendor/github.com/golang/protobuf/CONTRIBUTORS +3 -0
- data/vendor/github.com/golang/protobuf/LICENSE +28 -0
- data/vendor/github.com/golang/protobuf/proto/buffer.go +324 -0
- data/vendor/github.com/golang/protobuf/proto/defaults.go +63 -0
- data/vendor/github.com/golang/protobuf/proto/deprecated.go +113 -0
- data/vendor/github.com/golang/protobuf/proto/discard.go +58 -0
- data/vendor/github.com/golang/protobuf/proto/extensions.go +356 -0
- data/vendor/github.com/golang/protobuf/proto/properties.go +306 -0
- data/vendor/github.com/golang/protobuf/proto/proto.go +167 -0
- data/vendor/github.com/golang/protobuf/proto/registry.go +317 -0
- data/vendor/github.com/golang/protobuf/proto/text_decode.go +801 -0
- data/vendor/github.com/golang/protobuf/proto/text_encode.go +560 -0
- data/vendor/github.com/golang/protobuf/proto/wire.go +78 -0
- data/vendor/github.com/golang/protobuf/proto/wrappers.go +34 -0
- data/vendor/github.com/gorilla/mux/AUTHORS +8 -0
- data/vendor/github.com/gorilla/mux/LICENSE +27 -0
- data/vendor/github.com/gorilla/mux/README.md +805 -0
- data/vendor/github.com/gorilla/mux/doc.go +306 -0
- data/vendor/github.com/gorilla/mux/go.mod +3 -0
- data/vendor/github.com/gorilla/mux/middleware.go +74 -0
- data/vendor/github.com/gorilla/mux/mux.go +606 -0
- data/vendor/github.com/gorilla/mux/regexp.go +388 -0
- data/vendor/github.com/gorilla/mux/route.go +736 -0
- data/vendor/github.com/gorilla/mux/test_helpers.go +19 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +363 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/README.md +30 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +58 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +20 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +3 -0
- data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +48 -0
- data/vendor/github.com/mitchellh/go-homedir/LICENSE +21 -0
- data/vendor/github.com/mitchellh/go-homedir/README.md +14 -0
- data/vendor/github.com/mitchellh/go-homedir/go.mod +1 -0
- data/vendor/github.com/mitchellh/go-homedir/homedir.go +167 -0
- data/vendor/github.com/pkg/errors/.gitignore +24 -0
- data/vendor/github.com/pkg/errors/.travis.yml +10 -0
- data/vendor/github.com/pkg/errors/LICENSE +23 -0
- data/vendor/github.com/pkg/errors/Makefile +44 -0
- data/vendor/github.com/pkg/errors/README.md +59 -0
- data/vendor/github.com/pkg/errors/appveyor.yml +32 -0
- data/vendor/github.com/pkg/errors/errors.go +288 -0
- data/vendor/github.com/pkg/errors/go113.go +38 -0
- data/vendor/github.com/pkg/errors/stack.go +177 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +139 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +258 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +142 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +305 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +131 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +368 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +78 -0
- data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +163 -0
- data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +467 -0
- data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +73 -0
- data/vendor/go.uber.org/atomic/.codecov.yml +19 -0
- data/vendor/go.uber.org/atomic/.gitignore +12 -0
- data/vendor/go.uber.org/atomic/.travis.yml +27 -0
- data/vendor/go.uber.org/atomic/CHANGELOG.md +76 -0
- data/vendor/go.uber.org/atomic/LICENSE.txt +19 -0
- data/vendor/go.uber.org/atomic/Makefile +78 -0
- data/vendor/go.uber.org/atomic/README.md +63 -0
- data/vendor/go.uber.org/atomic/bool.go +81 -0
- data/vendor/go.uber.org/atomic/bool_ext.go +53 -0
- data/vendor/go.uber.org/atomic/doc.go +23 -0
- data/vendor/go.uber.org/atomic/duration.go +82 -0
- data/vendor/go.uber.org/atomic/duration_ext.go +40 -0
- data/vendor/go.uber.org/atomic/error.go +51 -0
- data/vendor/go.uber.org/atomic/error_ext.go +39 -0
- data/vendor/go.uber.org/atomic/float64.go +76 -0
- data/vendor/go.uber.org/atomic/float64_ext.go +47 -0
- data/vendor/go.uber.org/atomic/gen.go +26 -0
- data/vendor/go.uber.org/atomic/go.mod +8 -0
- data/vendor/go.uber.org/atomic/go.sum +9 -0
- data/vendor/go.uber.org/atomic/int32.go +102 -0
- data/vendor/go.uber.org/atomic/int64.go +102 -0
- data/vendor/go.uber.org/atomic/nocmp.go +35 -0
- data/vendor/go.uber.org/atomic/string.go +54 -0
- data/vendor/go.uber.org/atomic/string_ext.go +43 -0
- data/vendor/go.uber.org/atomic/uint32.go +102 -0
- data/vendor/go.uber.org/atomic/uint64.go +102 -0
- data/vendor/go.uber.org/atomic/value.go +31 -0
- data/vendor/go.uber.org/multierr/.codecov.yml +15 -0
- data/vendor/go.uber.org/multierr/.gitignore +4 -0
- data/vendor/go.uber.org/multierr/.travis.yml +23 -0
- data/vendor/go.uber.org/multierr/CHANGELOG.md +60 -0
- data/vendor/go.uber.org/multierr/LICENSE.txt +19 -0
- data/vendor/go.uber.org/multierr/Makefile +42 -0
- data/vendor/go.uber.org/multierr/README.md +23 -0
- data/vendor/go.uber.org/multierr/error.go +449 -0
- data/vendor/go.uber.org/multierr/glide.yaml +8 -0
- data/vendor/go.uber.org/multierr/go.mod +8 -0
- data/vendor/go.uber.org/multierr/go.sum +11 -0
- data/vendor/go.uber.org/multierr/go113.go +52 -0
- data/vendor/go.uber.org/zap/.codecov.yml +17 -0
- data/vendor/go.uber.org/zap/.gitignore +32 -0
- data/vendor/go.uber.org/zap/.readme.tmpl +109 -0
- data/vendor/go.uber.org/zap/.travis.yml +23 -0
- data/vendor/go.uber.org/zap/CHANGELOG.md +432 -0
- data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +75 -0
- data/vendor/go.uber.org/zap/CONTRIBUTING.md +81 -0
- data/vendor/go.uber.org/zap/FAQ.md +156 -0
- data/vendor/go.uber.org/zap/LICENSE.txt +19 -0
- data/vendor/go.uber.org/zap/Makefile +63 -0
- data/vendor/go.uber.org/zap/README.md +134 -0
- data/vendor/go.uber.org/zap/array.go +320 -0
- data/vendor/go.uber.org/zap/buffer/buffer.go +123 -0
- data/vendor/go.uber.org/zap/buffer/pool.go +49 -0
- data/vendor/go.uber.org/zap/checklicense.sh +17 -0
- data/vendor/go.uber.org/zap/config.go +264 -0
- data/vendor/go.uber.org/zap/doc.go +113 -0
- data/vendor/go.uber.org/zap/encoder.go +79 -0
- data/vendor/go.uber.org/zap/error.go +80 -0
- data/vendor/go.uber.org/zap/field.go +539 -0
- data/vendor/go.uber.org/zap/flag.go +39 -0
- data/vendor/go.uber.org/zap/glide.yaml +34 -0
- data/vendor/go.uber.org/zap/global.go +168 -0
- data/vendor/go.uber.org/zap/global_go112.go +26 -0
- data/vendor/go.uber.org/zap/global_prego112.go +26 -0
- data/vendor/go.uber.org/zap/go.mod +13 -0
- data/vendor/go.uber.org/zap/go.sum +56 -0
- data/vendor/go.uber.org/zap/http_handler.go +81 -0
- data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +31 -0
- data/vendor/go.uber.org/zap/internal/color/color.go +44 -0
- data/vendor/go.uber.org/zap/internal/exit/exit.go +64 -0
- data/vendor/go.uber.org/zap/level.go +132 -0
- data/vendor/go.uber.org/zap/logger.go +344 -0
- data/vendor/go.uber.org/zap/options.go +140 -0
- data/vendor/go.uber.org/zap/sink.go +161 -0
- data/vendor/go.uber.org/zap/stacktrace.go +85 -0
- data/vendor/go.uber.org/zap/sugar.go +304 -0
- data/vendor/go.uber.org/zap/time.go +27 -0
- data/vendor/go.uber.org/zap/writer.go +99 -0
- data/vendor/go.uber.org/zap/zapcore/console_encoder.go +161 -0
- data/vendor/go.uber.org/zap/zapcore/core.go +113 -0
- data/vendor/go.uber.org/zap/zapcore/doc.go +24 -0
- data/vendor/go.uber.org/zap/zapcore/encoder.go +443 -0
- data/vendor/go.uber.org/zap/zapcore/entry.go +264 -0
- data/vendor/go.uber.org/zap/zapcore/error.go +115 -0
- data/vendor/go.uber.org/zap/zapcore/field.go +227 -0
- data/vendor/go.uber.org/zap/zapcore/hook.go +68 -0
- data/vendor/go.uber.org/zap/zapcore/increase_level.go +66 -0
- data/vendor/go.uber.org/zap/zapcore/json_encoder.go +534 -0
- data/vendor/go.uber.org/zap/zapcore/level.go +175 -0
- data/vendor/go.uber.org/zap/zapcore/level_strings.go +46 -0
- data/vendor/go.uber.org/zap/zapcore/marshaler.go +61 -0
- data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +179 -0
- data/vendor/go.uber.org/zap/zapcore/sampler.go +208 -0
- data/vendor/go.uber.org/zap/zapcore/tee.go +81 -0
- data/vendor/go.uber.org/zap/zapcore/write_syncer.go +123 -0
- data/vendor/golang.org/x/net/AUTHORS +3 -0
- data/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
- data/vendor/golang.org/x/net/LICENSE +27 -0
- data/vendor/golang.org/x/net/PATENTS +22 -0
- data/vendor/golang.org/x/net/context/context.go +56 -0
- data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +71 -0
- data/vendor/golang.org/x/net/context/go17.go +73 -0
- data/vendor/golang.org/x/net/context/go19.go +21 -0
- data/vendor/golang.org/x/net/context/pre_go17.go +301 -0
- data/vendor/golang.org/x/net/context/pre_go19.go +110 -0
- data/vendor/golang.org/x/oauth2/.travis.yml +13 -0
- data/vendor/golang.org/x/oauth2/AUTHORS +3 -0
- data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +26 -0
- data/vendor/golang.org/x/oauth2/CONTRIBUTORS +3 -0
- data/vendor/golang.org/x/oauth2/LICENSE +27 -0
- data/vendor/golang.org/x/oauth2/README.md +36 -0
- data/vendor/golang.org/x/oauth2/go.mod +9 -0
- data/vendor/golang.org/x/oauth2/go.sum +361 -0
- data/vendor/golang.org/x/oauth2/internal/client_appengine.go +14 -0
- data/vendor/golang.org/x/oauth2/internal/doc.go +6 -0
- data/vendor/golang.org/x/oauth2/internal/oauth2.go +37 -0
- data/vendor/golang.org/x/oauth2/internal/token.go +294 -0
- data/vendor/golang.org/x/oauth2/internal/transport.go +33 -0
- data/vendor/golang.org/x/oauth2/oauth2.go +381 -0
- data/vendor/golang.org/x/oauth2/token.go +178 -0
- data/vendor/golang.org/x/oauth2/transport.go +89 -0
- data/vendor/google.golang.org/appengine/LICENSE +202 -0
- data/vendor/google.golang.org/appengine/internal/api.go +678 -0
- data/vendor/google.golang.org/appengine/internal/api_classic.go +169 -0
- data/vendor/google.golang.org/appengine/internal/api_common.go +123 -0
- data/vendor/google.golang.org/appengine/internal/app_id.go +28 -0
- data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +308 -0
- data/vendor/google.golang.org/appengine/internal/base/api_base.proto +33 -0
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +4367 -0
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +551 -0
- data/vendor/google.golang.org/appengine/internal/identity.go +55 -0
- data/vendor/google.golang.org/appengine/internal/identity_classic.go +61 -0
- data/vendor/google.golang.org/appengine/internal/identity_flex.go +11 -0
- data/vendor/google.golang.org/appengine/internal/identity_vm.go +134 -0
- data/vendor/google.golang.org/appengine/internal/internal.go +110 -0
- data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +1313 -0
- data/vendor/google.golang.org/appengine/internal/log/log_service.proto +150 -0
- data/vendor/google.golang.org/appengine/internal/main.go +16 -0
- data/vendor/google.golang.org/appengine/internal/main_common.go +7 -0
- data/vendor/google.golang.org/appengine/internal/main_vm.go +69 -0
- data/vendor/google.golang.org/appengine/internal/metadata.go +60 -0
- data/vendor/google.golang.org/appengine/internal/net.go +56 -0
- data/vendor/google.golang.org/appengine/internal/regen.sh +40 -0
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +361 -0
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +44 -0
- data/vendor/google.golang.org/appengine/internal/transaction.go +115 -0
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +527 -0
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +64 -0
- data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +210 -0
- data/vendor/google.golang.org/protobuf/AUTHORS +3 -0
- data/vendor/google.golang.org/protobuf/CONTRIBUTORS +3 -0
- data/vendor/google.golang.org/protobuf/LICENSE +27 -0
- data/vendor/google.golang.org/protobuf/PATENTS +22 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +773 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +7 -0
- data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +371 -0
- data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +538 -0
- data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +318 -0
- data/vendor/google.golang.org/protobuf/internal/descopts/options.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +69 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +213 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +241 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +207 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +665 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +190 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +161 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +373 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +265 -0
- data/vendor/google.golang.org/protobuf/internal/errors/errors.go +89 -0
- data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +39 -0
- data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +12 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +158 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +631 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +471 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +704 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +450 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +356 -0
- data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +107 -0
- data/vendor/google.golang.org/protobuf/internal/filetype/build.go +297 -0
- data/vendor/google.golang.org/protobuf/internal/flags/flags.go +24 -0
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +9 -0
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +9 -0
- data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +106 -0
- data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +829 -0
- data/vendor/google.golang.org/protobuf/internal/genid/doc.go +11 -0
- data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +19 -0
- data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +31 -0
- data/vendor/google.golang.org/protobuf/internal/genid/goname.go +25 -0
- data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +16 -0
- data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +31 -0
- data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +116 -0
- data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +34 -0
- data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +184 -0
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +13 -0
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +175 -0
- data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +177 -0
- data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +141 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +223 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +830 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +5637 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +388 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +37 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +11 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +217 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +123 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +209 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +557 -0
- data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +17 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert.go +496 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +141 -0
- data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +121 -0
- data/vendor/google.golang.org/protobuf/internal/impl/decode.go +276 -0
- data/vendor/google.golang.org/protobuf/internal/impl/encode.go +201 -0
- data/vendor/google.golang.org/protobuf/internal/impl/enum.go +21 -0
- data/vendor/google.golang.org/protobuf/internal/impl/extension.go +156 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +219 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +92 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +176 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +81 -0
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +558 -0
- data/vendor/google.golang.org/protobuf/internal/impl/merge.go +176 -0
- data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +209 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message.go +276 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +465 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +543 -0
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +249 -0
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +178 -0
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +174 -0
- data/vendor/google.golang.org/protobuf/internal/impl/validate.go +576 -0
- data/vendor/google.golang.org/protobuf/internal/impl/weak.go +74 -0
- data/vendor/google.golang.org/protobuf/internal/order/order.go +89 -0
- data/vendor/google.golang.org/protobuf/internal/order/range.go +115 -0
- data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +29 -0
- data/vendor/google.golang.org/protobuf/internal/set/ints.go +58 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings.go +196 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +27 -0
- data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +94 -0
- data/vendor/google.golang.org/protobuf/internal/version/version.go +79 -0
- data/vendor/google.golang.org/protobuf/proto/checkinit.go +71 -0
- data/vendor/google.golang.org/protobuf/proto/decode.go +278 -0
- data/vendor/google.golang.org/protobuf/proto/decode_gen.go +603 -0
- data/vendor/google.golang.org/protobuf/proto/doc.go +94 -0
- data/vendor/google.golang.org/protobuf/proto/encode.go +319 -0
- data/vendor/google.golang.org/protobuf/proto/encode_gen.go +97 -0
- data/vendor/google.golang.org/protobuf/proto/equal.go +167 -0
- data/vendor/google.golang.org/protobuf/proto/extension.go +92 -0
- data/vendor/google.golang.org/protobuf/proto/merge.go +139 -0
- data/vendor/google.golang.org/protobuf/proto/messageset.go +93 -0
- data/vendor/google.golang.org/protobuf/proto/proto.go +43 -0
- data/vendor/google.golang.org/protobuf/proto/proto_methods.go +19 -0
- data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +19 -0
- data/vendor/google.golang.org/protobuf/proto/reset.go +43 -0
- data/vendor/google.golang.org/protobuf/proto/size.go +97 -0
- data/vendor/google.golang.org/protobuf/proto/size_gen.go +55 -0
- data/vendor/google.golang.org/protobuf/proto/wrappers.go +29 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +276 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +248 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +286 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +374 -0
- data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +252 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +77 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +504 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +128 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +461 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +665 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +285 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +59 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +411 -0
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +98 -0
- data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +869 -0
- data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +15 -0
- data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +167 -0
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +44 -0
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +56 -0
- data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +4039 -0
- data/vendor/modules.txt +79 -0
- 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
|
+
}
|