planetscale 0.2.0 → 0.3.3
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 +4 -4
- data/.buildkite/pipeline.yml +21 -0
- data/.github/workflows/ci.yml +9 -1
- data/.github/workflows/gem-push.yml +9 -2
- data/.licenses/go/github.com/matoous/go-nanoid/v2.dep.yml +34 -0
- data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +56 -3
- data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +205 -172
- data/.licenses/go/go.uber.org/zap/buffer.dep.yml +1 -1
- data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +1 -1
- data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +1 -1
- data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +1 -1
- data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +1 -1
- data/.licenses/go/go.uber.org/zap.dep.yml +1 -1
- data/README.md +11 -8
- data/controller.go +24 -26
- data/go.mod +4 -3
- data/go.sum +42 -27
- data/lib/generators/planetscale/install_generator.rb +8 -6
- data/lib/planetscale/version.rb +1 -1
- data/lib/planetscale.rb +14 -15
- data/planetscale.gemspec +2 -2
- data/proxy/planetscale-darwin.h +1 -1
- data/proxy/planetscale-darwin.so +0 -0
- data/proxy/planetscale-linux.h +1 -1
- data/proxy/planetscale-linux.so +0 -0
- data/proxy.go +1 -5
- metadata +6 -342
- data/vendor/github.com/armon/circbuf/.gitignore +0 -22
- data/vendor/github.com/armon/circbuf/LICENSE +0 -20
- data/vendor/github.com/armon/circbuf/README.md +0 -28
- data/vendor/github.com/armon/circbuf/circbuf.go +0 -92
- data/vendor/github.com/armon/circbuf/go.mod +0 -1
- data/vendor/github.com/golang/protobuf/AUTHORS +0 -3
- data/vendor/github.com/golang/protobuf/CONTRIBUTORS +0 -3
- data/vendor/github.com/golang/protobuf/LICENSE +0 -28
- data/vendor/github.com/golang/protobuf/proto/buffer.go +0 -324
- data/vendor/github.com/golang/protobuf/proto/defaults.go +0 -63
- data/vendor/github.com/golang/protobuf/proto/deprecated.go +0 -113
- data/vendor/github.com/golang/protobuf/proto/discard.go +0 -58
- data/vendor/github.com/golang/protobuf/proto/extensions.go +0 -356
- data/vendor/github.com/golang/protobuf/proto/properties.go +0 -306
- data/vendor/github.com/golang/protobuf/proto/proto.go +0 -167
- data/vendor/github.com/golang/protobuf/proto/registry.go +0 -317
- data/vendor/github.com/golang/protobuf/proto/text_decode.go +0 -801
- data/vendor/github.com/golang/protobuf/proto/text_encode.go +0 -560
- data/vendor/github.com/golang/protobuf/proto/wire.go +0 -78
- data/vendor/github.com/golang/protobuf/proto/wrappers.go +0 -34
- data/vendor/github.com/gorilla/mux/AUTHORS +0 -8
- data/vendor/github.com/gorilla/mux/LICENSE +0 -27
- data/vendor/github.com/gorilla/mux/README.md +0 -805
- data/vendor/github.com/gorilla/mux/doc.go +0 -306
- data/vendor/github.com/gorilla/mux/go.mod +0 -3
- data/vendor/github.com/gorilla/mux/middleware.go +0 -74
- data/vendor/github.com/gorilla/mux/mux.go +0 -606
- data/vendor/github.com/gorilla/mux/regexp.go +0 -388
- data/vendor/github.com/gorilla/mux/route.go +0 -736
- data/vendor/github.com/gorilla/mux/test_helpers.go +0 -19
- data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +0 -363
- data/vendor/github.com/hashicorp/go-cleanhttp/README.md +0 -30
- data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +0 -58
- data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +0 -20
- data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +0 -3
- data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +0 -48
- data/vendor/github.com/mitchellh/go-homedir/LICENSE +0 -21
- data/vendor/github.com/mitchellh/go-homedir/README.md +0 -14
- data/vendor/github.com/mitchellh/go-homedir/go.mod +0 -1
- data/vendor/github.com/mitchellh/go-homedir/homedir.go +0 -167
- data/vendor/github.com/pkg/errors/.gitignore +0 -24
- data/vendor/github.com/pkg/errors/.travis.yml +0 -10
- data/vendor/github.com/pkg/errors/LICENSE +0 -23
- data/vendor/github.com/pkg/errors/Makefile +0 -44
- data/vendor/github.com/pkg/errors/README.md +0 -59
- data/vendor/github.com/pkg/errors/appveyor.yml +0 -32
- data/vendor/github.com/pkg/errors/errors.go +0 -288
- data/vendor/github.com/pkg/errors/go113.go +0 -38
- data/vendor/github.com/pkg/errors/stack.go +0 -177
- data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +0 -139
- data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +0 -258
- data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +0 -142
- data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +0 -305
- data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +0 -131
- data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +0 -368
- data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +0 -78
- data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +0 -163
- data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +0 -467
- data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +0 -73
- data/vendor/go.uber.org/atomic/.codecov.yml +0 -19
- data/vendor/go.uber.org/atomic/.gitignore +0 -12
- data/vendor/go.uber.org/atomic/.travis.yml +0 -27
- data/vendor/go.uber.org/atomic/CHANGELOG.md +0 -76
- data/vendor/go.uber.org/atomic/LICENSE.txt +0 -19
- data/vendor/go.uber.org/atomic/Makefile +0 -78
- data/vendor/go.uber.org/atomic/README.md +0 -63
- data/vendor/go.uber.org/atomic/bool.go +0 -81
- data/vendor/go.uber.org/atomic/bool_ext.go +0 -53
- data/vendor/go.uber.org/atomic/doc.go +0 -23
- data/vendor/go.uber.org/atomic/duration.go +0 -82
- data/vendor/go.uber.org/atomic/duration_ext.go +0 -40
- data/vendor/go.uber.org/atomic/error.go +0 -51
- data/vendor/go.uber.org/atomic/error_ext.go +0 -39
- data/vendor/go.uber.org/atomic/float64.go +0 -76
- data/vendor/go.uber.org/atomic/float64_ext.go +0 -47
- data/vendor/go.uber.org/atomic/gen.go +0 -26
- data/vendor/go.uber.org/atomic/go.mod +0 -8
- data/vendor/go.uber.org/atomic/go.sum +0 -9
- data/vendor/go.uber.org/atomic/int32.go +0 -102
- data/vendor/go.uber.org/atomic/int64.go +0 -102
- data/vendor/go.uber.org/atomic/nocmp.go +0 -35
- data/vendor/go.uber.org/atomic/string.go +0 -54
- data/vendor/go.uber.org/atomic/string_ext.go +0 -43
- data/vendor/go.uber.org/atomic/uint32.go +0 -102
- data/vendor/go.uber.org/atomic/uint64.go +0 -102
- data/vendor/go.uber.org/atomic/value.go +0 -31
- data/vendor/go.uber.org/multierr/.codecov.yml +0 -15
- data/vendor/go.uber.org/multierr/.gitignore +0 -4
- data/vendor/go.uber.org/multierr/.travis.yml +0 -23
- data/vendor/go.uber.org/multierr/CHANGELOG.md +0 -60
- data/vendor/go.uber.org/multierr/LICENSE.txt +0 -19
- data/vendor/go.uber.org/multierr/Makefile +0 -42
- data/vendor/go.uber.org/multierr/README.md +0 -23
- data/vendor/go.uber.org/multierr/error.go +0 -449
- data/vendor/go.uber.org/multierr/glide.yaml +0 -8
- data/vendor/go.uber.org/multierr/go.mod +0 -8
- data/vendor/go.uber.org/multierr/go.sum +0 -11
- data/vendor/go.uber.org/multierr/go113.go +0 -52
- data/vendor/go.uber.org/zap/.codecov.yml +0 -17
- data/vendor/go.uber.org/zap/.gitignore +0 -32
- data/vendor/go.uber.org/zap/.readme.tmpl +0 -109
- data/vendor/go.uber.org/zap/.travis.yml +0 -23
- data/vendor/go.uber.org/zap/CHANGELOG.md +0 -432
- data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +0 -75
- data/vendor/go.uber.org/zap/CONTRIBUTING.md +0 -81
- data/vendor/go.uber.org/zap/FAQ.md +0 -156
- data/vendor/go.uber.org/zap/LICENSE.txt +0 -19
- data/vendor/go.uber.org/zap/Makefile +0 -63
- data/vendor/go.uber.org/zap/README.md +0 -134
- data/vendor/go.uber.org/zap/array.go +0 -320
- data/vendor/go.uber.org/zap/buffer/buffer.go +0 -123
- data/vendor/go.uber.org/zap/buffer/pool.go +0 -49
- data/vendor/go.uber.org/zap/checklicense.sh +0 -17
- data/vendor/go.uber.org/zap/config.go +0 -264
- data/vendor/go.uber.org/zap/doc.go +0 -113
- data/vendor/go.uber.org/zap/encoder.go +0 -79
- data/vendor/go.uber.org/zap/error.go +0 -80
- data/vendor/go.uber.org/zap/field.go +0 -539
- data/vendor/go.uber.org/zap/flag.go +0 -39
- data/vendor/go.uber.org/zap/glide.yaml +0 -34
- data/vendor/go.uber.org/zap/global.go +0 -168
- data/vendor/go.uber.org/zap/global_go112.go +0 -26
- data/vendor/go.uber.org/zap/global_prego112.go +0 -26
- data/vendor/go.uber.org/zap/go.mod +0 -13
- data/vendor/go.uber.org/zap/go.sum +0 -56
- data/vendor/go.uber.org/zap/http_handler.go +0 -81
- data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +0 -31
- data/vendor/go.uber.org/zap/internal/color/color.go +0 -44
- data/vendor/go.uber.org/zap/internal/exit/exit.go +0 -64
- data/vendor/go.uber.org/zap/level.go +0 -132
- data/vendor/go.uber.org/zap/logger.go +0 -344
- data/vendor/go.uber.org/zap/options.go +0 -140
- data/vendor/go.uber.org/zap/sink.go +0 -161
- data/vendor/go.uber.org/zap/stacktrace.go +0 -85
- data/vendor/go.uber.org/zap/sugar.go +0 -304
- data/vendor/go.uber.org/zap/time.go +0 -27
- data/vendor/go.uber.org/zap/writer.go +0 -99
- data/vendor/go.uber.org/zap/zapcore/console_encoder.go +0 -161
- data/vendor/go.uber.org/zap/zapcore/core.go +0 -113
- data/vendor/go.uber.org/zap/zapcore/doc.go +0 -24
- data/vendor/go.uber.org/zap/zapcore/encoder.go +0 -443
- data/vendor/go.uber.org/zap/zapcore/entry.go +0 -264
- data/vendor/go.uber.org/zap/zapcore/error.go +0 -115
- data/vendor/go.uber.org/zap/zapcore/field.go +0 -227
- data/vendor/go.uber.org/zap/zapcore/hook.go +0 -68
- data/vendor/go.uber.org/zap/zapcore/increase_level.go +0 -66
- data/vendor/go.uber.org/zap/zapcore/json_encoder.go +0 -534
- data/vendor/go.uber.org/zap/zapcore/level.go +0 -175
- data/vendor/go.uber.org/zap/zapcore/level_strings.go +0 -46
- data/vendor/go.uber.org/zap/zapcore/marshaler.go +0 -61
- data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +0 -179
- data/vendor/go.uber.org/zap/zapcore/sampler.go +0 -208
- data/vendor/go.uber.org/zap/zapcore/tee.go +0 -81
- data/vendor/go.uber.org/zap/zapcore/write_syncer.go +0 -123
- data/vendor/golang.org/x/net/AUTHORS +0 -3
- data/vendor/golang.org/x/net/CONTRIBUTORS +0 -3
- data/vendor/golang.org/x/net/LICENSE +0 -27
- data/vendor/golang.org/x/net/PATENTS +0 -22
- data/vendor/golang.org/x/net/context/context.go +0 -56
- data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +0 -71
- data/vendor/golang.org/x/net/context/go17.go +0 -73
- data/vendor/golang.org/x/net/context/go19.go +0 -21
- data/vendor/golang.org/x/net/context/pre_go17.go +0 -301
- data/vendor/golang.org/x/net/context/pre_go19.go +0 -110
- data/vendor/golang.org/x/oauth2/.travis.yml +0 -13
- data/vendor/golang.org/x/oauth2/AUTHORS +0 -3
- data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +0 -26
- data/vendor/golang.org/x/oauth2/CONTRIBUTORS +0 -3
- data/vendor/golang.org/x/oauth2/LICENSE +0 -27
- data/vendor/golang.org/x/oauth2/README.md +0 -36
- data/vendor/golang.org/x/oauth2/go.mod +0 -9
- data/vendor/golang.org/x/oauth2/go.sum +0 -361
- data/vendor/golang.org/x/oauth2/internal/client_appengine.go +0 -14
- data/vendor/golang.org/x/oauth2/internal/doc.go +0 -6
- data/vendor/golang.org/x/oauth2/internal/oauth2.go +0 -37
- data/vendor/golang.org/x/oauth2/internal/token.go +0 -294
- data/vendor/golang.org/x/oauth2/internal/transport.go +0 -33
- data/vendor/golang.org/x/oauth2/oauth2.go +0 -381
- data/vendor/golang.org/x/oauth2/token.go +0 -178
- data/vendor/golang.org/x/oauth2/transport.go +0 -89
- data/vendor/google.golang.org/appengine/LICENSE +0 -202
- data/vendor/google.golang.org/appengine/internal/api.go +0 -678
- data/vendor/google.golang.org/appengine/internal/api_classic.go +0 -169
- data/vendor/google.golang.org/appengine/internal/api_common.go +0 -123
- data/vendor/google.golang.org/appengine/internal/app_id.go +0 -28
- data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +0 -308
- data/vendor/google.golang.org/appengine/internal/base/api_base.proto +0 -33
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +0 -4367
- data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +0 -551
- data/vendor/google.golang.org/appengine/internal/identity.go +0 -55
- data/vendor/google.golang.org/appengine/internal/identity_classic.go +0 -61
- data/vendor/google.golang.org/appengine/internal/identity_flex.go +0 -11
- data/vendor/google.golang.org/appengine/internal/identity_vm.go +0 -134
- data/vendor/google.golang.org/appengine/internal/internal.go +0 -110
- data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +0 -1313
- data/vendor/google.golang.org/appengine/internal/log/log_service.proto +0 -150
- data/vendor/google.golang.org/appengine/internal/main.go +0 -16
- data/vendor/google.golang.org/appengine/internal/main_common.go +0 -7
- data/vendor/google.golang.org/appengine/internal/main_vm.go +0 -69
- data/vendor/google.golang.org/appengine/internal/metadata.go +0 -60
- data/vendor/google.golang.org/appengine/internal/net.go +0 -56
- data/vendor/google.golang.org/appengine/internal/regen.sh +0 -40
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +0 -361
- data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +0 -44
- data/vendor/google.golang.org/appengine/internal/transaction.go +0 -115
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +0 -527
- data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +0 -64
- data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +0 -210
- data/vendor/google.golang.org/protobuf/AUTHORS +0 -3
- data/vendor/google.golang.org/protobuf/CONTRIBUTORS +0 -3
- data/vendor/google.golang.org/protobuf/LICENSE +0 -27
- data/vendor/google.golang.org/protobuf/PATENTS +0 -22
- data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +0 -773
- data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +0 -7
- data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +0 -371
- data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +0 -538
- data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +0 -318
- data/vendor/google.golang.org/protobuf/internal/descopts/options.go +0 -29
- data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +0 -69
- data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +0 -213
- data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +0 -241
- data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +0 -207
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +0 -665
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +0 -190
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +0 -161
- data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +0 -373
- data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +0 -29
- data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +0 -265
- data/vendor/google.golang.org/protobuf/internal/errors/errors.go +0 -89
- data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +0 -39
- data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +0 -12
- data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +0 -158
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +0 -631
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +0 -471
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +0 -704
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +0 -450
- data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +0 -356
- data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +0 -107
- data/vendor/google.golang.org/protobuf/internal/filetype/build.go +0 -297
- data/vendor/google.golang.org/protobuf/internal/flags/flags.go +0 -24
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +0 -9
- data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +0 -9
- data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +0 -34
- data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +0 -106
- data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +0 -829
- data/vendor/google.golang.org/protobuf/internal/genid/doc.go +0 -11
- data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +0 -34
- data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +0 -19
- data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +0 -31
- data/vendor/google.golang.org/protobuf/internal/genid/goname.go +0 -25
- data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +0 -16
- data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +0 -31
- data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +0 -116
- data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +0 -34
- data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +0 -184
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +0 -13
- data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +0 -175
- data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +0 -177
- data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +0 -141
- data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +0 -223
- data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +0 -830
- data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +0 -5637
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +0 -388
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +0 -37
- data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +0 -11
- data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +0 -217
- data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +0 -123
- data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +0 -209
- data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +0 -557
- data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +0 -17
- data/vendor/google.golang.org/protobuf/internal/impl/convert.go +0 -496
- data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +0 -141
- data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +0 -121
- data/vendor/google.golang.org/protobuf/internal/impl/decode.go +0 -276
- data/vendor/google.golang.org/protobuf/internal/impl/encode.go +0 -201
- data/vendor/google.golang.org/protobuf/internal/impl/enum.go +0 -21
- data/vendor/google.golang.org/protobuf/internal/impl/extension.go +0 -156
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +0 -219
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +0 -92
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +0 -176
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +0 -81
- data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +0 -558
- data/vendor/google.golang.org/protobuf/internal/impl/merge.go +0 -176
- data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +0 -209
- data/vendor/google.golang.org/protobuf/internal/impl/message.go +0 -276
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +0 -465
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +0 -543
- data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +0 -249
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +0 -178
- data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +0 -174
- data/vendor/google.golang.org/protobuf/internal/impl/validate.go +0 -576
- data/vendor/google.golang.org/protobuf/internal/impl/weak.go +0 -74
- data/vendor/google.golang.org/protobuf/internal/order/order.go +0 -89
- data/vendor/google.golang.org/protobuf/internal/order/range.go +0 -115
- data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +0 -29
- data/vendor/google.golang.org/protobuf/internal/set/ints.go +0 -58
- data/vendor/google.golang.org/protobuf/internal/strs/strings.go +0 -196
- data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +0 -27
- data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +0 -94
- data/vendor/google.golang.org/protobuf/internal/version/version.go +0 -79
- data/vendor/google.golang.org/protobuf/proto/checkinit.go +0 -71
- data/vendor/google.golang.org/protobuf/proto/decode.go +0 -278
- data/vendor/google.golang.org/protobuf/proto/decode_gen.go +0 -603
- data/vendor/google.golang.org/protobuf/proto/doc.go +0 -94
- data/vendor/google.golang.org/protobuf/proto/encode.go +0 -319
- data/vendor/google.golang.org/protobuf/proto/encode_gen.go +0 -97
- data/vendor/google.golang.org/protobuf/proto/equal.go +0 -167
- data/vendor/google.golang.org/protobuf/proto/extension.go +0 -92
- data/vendor/google.golang.org/protobuf/proto/merge.go +0 -139
- data/vendor/google.golang.org/protobuf/proto/messageset.go +0 -93
- data/vendor/google.golang.org/protobuf/proto/proto.go +0 -43
- data/vendor/google.golang.org/protobuf/proto/proto_methods.go +0 -19
- data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +0 -19
- data/vendor/google.golang.org/protobuf/proto/reset.go +0 -43
- data/vendor/google.golang.org/protobuf/proto/size.go +0 -97
- data/vendor/google.golang.org/protobuf/proto/size_gen.go +0 -55
- data/vendor/google.golang.org/protobuf/proto/wrappers.go +0 -29
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +0 -276
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +0 -248
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +0 -286
- data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +0 -374
- data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +0 -252
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +0 -77
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +0 -504
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +0 -128
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +0 -461
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +0 -665
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +0 -285
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +0 -59
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +0 -411
- data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +0 -98
- data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +0 -869
- data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +0 -15
- data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +0 -167
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +0 -44
- data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +0 -56
- data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +0 -4039
- data/vendor/modules.txt +0 -79
|
@@ -1,286 +0,0 @@
|
|
|
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 protodesc
|
|
6
|
-
|
|
7
|
-
import (
|
|
8
|
-
"google.golang.org/protobuf/internal/encoding/defval"
|
|
9
|
-
"google.golang.org/protobuf/internal/errors"
|
|
10
|
-
"google.golang.org/protobuf/internal/filedesc"
|
|
11
|
-
"google.golang.org/protobuf/reflect/protoreflect"
|
|
12
|
-
"google.golang.org/protobuf/reflect/protoregistry"
|
|
13
|
-
|
|
14
|
-
"google.golang.org/protobuf/types/descriptorpb"
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
// resolver is a wrapper around a local registry of declarations within the file
|
|
18
|
-
// and the remote resolver. The remote resolver is restricted to only return
|
|
19
|
-
// descriptors that have been imported.
|
|
20
|
-
type resolver struct {
|
|
21
|
-
local descsByName
|
|
22
|
-
remote Resolver
|
|
23
|
-
imports importSet
|
|
24
|
-
|
|
25
|
-
allowUnresolvable bool
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
func (r *resolver) resolveMessageDependencies(ms []filedesc.Message, mds []*descriptorpb.DescriptorProto) (err error) {
|
|
29
|
-
for i, md := range mds {
|
|
30
|
-
m := &ms[i]
|
|
31
|
-
for j, fd := range md.GetField() {
|
|
32
|
-
f := &m.L2.Fields.List[j]
|
|
33
|
-
if f.L1.Cardinality == protoreflect.Required {
|
|
34
|
-
m.L2.RequiredNumbers.List = append(m.L2.RequiredNumbers.List, f.L1.Number)
|
|
35
|
-
}
|
|
36
|
-
if fd.OneofIndex != nil {
|
|
37
|
-
k := int(fd.GetOneofIndex())
|
|
38
|
-
if !(0 <= k && k < len(md.GetOneofDecl())) {
|
|
39
|
-
return errors.New("message field %q has an invalid oneof index: %d", f.FullName(), k)
|
|
40
|
-
}
|
|
41
|
-
o := &m.L2.Oneofs.List[k]
|
|
42
|
-
f.L1.ContainingOneof = o
|
|
43
|
-
o.L1.Fields.List = append(o.L1.Fields.List, f)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if f.L1.Kind, f.L1.Enum, f.L1.Message, err = r.findTarget(f.Kind(), f.Parent().FullName(), partialName(fd.GetTypeName()), f.IsWeak()); err != nil {
|
|
47
|
-
return errors.New("message field %q cannot resolve type: %v", f.FullName(), err)
|
|
48
|
-
}
|
|
49
|
-
if fd.DefaultValue != nil {
|
|
50
|
-
v, ev, err := unmarshalDefault(fd.GetDefaultValue(), f, r.allowUnresolvable)
|
|
51
|
-
if err != nil {
|
|
52
|
-
return errors.New("message field %q has invalid default: %v", f.FullName(), err)
|
|
53
|
-
}
|
|
54
|
-
f.L1.Default = filedesc.DefaultValue(v, ev)
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if err := r.resolveMessageDependencies(m.L1.Messages.List, md.GetNestedType()); err != nil {
|
|
59
|
-
return err
|
|
60
|
-
}
|
|
61
|
-
if err := r.resolveExtensionDependencies(m.L1.Extensions.List, md.GetExtension()); err != nil {
|
|
62
|
-
return err
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return nil
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
func (r *resolver) resolveExtensionDependencies(xs []filedesc.Extension, xds []*descriptorpb.FieldDescriptorProto) (err error) {
|
|
69
|
-
for i, xd := range xds {
|
|
70
|
-
x := &xs[i]
|
|
71
|
-
if x.L1.Extendee, err = r.findMessageDescriptor(x.Parent().FullName(), partialName(xd.GetExtendee()), false); err != nil {
|
|
72
|
-
return errors.New("extension field %q cannot resolve extendee: %v", x.FullName(), err)
|
|
73
|
-
}
|
|
74
|
-
if x.L1.Kind, x.L2.Enum, x.L2.Message, err = r.findTarget(x.Kind(), x.Parent().FullName(), partialName(xd.GetTypeName()), false); err != nil {
|
|
75
|
-
return errors.New("extension field %q cannot resolve type: %v", x.FullName(), err)
|
|
76
|
-
}
|
|
77
|
-
if xd.DefaultValue != nil {
|
|
78
|
-
v, ev, err := unmarshalDefault(xd.GetDefaultValue(), x, r.allowUnresolvable)
|
|
79
|
-
if err != nil {
|
|
80
|
-
return errors.New("extension field %q has invalid default: %v", x.FullName(), err)
|
|
81
|
-
}
|
|
82
|
-
x.L2.Default = filedesc.DefaultValue(v, ev)
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return nil
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
func (r *resolver) resolveServiceDependencies(ss []filedesc.Service, sds []*descriptorpb.ServiceDescriptorProto) (err error) {
|
|
89
|
-
for i, sd := range sds {
|
|
90
|
-
s := &ss[i]
|
|
91
|
-
for j, md := range sd.GetMethod() {
|
|
92
|
-
m := &s.L2.Methods.List[j]
|
|
93
|
-
m.L1.Input, err = r.findMessageDescriptor(m.Parent().FullName(), partialName(md.GetInputType()), false)
|
|
94
|
-
if err != nil {
|
|
95
|
-
return errors.New("service method %q cannot resolve input: %v", m.FullName(), err)
|
|
96
|
-
}
|
|
97
|
-
m.L1.Output, err = r.findMessageDescriptor(s.FullName(), partialName(md.GetOutputType()), false)
|
|
98
|
-
if err != nil {
|
|
99
|
-
return errors.New("service method %q cannot resolve output: %v", m.FullName(), err)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return nil
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// findTarget finds an enum or message descriptor if k is an enum, message,
|
|
107
|
-
// group, or unknown. If unknown, and the name could be resolved, the kind
|
|
108
|
-
// returned kind is set based on the type of the resolved descriptor.
|
|
109
|
-
func (r *resolver) findTarget(k protoreflect.Kind, scope protoreflect.FullName, ref partialName, isWeak bool) (protoreflect.Kind, protoreflect.EnumDescriptor, protoreflect.MessageDescriptor, error) {
|
|
110
|
-
switch k {
|
|
111
|
-
case protoreflect.EnumKind:
|
|
112
|
-
ed, err := r.findEnumDescriptor(scope, ref, isWeak)
|
|
113
|
-
if err != nil {
|
|
114
|
-
return 0, nil, nil, err
|
|
115
|
-
}
|
|
116
|
-
return k, ed, nil, nil
|
|
117
|
-
case protoreflect.MessageKind, protoreflect.GroupKind:
|
|
118
|
-
md, err := r.findMessageDescriptor(scope, ref, isWeak)
|
|
119
|
-
if err != nil {
|
|
120
|
-
return 0, nil, nil, err
|
|
121
|
-
}
|
|
122
|
-
return k, nil, md, nil
|
|
123
|
-
case 0:
|
|
124
|
-
// Handle unspecified kinds (possible with parsers that operate
|
|
125
|
-
// on a per-file basis without knowledge of dependencies).
|
|
126
|
-
d, err := r.findDescriptor(scope, ref)
|
|
127
|
-
if err == protoregistry.NotFound && (r.allowUnresolvable || isWeak) {
|
|
128
|
-
return k, filedesc.PlaceholderEnum(ref.FullName()), filedesc.PlaceholderMessage(ref.FullName()), nil
|
|
129
|
-
} else if err == protoregistry.NotFound {
|
|
130
|
-
return 0, nil, nil, errors.New("%q not found", ref.FullName())
|
|
131
|
-
} else if err != nil {
|
|
132
|
-
return 0, nil, nil, err
|
|
133
|
-
}
|
|
134
|
-
switch d := d.(type) {
|
|
135
|
-
case protoreflect.EnumDescriptor:
|
|
136
|
-
return protoreflect.EnumKind, d, nil, nil
|
|
137
|
-
case protoreflect.MessageDescriptor:
|
|
138
|
-
return protoreflect.MessageKind, nil, d, nil
|
|
139
|
-
default:
|
|
140
|
-
return 0, nil, nil, errors.New("unknown kind")
|
|
141
|
-
}
|
|
142
|
-
default:
|
|
143
|
-
if ref != "" {
|
|
144
|
-
return 0, nil, nil, errors.New("target name cannot be specified for %v", k)
|
|
145
|
-
}
|
|
146
|
-
if !k.IsValid() {
|
|
147
|
-
return 0, nil, nil, errors.New("invalid kind: %d", k)
|
|
148
|
-
}
|
|
149
|
-
return k, nil, nil, nil
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// findDescriptor finds the descriptor by name,
|
|
154
|
-
// which may be a relative name within some scope.
|
|
155
|
-
//
|
|
156
|
-
// Suppose the scope was "fizz.buzz" and the reference was "Foo.Bar",
|
|
157
|
-
// then the following full names are searched:
|
|
158
|
-
// * fizz.buzz.Foo.Bar
|
|
159
|
-
// * fizz.Foo.Bar
|
|
160
|
-
// * Foo.Bar
|
|
161
|
-
func (r *resolver) findDescriptor(scope protoreflect.FullName, ref partialName) (protoreflect.Descriptor, error) {
|
|
162
|
-
if !ref.IsValid() {
|
|
163
|
-
return nil, errors.New("invalid name reference: %q", ref)
|
|
164
|
-
}
|
|
165
|
-
if ref.IsFull() {
|
|
166
|
-
scope, ref = "", ref[1:]
|
|
167
|
-
}
|
|
168
|
-
var foundButNotImported protoreflect.Descriptor
|
|
169
|
-
for {
|
|
170
|
-
// Derive the full name to search.
|
|
171
|
-
s := protoreflect.FullName(ref)
|
|
172
|
-
if scope != "" {
|
|
173
|
-
s = scope + "." + s
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Check the current file for the descriptor.
|
|
177
|
-
if d, ok := r.local[s]; ok {
|
|
178
|
-
return d, nil
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Check the remote registry for the descriptor.
|
|
182
|
-
d, err := r.remote.FindDescriptorByName(s)
|
|
183
|
-
if err == nil {
|
|
184
|
-
// Only allow descriptors covered by one of the imports.
|
|
185
|
-
if r.imports[d.ParentFile().Path()] {
|
|
186
|
-
return d, nil
|
|
187
|
-
}
|
|
188
|
-
foundButNotImported = d
|
|
189
|
-
} else if err != protoregistry.NotFound {
|
|
190
|
-
return nil, errors.Wrap(err, "%q", s)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// Continue on at a higher level of scoping.
|
|
194
|
-
if scope == "" {
|
|
195
|
-
if d := foundButNotImported; d != nil {
|
|
196
|
-
return nil, errors.New("resolved %q, but %q is not imported", d.FullName(), d.ParentFile().Path())
|
|
197
|
-
}
|
|
198
|
-
return nil, protoregistry.NotFound
|
|
199
|
-
}
|
|
200
|
-
scope = scope.Parent()
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
func (r *resolver) findEnumDescriptor(scope protoreflect.FullName, ref partialName, isWeak bool) (protoreflect.EnumDescriptor, error) {
|
|
205
|
-
d, err := r.findDescriptor(scope, ref)
|
|
206
|
-
if err == protoregistry.NotFound && (r.allowUnresolvable || isWeak) {
|
|
207
|
-
return filedesc.PlaceholderEnum(ref.FullName()), nil
|
|
208
|
-
} else if err == protoregistry.NotFound {
|
|
209
|
-
return nil, errors.New("%q not found", ref.FullName())
|
|
210
|
-
} else if err != nil {
|
|
211
|
-
return nil, err
|
|
212
|
-
}
|
|
213
|
-
ed, ok := d.(protoreflect.EnumDescriptor)
|
|
214
|
-
if !ok {
|
|
215
|
-
return nil, errors.New("resolved %q, but it is not an enum", d.FullName())
|
|
216
|
-
}
|
|
217
|
-
return ed, nil
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
func (r *resolver) findMessageDescriptor(scope protoreflect.FullName, ref partialName, isWeak bool) (protoreflect.MessageDescriptor, error) {
|
|
221
|
-
d, err := r.findDescriptor(scope, ref)
|
|
222
|
-
if err == protoregistry.NotFound && (r.allowUnresolvable || isWeak) {
|
|
223
|
-
return filedesc.PlaceholderMessage(ref.FullName()), nil
|
|
224
|
-
} else if err == protoregistry.NotFound {
|
|
225
|
-
return nil, errors.New("%q not found", ref.FullName())
|
|
226
|
-
} else if err != nil {
|
|
227
|
-
return nil, err
|
|
228
|
-
}
|
|
229
|
-
md, ok := d.(protoreflect.MessageDescriptor)
|
|
230
|
-
if !ok {
|
|
231
|
-
return nil, errors.New("resolved %q, but it is not an message", d.FullName())
|
|
232
|
-
}
|
|
233
|
-
return md, nil
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// partialName is the partial name. A leading dot means that the name is full,
|
|
237
|
-
// otherwise the name is relative to some current scope.
|
|
238
|
-
// See google.protobuf.FieldDescriptorProto.type_name.
|
|
239
|
-
type partialName string
|
|
240
|
-
|
|
241
|
-
func (s partialName) IsFull() bool {
|
|
242
|
-
return len(s) > 0 && s[0] == '.'
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
func (s partialName) IsValid() bool {
|
|
246
|
-
if s.IsFull() {
|
|
247
|
-
return protoreflect.FullName(s[1:]).IsValid()
|
|
248
|
-
}
|
|
249
|
-
return protoreflect.FullName(s).IsValid()
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
const unknownPrefix = "*."
|
|
253
|
-
|
|
254
|
-
// FullName converts the partial name to a full name on a best-effort basis.
|
|
255
|
-
// If relative, it creates an invalid full name, using a "*." prefix
|
|
256
|
-
// to indicate that the start of the full name is unknown.
|
|
257
|
-
func (s partialName) FullName() protoreflect.FullName {
|
|
258
|
-
if s.IsFull() {
|
|
259
|
-
return protoreflect.FullName(s[1:])
|
|
260
|
-
}
|
|
261
|
-
return protoreflect.FullName(unknownPrefix + s)
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
func unmarshalDefault(s string, fd protoreflect.FieldDescriptor, allowUnresolvable bool) (protoreflect.Value, protoreflect.EnumValueDescriptor, error) {
|
|
265
|
-
var evs protoreflect.EnumValueDescriptors
|
|
266
|
-
if fd.Enum() != nil {
|
|
267
|
-
evs = fd.Enum().Values()
|
|
268
|
-
}
|
|
269
|
-
v, ev, err := defval.Unmarshal(s, fd.Kind(), evs, defval.Descriptor)
|
|
270
|
-
if err != nil && allowUnresolvable && evs != nil && protoreflect.Name(s).IsValid() {
|
|
271
|
-
v = protoreflect.ValueOfEnum(0)
|
|
272
|
-
if evs.Len() > 0 {
|
|
273
|
-
v = protoreflect.ValueOfEnum(evs.Get(0).Number())
|
|
274
|
-
}
|
|
275
|
-
ev = filedesc.PlaceholderEnumValue(fd.Enum().FullName().Parent().Append(protoreflect.Name(s)))
|
|
276
|
-
} else if err != nil {
|
|
277
|
-
return v, ev, err
|
|
278
|
-
}
|
|
279
|
-
if fd.Syntax() == protoreflect.Proto3 {
|
|
280
|
-
return v, ev, errors.New("cannot be specified under proto3 semantics")
|
|
281
|
-
}
|
|
282
|
-
if fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind || fd.Cardinality() == protoreflect.Repeated {
|
|
283
|
-
return v, ev, errors.New("cannot be specified on composite types")
|
|
284
|
-
}
|
|
285
|
-
return v, ev, nil
|
|
286
|
-
}
|
|
@@ -1,374 +0,0 @@
|
|
|
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 protodesc
|
|
6
|
-
|
|
7
|
-
import (
|
|
8
|
-
"strings"
|
|
9
|
-
"unicode"
|
|
10
|
-
|
|
11
|
-
"google.golang.org/protobuf/encoding/protowire"
|
|
12
|
-
"google.golang.org/protobuf/internal/errors"
|
|
13
|
-
"google.golang.org/protobuf/internal/filedesc"
|
|
14
|
-
"google.golang.org/protobuf/internal/flags"
|
|
15
|
-
"google.golang.org/protobuf/internal/genid"
|
|
16
|
-
"google.golang.org/protobuf/internal/strs"
|
|
17
|
-
"google.golang.org/protobuf/reflect/protoreflect"
|
|
18
|
-
|
|
19
|
-
"google.golang.org/protobuf/types/descriptorpb"
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
func validateEnumDeclarations(es []filedesc.Enum, eds []*descriptorpb.EnumDescriptorProto) error {
|
|
23
|
-
for i, ed := range eds {
|
|
24
|
-
e := &es[i]
|
|
25
|
-
if err := e.L2.ReservedNames.CheckValid(); err != nil {
|
|
26
|
-
return errors.New("enum %q reserved names has %v", e.FullName(), err)
|
|
27
|
-
}
|
|
28
|
-
if err := e.L2.ReservedRanges.CheckValid(); err != nil {
|
|
29
|
-
return errors.New("enum %q reserved ranges has %v", e.FullName(), err)
|
|
30
|
-
}
|
|
31
|
-
if len(ed.GetValue()) == 0 {
|
|
32
|
-
return errors.New("enum %q must contain at least one value declaration", e.FullName())
|
|
33
|
-
}
|
|
34
|
-
allowAlias := ed.GetOptions().GetAllowAlias()
|
|
35
|
-
foundAlias := false
|
|
36
|
-
for i := 0; i < e.Values().Len(); i++ {
|
|
37
|
-
v1 := e.Values().Get(i)
|
|
38
|
-
if v2 := e.Values().ByNumber(v1.Number()); v1 != v2 {
|
|
39
|
-
foundAlias = true
|
|
40
|
-
if !allowAlias {
|
|
41
|
-
return errors.New("enum %q has conflicting non-aliased values on number %d: %q with %q", e.FullName(), v1.Number(), v1.Name(), v2.Name())
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if allowAlias && !foundAlias {
|
|
46
|
-
return errors.New("enum %q allows aliases, but none were found", e.FullName())
|
|
47
|
-
}
|
|
48
|
-
if e.Syntax() == protoreflect.Proto3 {
|
|
49
|
-
if v := e.Values().Get(0); v.Number() != 0 {
|
|
50
|
-
return errors.New("enum %q using proto3 semantics must have zero number for the first value", v.FullName())
|
|
51
|
-
}
|
|
52
|
-
// Verify that value names in proto3 do not conflict if the
|
|
53
|
-
// case-insensitive prefix is removed.
|
|
54
|
-
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:4991-5055
|
|
55
|
-
names := map[string]protoreflect.EnumValueDescriptor{}
|
|
56
|
-
prefix := strings.Replace(strings.ToLower(string(e.Name())), "_", "", -1)
|
|
57
|
-
for i := 0; i < e.Values().Len(); i++ {
|
|
58
|
-
v1 := e.Values().Get(i)
|
|
59
|
-
s := strs.EnumValueName(strs.TrimEnumPrefix(string(v1.Name()), prefix))
|
|
60
|
-
if v2, ok := names[s]; ok && v1.Number() != v2.Number() {
|
|
61
|
-
return errors.New("enum %q using proto3 semantics has conflict: %q with %q", e.FullName(), v1.Name(), v2.Name())
|
|
62
|
-
}
|
|
63
|
-
names[s] = v1
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
for j, vd := range ed.GetValue() {
|
|
68
|
-
v := &e.L2.Values.List[j]
|
|
69
|
-
if vd.Number == nil {
|
|
70
|
-
return errors.New("enum value %q must have a specified number", v.FullName())
|
|
71
|
-
}
|
|
72
|
-
if e.L2.ReservedNames.Has(v.Name()) {
|
|
73
|
-
return errors.New("enum value %q must not use reserved name", v.FullName())
|
|
74
|
-
}
|
|
75
|
-
if e.L2.ReservedRanges.Has(v.Number()) {
|
|
76
|
-
return errors.New("enum value %q must not use reserved number %d", v.FullName(), v.Number())
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return nil
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
func validateMessageDeclarations(ms []filedesc.Message, mds []*descriptorpb.DescriptorProto) error {
|
|
84
|
-
for i, md := range mds {
|
|
85
|
-
m := &ms[i]
|
|
86
|
-
|
|
87
|
-
// Handle the message descriptor itself.
|
|
88
|
-
isMessageSet := md.GetOptions().GetMessageSetWireFormat()
|
|
89
|
-
if err := m.L2.ReservedNames.CheckValid(); err != nil {
|
|
90
|
-
return errors.New("message %q reserved names has %v", m.FullName(), err)
|
|
91
|
-
}
|
|
92
|
-
if err := m.L2.ReservedRanges.CheckValid(isMessageSet); err != nil {
|
|
93
|
-
return errors.New("message %q reserved ranges has %v", m.FullName(), err)
|
|
94
|
-
}
|
|
95
|
-
if err := m.L2.ExtensionRanges.CheckValid(isMessageSet); err != nil {
|
|
96
|
-
return errors.New("message %q extension ranges has %v", m.FullName(), err)
|
|
97
|
-
}
|
|
98
|
-
if err := (*filedesc.FieldRanges).CheckOverlap(&m.L2.ReservedRanges, &m.L2.ExtensionRanges); err != nil {
|
|
99
|
-
return errors.New("message %q reserved and extension ranges has %v", m.FullName(), err)
|
|
100
|
-
}
|
|
101
|
-
for i := 0; i < m.Fields().Len(); i++ {
|
|
102
|
-
f1 := m.Fields().Get(i)
|
|
103
|
-
if f2 := m.Fields().ByNumber(f1.Number()); f1 != f2 {
|
|
104
|
-
return errors.New("message %q has conflicting fields: %q with %q", m.FullName(), f1.Name(), f2.Name())
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if isMessageSet && !flags.ProtoLegacy {
|
|
108
|
-
return errors.New("message %q is a MessageSet, which is a legacy proto1 feature that is no longer supported", m.FullName())
|
|
109
|
-
}
|
|
110
|
-
if isMessageSet && (m.Syntax() != protoreflect.Proto2 || m.Fields().Len() > 0 || m.ExtensionRanges().Len() == 0) {
|
|
111
|
-
return errors.New("message %q is an invalid proto1 MessageSet", m.FullName())
|
|
112
|
-
}
|
|
113
|
-
if m.Syntax() == protoreflect.Proto3 {
|
|
114
|
-
if m.ExtensionRanges().Len() > 0 {
|
|
115
|
-
return errors.New("message %q using proto3 semantics cannot have extension ranges", m.FullName())
|
|
116
|
-
}
|
|
117
|
-
// Verify that field names in proto3 do not conflict if lowercased
|
|
118
|
-
// with all underscores removed.
|
|
119
|
-
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:5830-5847
|
|
120
|
-
names := map[string]protoreflect.FieldDescriptor{}
|
|
121
|
-
for i := 0; i < m.Fields().Len(); i++ {
|
|
122
|
-
f1 := m.Fields().Get(i)
|
|
123
|
-
s := strings.Replace(strings.ToLower(string(f1.Name())), "_", "", -1)
|
|
124
|
-
if f2, ok := names[s]; ok {
|
|
125
|
-
return errors.New("message %q using proto3 semantics has conflict: %q with %q", m.FullName(), f1.Name(), f2.Name())
|
|
126
|
-
}
|
|
127
|
-
names[s] = f1
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
for j, fd := range md.GetField() {
|
|
132
|
-
f := &m.L2.Fields.List[j]
|
|
133
|
-
if m.L2.ReservedNames.Has(f.Name()) {
|
|
134
|
-
return errors.New("message field %q must not use reserved name", f.FullName())
|
|
135
|
-
}
|
|
136
|
-
if !f.Number().IsValid() {
|
|
137
|
-
return errors.New("message field %q has an invalid number: %d", f.FullName(), f.Number())
|
|
138
|
-
}
|
|
139
|
-
if !f.Cardinality().IsValid() {
|
|
140
|
-
return errors.New("message field %q has an invalid cardinality: %d", f.FullName(), f.Cardinality())
|
|
141
|
-
}
|
|
142
|
-
if m.L2.ReservedRanges.Has(f.Number()) {
|
|
143
|
-
return errors.New("message field %q must not use reserved number %d", f.FullName(), f.Number())
|
|
144
|
-
}
|
|
145
|
-
if m.L2.ExtensionRanges.Has(f.Number()) {
|
|
146
|
-
return errors.New("message field %q with number %d in extension range", f.FullName(), f.Number())
|
|
147
|
-
}
|
|
148
|
-
if fd.Extendee != nil {
|
|
149
|
-
return errors.New("message field %q may not have extendee: %q", f.FullName(), fd.GetExtendee())
|
|
150
|
-
}
|
|
151
|
-
if f.L1.IsProto3Optional {
|
|
152
|
-
if f.Syntax() != protoreflect.Proto3 {
|
|
153
|
-
return errors.New("message field %q under proto3 optional semantics must be specified in the proto3 syntax", f.FullName())
|
|
154
|
-
}
|
|
155
|
-
if f.Cardinality() != protoreflect.Optional {
|
|
156
|
-
return errors.New("message field %q under proto3 optional semantics must have optional cardinality", f.FullName())
|
|
157
|
-
}
|
|
158
|
-
if f.ContainingOneof() != nil && f.ContainingOneof().Fields().Len() != 1 {
|
|
159
|
-
return errors.New("message field %q under proto3 optional semantics must be within a single element oneof", f.FullName())
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if f.IsWeak() && !flags.ProtoLegacy {
|
|
163
|
-
return errors.New("message field %q is a weak field, which is a legacy proto1 feature that is no longer supported", f.FullName())
|
|
164
|
-
}
|
|
165
|
-
if f.IsWeak() && (f.Syntax() != protoreflect.Proto2 || !isOptionalMessage(f) || f.ContainingOneof() != nil) {
|
|
166
|
-
return errors.New("message field %q may only be weak for an optional message", f.FullName())
|
|
167
|
-
}
|
|
168
|
-
if f.IsPacked() && !isPackable(f) {
|
|
169
|
-
return errors.New("message field %q is not packable", f.FullName())
|
|
170
|
-
}
|
|
171
|
-
if err := checkValidGroup(f); err != nil {
|
|
172
|
-
return errors.New("message field %q is an invalid group: %v", f.FullName(), err)
|
|
173
|
-
}
|
|
174
|
-
if err := checkValidMap(f); err != nil {
|
|
175
|
-
return errors.New("message field %q is an invalid map: %v", f.FullName(), err)
|
|
176
|
-
}
|
|
177
|
-
if f.Syntax() == protoreflect.Proto3 {
|
|
178
|
-
if f.Cardinality() == protoreflect.Required {
|
|
179
|
-
return errors.New("message field %q using proto3 semantics cannot be required", f.FullName())
|
|
180
|
-
}
|
|
181
|
-
if f.Enum() != nil && !f.Enum().IsPlaceholder() && f.Enum().Syntax() != protoreflect.Proto3 {
|
|
182
|
-
return errors.New("message field %q using proto3 semantics may only depend on a proto3 enum", f.FullName())
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
seenSynthetic := false // synthetic oneofs for proto3 optional must come after real oneofs
|
|
187
|
-
for j := range md.GetOneofDecl() {
|
|
188
|
-
o := &m.L2.Oneofs.List[j]
|
|
189
|
-
if o.Fields().Len() == 0 {
|
|
190
|
-
return errors.New("message oneof %q must contain at least one field declaration", o.FullName())
|
|
191
|
-
}
|
|
192
|
-
if n := o.Fields().Len(); n-1 != (o.Fields().Get(n-1).Index() - o.Fields().Get(0).Index()) {
|
|
193
|
-
return errors.New("message oneof %q must have consecutively declared fields", o.FullName())
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if o.IsSynthetic() {
|
|
197
|
-
seenSynthetic = true
|
|
198
|
-
continue
|
|
199
|
-
}
|
|
200
|
-
if !o.IsSynthetic() && seenSynthetic {
|
|
201
|
-
return errors.New("message oneof %q must be declared before synthetic oneofs", o.FullName())
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
for i := 0; i < o.Fields().Len(); i++ {
|
|
205
|
-
f := o.Fields().Get(i)
|
|
206
|
-
if f.Cardinality() != protoreflect.Optional {
|
|
207
|
-
return errors.New("message field %q belongs in a oneof and must be optional", f.FullName())
|
|
208
|
-
}
|
|
209
|
-
if f.IsWeak() {
|
|
210
|
-
return errors.New("message field %q belongs in a oneof and must not be a weak reference", f.FullName())
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if err := validateEnumDeclarations(m.L1.Enums.List, md.GetEnumType()); err != nil {
|
|
216
|
-
return err
|
|
217
|
-
}
|
|
218
|
-
if err := validateMessageDeclarations(m.L1.Messages.List, md.GetNestedType()); err != nil {
|
|
219
|
-
return err
|
|
220
|
-
}
|
|
221
|
-
if err := validateExtensionDeclarations(m.L1.Extensions.List, md.GetExtension()); err != nil {
|
|
222
|
-
return err
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return nil
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
func validateExtensionDeclarations(xs []filedesc.Extension, xds []*descriptorpb.FieldDescriptorProto) error {
|
|
229
|
-
for i, xd := range xds {
|
|
230
|
-
x := &xs[i]
|
|
231
|
-
// NOTE: Avoid using the IsValid method since extensions to MessageSet
|
|
232
|
-
// may have a field number higher than normal. This check only verifies
|
|
233
|
-
// that the number is not negative or reserved. We check again later
|
|
234
|
-
// if we know that the extendee is definitely not a MessageSet.
|
|
235
|
-
if n := x.Number(); n < 0 || (protowire.FirstReservedNumber <= n && n <= protowire.LastReservedNumber) {
|
|
236
|
-
return errors.New("extension field %q has an invalid number: %d", x.FullName(), x.Number())
|
|
237
|
-
}
|
|
238
|
-
if !x.Cardinality().IsValid() || x.Cardinality() == protoreflect.Required {
|
|
239
|
-
return errors.New("extension field %q has an invalid cardinality: %d", x.FullName(), x.Cardinality())
|
|
240
|
-
}
|
|
241
|
-
if xd.JsonName != nil {
|
|
242
|
-
// A bug in older versions of protoc would always populate the
|
|
243
|
-
// "json_name" option for extensions when it is meaningless.
|
|
244
|
-
// When it did so, it would always use the camel-cased field name.
|
|
245
|
-
if xd.GetJsonName() != strs.JSONCamelCase(string(x.Name())) {
|
|
246
|
-
return errors.New("extension field %q may not have an explicitly set JSON name: %q", x.FullName(), xd.GetJsonName())
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if xd.OneofIndex != nil {
|
|
250
|
-
return errors.New("extension field %q may not be part of a oneof", x.FullName())
|
|
251
|
-
}
|
|
252
|
-
if md := x.ContainingMessage(); !md.IsPlaceholder() {
|
|
253
|
-
if !md.ExtensionRanges().Has(x.Number()) {
|
|
254
|
-
return errors.New("extension field %q extends %q with non-extension field number: %d", x.FullName(), md.FullName(), x.Number())
|
|
255
|
-
}
|
|
256
|
-
isMessageSet := md.Options().(*descriptorpb.MessageOptions).GetMessageSetWireFormat()
|
|
257
|
-
if isMessageSet && !isOptionalMessage(x) {
|
|
258
|
-
return errors.New("extension field %q extends MessageSet and must be an optional message", x.FullName())
|
|
259
|
-
}
|
|
260
|
-
if !isMessageSet && !x.Number().IsValid() {
|
|
261
|
-
return errors.New("extension field %q has an invalid number: %d", x.FullName(), x.Number())
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
if xd.GetOptions().GetWeak() {
|
|
265
|
-
return errors.New("extension field %q cannot be a weak reference", x.FullName())
|
|
266
|
-
}
|
|
267
|
-
if x.IsPacked() && !isPackable(x) {
|
|
268
|
-
return errors.New("extension field %q is not packable", x.FullName())
|
|
269
|
-
}
|
|
270
|
-
if err := checkValidGroup(x); err != nil {
|
|
271
|
-
return errors.New("extension field %q is an invalid group: %v", x.FullName(), err)
|
|
272
|
-
}
|
|
273
|
-
if md := x.Message(); md != nil && md.IsMapEntry() {
|
|
274
|
-
return errors.New("extension field %q cannot be a map entry", x.FullName())
|
|
275
|
-
}
|
|
276
|
-
if x.Syntax() == protoreflect.Proto3 {
|
|
277
|
-
switch x.ContainingMessage().FullName() {
|
|
278
|
-
case (*descriptorpb.FileOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
279
|
-
case (*descriptorpb.EnumOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
280
|
-
case (*descriptorpb.EnumValueOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
281
|
-
case (*descriptorpb.MessageOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
282
|
-
case (*descriptorpb.FieldOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
283
|
-
case (*descriptorpb.OneofOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
284
|
-
case (*descriptorpb.ExtensionRangeOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
285
|
-
case (*descriptorpb.ServiceOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
286
|
-
case (*descriptorpb.MethodOptions)(nil).ProtoReflect().Descriptor().FullName():
|
|
287
|
-
default:
|
|
288
|
-
return errors.New("extension field %q cannot be declared in proto3 unless extended descriptor options", x.FullName())
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
return nil
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// isOptionalMessage reports whether this is an optional message.
|
|
296
|
-
// If the kind is unknown, it is assumed to be a message.
|
|
297
|
-
func isOptionalMessage(fd protoreflect.FieldDescriptor) bool {
|
|
298
|
-
return (fd.Kind() == 0 || fd.Kind() == protoreflect.MessageKind) && fd.Cardinality() == protoreflect.Optional
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// isPackable checks whether the pack option can be specified.
|
|
302
|
-
func isPackable(fd protoreflect.FieldDescriptor) bool {
|
|
303
|
-
switch fd.Kind() {
|
|
304
|
-
case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind:
|
|
305
|
-
return false
|
|
306
|
-
}
|
|
307
|
-
return fd.IsList()
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// checkValidGroup reports whether fd is a valid group according to the same
|
|
311
|
-
// rules that protoc imposes.
|
|
312
|
-
func checkValidGroup(fd protoreflect.FieldDescriptor) error {
|
|
313
|
-
md := fd.Message()
|
|
314
|
-
switch {
|
|
315
|
-
case fd.Kind() != protoreflect.GroupKind:
|
|
316
|
-
return nil
|
|
317
|
-
case fd.Syntax() != protoreflect.Proto2:
|
|
318
|
-
return errors.New("invalid under proto2 semantics")
|
|
319
|
-
case md == nil || md.IsPlaceholder():
|
|
320
|
-
return errors.New("message must be resolvable")
|
|
321
|
-
case fd.FullName().Parent() != md.FullName().Parent():
|
|
322
|
-
return errors.New("message and field must be declared in the same scope")
|
|
323
|
-
case !unicode.IsUpper(rune(md.Name()[0])):
|
|
324
|
-
return errors.New("message name must start with an uppercase")
|
|
325
|
-
case fd.Name() != protoreflect.Name(strings.ToLower(string(md.Name()))):
|
|
326
|
-
return errors.New("field name must be lowercased form of the message name")
|
|
327
|
-
}
|
|
328
|
-
return nil
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// checkValidMap checks whether the field is a valid map according to the same
|
|
332
|
-
// rules that protoc imposes.
|
|
333
|
-
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:6045-6115
|
|
334
|
-
func checkValidMap(fd protoreflect.FieldDescriptor) error {
|
|
335
|
-
md := fd.Message()
|
|
336
|
-
switch {
|
|
337
|
-
case md == nil || !md.IsMapEntry():
|
|
338
|
-
return nil
|
|
339
|
-
case fd.FullName().Parent() != md.FullName().Parent():
|
|
340
|
-
return errors.New("message and field must be declared in the same scope")
|
|
341
|
-
case md.Name() != protoreflect.Name(strs.MapEntryName(string(fd.Name()))):
|
|
342
|
-
return errors.New("incorrect implicit map entry name")
|
|
343
|
-
case fd.Cardinality() != protoreflect.Repeated:
|
|
344
|
-
return errors.New("field must be repeated")
|
|
345
|
-
case md.Fields().Len() != 2:
|
|
346
|
-
return errors.New("message must have exactly two fields")
|
|
347
|
-
case md.ExtensionRanges().Len() > 0:
|
|
348
|
-
return errors.New("message must not have any extension ranges")
|
|
349
|
-
case md.Enums().Len()+md.Messages().Len()+md.Extensions().Len() > 0:
|
|
350
|
-
return errors.New("message must not have any nested declarations")
|
|
351
|
-
}
|
|
352
|
-
kf := md.Fields().Get(0)
|
|
353
|
-
vf := md.Fields().Get(1)
|
|
354
|
-
switch {
|
|
355
|
-
case kf.Name() != genid.MapEntry_Key_field_name || kf.Number() != genid.MapEntry_Key_field_number || kf.Cardinality() != protoreflect.Optional || kf.ContainingOneof() != nil || kf.HasDefault():
|
|
356
|
-
return errors.New("invalid key field")
|
|
357
|
-
case vf.Name() != genid.MapEntry_Value_field_name || vf.Number() != genid.MapEntry_Value_field_number || vf.Cardinality() != protoreflect.Optional || vf.ContainingOneof() != nil || vf.HasDefault():
|
|
358
|
-
return errors.New("invalid value field")
|
|
359
|
-
}
|
|
360
|
-
switch kf.Kind() {
|
|
361
|
-
case protoreflect.BoolKind: // bool
|
|
362
|
-
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: // int32
|
|
363
|
-
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: // int64
|
|
364
|
-
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: // uint32
|
|
365
|
-
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: // uint64
|
|
366
|
-
case protoreflect.StringKind: // string
|
|
367
|
-
default:
|
|
368
|
-
return errors.New("invalid key kind: %v", kf.Kind())
|
|
369
|
-
}
|
|
370
|
-
if e := vf.Enum(); e != nil && e.Values().Len() > 0 && e.Values().Get(0).Number() != 0 {
|
|
371
|
-
return errors.New("map enum value must have zero number for the first value")
|
|
372
|
-
}
|
|
373
|
-
return nil
|
|
374
|
-
}
|