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