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,74 @@
|
|
|
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
|
+
"fmt"
|
|
9
|
+
|
|
10
|
+
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
11
|
+
"google.golang.org/protobuf/reflect/protoregistry"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
// weakFields adds methods to the exported WeakFields type for internal use.
|
|
15
|
+
//
|
|
16
|
+
// The exported type is an alias to an unnamed type, so methods can't be
|
|
17
|
+
// defined directly on it.
|
|
18
|
+
type weakFields WeakFields
|
|
19
|
+
|
|
20
|
+
func (w weakFields) get(num pref.FieldNumber) (pref.ProtoMessage, bool) {
|
|
21
|
+
m, ok := w[int32(num)]
|
|
22
|
+
return m, ok
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
func (w *weakFields) set(num pref.FieldNumber, m pref.ProtoMessage) {
|
|
26
|
+
if *w == nil {
|
|
27
|
+
*w = make(weakFields)
|
|
28
|
+
}
|
|
29
|
+
(*w)[int32(num)] = m
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
func (w *weakFields) clear(num pref.FieldNumber) {
|
|
33
|
+
delete(*w, int32(num))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
func (Export) HasWeak(w WeakFields, num pref.FieldNumber) bool {
|
|
37
|
+
_, ok := w[int32(num)]
|
|
38
|
+
return ok
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
func (Export) ClearWeak(w *WeakFields, num pref.FieldNumber) {
|
|
42
|
+
delete(*w, int32(num))
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
func (Export) GetWeak(w WeakFields, num pref.FieldNumber, name pref.FullName) pref.ProtoMessage {
|
|
46
|
+
if m, ok := w[int32(num)]; ok {
|
|
47
|
+
return m
|
|
48
|
+
}
|
|
49
|
+
mt, _ := protoregistry.GlobalTypes.FindMessageByName(name)
|
|
50
|
+
if mt == nil {
|
|
51
|
+
panic(fmt.Sprintf("message %v for weak field is not linked in", name))
|
|
52
|
+
}
|
|
53
|
+
return mt.Zero().Interface()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
func (Export) SetWeak(w *WeakFields, num pref.FieldNumber, name pref.FullName, m pref.ProtoMessage) {
|
|
57
|
+
if m != nil {
|
|
58
|
+
mt, _ := protoregistry.GlobalTypes.FindMessageByName(name)
|
|
59
|
+
if mt == nil {
|
|
60
|
+
panic(fmt.Sprintf("message %v for weak field is not linked in", name))
|
|
61
|
+
}
|
|
62
|
+
if mt != m.ProtoReflect().Type() {
|
|
63
|
+
panic(fmt.Sprintf("invalid message type for weak field: got %T, want %T", m, mt.Zero().Interface()))
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if m == nil || !m.ProtoReflect().IsValid() {
|
|
67
|
+
delete(*w, int32(num))
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
if *w == nil {
|
|
71
|
+
*w = make(weakFields)
|
|
72
|
+
}
|
|
73
|
+
(*w)[int32(num)] = m
|
|
74
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Copyright 2020 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 order
|
|
6
|
+
|
|
7
|
+
import (
|
|
8
|
+
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
// FieldOrder specifies the ordering to visit message fields.
|
|
12
|
+
// It is a function that reports whether x is ordered before y.
|
|
13
|
+
type FieldOrder func(x, y pref.FieldDescriptor) bool
|
|
14
|
+
|
|
15
|
+
var (
|
|
16
|
+
// AnyFieldOrder specifies no specific field ordering.
|
|
17
|
+
AnyFieldOrder FieldOrder = nil
|
|
18
|
+
|
|
19
|
+
// LegacyFieldOrder sorts fields in the same ordering as emitted by
|
|
20
|
+
// wire serialization in the github.com/golang/protobuf implementation.
|
|
21
|
+
LegacyFieldOrder FieldOrder = func(x, y pref.FieldDescriptor) bool {
|
|
22
|
+
ox, oy := x.ContainingOneof(), y.ContainingOneof()
|
|
23
|
+
inOneof := func(od pref.OneofDescriptor) bool {
|
|
24
|
+
return od != nil && !od.IsSynthetic()
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Extension fields sort before non-extension fields.
|
|
28
|
+
if x.IsExtension() != y.IsExtension() {
|
|
29
|
+
return x.IsExtension() && !y.IsExtension()
|
|
30
|
+
}
|
|
31
|
+
// Fields not within a oneof sort before those within a oneof.
|
|
32
|
+
if inOneof(ox) != inOneof(oy) {
|
|
33
|
+
return !inOneof(ox) && inOneof(oy)
|
|
34
|
+
}
|
|
35
|
+
// Fields in disjoint oneof sets are sorted by declaration index.
|
|
36
|
+
if ox != nil && oy != nil && ox != oy {
|
|
37
|
+
return ox.Index() < oy.Index()
|
|
38
|
+
}
|
|
39
|
+
// Fields sorted by field number.
|
|
40
|
+
return x.Number() < y.Number()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// NumberFieldOrder sorts fields by their field number.
|
|
44
|
+
NumberFieldOrder FieldOrder = func(x, y pref.FieldDescriptor) bool {
|
|
45
|
+
return x.Number() < y.Number()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// IndexNameFieldOrder sorts non-extension fields before extension fields.
|
|
49
|
+
// Non-extensions are sorted according to their declaration index.
|
|
50
|
+
// Extensions are sorted according to their full name.
|
|
51
|
+
IndexNameFieldOrder FieldOrder = func(x, y pref.FieldDescriptor) bool {
|
|
52
|
+
// Non-extension fields sort before extension fields.
|
|
53
|
+
if x.IsExtension() != y.IsExtension() {
|
|
54
|
+
return !x.IsExtension() && y.IsExtension()
|
|
55
|
+
}
|
|
56
|
+
// Extensions sorted by fullname.
|
|
57
|
+
if x.IsExtension() && y.IsExtension() {
|
|
58
|
+
return x.FullName() < y.FullName()
|
|
59
|
+
}
|
|
60
|
+
// Non-extensions sorted by declaration index.
|
|
61
|
+
return x.Index() < y.Index()
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
// KeyOrder specifies the ordering to visit map entries.
|
|
66
|
+
// It is a function that reports whether x is ordered before y.
|
|
67
|
+
type KeyOrder func(x, y pref.MapKey) bool
|
|
68
|
+
|
|
69
|
+
var (
|
|
70
|
+
// AnyKeyOrder specifies no specific key ordering.
|
|
71
|
+
AnyKeyOrder KeyOrder = nil
|
|
72
|
+
|
|
73
|
+
// GenericKeyOrder sorts false before true, numeric keys in ascending order,
|
|
74
|
+
// and strings in lexicographical ordering according to UTF-8 codepoints.
|
|
75
|
+
GenericKeyOrder KeyOrder = func(x, y pref.MapKey) bool {
|
|
76
|
+
switch x.Interface().(type) {
|
|
77
|
+
case bool:
|
|
78
|
+
return !x.Bool() && y.Bool()
|
|
79
|
+
case int32, int64:
|
|
80
|
+
return x.Int() < y.Int()
|
|
81
|
+
case uint32, uint64:
|
|
82
|
+
return x.Uint() < y.Uint()
|
|
83
|
+
case string:
|
|
84
|
+
return x.String() < y.String()
|
|
85
|
+
default:
|
|
86
|
+
panic("invalid map key type")
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// Copyright 2020 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 order provides ordered access to messages and maps.
|
|
6
|
+
package order
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"sort"
|
|
10
|
+
"sync"
|
|
11
|
+
|
|
12
|
+
pref "google.golang.org/protobuf/reflect/protoreflect"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
type messageField struct {
|
|
16
|
+
fd pref.FieldDescriptor
|
|
17
|
+
v pref.Value
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var messageFieldPool = sync.Pool{
|
|
21
|
+
New: func() interface{} { return new([]messageField) },
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type (
|
|
25
|
+
// FieldRnger is an interface for visiting all fields in a message.
|
|
26
|
+
// The protoreflect.Message type implements this interface.
|
|
27
|
+
FieldRanger interface{ Range(VisitField) }
|
|
28
|
+
// VisitField is called everytime a message field is visited.
|
|
29
|
+
VisitField = func(pref.FieldDescriptor, pref.Value) bool
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
// RangeFields iterates over the fields of fs according to the specified order.
|
|
33
|
+
func RangeFields(fs FieldRanger, less FieldOrder, fn VisitField) {
|
|
34
|
+
if less == nil {
|
|
35
|
+
fs.Range(fn)
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Obtain a pre-allocated scratch buffer.
|
|
40
|
+
p := messageFieldPool.Get().(*[]messageField)
|
|
41
|
+
fields := (*p)[:0]
|
|
42
|
+
defer func() {
|
|
43
|
+
if cap(fields) < 1024 {
|
|
44
|
+
*p = fields
|
|
45
|
+
messageFieldPool.Put(p)
|
|
46
|
+
}
|
|
47
|
+
}()
|
|
48
|
+
|
|
49
|
+
// Collect all fields in the message and sort them.
|
|
50
|
+
fs.Range(func(fd pref.FieldDescriptor, v pref.Value) bool {
|
|
51
|
+
fields = append(fields, messageField{fd, v})
|
|
52
|
+
return true
|
|
53
|
+
})
|
|
54
|
+
sort.Slice(fields, func(i, j int) bool {
|
|
55
|
+
return less(fields[i].fd, fields[j].fd)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
// Visit the fields in the specified ordering.
|
|
59
|
+
for _, f := range fields {
|
|
60
|
+
if !fn(f.fd, f.v) {
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type mapEntry struct {
|
|
67
|
+
k pref.MapKey
|
|
68
|
+
v pref.Value
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var mapEntryPool = sync.Pool{
|
|
72
|
+
New: func() interface{} { return new([]mapEntry) },
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
type (
|
|
76
|
+
// EntryRanger is an interface for visiting all fields in a message.
|
|
77
|
+
// The protoreflect.Map type implements this interface.
|
|
78
|
+
EntryRanger interface{ Range(VisitEntry) }
|
|
79
|
+
// VisitEntry is called everytime a map entry is visited.
|
|
80
|
+
VisitEntry = func(pref.MapKey, pref.Value) bool
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
// RangeEntries iterates over the entries of es according to the specified order.
|
|
84
|
+
func RangeEntries(es EntryRanger, less KeyOrder, fn VisitEntry) {
|
|
85
|
+
if less == nil {
|
|
86
|
+
es.Range(fn)
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Obtain a pre-allocated scratch buffer.
|
|
91
|
+
p := mapEntryPool.Get().(*[]mapEntry)
|
|
92
|
+
entries := (*p)[:0]
|
|
93
|
+
defer func() {
|
|
94
|
+
if cap(entries) < 1024 {
|
|
95
|
+
*p = entries
|
|
96
|
+
mapEntryPool.Put(p)
|
|
97
|
+
}
|
|
98
|
+
}()
|
|
99
|
+
|
|
100
|
+
// Collect all entries in the map and sort them.
|
|
101
|
+
es.Range(func(k pref.MapKey, v pref.Value) bool {
|
|
102
|
+
entries = append(entries, mapEntry{k, v})
|
|
103
|
+
return true
|
|
104
|
+
})
|
|
105
|
+
sort.Slice(entries, func(i, j int) bool {
|
|
106
|
+
return less(entries[i].k, entries[j].k)
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// Visit the entries in the specified ordering.
|
|
110
|
+
for _, e := range entries {
|
|
111
|
+
if !fn(e.k, e.v) {
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 pragma provides types that can be embedded into a struct to
|
|
6
|
+
// statically enforce or prevent certain language properties.
|
|
7
|
+
package pragma
|
|
8
|
+
|
|
9
|
+
import "sync"
|
|
10
|
+
|
|
11
|
+
// NoUnkeyedLiterals can be embedded in a struct to prevent unkeyed literals.
|
|
12
|
+
type NoUnkeyedLiterals struct{}
|
|
13
|
+
|
|
14
|
+
// DoNotImplement can be embedded in an interface to prevent trivial
|
|
15
|
+
// implementations of the interface.
|
|
16
|
+
//
|
|
17
|
+
// This is useful to prevent unauthorized implementations of an interface
|
|
18
|
+
// so that it can be extended in the future for any protobuf language changes.
|
|
19
|
+
type DoNotImplement interface{ ProtoInternal(DoNotImplement) }
|
|
20
|
+
|
|
21
|
+
// DoNotCompare can be embedded in a struct to prevent comparability.
|
|
22
|
+
type DoNotCompare [0]func()
|
|
23
|
+
|
|
24
|
+
// DoNotCopy can be embedded in a struct to help prevent shallow copies.
|
|
25
|
+
// This does not rely on a Go language feature, but rather a special case
|
|
26
|
+
// within the vet checker.
|
|
27
|
+
//
|
|
28
|
+
// See https://golang.org/issues/8005.
|
|
29
|
+
type DoNotCopy [0]sync.Mutex
|
|
@@ -0,0 +1,58 @@
|
|
|
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 set provides simple set data structures for uint64s.
|
|
6
|
+
package set
|
|
7
|
+
|
|
8
|
+
import "math/bits"
|
|
9
|
+
|
|
10
|
+
// int64s represents a set of integers within the range of 0..63.
|
|
11
|
+
type int64s uint64
|
|
12
|
+
|
|
13
|
+
func (bs *int64s) Len() int {
|
|
14
|
+
return bits.OnesCount64(uint64(*bs))
|
|
15
|
+
}
|
|
16
|
+
func (bs *int64s) Has(n uint64) bool {
|
|
17
|
+
return uint64(*bs)&(uint64(1)<<n) > 0
|
|
18
|
+
}
|
|
19
|
+
func (bs *int64s) Set(n uint64) {
|
|
20
|
+
*(*uint64)(bs) |= uint64(1) << n
|
|
21
|
+
}
|
|
22
|
+
func (bs *int64s) Clear(n uint64) {
|
|
23
|
+
*(*uint64)(bs) &^= uint64(1) << n
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Ints represents a set of integers within the range of 0..math.MaxUint64.
|
|
27
|
+
type Ints struct {
|
|
28
|
+
lo int64s
|
|
29
|
+
hi map[uint64]struct{}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
func (bs *Ints) Len() int {
|
|
33
|
+
return bs.lo.Len() + len(bs.hi)
|
|
34
|
+
}
|
|
35
|
+
func (bs *Ints) Has(n uint64) bool {
|
|
36
|
+
if n < 64 {
|
|
37
|
+
return bs.lo.Has(n)
|
|
38
|
+
}
|
|
39
|
+
_, ok := bs.hi[n]
|
|
40
|
+
return ok
|
|
41
|
+
}
|
|
42
|
+
func (bs *Ints) Set(n uint64) {
|
|
43
|
+
if n < 64 {
|
|
44
|
+
bs.lo.Set(n)
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
if bs.hi == nil {
|
|
48
|
+
bs.hi = make(map[uint64]struct{})
|
|
49
|
+
}
|
|
50
|
+
bs.hi[n] = struct{}{}
|
|
51
|
+
}
|
|
52
|
+
func (bs *Ints) Clear(n uint64) {
|
|
53
|
+
if n < 64 {
|
|
54
|
+
bs.lo.Clear(n)
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
delete(bs.hi, n)
|
|
58
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
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 strs provides string manipulation functionality specific to protobuf.
|
|
6
|
+
package strs
|
|
7
|
+
|
|
8
|
+
import (
|
|
9
|
+
"go/token"
|
|
10
|
+
"strings"
|
|
11
|
+
"unicode"
|
|
12
|
+
"unicode/utf8"
|
|
13
|
+
|
|
14
|
+
"google.golang.org/protobuf/internal/flags"
|
|
15
|
+
"google.golang.org/protobuf/reflect/protoreflect"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
// EnforceUTF8 reports whether to enforce strict UTF-8 validation.
|
|
19
|
+
func EnforceUTF8(fd protoreflect.FieldDescriptor) bool {
|
|
20
|
+
if flags.ProtoLegacy {
|
|
21
|
+
if fd, ok := fd.(interface{ EnforceUTF8() bool }); ok {
|
|
22
|
+
return fd.EnforceUTF8()
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return fd.Syntax() == protoreflect.Proto3
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// GoCamelCase camel-cases a protobuf name for use as a Go identifier.
|
|
29
|
+
//
|
|
30
|
+
// If there is an interior underscore followed by a lower case letter,
|
|
31
|
+
// drop the underscore and convert the letter to upper case.
|
|
32
|
+
func GoCamelCase(s string) string {
|
|
33
|
+
// Invariant: if the next letter is lower case, it must be converted
|
|
34
|
+
// to upper case.
|
|
35
|
+
// That is, we process a word at a time, where words are marked by _ or
|
|
36
|
+
// upper case letter. Digits are treated as words.
|
|
37
|
+
var b []byte
|
|
38
|
+
for i := 0; i < len(s); i++ {
|
|
39
|
+
c := s[i]
|
|
40
|
+
switch {
|
|
41
|
+
case c == '.' && i+1 < len(s) && isASCIILower(s[i+1]):
|
|
42
|
+
// Skip over '.' in ".{{lowercase}}".
|
|
43
|
+
case c == '.':
|
|
44
|
+
b = append(b, '_') // convert '.' to '_'
|
|
45
|
+
case c == '_' && (i == 0 || s[i-1] == '.'):
|
|
46
|
+
// Convert initial '_' to ensure we start with a capital letter.
|
|
47
|
+
// Do the same for '_' after '.' to match historic behavior.
|
|
48
|
+
b = append(b, 'X') // convert '_' to 'X'
|
|
49
|
+
case c == '_' && i+1 < len(s) && isASCIILower(s[i+1]):
|
|
50
|
+
// Skip over '_' in "_{{lowercase}}".
|
|
51
|
+
case isASCIIDigit(c):
|
|
52
|
+
b = append(b, c)
|
|
53
|
+
default:
|
|
54
|
+
// Assume we have a letter now - if not, it's a bogus identifier.
|
|
55
|
+
// The next word is a sequence of characters that must start upper case.
|
|
56
|
+
if isASCIILower(c) {
|
|
57
|
+
c -= 'a' - 'A' // convert lowercase to uppercase
|
|
58
|
+
}
|
|
59
|
+
b = append(b, c)
|
|
60
|
+
|
|
61
|
+
// Accept lower case sequence that follows.
|
|
62
|
+
for ; i+1 < len(s) && isASCIILower(s[i+1]); i++ {
|
|
63
|
+
b = append(b, s[i+1])
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return string(b)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// GoSanitized converts a string to a valid Go identifier.
|
|
71
|
+
func GoSanitized(s string) string {
|
|
72
|
+
// Sanitize the input to the set of valid characters,
|
|
73
|
+
// which must be '_' or be in the Unicode L or N categories.
|
|
74
|
+
s = strings.Map(func(r rune) rune {
|
|
75
|
+
if unicode.IsLetter(r) || unicode.IsDigit(r) {
|
|
76
|
+
return r
|
|
77
|
+
}
|
|
78
|
+
return '_'
|
|
79
|
+
}, s)
|
|
80
|
+
|
|
81
|
+
// Prepend '_' in the event of a Go keyword conflict or if
|
|
82
|
+
// the identifier is invalid (does not start in the Unicode L category).
|
|
83
|
+
r, _ := utf8.DecodeRuneInString(s)
|
|
84
|
+
if token.Lookup(s).IsKeyword() || !unicode.IsLetter(r) {
|
|
85
|
+
return "_" + s
|
|
86
|
+
}
|
|
87
|
+
return s
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// JSONCamelCase converts a snake_case identifier to a camelCase identifier,
|
|
91
|
+
// according to the protobuf JSON specification.
|
|
92
|
+
func JSONCamelCase(s string) string {
|
|
93
|
+
var b []byte
|
|
94
|
+
var wasUnderscore bool
|
|
95
|
+
for i := 0; i < len(s); i++ { // proto identifiers are always ASCII
|
|
96
|
+
c := s[i]
|
|
97
|
+
if c != '_' {
|
|
98
|
+
if wasUnderscore && isASCIILower(c) {
|
|
99
|
+
c -= 'a' - 'A' // convert to uppercase
|
|
100
|
+
}
|
|
101
|
+
b = append(b, c)
|
|
102
|
+
}
|
|
103
|
+
wasUnderscore = c == '_'
|
|
104
|
+
}
|
|
105
|
+
return string(b)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// JSONSnakeCase converts a camelCase identifier to a snake_case identifier,
|
|
109
|
+
// according to the protobuf JSON specification.
|
|
110
|
+
func JSONSnakeCase(s string) string {
|
|
111
|
+
var b []byte
|
|
112
|
+
for i := 0; i < len(s); i++ { // proto identifiers are always ASCII
|
|
113
|
+
c := s[i]
|
|
114
|
+
if isASCIIUpper(c) {
|
|
115
|
+
b = append(b, '_')
|
|
116
|
+
c += 'a' - 'A' // convert to lowercase
|
|
117
|
+
}
|
|
118
|
+
b = append(b, c)
|
|
119
|
+
}
|
|
120
|
+
return string(b)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// MapEntryName derives the name of the map entry message given the field name.
|
|
124
|
+
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:254-276,6057
|
|
125
|
+
func MapEntryName(s string) string {
|
|
126
|
+
var b []byte
|
|
127
|
+
upperNext := true
|
|
128
|
+
for _, c := range s {
|
|
129
|
+
switch {
|
|
130
|
+
case c == '_':
|
|
131
|
+
upperNext = true
|
|
132
|
+
case upperNext:
|
|
133
|
+
b = append(b, byte(unicode.ToUpper(c)))
|
|
134
|
+
upperNext = false
|
|
135
|
+
default:
|
|
136
|
+
b = append(b, byte(c))
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
b = append(b, "Entry"...)
|
|
140
|
+
return string(b)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// EnumValueName derives the camel-cased enum value name.
|
|
144
|
+
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:297-313
|
|
145
|
+
func EnumValueName(s string) string {
|
|
146
|
+
var b []byte
|
|
147
|
+
upperNext := true
|
|
148
|
+
for _, c := range s {
|
|
149
|
+
switch {
|
|
150
|
+
case c == '_':
|
|
151
|
+
upperNext = true
|
|
152
|
+
case upperNext:
|
|
153
|
+
b = append(b, byte(unicode.ToUpper(c)))
|
|
154
|
+
upperNext = false
|
|
155
|
+
default:
|
|
156
|
+
b = append(b, byte(unicode.ToLower(c)))
|
|
157
|
+
upperNext = false
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return string(b)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// TrimEnumPrefix trims the enum name prefix from an enum value name,
|
|
164
|
+
// where the prefix is all lowercase without underscores.
|
|
165
|
+
// See protoc v3.8.0: src/google/protobuf/descriptor.cc:330-375
|
|
166
|
+
func TrimEnumPrefix(s, prefix string) string {
|
|
167
|
+
s0 := s // original input
|
|
168
|
+
for len(s) > 0 && len(prefix) > 0 {
|
|
169
|
+
if s[0] == '_' {
|
|
170
|
+
s = s[1:]
|
|
171
|
+
continue
|
|
172
|
+
}
|
|
173
|
+
if unicode.ToLower(rune(s[0])) != rune(prefix[0]) {
|
|
174
|
+
return s0 // no prefix match
|
|
175
|
+
}
|
|
176
|
+
s, prefix = s[1:], prefix[1:]
|
|
177
|
+
}
|
|
178
|
+
if len(prefix) > 0 {
|
|
179
|
+
return s0 // no prefix match
|
|
180
|
+
}
|
|
181
|
+
s = strings.TrimLeft(s, "_")
|
|
182
|
+
if len(s) == 0 {
|
|
183
|
+
return s0 // avoid returning empty string
|
|
184
|
+
}
|
|
185
|
+
return s
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
func isASCIILower(c byte) bool {
|
|
189
|
+
return 'a' <= c && c <= 'z'
|
|
190
|
+
}
|
|
191
|
+
func isASCIIUpper(c byte) bool {
|
|
192
|
+
return 'A' <= c && c <= 'Z'
|
|
193
|
+
}
|
|
194
|
+
func isASCIIDigit(c byte) bool {
|
|
195
|
+
return '0' <= c && c <= '9'
|
|
196
|
+
}
|