summaryrefslogtreecommitdiff
path: root/vendor/google.golang.org
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/google.golang.org')
-rw-r--r--vendor/google.golang.org/genproto/googleapis/api/LICENSE202
-rw-r--r--vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go235
-rw-r--r--vendor/google.golang.org/genproto/googleapis/rpc/LICENSE202
-rw-r--r--vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go1346
-rw-r--r--vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go203
-rw-r--r--vendor/google.golang.org/grpc/AUTHORS1
-rw-r--r--vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md3
-rw-r--r--vendor/google.golang.org/grpc/CONTRIBUTING.md73
-rw-r--r--vendor/google.golang.org/grpc/GOVERNANCE.md1
-rw-r--r--vendor/google.golang.org/grpc/LICENSE202
-rw-r--r--vendor/google.golang.org/grpc/MAINTAINERS.md36
-rw-r--r--vendor/google.golang.org/grpc/Makefile49
-rw-r--r--vendor/google.golang.org/grpc/NOTICE.txt13
-rw-r--r--vendor/google.golang.org/grpc/README.md107
-rw-r--r--vendor/google.golang.org/grpc/SECURITY.md3
-rw-r--r--vendor/google.golang.org/grpc/attributes/attributes.go141
-rw-r--r--vendor/google.golang.org/grpc/backoff.go61
-rw-r--r--vendor/google.golang.org/grpc/backoff/backoff.go52
-rw-r--r--vendor/google.golang.org/grpc/balancer/balancer.go376
-rw-r--r--vendor/google.golang.org/grpc/balancer/base/balancer.go264
-rw-r--r--vendor/google.golang.org/grpc/balancer/base/base.go71
-rw-r--r--vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go74
-rw-r--r--vendor/google.golang.org/grpc/balancer/grpclb/state/state.go51
-rw-r--r--vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go35
-rw-r--r--vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go291
-rw-r--r--vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go911
-rw-r--r--vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go81
-rw-r--r--vendor/google.golang.org/grpc/balancer/subconn.go134
-rw-r--r--vendor/google.golang.org/grpc/balancer_wrapper.go452
-rw-r--r--vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go1069
-rw-r--r--vendor/google.golang.org/grpc/call.go74
-rw-r--r--vendor/google.golang.org/grpc/channelz/channelz.go36
-rw-r--r--vendor/google.golang.org/grpc/clientconn.go1806
-rw-r--r--vendor/google.golang.org/grpc/codec.go105
-rw-r--r--vendor/google.golang.org/grpc/codes/code_string.go111
-rw-r--r--vendor/google.golang.org/grpc/codes/codes.go250
-rw-r--r--vendor/google.golang.org/grpc/connectivity/connectivity.go94
-rw-r--r--vendor/google.golang.org/grpc/credentials/credentials.go291
-rw-r--r--vendor/google.golang.org/grpc/credentials/insecure/insecure.go98
-rw-r--r--vendor/google.golang.org/grpc/credentials/tls.go298
-rw-r--r--vendor/google.golang.org/grpc/dialoptions.go751
-rw-r--r--vendor/google.golang.org/grpc/doc.go26
-rw-r--r--vendor/google.golang.org/grpc/encoding/encoding.go131
-rw-r--r--vendor/google.golang.org/grpc/encoding/encoding_v2.go81
-rw-r--r--vendor/google.golang.org/grpc/encoding/gzip/gzip.go132
-rw-r--r--vendor/google.golang.org/grpc/encoding/proto/proto.go96
-rw-r--r--vendor/google.golang.org/grpc/experimental/stats/metricregistry.go270
-rw-r--r--vendor/google.golang.org/grpc/experimental/stats/metrics.go54
-rw-r--r--vendor/google.golang.org/grpc/grpclog/component.go115
-rw-r--r--vendor/google.golang.org/grpc/grpclog/grpclog.go186
-rw-r--r--vendor/google.golang.org/grpc/grpclog/internal/grpclog.go26
-rw-r--r--vendor/google.golang.org/grpc/grpclog/internal/logger.go87
-rw-r--r--vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go267
-rw-r--r--vendor/google.golang.org/grpc/grpclog/logger.go34
-rw-r--r--vendor/google.golang.org/grpc/grpclog/loggerv2.go97
-rw-r--r--vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go278
-rw-r--r--vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go234
-rw-r--r--vendor/google.golang.org/grpc/interceptor.go104
-rw-r--r--vendor/google.golang.org/grpc/internal/backoff/backoff.go109
-rw-r--r--vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/config.go84
-rw-r--r--vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go419
-rw-r--r--vendor/google.golang.org/grpc/internal/balancerload/load.go46
-rw-r--r--vendor/google.golang.org/grpc/internal/binarylog/binarylog.go192
-rw-r--r--vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go42
-rw-r--r--vendor/google.golang.org/grpc/internal/binarylog/env_config.go208
-rw-r--r--vendor/google.golang.org/grpc/internal/binarylog/method_logger.go446
-rw-r--r--vendor/google.golang.org/grpc/internal/binarylog/sink.go170
-rw-r--r--vendor/google.golang.org/grpc/internal/buffer/unbounded.go116
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/channel.go270
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/channelmap.go395
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/funcs.go230
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/logging.go75
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/server.go121
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/socket.go137
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/subchannel.go153
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/syscall_linux.go65
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go47
-rw-r--r--vendor/google.golang.org/grpc/internal/channelz/trace.go213
-rw-r--r--vendor/google.golang.org/grpc/internal/credentials/credentials.go49
-rw-r--r--vendor/google.golang.org/grpc/internal/credentials/spiffe.go75
-rw-r--r--vendor/google.golang.org/grpc/internal/credentials/syscallconn.go58
-rw-r--r--vendor/google.golang.org/grpc/internal/credentials/util.go52
-rw-r--r--vendor/google.golang.org/grpc/internal/envconfig/envconfig.go81
-rw-r--r--vendor/google.golang.org/grpc/internal/envconfig/observability.go42
-rw-r--r--vendor/google.golang.org/grpc/internal/envconfig/xds.go56
-rw-r--r--vendor/google.golang.org/grpc/internal/experimental.go28
-rw-r--r--vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go79
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go112
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcsync/event.go61
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go32
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go121
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcutil/compressor.go42
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go63
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go20
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcutil/metadata.go40
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcutil/method.go88
-rw-r--r--vendor/google.golang.org/grpc/internal/grpcutil/regex.go31
-rw-r--r--vendor/google.golang.org/grpc/internal/idle/idle.go280
-rw-r--r--vendor/google.golang.org/grpc/internal/internal.go275
-rw-r--r--vendor/google.golang.org/grpc/internal/metadata/metadata.go132
-rw-r--r--vendor/google.golang.org/grpc/internal/pretty/pretty.go73
-rw-r--r--vendor/google.golang.org/grpc/internal/resolver/config_selector.go167
-rw-r--r--vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go461
-rw-r--r--vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go77
-rw-r--r--vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go64
-rw-r--r--vendor/google.golang.org/grpc/internal/resolver/unix/unix.go78
-rw-r--r--vendor/google.golang.org/grpc/internal/serviceconfig/duration.go130
-rw-r--r--vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go180
-rw-r--r--vendor/google.golang.org/grpc/internal/stats/labels.go42
-rw-r--r--vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go105
-rw-r--r--vendor/google.golang.org/grpc/internal/status/status.go238
-rw-r--r--vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go112
-rw-r--r--vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go77
-rw-r--r--vendor/google.golang.org/grpc/internal/tcp_keepalive_others.go29
-rw-r--r--vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go54
-rw-r--r--vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go54
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go141
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/client_stream.go144
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/controlbuf.go1035
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/defaults.go55
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/flowcontrol.go212
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/handler_server.go502
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/http2_client.go1828
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/http2_server.go1476
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/http_util.go468
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/logging.go40
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go46
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/proxy.go150
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/server_stream.go178
-rw-r--r--vendor/google.golang.org/grpc/internal/transport/transport.go694
-rw-r--r--vendor/google.golang.org/grpc/keepalive/keepalive.go99
-rw-r--r--vendor/google.golang.org/grpc/mem/buffer_pool.go194
-rw-r--r--vendor/google.golang.org/grpc/mem/buffer_slice.go281
-rw-r--r--vendor/google.golang.org/grpc/mem/buffers.go268
-rw-r--r--vendor/google.golang.org/grpc/metadata/metadata.go295
-rw-r--r--vendor/google.golang.org/grpc/peer/peer.go83
-rw-r--r--vendor/google.golang.org/grpc/picker_wrapper.go219
-rw-r--r--vendor/google.golang.org/grpc/preloader.go85
-rw-r--r--vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go60
-rw-r--r--vendor/google.golang.org/grpc/resolver/map.go251
-rw-r--r--vendor/google.golang.org/grpc/resolver/resolver.go350
-rw-r--r--vendor/google.golang.org/grpc/resolver_wrapper.go201
-rw-r--r--vendor/google.golang.org/grpc/rpc_util.go1046
-rw-r--r--vendor/google.golang.org/grpc/server.go2205
-rw-r--r--vendor/google.golang.org/grpc/service_config.go357
-rw-r--r--vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go44
-rw-r--r--vendor/google.golang.org/grpc/stats/handlers.go63
-rw-r--r--vendor/google.golang.org/grpc/stats/metrics.go81
-rw-r--r--vendor/google.golang.org/grpc/stats/stats.go301
-rw-r--r--vendor/google.golang.org/grpc/status/status.go162
-rw-r--r--vendor/google.golang.org/grpc/stream.go1823
-rw-r--r--vendor/google.golang.org/grpc/stream_interfaces.go238
-rw-r--r--vendor/google.golang.org/grpc/tap/tap.go62
-rw-r--r--vendor/google.golang.org/grpc/trace.go143
-rw-r--r--vendor/google.golang.org/grpc/trace_notrace.go52
-rw-r--r--vendor/google.golang.org/grpc/trace_withtrace.go39
-rw-r--r--vendor/google.golang.org/grpc/version.go22
-rw-r--r--vendor/google.golang.org/protobuf/LICENSE27
-rw-r--r--vendor/google.golang.org/protobuf/PATENTS22
-rw-r--r--vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go160
-rw-r--r--vendor/google.golang.org/protobuf/encoding/protojson/decode.go685
-rw-r--r--vendor/google.golang.org/protobuf/encoding/protojson/doc.go11
-rw-r--r--vendor/google.golang.org/protobuf/encoding/protojson/encode.go380
-rw-r--r--vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go880
-rw-r--r--vendor/google.golang.org/protobuf/encoding/prototext/decode.go772
-rw-r--r--vendor/google.golang.org/protobuf/encoding/prototext/doc.go7
-rw-r--r--vendor/google.golang.org/protobuf/encoding/prototext/encode.go380
-rw-r--r--vendor/google.golang.org/protobuf/encoding/protowire/wire.go547
-rw-r--r--vendor/google.golang.org/protobuf/internal/descfmt/stringer.go414
-rw-r--r--vendor/google.golang.org/protobuf/internal/descopts/options.go29
-rw-r--r--vendor/google.golang.org/protobuf/internal/detrand/rand.go69
-rw-r--r--vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go12
-rw-r--r--vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpbbin138 -> 0 bytes
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/defval/default.go213
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/json/decode.go340
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go254
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go91
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go192
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/json/encode.go278
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go242
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go207
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/text/decode.go686
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go211
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go161
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go373
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/text/doc.go29
-rw-r--r--vendor/google.golang.org/protobuf/internal/encoding/text/encode.go272
-rw-r--r--vendor/google.golang.org/protobuf/internal/errors/errors.go104
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/build.go157
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/desc.go755
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go560
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go703
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go457
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go367
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/editions.go164
-rw-r--r--vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go110
-rw-r--r--vendor/google.golang.org/protobuf/internal/filetype/build.go296
-rw-r--r--vendor/google.golang.org/protobuf/internal/flags/flags.go29
-rw-r--r--vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go10
-rw-r--r--vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go10
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/any_gen.go34
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/api_gen.go106
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go1270
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/doc.go11
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/duration_gen.go34
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/empty_gen.go19
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go31
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go70
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/goname.go25
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/map_entry.go16
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/name.go12
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go31
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/struct_gen.go121
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go34
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/type_gen.go228
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/wrappers.go13
-rw-r--r--vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go175
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/api_export.go177
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go128
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/bitmap.go34
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go126
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/checkinit.go174
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_extension.go228
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_field.go863
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go264
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_gen.go5724
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_map.go399
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_message.go233
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go156
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go145
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_tables.go557
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go15
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/convert.go495
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/convert_list.go141
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/convert_map.go121
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/decode.go333
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/encode.go315
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/enum.go21
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/equal.go224
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/extension.go156
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/lazy.go433
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go219
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/legacy_export.go92
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go177
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/legacy_file.go81
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/legacy_message.go572
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/merge.go203
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/merge_gen.go209
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message.go296
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message_opaque.go632
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go132
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message_reflect.go467
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go499
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go273
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go271
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go221
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go42
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/presence.go142
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/validate.go592
-rw-r--r--vendor/google.golang.org/protobuf/internal/impl/weak.go74
-rw-r--r--vendor/google.golang.org/protobuf/internal/order/order.go89
-rw-r--r--vendor/google.golang.org/protobuf/internal/order/range.go115
-rw-r--r--vendor/google.golang.org/protobuf/internal/pragma/pragma.go29
-rw-r--r--vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go364
-rw-r--r--vendor/google.golang.org/protobuf/internal/protolazy/lazy.go359
-rw-r--r--vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go17
-rw-r--r--vendor/google.golang.org/protobuf/internal/set/ints.go58
-rw-r--r--vendor/google.golang.org/protobuf/internal/strs/strings.go196
-rw-r--r--vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go94
-rw-r--r--vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go73
-rw-r--r--vendor/google.golang.org/protobuf/internal/version/version.go79
-rw-r--r--vendor/google.golang.org/protobuf/proto/checkinit.go71
-rw-r--r--vendor/google.golang.org/protobuf/proto/decode.go312
-rw-r--r--vendor/google.golang.org/protobuf/proto/decode_gen.go603
-rw-r--r--vendor/google.golang.org/protobuf/proto/doc.go86
-rw-r--r--vendor/google.golang.org/protobuf/proto/encode.go355
-rw-r--r--vendor/google.golang.org/protobuf/proto/encode_gen.go97
-rw-r--r--vendor/google.golang.org/protobuf/proto/equal.go66
-rw-r--r--vendor/google.golang.org/protobuf/proto/extension.go166
-rw-r--r--vendor/google.golang.org/protobuf/proto/merge.go139
-rw-r--r--vendor/google.golang.org/protobuf/proto/messageset.go98
-rw-r--r--vendor/google.golang.org/protobuf/proto/proto.go45
-rw-r--r--vendor/google.golang.org/protobuf/proto/proto_methods.go20
-rw-r--r--vendor/google.golang.org/protobuf/proto/proto_reflect.go20
-rw-r--r--vendor/google.golang.org/protobuf/proto/reset.go43
-rw-r--r--vendor/google.golang.org/protobuf/proto/size.go111
-rw-r--r--vendor/google.golang.org/protobuf/proto/size_gen.go55
-rw-r--r--vendor/google.golang.org/protobuf/proto/wrapperopaque.go80
-rw-r--r--vendor/google.golang.org/protobuf/proto/wrappers.go29
-rw-r--r--vendor/google.golang.org/protobuf/protoadapt/convert.go31
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go88
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go513
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/source.go129
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go573
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/type.go672
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/value.go285
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go168
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go438
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go98
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go86
-rw-r--r--vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go882
-rw-r--r--vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go15
-rw-r--r--vendor/google.golang.org/protobuf/runtime/protoiface/methods.go202
-rw-r--r--vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go48
-rw-r--r--vendor/google.golang.org/protobuf/runtime/protoimpl/version.go60
-rw-r--r--vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go479
-rw-r--r--vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go357
-rw-r--r--vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go571
-rw-r--r--vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go791
-rw-r--r--vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go366
-rw-r--r--vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go623
311 files changed, 0 insertions, 78056 deletions
diff --git a/vendor/google.golang.org/genproto/googleapis/api/LICENSE b/vendor/google.golang.org/genproto/googleapis/api/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/vendor/google.golang.org/genproto/googleapis/api/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go
deleted file mode 100644
index f388426b0..000000000
--- a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.26.0
-// protoc v4.24.4
-// source: google/api/httpbody.proto
-
-package httpbody
-
-import (
- reflect "reflect"
- sync "sync"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- anypb "google.golang.org/protobuf/types/known/anypb"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// Message that represents an arbitrary HTTP body. It should only be used for
-// payload formats that can't be represented as JSON, such as raw binary or
-// an HTML page.
-//
-// This message can be used both in streaming and non-streaming API methods in
-// the request as well as the response.
-//
-// It can be used as a top-level request field, which is convenient if one
-// wants to extract parameters from either the URL or HTTP template into the
-// request fields and also want access to the raw HTTP body.
-//
-// Example:
-//
-// message GetResourceRequest {
-// // A unique request id.
-// string request_id = 1;
-//
-// // The raw HTTP body is bound to this field.
-// google.api.HttpBody http_body = 2;
-//
-// }
-//
-// service ResourceService {
-// rpc GetResource(GetResourceRequest)
-// returns (google.api.HttpBody);
-// rpc UpdateResource(google.api.HttpBody)
-// returns (google.protobuf.Empty);
-//
-// }
-//
-// Example with streaming methods:
-//
-// service CaldavService {
-// rpc GetCalendar(stream google.api.HttpBody)
-// returns (stream google.api.HttpBody);
-// rpc UpdateCalendar(stream google.api.HttpBody)
-// returns (stream google.api.HttpBody);
-//
-// }
-//
-// Use of this type only changes how the request and response bodies are
-// handled, all other features will continue to work unchanged.
-type HttpBody struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The HTTP Content-Type header value specifying the content type of the body.
- ContentType string `protobuf:"bytes,1,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
- // The HTTP request/response body as raw binary.
- Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
- // Application specific response metadata. Must be set in the first response
- // for streaming APIs.
- Extensions []*anypb.Any `protobuf:"bytes,3,rep,name=extensions,proto3" json:"extensions,omitempty"`
-}
-
-func (x *HttpBody) Reset() {
- *x = HttpBody{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_api_httpbody_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *HttpBody) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*HttpBody) ProtoMessage() {}
-
-func (x *HttpBody) ProtoReflect() protoreflect.Message {
- mi := &file_google_api_httpbody_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use HttpBody.ProtoReflect.Descriptor instead.
-func (*HttpBody) Descriptor() ([]byte, []int) {
- return file_google_api_httpbody_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *HttpBody) GetContentType() string {
- if x != nil {
- return x.ContentType
- }
- return ""
-}
-
-func (x *HttpBody) GetData() []byte {
- if x != nil {
- return x.Data
- }
- return nil
-}
-
-func (x *HttpBody) GetExtensions() []*anypb.Any {
- if x != nil {
- return x.Extensions
- }
- return nil
-}
-
-var File_google_api_httpbody_proto protoreflect.FileDescriptor
-
-var file_google_api_httpbody_proto_rawDesc = []byte{
- 0x0a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74,
- 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x22, 0x77, 0x0a, 0x08, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x21,
- 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
- 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
- 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
- 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x65, 0x0a, 0x0e, 0x63,
- 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x48,
- 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72,
- 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f,
- 0x64, 0x79, 0x3b, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0xa2, 0x02, 0x04, 0x47, 0x41,
- 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_api_httpbody_proto_rawDescOnce sync.Once
- file_google_api_httpbody_proto_rawDescData = file_google_api_httpbody_proto_rawDesc
-)
-
-func file_google_api_httpbody_proto_rawDescGZIP() []byte {
- file_google_api_httpbody_proto_rawDescOnce.Do(func() {
- file_google_api_httpbody_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_api_httpbody_proto_rawDescData)
- })
- return file_google_api_httpbody_proto_rawDescData
-}
-
-var file_google_api_httpbody_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_google_api_httpbody_proto_goTypes = []interface{}{
- (*HttpBody)(nil), // 0: google.api.HttpBody
- (*anypb.Any)(nil), // 1: google.protobuf.Any
-}
-var file_google_api_httpbody_proto_depIdxs = []int32{
- 1, // 0: google.api.HttpBody.extensions:type_name -> google.protobuf.Any
- 1, // [1:1] is the sub-list for method output_type
- 1, // [1:1] is the sub-list for method input_type
- 1, // [1:1] is the sub-list for extension type_name
- 1, // [1:1] is the sub-list for extension extendee
- 0, // [0:1] is the sub-list for field type_name
-}
-
-func init() { file_google_api_httpbody_proto_init() }
-func file_google_api_httpbody_proto_init() {
- if File_google_api_httpbody_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_google_api_httpbody_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*HttpBody); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_api_httpbody_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_api_httpbody_proto_goTypes,
- DependencyIndexes: file_google_api_httpbody_proto_depIdxs,
- MessageInfos: file_google_api_httpbody_proto_msgTypes,
- }.Build()
- File_google_api_httpbody_proto = out.File
- file_google_api_httpbody_proto_rawDesc = nil
- file_google_api_httpbody_proto_goTypes = nil
- file_google_api_httpbody_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE b/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go
deleted file mode 100644
index 3cd9a5bb8..000000000
--- a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go
+++ /dev/null
@@ -1,1346 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.26.0
-// protoc v4.24.4
-// source: google/rpc/error_details.proto
-
-package errdetails
-
-import (
- reflect "reflect"
- sync "sync"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- durationpb "google.golang.org/protobuf/types/known/durationpb"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// Describes the cause of the error with structured details.
-//
-// Example of an error when contacting the "pubsub.googleapis.com" API when it
-// is not enabled:
-//
-// { "reason": "API_DISABLED"
-// "domain": "googleapis.com"
-// "metadata": {
-// "resource": "projects/123",
-// "service": "pubsub.googleapis.com"
-// }
-// }
-//
-// This response indicates that the pubsub.googleapis.com API is not enabled.
-//
-// Example of an error that is returned when attempting to create a Spanner
-// instance in a region that is out of stock:
-//
-// { "reason": "STOCKOUT"
-// "domain": "spanner.googleapis.com",
-// "metadata": {
-// "availableRegions": "us-central1,us-east2"
-// }
-// }
-type ErrorInfo struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The reason of the error. This is a constant value that identifies the
- // proximate cause of the error. Error reasons are unique within a particular
- // domain of errors. This should be at most 63 characters and match a
- // regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents
- // UPPER_SNAKE_CASE.
- Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason,omitempty"`
- // The logical grouping to which the "reason" belongs. The error domain
- // is typically the registered service name of the tool or product that
- // generates the error. Example: "pubsub.googleapis.com". If the error is
- // generated by some common infrastructure, the error domain must be a
- // globally unique value that identifies the infrastructure. For Google API
- // infrastructure, the error domain is "googleapis.com".
- Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
- // Additional structured details about this error.
- //
- // Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
- // ideally be lowerCamelCase. Also, they must be limited to 64 characters in
- // length. When identifying the current value of an exceeded limit, the units
- // should be contained in the key, not the value. For example, rather than
- // `{"instanceLimit": "100/request"}`, should be returned as,
- // `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
- // instances that can be created in a single (batch) request.
- Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-}
-
-func (x *ErrorInfo) Reset() {
- *x = ErrorInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ErrorInfo) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ErrorInfo) ProtoMessage() {}
-
-func (x *ErrorInfo) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ErrorInfo.ProtoReflect.Descriptor instead.
-func (*ErrorInfo) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *ErrorInfo) GetReason() string {
- if x != nil {
- return x.Reason
- }
- return ""
-}
-
-func (x *ErrorInfo) GetDomain() string {
- if x != nil {
- return x.Domain
- }
- return ""
-}
-
-func (x *ErrorInfo) GetMetadata() map[string]string {
- if x != nil {
- return x.Metadata
- }
- return nil
-}
-
-// Describes when the clients can retry a failed request. Clients could ignore
-// the recommendation here or retry when this information is missing from error
-// responses.
-//
-// It's always recommended that clients should use exponential backoff when
-// retrying.
-//
-// Clients should wait until `retry_delay` amount of time has passed since
-// receiving the error response before retrying. If retrying requests also
-// fail, clients should use an exponential backoff scheme to gradually increase
-// the delay between retries based on `retry_delay`, until either a maximum
-// number of retries have been reached or a maximum retry delay cap has been
-// reached.
-type RetryInfo struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Clients should wait at least this long between retrying the same request.
- RetryDelay *durationpb.Duration `protobuf:"bytes,1,opt,name=retry_delay,json=retryDelay,proto3" json:"retry_delay,omitempty"`
-}
-
-func (x *RetryInfo) Reset() {
- *x = RetryInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RetryInfo) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RetryInfo) ProtoMessage() {}
-
-func (x *RetryInfo) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RetryInfo.ProtoReflect.Descriptor instead.
-func (*RetryInfo) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *RetryInfo) GetRetryDelay() *durationpb.Duration {
- if x != nil {
- return x.RetryDelay
- }
- return nil
-}
-
-// Describes additional debugging info.
-type DebugInfo struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The stack trace entries indicating where the error occurred.
- StackEntries []string `protobuf:"bytes,1,rep,name=stack_entries,json=stackEntries,proto3" json:"stack_entries,omitempty"`
- // Additional debugging information provided by the server.
- Detail string `protobuf:"bytes,2,opt,name=detail,proto3" json:"detail,omitempty"`
-}
-
-func (x *DebugInfo) Reset() {
- *x = DebugInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *DebugInfo) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DebugInfo) ProtoMessage() {}
-
-func (x *DebugInfo) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use DebugInfo.ProtoReflect.Descriptor instead.
-func (*DebugInfo) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *DebugInfo) GetStackEntries() []string {
- if x != nil {
- return x.StackEntries
- }
- return nil
-}
-
-func (x *DebugInfo) GetDetail() string {
- if x != nil {
- return x.Detail
- }
- return ""
-}
-
-// Describes how a quota check failed.
-//
-// For example if a daily limit was exceeded for the calling project,
-// a service could respond with a QuotaFailure detail containing the project
-// id and the description of the quota limit that was exceeded. If the
-// calling project hasn't enabled the service in the developer console, then
-// a service could respond with the project id and set `service_disabled`
-// to true.
-//
-// Also see RetryInfo and Help types for other details about handling a
-// quota failure.
-type QuotaFailure struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Describes all quota violations.
- Violations []*QuotaFailure_Violation `protobuf:"bytes,1,rep,name=violations,proto3" json:"violations,omitempty"`
-}
-
-func (x *QuotaFailure) Reset() {
- *x = QuotaFailure{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *QuotaFailure) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*QuotaFailure) ProtoMessage() {}
-
-func (x *QuotaFailure) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use QuotaFailure.ProtoReflect.Descriptor instead.
-func (*QuotaFailure) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *QuotaFailure) GetViolations() []*QuotaFailure_Violation {
- if x != nil {
- return x.Violations
- }
- return nil
-}
-
-// Describes what preconditions have failed.
-//
-// For example, if an RPC failed because it required the Terms of Service to be
-// acknowledged, it could list the terms of service violation in the
-// PreconditionFailure message.
-type PreconditionFailure struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Describes all precondition violations.
- Violations []*PreconditionFailure_Violation `protobuf:"bytes,1,rep,name=violations,proto3" json:"violations,omitempty"`
-}
-
-func (x *PreconditionFailure) Reset() {
- *x = PreconditionFailure{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *PreconditionFailure) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*PreconditionFailure) ProtoMessage() {}
-
-func (x *PreconditionFailure) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use PreconditionFailure.ProtoReflect.Descriptor instead.
-func (*PreconditionFailure) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *PreconditionFailure) GetViolations() []*PreconditionFailure_Violation {
- if x != nil {
- return x.Violations
- }
- return nil
-}
-
-// Describes violations in a client request. This error type focuses on the
-// syntactic aspects of the request.
-type BadRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Describes all violations in a client request.
- FieldViolations []*BadRequest_FieldViolation `protobuf:"bytes,1,rep,name=field_violations,json=fieldViolations,proto3" json:"field_violations,omitempty"`
-}
-
-func (x *BadRequest) Reset() {
- *x = BadRequest{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *BadRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BadRequest) ProtoMessage() {}
-
-func (x *BadRequest) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use BadRequest.ProtoReflect.Descriptor instead.
-func (*BadRequest) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *BadRequest) GetFieldViolations() []*BadRequest_FieldViolation {
- if x != nil {
- return x.FieldViolations
- }
- return nil
-}
-
-// Contains metadata about the request that clients can attach when filing a bug
-// or providing other forms of feedback.
-type RequestInfo struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // An opaque string that should only be interpreted by the service generating
- // it. For example, it can be used to identify requests in the service's logs.
- RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
- // Any data that was used to serve this request. For example, an encrypted
- // stack trace that can be sent back to the service provider for debugging.
- ServingData string `protobuf:"bytes,2,opt,name=serving_data,json=servingData,proto3" json:"serving_data,omitempty"`
-}
-
-func (x *RequestInfo) Reset() {
- *x = RequestInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RequestInfo) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RequestInfo) ProtoMessage() {}
-
-func (x *RequestInfo) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RequestInfo.ProtoReflect.Descriptor instead.
-func (*RequestInfo) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *RequestInfo) GetRequestId() string {
- if x != nil {
- return x.RequestId
- }
- return ""
-}
-
-func (x *RequestInfo) GetServingData() string {
- if x != nil {
- return x.ServingData
- }
- return ""
-}
-
-// Describes the resource that is being accessed.
-type ResourceInfo struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // A name for the type of resource being accessed, e.g. "sql table",
- // "cloud storage bucket", "file", "Google calendar"; or the type URL
- // of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic".
- ResourceType string `protobuf:"bytes,1,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"`
- // The name of the resource being accessed. For example, a shared calendar
- // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current
- // error is
- // [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].
- ResourceName string `protobuf:"bytes,2,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
- // The owner of the resource (optional).
- // For example, "user:<owner email>" or "project:<Google developer project
- // id>".
- Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"`
- // Describes what error is encountered when accessing this resource.
- // For example, updating a cloud project may require the `writer` permission
- // on the developer console project.
- Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
-}
-
-func (x *ResourceInfo) Reset() {
- *x = ResourceInfo{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *ResourceInfo) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ResourceInfo) ProtoMessage() {}
-
-func (x *ResourceInfo) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ResourceInfo.ProtoReflect.Descriptor instead.
-func (*ResourceInfo) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *ResourceInfo) GetResourceType() string {
- if x != nil {
- return x.ResourceType
- }
- return ""
-}
-
-func (x *ResourceInfo) GetResourceName() string {
- if x != nil {
- return x.ResourceName
- }
- return ""
-}
-
-func (x *ResourceInfo) GetOwner() string {
- if x != nil {
- return x.Owner
- }
- return ""
-}
-
-func (x *ResourceInfo) GetDescription() string {
- if x != nil {
- return x.Description
- }
- return ""
-}
-
-// Provides links to documentation or for performing an out of band action.
-//
-// For example, if a quota check failed with an error indicating the calling
-// project hasn't enabled the accessed service, this can contain a URL pointing
-// directly to the right place in the developer console to flip the bit.
-type Help struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // URL(s) pointing to additional information on handling the current error.
- Links []*Help_Link `protobuf:"bytes,1,rep,name=links,proto3" json:"links,omitempty"`
-}
-
-func (x *Help) Reset() {
- *x = Help{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Help) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Help) ProtoMessage() {}
-
-func (x *Help) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Help.ProtoReflect.Descriptor instead.
-func (*Help) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *Help) GetLinks() []*Help_Link {
- if x != nil {
- return x.Links
- }
- return nil
-}
-
-// Provides a localized error message that is safe to return to the user
-// which can be attached to an RPC error.
-type LocalizedMessage struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The locale used following the specification defined at
- // https://www.rfc-editor.org/rfc/bcp/bcp47.txt.
- // Examples are: "en-US", "fr-CH", "es-MX"
- Locale string `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"`
- // The localized error message in the above locale.
- Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
-}
-
-func (x *LocalizedMessage) Reset() {
- *x = LocalizedMessage{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *LocalizedMessage) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*LocalizedMessage) ProtoMessage() {}
-
-func (x *LocalizedMessage) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use LocalizedMessage.ProtoReflect.Descriptor instead.
-func (*LocalizedMessage) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{9}
-}
-
-func (x *LocalizedMessage) GetLocale() string {
- if x != nil {
- return x.Locale
- }
- return ""
-}
-
-func (x *LocalizedMessage) GetMessage() string {
- if x != nil {
- return x.Message
- }
- return ""
-}
-
-// A message type used to describe a single quota violation. For example, a
-// daily quota or a custom quota that was exceeded.
-type QuotaFailure_Violation struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The subject on which the quota check failed.
- // For example, "clientip:<ip address of client>" or "project:<Google
- // developer project id>".
- Subject string `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"`
- // A description of how the quota check failed. Clients can use this
- // description to find more about the quota configuration in the service's
- // public documentation, or find the relevant quota limit to adjust through
- // developer console.
- //
- // For example: "Service disabled" or "Daily Limit for read operations
- // exceeded".
- Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
-}
-
-func (x *QuotaFailure_Violation) Reset() {
- *x = QuotaFailure_Violation{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *QuotaFailure_Violation) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*QuotaFailure_Violation) ProtoMessage() {}
-
-func (x *QuotaFailure_Violation) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use QuotaFailure_Violation.ProtoReflect.Descriptor instead.
-func (*QuotaFailure_Violation) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{3, 0}
-}
-
-func (x *QuotaFailure_Violation) GetSubject() string {
- if x != nil {
- return x.Subject
- }
- return ""
-}
-
-func (x *QuotaFailure_Violation) GetDescription() string {
- if x != nil {
- return x.Description
- }
- return ""
-}
-
-// A message type used to describe a single precondition failure.
-type PreconditionFailure_Violation struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The type of PreconditionFailure. We recommend using a service-specific
- // enum type to define the supported precondition violation subjects. For
- // example, "TOS" for "Terms of Service violation".
- Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
- // The subject, relative to the type, that failed.
- // For example, "google.com/cloud" relative to the "TOS" type would indicate
- // which terms of service is being referenced.
- Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"`
- // A description of how the precondition failed. Developers can use this
- // description to understand how to fix the failure.
- //
- // For example: "Terms of service not accepted".
- Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
-}
-
-func (x *PreconditionFailure_Violation) Reset() {
- *x = PreconditionFailure_Violation{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *PreconditionFailure_Violation) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*PreconditionFailure_Violation) ProtoMessage() {}
-
-func (x *PreconditionFailure_Violation) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use PreconditionFailure_Violation.ProtoReflect.Descriptor instead.
-func (*PreconditionFailure_Violation) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{4, 0}
-}
-
-func (x *PreconditionFailure_Violation) GetType() string {
- if x != nil {
- return x.Type
- }
- return ""
-}
-
-func (x *PreconditionFailure_Violation) GetSubject() string {
- if x != nil {
- return x.Subject
- }
- return ""
-}
-
-func (x *PreconditionFailure_Violation) GetDescription() string {
- if x != nil {
- return x.Description
- }
- return ""
-}
-
-// A message type used to describe a single bad request field.
-type BadRequest_FieldViolation struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // A path that leads to a field in the request body. The value will be a
- // sequence of dot-separated identifiers that identify a protocol buffer
- // field.
- //
- // Consider the following:
- //
- // message CreateContactRequest {
- // message EmailAddress {
- // enum Type {
- // TYPE_UNSPECIFIED = 0;
- // HOME = 1;
- // WORK = 2;
- // }
- //
- // optional string email = 1;
- // repeated EmailType type = 2;
- // }
- //
- // string full_name = 1;
- // repeated EmailAddress email_addresses = 2;
- // }
- //
- // In this example, in proto `field` could take one of the following values:
- //
- // - `full_name` for a violation in the `full_name` value
- // - `email_addresses[1].email` for a violation in the `email` field of the
- // first `email_addresses` message
- // - `email_addresses[3].type[2]` for a violation in the second `type`
- // value in the third `email_addresses` message.
- //
- // In JSON, the same values are represented as:
- //
- // - `fullName` for a violation in the `fullName` value
- // - `emailAddresses[1].email` for a violation in the `email` field of the
- // first `emailAddresses` message
- // - `emailAddresses[3].type[2]` for a violation in the second `type`
- // value in the third `emailAddresses` message.
- Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"`
- // A description of why the request element is bad.
- Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
- // The reason of the field-level error. This is a constant value that
- // identifies the proximate cause of the field-level error. It should
- // uniquely identify the type of the FieldViolation within the scope of the
- // google.rpc.ErrorInfo.domain. This should be at most 63
- // characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
- // which represents UPPER_SNAKE_CASE.
- Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"`
- // Provides a localized error message for field-level errors that is safe to
- // return to the API consumer.
- LocalizedMessage *LocalizedMessage `protobuf:"bytes,4,opt,name=localized_message,json=localizedMessage,proto3" json:"localized_message,omitempty"`
-}
-
-func (x *BadRequest_FieldViolation) Reset() {
- *x = BadRequest_FieldViolation{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *BadRequest_FieldViolation) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BadRequest_FieldViolation) ProtoMessage() {}
-
-func (x *BadRequest_FieldViolation) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use BadRequest_FieldViolation.ProtoReflect.Descriptor instead.
-func (*BadRequest_FieldViolation) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{5, 0}
-}
-
-func (x *BadRequest_FieldViolation) GetField() string {
- if x != nil {
- return x.Field
- }
- return ""
-}
-
-func (x *BadRequest_FieldViolation) GetDescription() string {
- if x != nil {
- return x.Description
- }
- return ""
-}
-
-func (x *BadRequest_FieldViolation) GetReason() string {
- if x != nil {
- return x.Reason
- }
- return ""
-}
-
-func (x *BadRequest_FieldViolation) GetLocalizedMessage() *LocalizedMessage {
- if x != nil {
- return x.LocalizedMessage
- }
- return nil
-}
-
-// Describes a URL link.
-type Help_Link struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Describes what the link offers.
- Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"`
- // The URL of the link.
- Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
-}
-
-func (x *Help_Link) Reset() {
- *x = Help_Link{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_error_details_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Help_Link) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Help_Link) ProtoMessage() {}
-
-func (x *Help_Link) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_error_details_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Help_Link.ProtoReflect.Descriptor instead.
-func (*Help_Link) Descriptor() ([]byte, []int) {
- return file_google_rpc_error_details_proto_rawDescGZIP(), []int{8, 0}
-}
-
-func (x *Help_Link) GetDescription() string {
- if x != nil {
- return x.Description
- }
- return ""
-}
-
-func (x *Help_Link) GetUrl() string {
- if x != nil {
- return x.Url
- }
- return ""
-}
-
-var File_google_rpc_error_details_proto protoreflect.FileDescriptor
-
-var file_google_rpc_error_details_proto_rawDesc = []byte{
- 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x72, 0x72,
- 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x1a, 0x1e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75,
- 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb9, 0x01, 0x0a,
- 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65,
- 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73,
- 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x6d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49,
- 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72,
- 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x64,
- 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x61,
- 0x79, 0x22, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23,
- 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x45, 0x6e, 0x74, 0x72,
- 0x69, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x9b, 0x01, 0x0a, 0x0c,
- 0x51, 0x75, 0x6f, 0x74, 0x61, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x0a,
- 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75,
- 0x6f, 0x74, 0x61, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x6f, 0x6c, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x1a, 0x47, 0x0a, 0x09, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
- 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
- 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
- 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x50, 0x72,
- 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72,
- 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72,
- 0x70, 0x63, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46,
- 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5b, 0x0a, 0x09,
- 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a,
- 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
- 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
- 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
- 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x02, 0x0a, 0x0a, 0x42, 0x61,
- 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c,
- 0x64, 0x5f, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e,
- 0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
- 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64,
- 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xab, 0x01, 0x0a, 0x0e, 0x46,
- 0x69, 0x65, 0x6c, 0x64, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a,
- 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69,
- 0x65, 0x6c, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
- 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x49, 0x0a,
- 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d,
- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65,
- 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
- 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65,
- 0x72, 0x76, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x90, 0x01, 0x0a, 0x0c, 0x52, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
- 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65,
- 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x04,
- 0x48, 0x65, 0x6c, 0x70, 0x12, 0x2b, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63,
- 0x2e, 0x48, 0x65, 0x6c, 0x70, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b,
- 0x73, 0x1a, 0x3a, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,
- 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
- 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75,
- 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x44, 0x0a,
- 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x42, 0x6c, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x11, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61,
- 0x69, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65,
- 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
- 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x72, 0x72, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
- 0x3b, 0x65, 0x72, 0x72, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0xa2, 0x02, 0x03, 0x52, 0x50,
- 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_rpc_error_details_proto_rawDescOnce sync.Once
- file_google_rpc_error_details_proto_rawDescData = file_google_rpc_error_details_proto_rawDesc
-)
-
-func file_google_rpc_error_details_proto_rawDescGZIP() []byte {
- file_google_rpc_error_details_proto_rawDescOnce.Do(func() {
- file_google_rpc_error_details_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_rpc_error_details_proto_rawDescData)
- })
- return file_google_rpc_error_details_proto_rawDescData
-}
-
-var file_google_rpc_error_details_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
-var file_google_rpc_error_details_proto_goTypes = []interface{}{
- (*ErrorInfo)(nil), // 0: google.rpc.ErrorInfo
- (*RetryInfo)(nil), // 1: google.rpc.RetryInfo
- (*DebugInfo)(nil), // 2: google.rpc.DebugInfo
- (*QuotaFailure)(nil), // 3: google.rpc.QuotaFailure
- (*PreconditionFailure)(nil), // 4: google.rpc.PreconditionFailure
- (*BadRequest)(nil), // 5: google.rpc.BadRequest
- (*RequestInfo)(nil), // 6: google.rpc.RequestInfo
- (*ResourceInfo)(nil), // 7: google.rpc.ResourceInfo
- (*Help)(nil), // 8: google.rpc.Help
- (*LocalizedMessage)(nil), // 9: google.rpc.LocalizedMessage
- nil, // 10: google.rpc.ErrorInfo.MetadataEntry
- (*QuotaFailure_Violation)(nil), // 11: google.rpc.QuotaFailure.Violation
- (*PreconditionFailure_Violation)(nil), // 12: google.rpc.PreconditionFailure.Violation
- (*BadRequest_FieldViolation)(nil), // 13: google.rpc.BadRequest.FieldViolation
- (*Help_Link)(nil), // 14: google.rpc.Help.Link
- (*durationpb.Duration)(nil), // 15: google.protobuf.Duration
-}
-var file_google_rpc_error_details_proto_depIdxs = []int32{
- 10, // 0: google.rpc.ErrorInfo.metadata:type_name -> google.rpc.ErrorInfo.MetadataEntry
- 15, // 1: google.rpc.RetryInfo.retry_delay:type_name -> google.protobuf.Duration
- 11, // 2: google.rpc.QuotaFailure.violations:type_name -> google.rpc.QuotaFailure.Violation
- 12, // 3: google.rpc.PreconditionFailure.violations:type_name -> google.rpc.PreconditionFailure.Violation
- 13, // 4: google.rpc.BadRequest.field_violations:type_name -> google.rpc.BadRequest.FieldViolation
- 14, // 5: google.rpc.Help.links:type_name -> google.rpc.Help.Link
- 9, // 6: google.rpc.BadRequest.FieldViolation.localized_message:type_name -> google.rpc.LocalizedMessage
- 7, // [7:7] is the sub-list for method output_type
- 7, // [7:7] is the sub-list for method input_type
- 7, // [7:7] is the sub-list for extension type_name
- 7, // [7:7] is the sub-list for extension extendee
- 0, // [0:7] is the sub-list for field type_name
-}
-
-func init() { file_google_rpc_error_details_proto_init() }
-func file_google_rpc_error_details_proto_init() {
- if File_google_rpc_error_details_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_google_rpc_error_details_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ErrorInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RetryInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DebugInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*QuotaFailure); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*PreconditionFailure); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*BadRequest); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RequestInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ResourceInfo); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Help); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LocalizedMessage); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*QuotaFailure_Violation); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*PreconditionFailure_Violation); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*BadRequest_FieldViolation); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_google_rpc_error_details_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Help_Link); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_rpc_error_details_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 15,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_rpc_error_details_proto_goTypes,
- DependencyIndexes: file_google_rpc_error_details_proto_depIdxs,
- MessageInfos: file_google_rpc_error_details_proto_msgTypes,
- }.Build()
- File_google_rpc_error_details_proto = out.File
- file_google_rpc_error_details_proto_rawDesc = nil
- file_google_rpc_error_details_proto_goTypes = nil
- file_google_rpc_error_details_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go
deleted file mode 100644
index 6ad1b1c1d..000000000
--- a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright 2024 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.26.0
-// protoc v4.24.4
-// source: google/rpc/status.proto
-
-package status
-
-import (
- reflect "reflect"
- sync "sync"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- anypb "google.golang.org/protobuf/types/known/anypb"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// The `Status` type defines a logical error model that is suitable for
-// different programming environments, including REST APIs and RPC APIs. It is
-// used by [gRPC](https://github.com/grpc). Each `Status` message contains
-// three pieces of data: error code, error message, and error details.
-//
-// You can find out more about this error model and how to work with it in the
-// [API Design Guide](https://cloud.google.com/apis/design/errors).
-type Status struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The status code, which should be an enum value of
- // [google.rpc.Code][google.rpc.Code].
- Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
- // A developer-facing error message, which should be in English. Any
- // user-facing error message should be localized and sent in the
- // [google.rpc.Status.details][google.rpc.Status.details] field, or localized
- // by the client.
- Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
- // A list of messages that carry the error details. There is a common set of
- // message types for APIs to use.
- Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"`
-}
-
-func (x *Status) Reset() {
- *x = Status{}
- if protoimpl.UnsafeEnabled {
- mi := &file_google_rpc_status_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Status) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Status) ProtoMessage() {}
-
-func (x *Status) ProtoReflect() protoreflect.Message {
- mi := &file_google_rpc_status_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Status.ProtoReflect.Descriptor instead.
-func (*Status) Descriptor() ([]byte, []int) {
- return file_google_rpc_status_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Status) GetCode() int32 {
- if x != nil {
- return x.Code
- }
- return 0
-}
-
-func (x *Status) GetMessage() string {
- if x != nil {
- return x.Message
- }
- return ""
-}
-
-func (x *Status) GetDetails() []*anypb.Any {
- if x != nil {
- return x.Details
- }
- return nil
-}
-
-var File_google_rpc_status_proto protoreflect.FileDescriptor
-
-var file_google_rpc_status_proto_rawDesc = []byte{
- 0x0a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61,
- 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x72, 0x70, 0x63, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x22, 0x66, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f,
- 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18,
- 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61,
- 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
- 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x61, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x0b, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
- 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3b, 0x73, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_rpc_status_proto_rawDescOnce sync.Once
- file_google_rpc_status_proto_rawDescData = file_google_rpc_status_proto_rawDesc
-)
-
-func file_google_rpc_status_proto_rawDescGZIP() []byte {
- file_google_rpc_status_proto_rawDescOnce.Do(func() {
- file_google_rpc_status_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_rpc_status_proto_rawDescData)
- })
- return file_google_rpc_status_proto_rawDescData
-}
-
-var file_google_rpc_status_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_google_rpc_status_proto_goTypes = []interface{}{
- (*Status)(nil), // 0: google.rpc.Status
- (*anypb.Any)(nil), // 1: google.protobuf.Any
-}
-var file_google_rpc_status_proto_depIdxs = []int32{
- 1, // 0: google.rpc.Status.details:type_name -> google.protobuf.Any
- 1, // [1:1] is the sub-list for method output_type
- 1, // [1:1] is the sub-list for method input_type
- 1, // [1:1] is the sub-list for extension type_name
- 1, // [1:1] is the sub-list for extension extendee
- 0, // [0:1] is the sub-list for field type_name
-}
-
-func init() { file_google_rpc_status_proto_init() }
-func file_google_rpc_status_proto_init() {
- if File_google_rpc_status_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_google_rpc_status_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Status); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_rpc_status_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_rpc_status_proto_goTypes,
- DependencyIndexes: file_google_rpc_status_proto_depIdxs,
- MessageInfos: file_google_rpc_status_proto_msgTypes,
- }.Build()
- File_google_rpc_status_proto = out.File
- file_google_rpc_status_proto_rawDesc = nil
- file_google_rpc_status_proto_goTypes = nil
- file_google_rpc_status_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/grpc/AUTHORS b/vendor/google.golang.org/grpc/AUTHORS
deleted file mode 100644
index e491a9e7f..000000000
--- a/vendor/google.golang.org/grpc/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-Google Inc.
diff --git a/vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md b/vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md
deleted file mode 100644
index 9d4213ebc..000000000
--- a/vendor/google.golang.org/grpc/CODE-OF-CONDUCT.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## Community Code of Conduct
-
-gRPC follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).
diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md
deleted file mode 100644
index d9bfa6e1e..000000000
--- a/vendor/google.golang.org/grpc/CONTRIBUTING.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# How to contribute
-
-We definitely welcome your patches and contributions to gRPC! Please read the gRPC
-organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md)
-and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding.
-
-If you are new to GitHub, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/)
-
-## Legal requirements
-
-In order to protect both you and ourselves, you will need to sign the
-[Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf).
-
-## Guidelines for Pull Requests
-How to get your contributions merged smoothly and quickly.
-
-- Create **small PRs** that are narrowly focused on **addressing a single
- concern**. We often times receive PRs that are trying to fix several things at
- a time, but only one fix is considered acceptable, nothing gets merged and
- both author's & review's time is wasted. Create more PRs to address different
- concerns and everyone will be happy.
-
-- If you are searching for features to work on, issues labeled [Status: Help
- Wanted](https://github.com/grpc/grpc-go/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Status%3A+Help+Wanted%22)
- is a great place to start. These issues are well-documented and usually can be
- resolved with a single pull request.
-
-- If you are adding a new file, make sure it has the copyright message template
- at the top as a comment. You can copy over the message from an existing file
- and update the year.
-
-- The grpc package should only depend on standard Go packages and a small number
- of exceptions. If your contribution introduces new dependencies which are NOT
- in the [list](https://godoc.org/google.golang.org/grpc?imports), you need a
- discussion with gRPC-Go authors and consultants.
-
-- For speculative changes, consider opening an issue and discussing it first. If
- you are suggesting a behavioral or API change, consider starting with a [gRFC
- proposal](https://github.com/grpc/proposal).
-
-- Provide a good **PR description** as a record of **what** change is being made
- and **why** it was made. Link to a GitHub issue if it exists.
-
-- If you want to fix formatting or style, consider whether your changes are an
- obvious improvement or might be considered a personal preference. If a style
- change is based on preference, it likely will not be accepted. If it corrects
- widely agreed-upon anti-patterns, then please do create a PR and explain the
- benefits of the change.
-
-- Unless your PR is trivial, you should expect there will be reviewer comments
- that you'll need to address before merging. We'll mark it as `Status: Requires
- Reporter Clarification` if we expect you to respond to these comments in a
- timely manner. If the PR remains inactive for 6 days, it will be marked as
- `stale` and automatically close 7 days after that if we don't hear back from
- you.
-
-- Maintain **clean commit history** and use **meaningful commit messages**. PRs
- with messy commit history are difficult to review and won't be merged. Use
- `rebase -i upstream/master` to curate your commit history and/or to bring in
- latest changes from master (but avoid rebasing in the middle of a code
- review).
-
-- Keep your PR up to date with upstream/master (if there are merge conflicts, we
- can't really merge your change).
-
-- **All tests need to be passing** before your change can be merged. We
- recommend you **run tests locally** before creating your PR to catch breakages
- early on.
- - `./scripts/vet.sh` to catch vet errors
- - `go test -cpu 1,4 -timeout 7m ./...` to run the tests
- - `go test -race -cpu 1,4 -timeout 7m ./...` to run tests in race mode
-
-- Exceptions to the rules can be made if there's a compelling reason for doing so.
diff --git a/vendor/google.golang.org/grpc/GOVERNANCE.md b/vendor/google.golang.org/grpc/GOVERNANCE.md
deleted file mode 100644
index d6ff26747..000000000
--- a/vendor/google.golang.org/grpc/GOVERNANCE.md
+++ /dev/null
@@ -1 +0,0 @@
-This repository is governed by the gRPC organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md).
diff --git a/vendor/google.golang.org/grpc/LICENSE b/vendor/google.golang.org/grpc/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/vendor/google.golang.org/grpc/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/google.golang.org/grpc/MAINTAINERS.md b/vendor/google.golang.org/grpc/MAINTAINERS.md
deleted file mode 100644
index 5d4096d46..000000000
--- a/vendor/google.golang.org/grpc/MAINTAINERS.md
+++ /dev/null
@@ -1,36 +0,0 @@
-This page lists all active maintainers of this repository. If you were a
-maintainer and would like to add your name to the Emeritus list, please send us a
-PR.
-
-See [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md)
-for governance guidelines and how to become a maintainer.
-See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md)
-for general contribution guidelines.
-
-## Maintainers (in alphabetical order)
-
-- [aranjans](https://github.com/aranjans), Google LLC
-- [arjan-bal](https://github.com/arjan-bal), Google LLC
-- [arvindbr8](https://github.com/arvindbr8), Google LLC
-- [atollena](https://github.com/atollena), Datadog, Inc.
-- [dfawley](https://github.com/dfawley), Google LLC
-- [easwars](https://github.com/easwars), Google LLC
-- [erm-g](https://github.com/erm-g), Google LLC
-- [gtcooke94](https://github.com/gtcooke94), Google LLC
-- [purnesh42h](https://github.com/purnesh42h), Google LLC
-- [zasweq](https://github.com/zasweq), Google LLC
-
-## Emeritus Maintainers (in alphabetical order)
-- [adelez](https://github.com/adelez)
-- [canguler](https://github.com/canguler)
-- [cesarghali](https://github.com/cesarghali)
-- [iamqizhao](https://github.com/iamqizhao)
-- [jeanbza](https://github.com/jeanbza)
-- [jtattermusch](https://github.com/jtattermusch)
-- [lyuxuan](https://github.com/lyuxuan)
-- [makmukhi](https://github.com/makmukhi)
-- [matt-kwong](https://github.com/matt-kwong)
-- [menghanl](https://github.com/menghanl)
-- [nicolasnoble](https://github.com/nicolasnoble)
-- [srini100](https://github.com/srini100)
-- [yongni](https://github.com/yongni)
diff --git a/vendor/google.golang.org/grpc/Makefile b/vendor/google.golang.org/grpc/Makefile
deleted file mode 100644
index be38384ff..000000000
--- a/vendor/google.golang.org/grpc/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-all: vet test testrace
-
-build:
- go build google.golang.org/grpc/...
-
-clean:
- go clean -i google.golang.org/grpc/...
-
-deps:
- GO111MODULE=on go get -d -v google.golang.org/grpc/...
-
-proto:
- @ if ! which protoc > /dev/null; then \
- echo "error: protoc not installed" >&2; \
- exit 1; \
- fi
- go generate google.golang.org/grpc/...
-
-test:
- go test -cpu 1,4 -timeout 7m google.golang.org/grpc/...
-
-testsubmodule:
- cd security/advancedtls && go test -cpu 1,4 -timeout 7m google.golang.org/grpc/security/advancedtls/...
- cd security/authorization && go test -cpu 1,4 -timeout 7m google.golang.org/grpc/security/authorization/...
-
-testrace:
- go test -race -cpu 1,4 -timeout 7m google.golang.org/grpc/...
-
-testdeps:
- GO111MODULE=on go get -d -v -t google.golang.org/grpc/...
-
-vet: vetdeps
- ./scripts/vet.sh
-
-vetdeps:
- ./scripts/vet.sh -install
-
-.PHONY: \
- all \
- build \
- clean \
- deps \
- proto \
- test \
- testsubmodule \
- testrace \
- testdeps \
- vet \
- vetdeps
diff --git a/vendor/google.golang.org/grpc/NOTICE.txt b/vendor/google.golang.org/grpc/NOTICE.txt
deleted file mode 100644
index 530197749..000000000
--- a/vendor/google.golang.org/grpc/NOTICE.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2014 gRPC authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md
deleted file mode 100644
index b572707c6..000000000
--- a/vendor/google.golang.org/grpc/README.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# gRPC-Go
-
-[![GoDoc](https://pkg.go.dev/badge/google.golang.org/grpc)][API]
-[![GoReportCard](https://goreportcard.com/badge/grpc/grpc-go)](https://goreportcard.com/report/github.com/grpc/grpc-go)
-[![codecov](https://codecov.io/gh/grpc/grpc-go/graph/badge.svg)](https://codecov.io/gh/grpc/grpc-go)
-
-The [Go][] implementation of [gRPC][]: A high performance, open source, general
-RPC framework that puts mobile and HTTP/2 first. For more information see the
-[Go gRPC docs][], or jump directly into the [quick start][].
-
-## Prerequisites
-
-- **[Go][]**: any one of the **two latest major** [releases][go-releases].
-
-## Installation
-
-Simply add the following import to your code, and then `go [build|run|test]`
-will automatically fetch the necessary dependencies:
-
-
-```go
-import "google.golang.org/grpc"
-```
-
-> **Note:** If you are trying to access `grpc-go` from **China**, see the
-> [FAQ](#FAQ) below.
-
-## Learn more
-
-- [Go gRPC docs][], which include a [quick start][] and [API
- reference][API] among other resources
-- [Low-level technical docs](Documentation) from this repository
-- [Performance benchmark][]
-- [Examples](examples)
-
-## FAQ
-
-### I/O Timeout Errors
-
-The `golang.org` domain may be blocked from some countries. `go get` usually
-produces an error like the following when this happens:
-
-```console
-$ go get -u google.golang.org/grpc
-package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
-```
-
-To build Go code, there are several options:
-
-- Set up a VPN and access google.golang.org through that.
-
-- With Go module support: it is possible to use the `replace` feature of `go
- mod` to create aliases for golang.org packages. In your project's directory:
-
- ```sh
- go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest
- go mod tidy
- go mod vendor
- go build -mod=vendor
- ```
-
- Again, this will need to be done for all transitive dependencies hosted on
- golang.org as well. For details, refer to [golang/go issue
- #28652](https://github.com/golang/go/issues/28652).
-
-### Compiling error, undefined: grpc.SupportPackageIsVersion
-
-Please update to the latest version of gRPC-Go using
-`go get google.golang.org/grpc`.
-
-### How to turn on logging
-
-The default logger is controlled by environment variables. Turn everything on
-like this:
-
-```console
-$ export GRPC_GO_LOG_VERBOSITY_LEVEL=99
-$ export GRPC_GO_LOG_SEVERITY_LEVEL=info
-```
-
-### The RPC failed with error `"code = Unavailable desc = transport is closing"`
-
-This error means the connection the RPC is using was closed, and there are many
-possible reasons, including:
- 1. mis-configured transport credentials, connection failed on handshaking
- 1. bytes disrupted, possibly by a proxy in between
- 1. server shutdown
- 1. Keepalive parameters caused connection shutdown, for example if you have
- configured your server to terminate connections regularly to [trigger DNS
- lookups](https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779).
- If this is the case, you may want to increase your
- [MaxConnectionAgeGrace](https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters),
- to allow longer RPC calls to finish.
-
-It can be tricky to debug this because the error happens on the client side but
-the root cause of the connection being closed is on the server side. Turn on
-logging on __both client and server__, and see if there are any transport
-errors.
-
-[API]: https://pkg.go.dev/google.golang.org/grpc
-[Go]: https://golang.org
-[Go module]: https://github.com/golang/go/wiki/Modules
-[gRPC]: https://grpc.io
-[Go gRPC docs]: https://grpc.io/docs/languages/go
-[Performance benchmark]: https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5180705743044608
-[quick start]: https://grpc.io/docs/languages/go/quickstart
-[go-releases]: https://golang.org/doc/devel/release.html
diff --git a/vendor/google.golang.org/grpc/SECURITY.md b/vendor/google.golang.org/grpc/SECURITY.md
deleted file mode 100644
index abab27937..000000000
--- a/vendor/google.golang.org/grpc/SECURITY.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Security Policy
-
-For information on gRPC Security Policy and reporting potential security issues, please see [gRPC CVE Process](https://github.com/grpc/proposal/blob/master/P4-grpc-cve-process.md).
diff --git a/vendor/google.golang.org/grpc/attributes/attributes.go b/vendor/google.golang.org/grpc/attributes/attributes.go
deleted file mode 100644
index 52d530d7a..000000000
--- a/vendor/google.golang.org/grpc/attributes/attributes.go
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *
- * Copyright 2019 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package attributes defines a generic key/value store used in various gRPC
-// components.
-//
-// # Experimental
-//
-// Notice: This package is EXPERIMENTAL and may be changed or removed in a
-// later release.
-package attributes
-
-import (
- "fmt"
- "strings"
-)
-
-// Attributes is an immutable struct for storing and retrieving generic
-// key/value pairs. Keys must be hashable, and users should define their own
-// types for keys. Values should not be modified after they are added to an
-// Attributes or if they were received from one. If values implement 'Equal(o
-// any) bool', it will be called by (*Attributes).Equal to determine whether
-// two values with the same key should be considered equal.
-type Attributes struct {
- m map[any]any
-}
-
-// New returns a new Attributes containing the key/value pair.
-func New(key, value any) *Attributes {
- return &Attributes{m: map[any]any{key: value}}
-}
-
-// WithValue returns a new Attributes containing the previous keys and values
-// and the new key/value pair. If the same key appears multiple times, the
-// last value overwrites all previous values for that key. To remove an
-// existing key, use a nil value. value should not be modified later.
-func (a *Attributes) WithValue(key, value any) *Attributes {
- if a == nil {
- return New(key, value)
- }
- n := &Attributes{m: make(map[any]any, len(a.m)+1)}
- for k, v := range a.m {
- n.m[k] = v
- }
- n.m[key] = value
- return n
-}
-
-// Value returns the value associated with these attributes for key, or nil if
-// no value is associated with key. The returned value should not be modified.
-func (a *Attributes) Value(key any) any {
- if a == nil {
- return nil
- }
- return a.m[key]
-}
-
-// Equal returns whether a and o are equivalent. If 'Equal(o any) bool' is
-// implemented for a value in the attributes, it is called to determine if the
-// value matches the one stored in the other attributes. If Equal is not
-// implemented, standard equality is used to determine if the two values are
-// equal. Note that some types (e.g. maps) aren't comparable by default, so
-// they must be wrapped in a struct, or in an alias type, with Equal defined.
-func (a *Attributes) Equal(o *Attributes) bool {
- if a == nil && o == nil {
- return true
- }
- if a == nil || o == nil {
- return false
- }
- if len(a.m) != len(o.m) {
- return false
- }
- for k, v := range a.m {
- ov, ok := o.m[k]
- if !ok {
- // o missing element of a
- return false
- }
- if eq, ok := v.(interface{ Equal(o any) bool }); ok {
- if !eq.Equal(ov) {
- return false
- }
- } else if v != ov {
- // Fallback to a standard equality check if Value is unimplemented.
- return false
- }
- }
- return true
-}
-
-// String prints the attribute map. If any key or values throughout the map
-// implement fmt.Stringer, it calls that method and appends.
-func (a *Attributes) String() string {
- var sb strings.Builder
- sb.WriteString("{")
- first := true
- for k, v := range a.m {
- if !first {
- sb.WriteString(", ")
- }
- sb.WriteString(fmt.Sprintf("%q: %q ", str(k), str(v)))
- first = false
- }
- sb.WriteString("}")
- return sb.String()
-}
-
-func str(x any) (s string) {
- if v, ok := x.(fmt.Stringer); ok {
- return fmt.Sprint(v)
- } else if v, ok := x.(string); ok {
- return v
- }
- return fmt.Sprintf("<%p>", x)
-}
-
-// MarshalJSON helps implement the json.Marshaler interface, thereby rendering
-// the Attributes correctly when printing (via pretty.JSON) structs containing
-// Attributes as fields.
-//
-// Is it impossible to unmarshal attributes from a JSON representation and this
-// method is meant only for debugging purposes.
-func (a *Attributes) MarshalJSON() ([]byte, error) {
- return []byte(a.String()), nil
-}
diff --git a/vendor/google.golang.org/grpc/backoff.go b/vendor/google.golang.org/grpc/backoff.go
deleted file mode 100644
index 29475e31c..000000000
--- a/vendor/google.golang.org/grpc/backoff.go
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// See internal/backoff package for the backoff implementation. This file is
-// kept for the exported types and API backward compatibility.
-
-package grpc
-
-import (
- "time"
-
- "google.golang.org/grpc/backoff"
-)
-
-// DefaultBackoffConfig uses values specified for backoff in
-// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
-//
-// Deprecated: use ConnectParams instead. Will be supported throughout 1.x.
-var DefaultBackoffConfig = BackoffConfig{
- MaxDelay: 120 * time.Second,
-}
-
-// BackoffConfig defines the parameters for the default gRPC backoff strategy.
-//
-// Deprecated: use ConnectParams instead. Will be supported throughout 1.x.
-type BackoffConfig struct {
- // MaxDelay is the upper bound of backoff delay.
- MaxDelay time.Duration
-}
-
-// ConnectParams defines the parameters for connecting and retrying. Users are
-// encouraged to use this instead of the BackoffConfig type defined above. See
-// here for more details:
-// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type ConnectParams struct {
- // Backoff specifies the configuration options for connection backoff.
- Backoff backoff.Config
- // MinConnectTimeout is the minimum amount of time we are willing to give a
- // connection to complete.
- MinConnectTimeout time.Duration
-}
diff --git a/vendor/google.golang.org/grpc/backoff/backoff.go b/vendor/google.golang.org/grpc/backoff/backoff.go
deleted file mode 100644
index d7b40b7cb..000000000
--- a/vendor/google.golang.org/grpc/backoff/backoff.go
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * Copyright 2019 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package backoff provides configuration options for backoff.
-//
-// More details can be found at:
-// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
-//
-// All APIs in this package are experimental.
-package backoff
-
-import "time"
-
-// Config defines the configuration options for backoff.
-type Config struct {
- // BaseDelay is the amount of time to backoff after the first failure.
- BaseDelay time.Duration
- // Multiplier is the factor with which to multiply backoffs after a
- // failed retry. Should ideally be greater than 1.
- Multiplier float64
- // Jitter is the factor with which backoffs are randomized.
- Jitter float64
- // MaxDelay is the upper bound of backoff delay.
- MaxDelay time.Duration
-}
-
-// DefaultConfig is a backoff configuration with the default values specified
-// at https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
-//
-// This should be useful for callers who want to configure backoff with
-// non-default values only for a subset of the options.
-var DefaultConfig = Config{
- BaseDelay: 1.0 * time.Second,
- Multiplier: 1.6,
- Jitter: 0.2,
- MaxDelay: 120 * time.Second,
-}
diff --git a/vendor/google.golang.org/grpc/balancer/balancer.go b/vendor/google.golang.org/grpc/balancer/balancer.go
deleted file mode 100644
index 382ad6941..000000000
--- a/vendor/google.golang.org/grpc/balancer/balancer.go
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package balancer defines APIs for load balancing in gRPC.
-// All APIs in this package are experimental.
-package balancer
-
-import (
- "context"
- "encoding/json"
- "errors"
- "net"
- "strings"
-
- "google.golang.org/grpc/channelz"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/credentials"
- estats "google.golang.org/grpc/experimental/stats"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/serviceconfig"
-)
-
-var (
- // m is a map from name to balancer builder.
- m = make(map[string]Builder)
-
- logger = grpclog.Component("balancer")
-)
-
-// Register registers the balancer builder to the balancer map. b.Name
-// (lowercased) will be used as the name registered with this builder. If the
-// Builder implements ConfigParser, ParseConfig will be called when new service
-// configs are received by the resolver, and the result will be provided to the
-// Balancer in UpdateClientConnState.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple Balancers are
-// registered with the same name, the one registered last will take effect.
-func Register(b Builder) {
- name := strings.ToLower(b.Name())
- if name != b.Name() {
- // TODO: Skip the use of strings.ToLower() to index the map after v1.59
- // is released to switch to case sensitive balancer registry. Also,
- // remove this warning and update the docstrings for Register and Get.
- logger.Warningf("Balancer registered with name %q. grpc-go will be switching to case sensitive balancer registries soon", b.Name())
- }
- m[name] = b
-}
-
-// unregisterForTesting deletes the balancer with the given name from the
-// balancer map.
-//
-// This function is not thread-safe.
-func unregisterForTesting(name string) {
- delete(m, name)
-}
-
-func init() {
- internal.BalancerUnregister = unregisterForTesting
- internal.ConnectedAddress = connectedAddress
- internal.SetConnectedAddress = setConnectedAddress
-}
-
-// Get returns the resolver builder registered with the given name.
-// Note that the compare is done in a case-insensitive fashion.
-// If no builder is register with the name, nil will be returned.
-func Get(name string) Builder {
- if strings.ToLower(name) != name {
- // TODO: Skip the use of strings.ToLower() to index the map after v1.59
- // is released to switch to case sensitive balancer registry. Also,
- // remove this warning and update the docstrings for Register and Get.
- logger.Warningf("Balancer retrieved for name %q. grpc-go will be switching to case sensitive balancer registries soon", name)
- }
- if b, ok := m[strings.ToLower(name)]; ok {
- return b
- }
- return nil
-}
-
-// NewSubConnOptions contains options to create new SubConn.
-type NewSubConnOptions struct {
- // CredsBundle is the credentials bundle that will be used in the created
- // SubConn. If it's nil, the original creds from grpc DialOptions will be
- // used.
- //
- // Deprecated: Use the Attributes field in resolver.Address to pass
- // arbitrary data to the credential handshaker.
- CredsBundle credentials.Bundle
- // HealthCheckEnabled indicates whether health check service should be
- // enabled on this SubConn
- HealthCheckEnabled bool
- // StateListener is called when the state of the subconn changes. If nil,
- // Balancer.UpdateSubConnState will be called instead. Will never be
- // invoked until after Connect() is called on the SubConn created with
- // these options.
- StateListener func(SubConnState)
-}
-
-// State contains the balancer's state relevant to the gRPC ClientConn.
-type State struct {
- // State contains the connectivity state of the balancer, which is used to
- // determine the state of the ClientConn.
- ConnectivityState connectivity.State
- // Picker is used to choose connections (SubConns) for RPCs.
- Picker Picker
-}
-
-// ClientConn represents a gRPC ClientConn.
-//
-// This interface is to be implemented by gRPC. Users should not need a
-// brand new implementation of this interface. For the situations like
-// testing, the new implementation should embed this interface. This allows
-// gRPC to add new methods to this interface.
-type ClientConn interface {
- // NewSubConn is called by balancer to create a new SubConn.
- // It doesn't block and wait for the connections to be established.
- // Behaviors of the SubConn can be controlled by options.
- //
- // Deprecated: please be aware that in a future version, SubConns will only
- // support one address per SubConn.
- NewSubConn([]resolver.Address, NewSubConnOptions) (SubConn, error)
- // RemoveSubConn removes the SubConn from ClientConn.
- // The SubConn will be shutdown.
- //
- // Deprecated: use SubConn.Shutdown instead.
- RemoveSubConn(SubConn)
- // UpdateAddresses updates the addresses used in the passed in SubConn.
- // gRPC checks if the currently connected address is still in the new list.
- // If so, the connection will be kept. Else, the connection will be
- // gracefully closed, and a new connection will be created.
- //
- // This may trigger a state transition for the SubConn.
- //
- // Deprecated: this method will be removed. Create new SubConns for new
- // addresses instead.
- UpdateAddresses(SubConn, []resolver.Address)
-
- // UpdateState notifies gRPC that the balancer's internal state has
- // changed.
- //
- // gRPC will update the connectivity state of the ClientConn, and will call
- // Pick on the new Picker to pick new SubConns.
- UpdateState(State)
-
- // ResolveNow is called by balancer to notify gRPC to do a name resolving.
- ResolveNow(resolver.ResolveNowOptions)
-
- // Target returns the dial target for this ClientConn.
- //
- // Deprecated: Use the Target field in the BuildOptions instead.
- Target() string
-}
-
-// BuildOptions contains additional information for Build.
-type BuildOptions struct {
- // DialCreds is the transport credentials to use when communicating with a
- // remote load balancer server. Balancer implementations which do not
- // communicate with a remote load balancer server can ignore this field.
- DialCreds credentials.TransportCredentials
- // CredsBundle is the credentials bundle to use when communicating with a
- // remote load balancer server. Balancer implementations which do not
- // communicate with a remote load balancer server can ignore this field.
- CredsBundle credentials.Bundle
- // Dialer is the custom dialer to use when communicating with a remote load
- // balancer server. Balancer implementations which do not communicate with a
- // remote load balancer server can ignore this field.
- Dialer func(context.Context, string) (net.Conn, error)
- // Authority is the server name to use as part of the authentication
- // handshake when communicating with a remote load balancer server. Balancer
- // implementations which do not communicate with a remote load balancer
- // server can ignore this field.
- Authority string
- // ChannelzParent is the parent ClientConn's channelz channel.
- ChannelzParent channelz.Identifier
- // CustomUserAgent is the custom user agent set on the parent ClientConn.
- // The balancer should set the same custom user agent if it creates a
- // ClientConn.
- CustomUserAgent string
- // Target contains the parsed address info of the dial target. It is the
- // same resolver.Target as passed to the resolver. See the documentation for
- // the resolver.Target type for details about what it contains.
- Target resolver.Target
- // MetricsRecorder is the metrics recorder that balancers can use to record
- // metrics. Balancer implementations which do not register metrics on
- // metrics registry and record on them can ignore this field.
- MetricsRecorder estats.MetricsRecorder
-}
-
-// Builder creates a balancer.
-type Builder interface {
- // Build creates a new balancer with the ClientConn.
- Build(cc ClientConn, opts BuildOptions) Balancer
- // Name returns the name of balancers built by this builder.
- // It will be used to pick balancers (for example in service config).
- Name() string
-}
-
-// ConfigParser parses load balancer configs.
-type ConfigParser interface {
- // ParseConfig parses the JSON load balancer config provided into an
- // internal form or returns an error if the config is invalid. For future
- // compatibility reasons, unknown fields in the config should be ignored.
- ParseConfig(LoadBalancingConfigJSON json.RawMessage) (serviceconfig.LoadBalancingConfig, error)
-}
-
-// PickInfo contains additional information for the Pick operation.
-type PickInfo struct {
- // FullMethodName is the method name that NewClientStream() is called
- // with. The canonical format is /service/Method.
- FullMethodName string
- // Ctx is the RPC's context, and may contain relevant RPC-level information
- // like the outgoing header metadata.
- Ctx context.Context
-}
-
-// DoneInfo contains additional information for done.
-type DoneInfo struct {
- // Err is the rpc error the RPC finished with. It could be nil.
- Err error
- // Trailer contains the metadata from the RPC's trailer, if present.
- Trailer metadata.MD
- // BytesSent indicates if any bytes have been sent to the server.
- BytesSent bool
- // BytesReceived indicates if any byte has been received from the server.
- BytesReceived bool
- // ServerLoad is the load received from server. It's usually sent as part of
- // trailing metadata.
- //
- // The only supported type now is *orca_v3.LoadReport.
- ServerLoad any
-}
-
-var (
- // ErrNoSubConnAvailable indicates no SubConn is available for pick().
- // gRPC will block the RPC until a new picker is available via UpdateState().
- ErrNoSubConnAvailable = errors.New("no SubConn is available")
- // ErrTransientFailure indicates all SubConns are in TransientFailure.
- // WaitForReady RPCs will block, non-WaitForReady RPCs will fail.
- //
- // Deprecated: return an appropriate error based on the last resolution or
- // connection attempt instead. The behavior is the same for any non-gRPC
- // status error.
- ErrTransientFailure = errors.New("all SubConns are in TransientFailure")
-)
-
-// PickResult contains information related to a connection chosen for an RPC.
-type PickResult struct {
- // SubConn is the connection to use for this pick, if its state is Ready.
- // If the state is not Ready, gRPC will block the RPC until a new Picker is
- // provided by the balancer (using ClientConn.UpdateState). The SubConn
- // must be one returned by ClientConn.NewSubConn.
- SubConn SubConn
-
- // Done is called when the RPC is completed. If the SubConn is not ready,
- // this will be called with a nil parameter. If the SubConn is not a valid
- // type, Done may not be called. May be nil if the balancer does not wish
- // to be notified when the RPC completes.
- Done func(DoneInfo)
-
- // Metadata provides a way for LB policies to inject arbitrary per-call
- // metadata. Any metadata returned here will be merged with existing
- // metadata added by the client application.
- //
- // LB policies with child policies are responsible for propagating metadata
- // injected by their children to the ClientConn, as part of Pick().
- Metadata metadata.MD
-}
-
-// TransientFailureError returns e. It exists for backward compatibility and
-// will be deleted soon.
-//
-// Deprecated: no longer necessary, picker errors are treated this way by
-// default.
-func TransientFailureError(e error) error { return e }
-
-// Picker is used by gRPC to pick a SubConn to send an RPC.
-// Balancer is expected to generate a new picker from its snapshot every time its
-// internal state has changed.
-//
-// The pickers used by gRPC can be updated by ClientConn.UpdateState().
-type Picker interface {
- // Pick returns the connection to use for this RPC and related information.
- //
- // Pick should not block. If the balancer needs to do I/O or any blocking
- // or time-consuming work to service this call, it should return
- // ErrNoSubConnAvailable, and the Pick call will be repeated by gRPC when
- // the Picker is updated (using ClientConn.UpdateState).
- //
- // If an error is returned:
- //
- // - If the error is ErrNoSubConnAvailable, gRPC will block until a new
- // Picker is provided by the balancer (using ClientConn.UpdateState).
- //
- // - If the error is a status error (implemented by the grpc/status
- // package), gRPC will terminate the RPC with the code and message
- // provided.
- //
- // - For all other errors, wait for ready RPCs will wait, but non-wait for
- // ready RPCs will be terminated with this error's Error() string and
- // status code Unavailable.
- Pick(info PickInfo) (PickResult, error)
-}
-
-// Balancer takes input from gRPC, manages SubConns, and collects and aggregates
-// the connectivity states.
-//
-// It also generates and updates the Picker used by gRPC to pick SubConns for RPCs.
-//
-// UpdateClientConnState, ResolverError, UpdateSubConnState, and Close are
-// guaranteed to be called synchronously from the same goroutine. There's no
-// guarantee on picker.Pick, it may be called anytime.
-type Balancer interface {
- // UpdateClientConnState is called by gRPC when the state of the ClientConn
- // changes. If the error returned is ErrBadResolverState, the ClientConn
- // will begin calling ResolveNow on the active name resolver with
- // exponential backoff until a subsequent call to UpdateClientConnState
- // returns a nil error. Any other errors are currently ignored.
- UpdateClientConnState(ClientConnState) error
- // ResolverError is called by gRPC when the name resolver reports an error.
- ResolverError(error)
- // UpdateSubConnState is called by gRPC when the state of a SubConn
- // changes.
- //
- // Deprecated: Use NewSubConnOptions.StateListener when creating the
- // SubConn instead.
- UpdateSubConnState(SubConn, SubConnState)
- // Close closes the balancer. The balancer is not currently required to
- // call SubConn.Shutdown for its existing SubConns; however, this will be
- // required in a future release, so it is recommended.
- Close()
-}
-
-// ExitIdler is an optional interface for balancers to implement. If
-// implemented, ExitIdle will be called when ClientConn.Connect is called, if
-// the ClientConn is idle. If unimplemented, ClientConn.Connect will cause
-// all SubConns to connect.
-//
-// Notice: it will be required for all balancers to implement this in a future
-// release.
-type ExitIdler interface {
- // ExitIdle instructs the LB policy to reconnect to backends / exit the
- // IDLE state, if appropriate and possible. Note that SubConns that enter
- // the IDLE state will not reconnect until SubConn.Connect is called.
- ExitIdle()
-}
-
-// ClientConnState describes the state of a ClientConn relevant to the
-// balancer.
-type ClientConnState struct {
- ResolverState resolver.State
- // The parsed load balancing configuration returned by the builder's
- // ParseConfig method, if implemented.
- BalancerConfig serviceconfig.LoadBalancingConfig
-}
-
-// ErrBadResolverState may be returned by UpdateClientConnState to indicate a
-// problem with the provided name resolver data.
-var ErrBadResolverState = errors.New("bad resolver state")
diff --git a/vendor/google.golang.org/grpc/balancer/base/balancer.go b/vendor/google.golang.org/grpc/balancer/base/balancer.go
deleted file mode 100644
index d5ed172ae..000000000
--- a/vendor/google.golang.org/grpc/balancer/base/balancer.go
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package base
-
-import (
- "errors"
- "fmt"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/resolver"
-)
-
-var logger = grpclog.Component("balancer")
-
-type baseBuilder struct {
- name string
- pickerBuilder PickerBuilder
- config Config
-}
-
-func (bb *baseBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer {
- bal := &baseBalancer{
- cc: cc,
- pickerBuilder: bb.pickerBuilder,
-
- subConns: resolver.NewAddressMap(),
- scStates: make(map[balancer.SubConn]connectivity.State),
- csEvltr: &balancer.ConnectivityStateEvaluator{},
- config: bb.config,
- state: connectivity.Connecting,
- }
- // Initialize picker to a picker that always returns
- // ErrNoSubConnAvailable, because when state of a SubConn changes, we
- // may call UpdateState with this picker.
- bal.picker = NewErrPicker(balancer.ErrNoSubConnAvailable)
- return bal
-}
-
-func (bb *baseBuilder) Name() string {
- return bb.name
-}
-
-type baseBalancer struct {
- cc balancer.ClientConn
- pickerBuilder PickerBuilder
-
- csEvltr *balancer.ConnectivityStateEvaluator
- state connectivity.State
-
- subConns *resolver.AddressMap
- scStates map[balancer.SubConn]connectivity.State
- picker balancer.Picker
- config Config
-
- resolverErr error // the last error reported by the resolver; cleared on successful resolution
- connErr error // the last connection error; cleared upon leaving TransientFailure
-}
-
-func (b *baseBalancer) ResolverError(err error) {
- b.resolverErr = err
- if b.subConns.Len() == 0 {
- b.state = connectivity.TransientFailure
- }
-
- if b.state != connectivity.TransientFailure {
- // The picker will not change since the balancer does not currently
- // report an error.
- return
- }
- b.regeneratePicker()
- b.cc.UpdateState(balancer.State{
- ConnectivityState: b.state,
- Picker: b.picker,
- })
-}
-
-func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error {
- // TODO: handle s.ResolverState.ServiceConfig?
- if logger.V(2) {
- logger.Info("base.baseBalancer: got new ClientConn state: ", s)
- }
- // Successful resolution; clear resolver error and ensure we return nil.
- b.resolverErr = nil
- // addrsSet is the set converted from addrs, it's used for quick lookup of an address.
- addrsSet := resolver.NewAddressMap()
- for _, a := range s.ResolverState.Addresses {
- addrsSet.Set(a, nil)
- if _, ok := b.subConns.Get(a); !ok {
- // a is a new address (not existing in b.subConns).
- var sc balancer.SubConn
- opts := balancer.NewSubConnOptions{
- HealthCheckEnabled: b.config.HealthCheck,
- StateListener: func(scs balancer.SubConnState) { b.updateSubConnState(sc, scs) },
- }
- sc, err := b.cc.NewSubConn([]resolver.Address{a}, opts)
- if err != nil {
- logger.Warningf("base.baseBalancer: failed to create new SubConn: %v", err)
- continue
- }
- b.subConns.Set(a, sc)
- b.scStates[sc] = connectivity.Idle
- b.csEvltr.RecordTransition(connectivity.Shutdown, connectivity.Idle)
- sc.Connect()
- }
- }
- for _, a := range b.subConns.Keys() {
- sci, _ := b.subConns.Get(a)
- sc := sci.(balancer.SubConn)
- // a was removed by resolver.
- if _, ok := addrsSet.Get(a); !ok {
- sc.Shutdown()
- b.subConns.Delete(a)
- // Keep the state of this sc in b.scStates until sc's state becomes Shutdown.
- // The entry will be deleted in updateSubConnState.
- }
- }
- // If resolver state contains no addresses, return an error so ClientConn
- // will trigger re-resolve. Also records this as a resolver error, so when
- // the overall state turns transient failure, the error message will have
- // the zero address information.
- if len(s.ResolverState.Addresses) == 0 {
- b.ResolverError(errors.New("produced zero addresses"))
- return balancer.ErrBadResolverState
- }
-
- b.regeneratePicker()
- b.cc.UpdateState(balancer.State{ConnectivityState: b.state, Picker: b.picker})
- return nil
-}
-
-// mergeErrors builds an error from the last connection error and the last
-// resolver error. Must only be called if b.state is TransientFailure.
-func (b *baseBalancer) mergeErrors() error {
- // connErr must always be non-nil unless there are no SubConns, in which
- // case resolverErr must be non-nil.
- if b.connErr == nil {
- return fmt.Errorf("last resolver error: %v", b.resolverErr)
- }
- if b.resolverErr == nil {
- return fmt.Errorf("last connection error: %v", b.connErr)
- }
- return fmt.Errorf("last connection error: %v; last resolver error: %v", b.connErr, b.resolverErr)
-}
-
-// regeneratePicker takes a snapshot of the balancer, and generates a picker
-// from it. The picker is
-// - errPicker if the balancer is in TransientFailure,
-// - built by the pickerBuilder with all READY SubConns otherwise.
-func (b *baseBalancer) regeneratePicker() {
- if b.state == connectivity.TransientFailure {
- b.picker = NewErrPicker(b.mergeErrors())
- return
- }
- readySCs := make(map[balancer.SubConn]SubConnInfo)
-
- // Filter out all ready SCs from full subConn map.
- for _, addr := range b.subConns.Keys() {
- sci, _ := b.subConns.Get(addr)
- sc := sci.(balancer.SubConn)
- if st, ok := b.scStates[sc]; ok && st == connectivity.Ready {
- readySCs[sc] = SubConnInfo{Address: addr}
- }
- }
- b.picker = b.pickerBuilder.Build(PickerBuildInfo{ReadySCs: readySCs})
-}
-
-// UpdateSubConnState is a nop because a StateListener is always set in NewSubConn.
-func (b *baseBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
- logger.Errorf("base.baseBalancer: UpdateSubConnState(%v, %+v) called unexpectedly", sc, state)
-}
-
-func (b *baseBalancer) updateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
- s := state.ConnectivityState
- if logger.V(2) {
- logger.Infof("base.baseBalancer: handle SubConn state change: %p, %v", sc, s)
- }
- oldS, ok := b.scStates[sc]
- if !ok {
- if logger.V(2) {
- logger.Infof("base.baseBalancer: got state changes for an unknown SubConn: %p, %v", sc, s)
- }
- return
- }
- if oldS == connectivity.TransientFailure &&
- (s == connectivity.Connecting || s == connectivity.Idle) {
- // Once a subconn enters TRANSIENT_FAILURE, ignore subsequent IDLE or
- // CONNECTING transitions to prevent the aggregated state from being
- // always CONNECTING when many backends exist but are all down.
- if s == connectivity.Idle {
- sc.Connect()
- }
- return
- }
- b.scStates[sc] = s
- switch s {
- case connectivity.Idle:
- sc.Connect()
- case connectivity.Shutdown:
- // When an address was removed by resolver, b called Shutdown but kept
- // the sc's state in scStates. Remove state for this sc here.
- delete(b.scStates, sc)
- case connectivity.TransientFailure:
- // Save error to be reported via picker.
- b.connErr = state.ConnectionError
- }
-
- b.state = b.csEvltr.RecordTransition(oldS, s)
-
- // Regenerate picker when one of the following happens:
- // - this sc entered or left ready
- // - the aggregated state of balancer is TransientFailure
- // (may need to update error message)
- if (s == connectivity.Ready) != (oldS == connectivity.Ready) ||
- b.state == connectivity.TransientFailure {
- b.regeneratePicker()
- }
- b.cc.UpdateState(balancer.State{ConnectivityState: b.state, Picker: b.picker})
-}
-
-// Close is a nop because base balancer doesn't have internal state to clean up,
-// and it doesn't need to call Shutdown for the SubConns.
-func (b *baseBalancer) Close() {
-}
-
-// ExitIdle is a nop because the base balancer attempts to stay connected to
-// all SubConns at all times.
-func (b *baseBalancer) ExitIdle() {
-}
-
-// NewErrPicker returns a Picker that always returns err on Pick().
-func NewErrPicker(err error) balancer.Picker {
- return &errPicker{err: err}
-}
-
-// NewErrPickerV2 is temporarily defined for backward compatibility reasons.
-//
-// Deprecated: use NewErrPicker instead.
-var NewErrPickerV2 = NewErrPicker
-
-type errPicker struct {
- err error // Pick() always returns this err.
-}
-
-func (p *errPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- return balancer.PickResult{}, p.err
-}
diff --git a/vendor/google.golang.org/grpc/balancer/base/base.go b/vendor/google.golang.org/grpc/balancer/base/base.go
deleted file mode 100644
index e31d76e33..000000000
--- a/vendor/google.golang.org/grpc/balancer/base/base.go
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package base defines a balancer base that can be used to build balancers with
-// different picking algorithms.
-//
-// The base balancer creates a new SubConn for each resolved address. The
-// provided picker will only be notified about READY SubConns.
-//
-// This package is the base of round_robin balancer, its purpose is to be used
-// to build round_robin like balancers with complex picking algorithms.
-// Balancers with more complicated logic should try to implement a balancer
-// builder from scratch.
-//
-// All APIs in this package are experimental.
-package base
-
-import (
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/resolver"
-)
-
-// PickerBuilder creates balancer.Picker.
-type PickerBuilder interface {
- // Build returns a picker that will be used by gRPC to pick a SubConn.
- Build(info PickerBuildInfo) balancer.Picker
-}
-
-// PickerBuildInfo contains information needed by the picker builder to
-// construct a picker.
-type PickerBuildInfo struct {
- // ReadySCs is a map from all ready SubConns to the Addresses used to
- // create them.
- ReadySCs map[balancer.SubConn]SubConnInfo
-}
-
-// SubConnInfo contains information about a SubConn created by the base
-// balancer.
-type SubConnInfo struct {
- Address resolver.Address // the address used to create this SubConn
-}
-
-// Config contains the config info about the base balancer builder.
-type Config struct {
- // HealthCheck indicates whether health checking should be enabled for this specific balancer.
- HealthCheck bool
-}
-
-// NewBalancerBuilder returns a base balancer builder configured by the provided config.
-func NewBalancerBuilder(name string, pb PickerBuilder, config Config) balancer.Builder {
- return &baseBuilder{
- name: name,
- pickerBuilder: pb,
- config: config,
- }
-}
diff --git a/vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go b/vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go
deleted file mode 100644
index c33413581..000000000
--- a/vendor/google.golang.org/grpc/balancer/conn_state_evaluator.go
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package balancer
-
-import "google.golang.org/grpc/connectivity"
-
-// ConnectivityStateEvaluator takes the connectivity states of multiple SubConns
-// and returns one aggregated connectivity state.
-//
-// It's not thread safe.
-type ConnectivityStateEvaluator struct {
- numReady uint64 // Number of addrConns in ready state.
- numConnecting uint64 // Number of addrConns in connecting state.
- numTransientFailure uint64 // Number of addrConns in transient failure state.
- numIdle uint64 // Number of addrConns in idle state.
-}
-
-// RecordTransition records state change happening in subConn and based on that
-// it evaluates what aggregated state should be.
-//
-// - If at least one SubConn in Ready, the aggregated state is Ready;
-// - Else if at least one SubConn in Connecting, the aggregated state is Connecting;
-// - Else if at least one SubConn is Idle, the aggregated state is Idle;
-// - Else if at least one SubConn is TransientFailure (or there are no SubConns), the aggregated state is Transient Failure.
-//
-// Shutdown is not considered.
-func (cse *ConnectivityStateEvaluator) RecordTransition(oldState, newState connectivity.State) connectivity.State {
- // Update counters.
- for idx, state := range []connectivity.State{oldState, newState} {
- updateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new.
- switch state {
- case connectivity.Ready:
- cse.numReady += updateVal
- case connectivity.Connecting:
- cse.numConnecting += updateVal
- case connectivity.TransientFailure:
- cse.numTransientFailure += updateVal
- case connectivity.Idle:
- cse.numIdle += updateVal
- }
- }
- return cse.CurrentState()
-}
-
-// CurrentState returns the current aggregate conn state by evaluating the counters
-func (cse *ConnectivityStateEvaluator) CurrentState() connectivity.State {
- // Evaluate.
- if cse.numReady > 0 {
- return connectivity.Ready
- }
- if cse.numConnecting > 0 {
- return connectivity.Connecting
- }
- if cse.numIdle > 0 {
- return connectivity.Idle
- }
- return connectivity.TransientFailure
-}
diff --git a/vendor/google.golang.org/grpc/balancer/grpclb/state/state.go b/vendor/google.golang.org/grpc/balancer/grpclb/state/state.go
deleted file mode 100644
index 4ecfa1c21..000000000
--- a/vendor/google.golang.org/grpc/balancer/grpclb/state/state.go
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package state declares grpclb types to be set by resolvers wishing to pass
-// information to grpclb via resolver.State Attributes.
-package state
-
-import (
- "google.golang.org/grpc/resolver"
-)
-
-// keyType is the key to use for storing State in Attributes.
-type keyType string
-
-const key = keyType("grpc.grpclb.state")
-
-// State contains gRPCLB-relevant data passed from the name resolver.
-type State struct {
- // BalancerAddresses contains the remote load balancer address(es). If
- // set, overrides any resolver-provided addresses with Type of GRPCLB.
- BalancerAddresses []resolver.Address
-}
-
-// Set returns a copy of the provided state with attributes containing s. s's
-// data should not be mutated after calling Set.
-func Set(state resolver.State, s *State) resolver.State {
- state.Attributes = state.Attributes.WithValue(key, s)
- return state
-}
-
-// Get returns the grpclb State in the resolver.State, or nil if not present.
-// The returned data should not be mutated.
-func Get(state resolver.State) *State {
- s, _ := state.Attributes.Value(key).(*State)
- return s
-}
diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go b/vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go
deleted file mode 100644
index 7d66cb491..000000000
--- a/vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package internal contains code internal to the pickfirst package.
-package internal
-
-import (
- rand "math/rand/v2"
- "time"
-)
-
-var (
- // RandShuffle pseudo-randomizes the order of addresses.
- RandShuffle = rand.Shuffle
- // TimeAfterFunc allows mocking the timer for testing connection delay
- // related functionality.
- TimeAfterFunc = func(d time.Duration, f func()) func() {
- timer := time.AfterFunc(d, f)
- return func() { timer.Stop() }
- }
-)
diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
deleted file mode 100644
index ea8899818..000000000
--- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package pickfirst contains the pick_first load balancing policy.
-package pickfirst
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- rand "math/rand/v2"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/balancer/pickfirst/internal"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal/envconfig"
- internalgrpclog "google.golang.org/grpc/internal/grpclog"
- "google.golang.org/grpc/internal/pretty"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/serviceconfig"
-
- _ "google.golang.org/grpc/balancer/pickfirst/pickfirstleaf" // For automatically registering the new pickfirst if required.
-)
-
-func init() {
- if envconfig.NewPickFirstEnabled {
- return
- }
- balancer.Register(pickfirstBuilder{})
-}
-
-var logger = grpclog.Component("pick-first-lb")
-
-const (
- // Name is the name of the pick_first balancer.
- Name = "pick_first"
- logPrefix = "[pick-first-lb %p] "
-)
-
-type pickfirstBuilder struct{}
-
-func (pickfirstBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer {
- b := &pickfirstBalancer{cc: cc}
- b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b))
- return b
-}
-
-func (pickfirstBuilder) Name() string {
- return Name
-}
-
-type pfConfig struct {
- serviceconfig.LoadBalancingConfig `json:"-"`
-
- // If set to true, instructs the LB policy to shuffle the order of the list
- // of endpoints received from the name resolver before attempting to
- // connect to them.
- ShuffleAddressList bool `json:"shuffleAddressList"`
-}
-
-func (pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) {
- var cfg pfConfig
- if err := json.Unmarshal(js, &cfg); err != nil {
- return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err)
- }
- return cfg, nil
-}
-
-type pickfirstBalancer struct {
- logger *internalgrpclog.PrefixLogger
- state connectivity.State
- cc balancer.ClientConn
- subConn balancer.SubConn
-}
-
-func (b *pickfirstBalancer) ResolverError(err error) {
- if b.logger.V(2) {
- b.logger.Infof("Received error from the name resolver: %v", err)
- }
- if b.subConn == nil {
- b.state = connectivity.TransientFailure
- }
-
- if b.state != connectivity.TransientFailure {
- // The picker will not change since the balancer does not currently
- // report an error.
- return
- }
- b.cc.UpdateState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)},
- })
-}
-
-// Shuffler is an interface for shuffling an address list.
-type Shuffler interface {
- ShuffleAddressListForTesting(n int, swap func(i, j int))
-}
-
-// ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n
-// is the number of elements. swap swaps the elements with indexes i and j.
-func ShuffleAddressListForTesting(n int, swap func(i, j int)) { rand.Shuffle(n, swap) }
-
-func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
- if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 {
- // The resolver reported an empty address list. Treat it like an error by
- // calling b.ResolverError.
- if b.subConn != nil {
- // Shut down the old subConn. All addresses were removed, so it is
- // no longer valid.
- b.subConn.Shutdown()
- b.subConn = nil
- }
- b.ResolverError(errors.New("produced zero addresses"))
- return balancer.ErrBadResolverState
- }
- // We don't have to guard this block with the env var because ParseConfig
- // already does so.
- cfg, ok := state.BalancerConfig.(pfConfig)
- if state.BalancerConfig != nil && !ok {
- return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v", state.BalancerConfig, state.BalancerConfig)
- }
-
- if b.logger.V(2) {
- b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState))
- }
-
- var addrs []resolver.Address
- if endpoints := state.ResolverState.Endpoints; len(endpoints) != 0 {
- // Perform the optional shuffling described in gRFC A62. The shuffling will
- // change the order of endpoints but not touch the order of the addresses
- // within each endpoint. - A61
- if cfg.ShuffleAddressList {
- endpoints = append([]resolver.Endpoint{}, endpoints...)
- internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
- }
-
- // "Flatten the list by concatenating the ordered list of addresses for each
- // of the endpoints, in order." - A61
- for _, endpoint := range endpoints {
- // "In the flattened list, interleave addresses from the two address
- // families, as per RFC-8304 section 4." - A61
- // TODO: support the above language.
- addrs = append(addrs, endpoint.Addresses...)
- }
- } else {
- // Endpoints not set, process addresses until we migrate resolver
- // emissions fully to Endpoints. The top channel does wrap emitted
- // addresses with endpoints, however some balancers such as weighted
- // target do not forward the corresponding correct endpoints down/split
- // endpoints properly. Once all balancers correctly forward endpoints
- // down, can delete this else conditional.
- addrs = state.ResolverState.Addresses
- if cfg.ShuffleAddressList {
- addrs = append([]resolver.Address{}, addrs...)
- rand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] })
- }
- }
-
- if b.subConn != nil {
- b.cc.UpdateAddresses(b.subConn, addrs)
- return nil
- }
-
- var subConn balancer.SubConn
- subConn, err := b.cc.NewSubConn(addrs, balancer.NewSubConnOptions{
- StateListener: func(state balancer.SubConnState) {
- b.updateSubConnState(subConn, state)
- },
- })
- if err != nil {
- if b.logger.V(2) {
- b.logger.Infof("Failed to create new SubConn: %v", err)
- }
- b.state = connectivity.TransientFailure
- b.cc.UpdateState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: &picker{err: fmt.Errorf("error creating connection: %v", err)},
- })
- return balancer.ErrBadResolverState
- }
- b.subConn = subConn
- b.state = connectivity.Idle
- b.cc.UpdateState(balancer.State{
- ConnectivityState: connectivity.Connecting,
- Picker: &picker{err: balancer.ErrNoSubConnAvailable},
- })
- b.subConn.Connect()
- return nil
-}
-
-// UpdateSubConnState is unused as a StateListener is always registered when
-// creating SubConns.
-func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) {
- b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", subConn, state)
-}
-
-func (b *pickfirstBalancer) updateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) {
- if b.logger.V(2) {
- b.logger.Infof("Received SubConn state update: %p, %+v", subConn, state)
- }
- if b.subConn != subConn {
- if b.logger.V(2) {
- b.logger.Infof("Ignored state change because subConn is not recognized")
- }
- return
- }
- if state.ConnectivityState == connectivity.Shutdown {
- b.subConn = nil
- return
- }
-
- switch state.ConnectivityState {
- case connectivity.Ready:
- b.cc.UpdateState(balancer.State{
- ConnectivityState: state.ConnectivityState,
- Picker: &picker{result: balancer.PickResult{SubConn: subConn}},
- })
- case connectivity.Connecting:
- if b.state == connectivity.TransientFailure {
- // We stay in TransientFailure until we are Ready. See A62.
- return
- }
- b.cc.UpdateState(balancer.State{
- ConnectivityState: state.ConnectivityState,
- Picker: &picker{err: balancer.ErrNoSubConnAvailable},
- })
- case connectivity.Idle:
- if b.state == connectivity.TransientFailure {
- // We stay in TransientFailure until we are Ready. Also kick the
- // subConn out of Idle into Connecting. See A62.
- b.subConn.Connect()
- return
- }
- b.cc.UpdateState(balancer.State{
- ConnectivityState: state.ConnectivityState,
- Picker: &idlePicker{subConn: subConn},
- })
- case connectivity.TransientFailure:
- b.cc.UpdateState(balancer.State{
- ConnectivityState: state.ConnectivityState,
- Picker: &picker{err: state.ConnectionError},
- })
- }
- b.state = state.ConnectivityState
-}
-
-func (b *pickfirstBalancer) Close() {
-}
-
-func (b *pickfirstBalancer) ExitIdle() {
- if b.subConn != nil && b.state == connectivity.Idle {
- b.subConn.Connect()
- }
-}
-
-type picker struct {
- result balancer.PickResult
- err error
-}
-
-func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- return p.result, p.err
-}
-
-// idlePicker is used when the SubConn is IDLE and kicks the SubConn into
-// CONNECTING when Pick is called.
-type idlePicker struct {
- subConn balancer.SubConn
-}
-
-func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- i.subConn.Connect()
- return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
-}
diff --git a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go b/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
deleted file mode 100644
index 2fc0a71f9..000000000
--- a/vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package pickfirstleaf contains the pick_first load balancing policy which
-// will be the universal leaf policy after dualstack changes are implemented.
-//
-// # Experimental
-//
-// Notice: This package is EXPERIMENTAL and may be changed or removed in a
-// later release.
-package pickfirstleaf
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "net"
- "net/netip"
- "sync"
- "time"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/balancer/pickfirst/internal"
- "google.golang.org/grpc/connectivity"
- expstats "google.golang.org/grpc/experimental/stats"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal/envconfig"
- internalgrpclog "google.golang.org/grpc/internal/grpclog"
- "google.golang.org/grpc/internal/pretty"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/serviceconfig"
-)
-
-func init() {
- if envconfig.NewPickFirstEnabled {
- // Register as the default pick_first balancer.
- Name = "pick_first"
- }
- balancer.Register(pickfirstBuilder{})
-}
-
-// enableHealthListenerKeyType is a unique key type used in resolver attributes
-// to indicate whether the health listener usage is enabled.
-type enableHealthListenerKeyType struct{}
-
-var (
- logger = grpclog.Component("pick-first-leaf-lb")
- // Name is the name of the pick_first_leaf balancer.
- // It is changed to "pick_first" in init() if this balancer is to be
- // registered as the default pickfirst.
- Name = "pick_first_leaf"
- disconnectionsMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{
- Name: "grpc.lb.pick_first.disconnections",
- Description: "EXPERIMENTAL. Number of times the selected subchannel becomes disconnected.",
- Unit: "disconnection",
- Labels: []string{"grpc.target"},
- Default: false,
- })
- connectionAttemptsSucceededMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{
- Name: "grpc.lb.pick_first.connection_attempts_succeeded",
- Description: "EXPERIMENTAL. Number of successful connection attempts.",
- Unit: "attempt",
- Labels: []string{"grpc.target"},
- Default: false,
- })
- connectionAttemptsFailedMetric = expstats.RegisterInt64Count(expstats.MetricDescriptor{
- Name: "grpc.lb.pick_first.connection_attempts_failed",
- Description: "EXPERIMENTAL. Number of failed connection attempts.",
- Unit: "attempt",
- Labels: []string{"grpc.target"},
- Default: false,
- })
-)
-
-const (
- // TODO: change to pick-first when this becomes the default pick_first policy.
- logPrefix = "[pick-first-leaf-lb %p] "
- // connectionDelayInterval is the time to wait for during the happy eyeballs
- // pass before starting the next connection attempt.
- connectionDelayInterval = 250 * time.Millisecond
-)
-
-type ipAddrFamily int
-
-const (
- // ipAddrFamilyUnknown represents strings that can't be parsed as an IP
- // address.
- ipAddrFamilyUnknown ipAddrFamily = iota
- ipAddrFamilyV4
- ipAddrFamilyV6
-)
-
-type pickfirstBuilder struct{}
-
-func (pickfirstBuilder) Build(cc balancer.ClientConn, bo balancer.BuildOptions) balancer.Balancer {
- b := &pickfirstBalancer{
- cc: cc,
- target: bo.Target.String(),
- metricsRecorder: bo.MetricsRecorder, // ClientConn will always create a Metrics Recorder.
-
- subConns: resolver.NewAddressMap(),
- state: connectivity.Connecting,
- cancelConnectionTimer: func() {},
- }
- b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b))
- return b
-}
-
-func (b pickfirstBuilder) Name() string {
- return Name
-}
-
-func (pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) {
- var cfg pfConfig
- if err := json.Unmarshal(js, &cfg); err != nil {
- return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err)
- }
- return cfg, nil
-}
-
-// EnableHealthListener updates the state to configure pickfirst for using a
-// generic health listener.
-func EnableHealthListener(state resolver.State) resolver.State {
- state.Attributes = state.Attributes.WithValue(enableHealthListenerKeyType{}, true)
- return state
-}
-
-type pfConfig struct {
- serviceconfig.LoadBalancingConfig `json:"-"`
-
- // If set to true, instructs the LB policy to shuffle the order of the list
- // of endpoints received from the name resolver before attempting to
- // connect to them.
- ShuffleAddressList bool `json:"shuffleAddressList"`
-}
-
-// scData keeps track of the current state of the subConn.
-// It is not safe for concurrent access.
-type scData struct {
- // The following fields are initialized at build time and read-only after
- // that.
- subConn balancer.SubConn
- addr resolver.Address
-
- rawConnectivityState connectivity.State
- // The effective connectivity state based on raw connectivity, health state
- // and after following sticky TransientFailure behaviour defined in A62.
- effectiveState connectivity.State
- lastErr error
- connectionFailedInFirstPass bool
-}
-
-func (b *pickfirstBalancer) newSCData(addr resolver.Address) (*scData, error) {
- sd := &scData{
- rawConnectivityState: connectivity.Idle,
- effectiveState: connectivity.Idle,
- addr: addr,
- }
- sc, err := b.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{
- StateListener: func(state balancer.SubConnState) {
- b.updateSubConnState(sd, state)
- },
- })
- if err != nil {
- return nil, err
- }
- sd.subConn = sc
- return sd, nil
-}
-
-type pickfirstBalancer struct {
- // The following fields are initialized at build time and read-only after
- // that and therefore do not need to be guarded by a mutex.
- logger *internalgrpclog.PrefixLogger
- cc balancer.ClientConn
- target string
- metricsRecorder expstats.MetricsRecorder // guaranteed to be non nil
-
- // The mutex is used to ensure synchronization of updates triggered
- // from the idle picker and the already serialized resolver,
- // SubConn state updates.
- mu sync.Mutex
- // State reported to the channel based on SubConn states and resolver
- // updates.
- state connectivity.State
- // scData for active subonns mapped by address.
- subConns *resolver.AddressMap
- addressList addressList
- firstPass bool
- numTF int
- cancelConnectionTimer func()
- healthCheckingEnabled bool
-}
-
-// ResolverError is called by the ClientConn when the name resolver produces
-// an error or when pickfirst determined the resolver update to be invalid.
-func (b *pickfirstBalancer) ResolverError(err error) {
- b.mu.Lock()
- defer b.mu.Unlock()
- b.resolverErrorLocked(err)
-}
-
-func (b *pickfirstBalancer) resolverErrorLocked(err error) {
- if b.logger.V(2) {
- b.logger.Infof("Received error from the name resolver: %v", err)
- }
-
- // The picker will not change since the balancer does not currently
- // report an error. If the balancer hasn't received a single good resolver
- // update yet, transition to TRANSIENT_FAILURE.
- if b.state != connectivity.TransientFailure && b.addressList.size() > 0 {
- if b.logger.V(2) {
- b.logger.Infof("Ignoring resolver error because balancer is using a previous good update.")
- }
- return
- }
-
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)},
- })
-}
-
-func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
- b.mu.Lock()
- defer b.mu.Unlock()
- b.cancelConnectionTimer()
- if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 {
- // Cleanup state pertaining to the previous resolver state.
- // Treat an empty address list like an error by calling b.ResolverError.
- b.closeSubConnsLocked()
- b.addressList.updateAddrs(nil)
- b.resolverErrorLocked(errors.New("produced zero addresses"))
- return balancer.ErrBadResolverState
- }
- b.healthCheckingEnabled = state.ResolverState.Attributes.Value(enableHealthListenerKeyType{}) != nil
- cfg, ok := state.BalancerConfig.(pfConfig)
- if state.BalancerConfig != nil && !ok {
- return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v: %w", state.BalancerConfig, state.BalancerConfig, balancer.ErrBadResolverState)
- }
-
- if b.logger.V(2) {
- b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState))
- }
-
- var newAddrs []resolver.Address
- if endpoints := state.ResolverState.Endpoints; len(endpoints) != 0 {
- // Perform the optional shuffling described in gRFC A62. The shuffling
- // will change the order of endpoints but not touch the order of the
- // addresses within each endpoint. - A61
- if cfg.ShuffleAddressList {
- endpoints = append([]resolver.Endpoint{}, endpoints...)
- internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
- }
-
- // "Flatten the list by concatenating the ordered list of addresses for
- // each of the endpoints, in order." - A61
- for _, endpoint := range endpoints {
- newAddrs = append(newAddrs, endpoint.Addresses...)
- }
- } else {
- // Endpoints not set, process addresses until we migrate resolver
- // emissions fully to Endpoints. The top channel does wrap emitted
- // addresses with endpoints, however some balancers such as weighted
- // target do not forward the corresponding correct endpoints down/split
- // endpoints properly. Once all balancers correctly forward endpoints
- // down, can delete this else conditional.
- newAddrs = state.ResolverState.Addresses
- if cfg.ShuffleAddressList {
- newAddrs = append([]resolver.Address{}, newAddrs...)
- internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
- }
- }
-
- // If an address appears in multiple endpoints or in the same endpoint
- // multiple times, we keep it only once. We will create only one SubConn
- // for the address because an AddressMap is used to store SubConns.
- // Not de-duplicating would result in attempting to connect to the same
- // SubConn multiple times in the same pass. We don't want this.
- newAddrs = deDupAddresses(newAddrs)
- newAddrs = interleaveAddresses(newAddrs)
-
- prevAddr := b.addressList.currentAddress()
- prevSCData, found := b.subConns.Get(prevAddr)
- prevAddrsCount := b.addressList.size()
- isPrevRawConnectivityStateReady := found && prevSCData.(*scData).rawConnectivityState == connectivity.Ready
- b.addressList.updateAddrs(newAddrs)
-
- // If the previous ready SubConn exists in new address list,
- // keep this connection and don't create new SubConns.
- if isPrevRawConnectivityStateReady && b.addressList.seekTo(prevAddr) {
- return nil
- }
-
- b.reconcileSubConnsLocked(newAddrs)
- // If it's the first resolver update or the balancer was already READY
- // (but the new address list does not contain the ready SubConn) or
- // CONNECTING, enter CONNECTING.
- // We may be in TRANSIENT_FAILURE due to a previous empty address list,
- // we should still enter CONNECTING because the sticky TF behaviour
- // mentioned in A62 applies only when the TRANSIENT_FAILURE is reported
- // due to connectivity failures.
- if isPrevRawConnectivityStateReady || b.state == connectivity.Connecting || prevAddrsCount == 0 {
- // Start connection attempt at first address.
- b.forceUpdateConcludedStateLocked(balancer.State{
- ConnectivityState: connectivity.Connecting,
- Picker: &picker{err: balancer.ErrNoSubConnAvailable},
- })
- b.startFirstPassLocked()
- } else if b.state == connectivity.TransientFailure {
- // If we're in TRANSIENT_FAILURE, we stay in TRANSIENT_FAILURE until
- // we're READY. See A62.
- b.startFirstPassLocked()
- }
- return nil
-}
-
-// UpdateSubConnState is unused as a StateListener is always registered when
-// creating SubConns.
-func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) {
- b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", subConn, state)
-}
-
-func (b *pickfirstBalancer) Close() {
- b.mu.Lock()
- defer b.mu.Unlock()
- b.closeSubConnsLocked()
- b.cancelConnectionTimer()
- b.state = connectivity.Shutdown
-}
-
-// ExitIdle moves the balancer out of idle state. It can be called concurrently
-// by the idlePicker and clientConn so access to variables should be
-// synchronized.
-func (b *pickfirstBalancer) ExitIdle() {
- b.mu.Lock()
- defer b.mu.Unlock()
- if b.state == connectivity.Idle {
- b.startFirstPassLocked()
- }
-}
-
-func (b *pickfirstBalancer) startFirstPassLocked() {
- b.firstPass = true
- b.numTF = 0
- // Reset the connection attempt record for existing SubConns.
- for _, sd := range b.subConns.Values() {
- sd.(*scData).connectionFailedInFirstPass = false
- }
- b.requestConnectionLocked()
-}
-
-func (b *pickfirstBalancer) closeSubConnsLocked() {
- for _, sd := range b.subConns.Values() {
- sd.(*scData).subConn.Shutdown()
- }
- b.subConns = resolver.NewAddressMap()
-}
-
-// deDupAddresses ensures that each address appears only once in the slice.
-func deDupAddresses(addrs []resolver.Address) []resolver.Address {
- seenAddrs := resolver.NewAddressMap()
- retAddrs := []resolver.Address{}
-
- for _, addr := range addrs {
- if _, ok := seenAddrs.Get(addr); ok {
- continue
- }
- retAddrs = append(retAddrs, addr)
- }
- return retAddrs
-}
-
-// interleaveAddresses interleaves addresses of both families (IPv4 and IPv6)
-// as per RFC-8305 section 4.
-// Whichever address family is first in the list is followed by an address of
-// the other address family; that is, if the first address in the list is IPv6,
-// then the first IPv4 address should be moved up in the list to be second in
-// the list. It doesn't support configuring "First Address Family Count", i.e.
-// there will always be a single member of the first address family at the
-// beginning of the interleaved list.
-// Addresses that are neither IPv4 nor IPv6 are treated as part of a third
-// "unknown" family for interleaving.
-// See: https://datatracker.ietf.org/doc/html/rfc8305#autoid-6
-func interleaveAddresses(addrs []resolver.Address) []resolver.Address {
- familyAddrsMap := map[ipAddrFamily][]resolver.Address{}
- interleavingOrder := []ipAddrFamily{}
- for _, addr := range addrs {
- family := addressFamily(addr.Addr)
- if _, found := familyAddrsMap[family]; !found {
- interleavingOrder = append(interleavingOrder, family)
- }
- familyAddrsMap[family] = append(familyAddrsMap[family], addr)
- }
-
- interleavedAddrs := make([]resolver.Address, 0, len(addrs))
-
- for curFamilyIdx := 0; len(interleavedAddrs) < len(addrs); curFamilyIdx = (curFamilyIdx + 1) % len(interleavingOrder) {
- // Some IP types may have fewer addresses than others, so we look for
- // the next type that has a remaining member to add to the interleaved
- // list.
- family := interleavingOrder[curFamilyIdx]
- remainingMembers := familyAddrsMap[family]
- if len(remainingMembers) > 0 {
- interleavedAddrs = append(interleavedAddrs, remainingMembers[0])
- familyAddrsMap[family] = remainingMembers[1:]
- }
- }
-
- return interleavedAddrs
-}
-
-// addressFamily returns the ipAddrFamily after parsing the address string.
-// If the address isn't of the format "ip-address:port", it returns
-// ipAddrFamilyUnknown. The address may be valid even if it's not an IP when
-// using a resolver like passthrough where the address may be a hostname in
-// some format that the dialer can resolve.
-func addressFamily(address string) ipAddrFamily {
- // Parse the IP after removing the port.
- host, _, err := net.SplitHostPort(address)
- if err != nil {
- return ipAddrFamilyUnknown
- }
- ip, err := netip.ParseAddr(host)
- if err != nil {
- return ipAddrFamilyUnknown
- }
- switch {
- case ip.Is4() || ip.Is4In6():
- return ipAddrFamilyV4
- case ip.Is6():
- return ipAddrFamilyV6
- default:
- return ipAddrFamilyUnknown
- }
-}
-
-// reconcileSubConnsLocked updates the active subchannels based on a new address
-// list from the resolver. It does this by:
-// - closing subchannels: any existing subchannels associated with addresses
-// that are no longer in the updated list are shut down.
-// - removing subchannels: entries for these closed subchannels are removed
-// from the subchannel map.
-//
-// This ensures that the subchannel map accurately reflects the current set of
-// addresses received from the name resolver.
-func (b *pickfirstBalancer) reconcileSubConnsLocked(newAddrs []resolver.Address) {
- newAddrsMap := resolver.NewAddressMap()
- for _, addr := range newAddrs {
- newAddrsMap.Set(addr, true)
- }
-
- for _, oldAddr := range b.subConns.Keys() {
- if _, ok := newAddrsMap.Get(oldAddr); ok {
- continue
- }
- val, _ := b.subConns.Get(oldAddr)
- val.(*scData).subConn.Shutdown()
- b.subConns.Delete(oldAddr)
- }
-}
-
-// shutdownRemainingLocked shuts down remaining subConns. Called when a subConn
-// becomes ready, which means that all other subConn must be shutdown.
-func (b *pickfirstBalancer) shutdownRemainingLocked(selected *scData) {
- b.cancelConnectionTimer()
- for _, v := range b.subConns.Values() {
- sd := v.(*scData)
- if sd.subConn != selected.subConn {
- sd.subConn.Shutdown()
- }
- }
- b.subConns = resolver.NewAddressMap()
- b.subConns.Set(selected.addr, selected)
-}
-
-// requestConnectionLocked starts connecting on the subchannel corresponding to
-// the current address. If no subchannel exists, one is created. If the current
-// subchannel is in TransientFailure, a connection to the next address is
-// attempted until a subchannel is found.
-func (b *pickfirstBalancer) requestConnectionLocked() {
- if !b.addressList.isValid() {
- return
- }
- var lastErr error
- for valid := true; valid; valid = b.addressList.increment() {
- curAddr := b.addressList.currentAddress()
- sd, ok := b.subConns.Get(curAddr)
- if !ok {
- var err error
- // We want to assign the new scData to sd from the outer scope,
- // hence we can't use := below.
- sd, err = b.newSCData(curAddr)
- if err != nil {
- // This should never happen, unless the clientConn is being shut
- // down.
- if b.logger.V(2) {
- b.logger.Infof("Failed to create a subConn for address %v: %v", curAddr.String(), err)
- }
- // Do nothing, the LB policy will be closed soon.
- return
- }
- b.subConns.Set(curAddr, sd)
- }
-
- scd := sd.(*scData)
- switch scd.rawConnectivityState {
- case connectivity.Idle:
- scd.subConn.Connect()
- b.scheduleNextConnectionLocked()
- return
- case connectivity.TransientFailure:
- // The SubConn is being re-used and failed during a previous pass
- // over the addressList. It has not completed backoff yet.
- // Mark it as having failed and try the next address.
- scd.connectionFailedInFirstPass = true
- lastErr = scd.lastErr
- continue
- case connectivity.Connecting:
- // Wait for the connection attempt to complete or the timer to fire
- // before attempting the next address.
- b.scheduleNextConnectionLocked()
- return
- default:
- b.logger.Errorf("SubConn with unexpected state %v present in SubConns map.", scd.rawConnectivityState)
- return
-
- }
- }
-
- // All the remaining addresses in the list are in TRANSIENT_FAILURE, end the
- // first pass if possible.
- b.endFirstPassIfPossibleLocked(lastErr)
-}
-
-func (b *pickfirstBalancer) scheduleNextConnectionLocked() {
- b.cancelConnectionTimer()
- if !b.addressList.hasNext() {
- return
- }
- curAddr := b.addressList.currentAddress()
- cancelled := false // Access to this is protected by the balancer's mutex.
- closeFn := internal.TimeAfterFunc(connectionDelayInterval, func() {
- b.mu.Lock()
- defer b.mu.Unlock()
- // If the scheduled task is cancelled while acquiring the mutex, return.
- if cancelled {
- return
- }
- if b.logger.V(2) {
- b.logger.Infof("Happy Eyeballs timer expired while waiting for connection to %q.", curAddr.Addr)
- }
- if b.addressList.increment() {
- b.requestConnectionLocked()
- }
- })
- // Access to the cancellation callback held by the balancer is guarded by
- // the balancer's mutex, so it's safe to set the boolean from the callback.
- b.cancelConnectionTimer = sync.OnceFunc(func() {
- cancelled = true
- closeFn()
- })
-}
-
-func (b *pickfirstBalancer) updateSubConnState(sd *scData, newState balancer.SubConnState) {
- b.mu.Lock()
- defer b.mu.Unlock()
- oldState := sd.rawConnectivityState
- sd.rawConnectivityState = newState.ConnectivityState
- // Previously relevant SubConns can still callback with state updates.
- // To prevent pickers from returning these obsolete SubConns, this logic
- // is included to check if the current list of active SubConns includes this
- // SubConn.
- if !b.isActiveSCData(sd) {
- return
- }
- if newState.ConnectivityState == connectivity.Shutdown {
- sd.effectiveState = connectivity.Shutdown
- return
- }
-
- // Record a connection attempt when exiting CONNECTING.
- if newState.ConnectivityState == connectivity.TransientFailure {
- sd.connectionFailedInFirstPass = true
- connectionAttemptsFailedMetric.Record(b.metricsRecorder, 1, b.target)
- }
-
- if newState.ConnectivityState == connectivity.Ready {
- connectionAttemptsSucceededMetric.Record(b.metricsRecorder, 1, b.target)
- b.shutdownRemainingLocked(sd)
- if !b.addressList.seekTo(sd.addr) {
- // This should not fail as we should have only one SubConn after
- // entering READY. The SubConn should be present in the addressList.
- b.logger.Errorf("Address %q not found address list in %v", sd.addr, b.addressList.addresses)
- return
- }
- if !b.healthCheckingEnabled {
- if b.logger.V(2) {
- b.logger.Infof("SubConn %p reported connectivity state READY and the health listener is disabled. Transitioning SubConn to READY.", sd.subConn)
- }
-
- sd.effectiveState = connectivity.Ready
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.Ready,
- Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}},
- })
- return
- }
- if b.logger.V(2) {
- b.logger.Infof("SubConn %p reported connectivity state READY. Registering health listener.", sd.subConn)
- }
- // Send a CONNECTING update to take the SubConn out of sticky-TF if
- // required.
- sd.effectiveState = connectivity.Connecting
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.Connecting,
- Picker: &picker{err: balancer.ErrNoSubConnAvailable},
- })
- sd.subConn.RegisterHealthListener(func(scs balancer.SubConnState) {
- b.updateSubConnHealthState(sd, scs)
- })
- return
- }
-
- // If the LB policy is READY, and it receives a subchannel state change,
- // it means that the READY subchannel has failed.
- // A SubConn can also transition from CONNECTING directly to IDLE when
- // a transport is successfully created, but the connection fails
- // before the SubConn can send the notification for READY. We treat
- // this as a successful connection and transition to IDLE.
- // TODO: https://github.com/grpc/grpc-go/issues/7862 - Remove the second
- // part of the if condition below once the issue is fixed.
- if oldState == connectivity.Ready || (oldState == connectivity.Connecting && newState.ConnectivityState == connectivity.Idle) {
- // Once a transport fails, the balancer enters IDLE and starts from
- // the first address when the picker is used.
- b.shutdownRemainingLocked(sd)
- sd.effectiveState = newState.ConnectivityState
- // READY SubConn interspliced in between CONNECTING and IDLE, need to
- // account for that.
- if oldState == connectivity.Connecting {
- // A known issue (https://github.com/grpc/grpc-go/issues/7862)
- // causes a race that prevents the READY state change notification.
- // This works around it.
- connectionAttemptsSucceededMetric.Record(b.metricsRecorder, 1, b.target)
- }
- disconnectionsMetric.Record(b.metricsRecorder, 1, b.target)
- b.addressList.reset()
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.Idle,
- Picker: &idlePicker{exitIdle: sync.OnceFunc(b.ExitIdle)},
- })
- return
- }
-
- if b.firstPass {
- switch newState.ConnectivityState {
- case connectivity.Connecting:
- // The effective state can be in either IDLE, CONNECTING or
- // TRANSIENT_FAILURE. If it's TRANSIENT_FAILURE, stay in
- // TRANSIENT_FAILURE until it's READY. See A62.
- if sd.effectiveState != connectivity.TransientFailure {
- sd.effectiveState = connectivity.Connecting
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.Connecting,
- Picker: &picker{err: balancer.ErrNoSubConnAvailable},
- })
- }
- case connectivity.TransientFailure:
- sd.lastErr = newState.ConnectionError
- sd.effectiveState = connectivity.TransientFailure
- // Since we're re-using common SubConns while handling resolver
- // updates, we could receive an out of turn TRANSIENT_FAILURE from
- // a pass over the previous address list. Happy Eyeballs will also
- // cause out of order updates to arrive.
-
- if curAddr := b.addressList.currentAddress(); equalAddressIgnoringBalAttributes(&curAddr, &sd.addr) {
- b.cancelConnectionTimer()
- if b.addressList.increment() {
- b.requestConnectionLocked()
- return
- }
- }
-
- // End the first pass if we've seen a TRANSIENT_FAILURE from all
- // SubConns once.
- b.endFirstPassIfPossibleLocked(newState.ConnectionError)
- }
- return
- }
-
- // We have finished the first pass, keep re-connecting failing SubConns.
- switch newState.ConnectivityState {
- case connectivity.TransientFailure:
- b.numTF = (b.numTF + 1) % b.subConns.Len()
- sd.lastErr = newState.ConnectionError
- if b.numTF%b.subConns.Len() == 0 {
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: &picker{err: newState.ConnectionError},
- })
- }
- // We don't need to request re-resolution since the SubConn already
- // does that before reporting TRANSIENT_FAILURE.
- // TODO: #7534 - Move re-resolution requests from SubConn into
- // pick_first.
- case connectivity.Idle:
- sd.subConn.Connect()
- }
-}
-
-// endFirstPassIfPossibleLocked ends the first happy-eyeballs pass if all the
-// addresses are tried and their SubConns have reported a failure.
-func (b *pickfirstBalancer) endFirstPassIfPossibleLocked(lastErr error) {
- // An optimization to avoid iterating over the entire SubConn map.
- if b.addressList.isValid() {
- return
- }
- // Connect() has been called on all the SubConns. The first pass can be
- // ended if all the SubConns have reported a failure.
- for _, v := range b.subConns.Values() {
- sd := v.(*scData)
- if !sd.connectionFailedInFirstPass {
- return
- }
- }
- b.firstPass = false
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: &picker{err: lastErr},
- })
- // Start re-connecting all the SubConns that are already in IDLE.
- for _, v := range b.subConns.Values() {
- sd := v.(*scData)
- if sd.rawConnectivityState == connectivity.Idle {
- sd.subConn.Connect()
- }
- }
-}
-
-func (b *pickfirstBalancer) isActiveSCData(sd *scData) bool {
- activeSD, found := b.subConns.Get(sd.addr)
- return found && activeSD == sd
-}
-
-func (b *pickfirstBalancer) updateSubConnHealthState(sd *scData, state balancer.SubConnState) {
- b.mu.Lock()
- defer b.mu.Unlock()
- // Previously relevant SubConns can still callback with state updates.
- // To prevent pickers from returning these obsolete SubConns, this logic
- // is included to check if the current list of active SubConns includes
- // this SubConn.
- if !b.isActiveSCData(sd) {
- return
- }
- sd.effectiveState = state.ConnectivityState
- switch state.ConnectivityState {
- case connectivity.Ready:
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.Ready,
- Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}},
- })
- case connectivity.TransientFailure:
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: &picker{err: fmt.Errorf("pickfirst: health check failure: %v", state.ConnectionError)},
- })
- case connectivity.Connecting:
- b.updateBalancerState(balancer.State{
- ConnectivityState: connectivity.Connecting,
- Picker: &picker{err: balancer.ErrNoSubConnAvailable},
- })
- default:
- b.logger.Errorf("Got unexpected health update for SubConn %p: %v", state)
- }
-}
-
-// updateBalancerState stores the state reported to the channel and calls
-// ClientConn.UpdateState(). As an optimization, it avoids sending duplicate
-// updates to the channel.
-func (b *pickfirstBalancer) updateBalancerState(newState balancer.State) {
- // In case of TransientFailures allow the picker to be updated to update
- // the connectivity error, in all other cases don't send duplicate state
- // updates.
- if newState.ConnectivityState == b.state && b.state != connectivity.TransientFailure {
- return
- }
- b.forceUpdateConcludedStateLocked(newState)
-}
-
-// forceUpdateConcludedStateLocked stores the state reported to the channel and
-// calls ClientConn.UpdateState().
-// A separate function is defined to force update the ClientConn state since the
-// channel doesn't correctly assume that LB policies start in CONNECTING and
-// relies on LB policy to send an initial CONNECTING update.
-func (b *pickfirstBalancer) forceUpdateConcludedStateLocked(newState balancer.State) {
- b.state = newState.ConnectivityState
- b.cc.UpdateState(newState)
-}
-
-type picker struct {
- result balancer.PickResult
- err error
-}
-
-func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- return p.result, p.err
-}
-
-// idlePicker is used when the SubConn is IDLE and kicks the SubConn into
-// CONNECTING when Pick is called.
-type idlePicker struct {
- exitIdle func()
-}
-
-func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- i.exitIdle()
- return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
-}
-
-// addressList manages sequentially iterating over addresses present in a list
-// of endpoints. It provides a 1 dimensional view of the addresses present in
-// the endpoints.
-// This type is not safe for concurrent access.
-type addressList struct {
- addresses []resolver.Address
- idx int
-}
-
-func (al *addressList) isValid() bool {
- return al.idx < len(al.addresses)
-}
-
-func (al *addressList) size() int {
- return len(al.addresses)
-}
-
-// increment moves to the next index in the address list.
-// This method returns false if it went off the list, true otherwise.
-func (al *addressList) increment() bool {
- if !al.isValid() {
- return false
- }
- al.idx++
- return al.idx < len(al.addresses)
-}
-
-// currentAddress returns the current address pointed to in the addressList.
-// If the list is in an invalid state, it returns an empty address instead.
-func (al *addressList) currentAddress() resolver.Address {
- if !al.isValid() {
- return resolver.Address{}
- }
- return al.addresses[al.idx]
-}
-
-func (al *addressList) reset() {
- al.idx = 0
-}
-
-func (al *addressList) updateAddrs(addrs []resolver.Address) {
- al.addresses = addrs
- al.reset()
-}
-
-// seekTo returns false if the needle was not found and the current index was
-// left unchanged.
-func (al *addressList) seekTo(needle resolver.Address) bool {
- for ai, addr := range al.addresses {
- if !equalAddressIgnoringBalAttributes(&addr, &needle) {
- continue
- }
- al.idx = ai
- return true
- }
- return false
-}
-
-// hasNext returns whether incrementing the addressList will result in moving
-// past the end of the list. If the list has already moved past the end, it
-// returns false.
-func (al *addressList) hasNext() bool {
- if !al.isValid() {
- return false
- }
- return al.idx+1 < len(al.addresses)
-}
-
-// equalAddressIgnoringBalAttributes returns true is a and b are considered
-// equal. This is different from the Equal method on the resolver.Address type
-// which considers all fields to determine equality. Here, we only consider
-// fields that are meaningful to the SubConn.
-func equalAddressIgnoringBalAttributes(a, b *resolver.Address) bool {
- return a.Addr == b.Addr && a.ServerName == b.ServerName &&
- a.Attributes.Equal(b.Attributes) &&
- a.Metadata == b.Metadata
-}
diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
deleted file mode 100644
index 80a42d225..000000000
--- a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package roundrobin defines a roundrobin balancer. Roundrobin balancer is
-// installed as one of the default balancers in gRPC, users don't need to
-// explicitly install this balancer.
-package roundrobin
-
-import (
- rand "math/rand/v2"
- "sync/atomic"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/balancer/base"
- "google.golang.org/grpc/grpclog"
-)
-
-// Name is the name of round_robin balancer.
-const Name = "round_robin"
-
-var logger = grpclog.Component("roundrobin")
-
-// newBuilder creates a new roundrobin balancer builder.
-func newBuilder() balancer.Builder {
- return base.NewBalancerBuilder(Name, &rrPickerBuilder{}, base.Config{HealthCheck: true})
-}
-
-func init() {
- balancer.Register(newBuilder())
-}
-
-type rrPickerBuilder struct{}
-
-func (*rrPickerBuilder) Build(info base.PickerBuildInfo) balancer.Picker {
- logger.Infof("roundrobinPicker: Build called with info: %v", info)
- if len(info.ReadySCs) == 0 {
- return base.NewErrPicker(balancer.ErrNoSubConnAvailable)
- }
- scs := make([]balancer.SubConn, 0, len(info.ReadySCs))
- for sc := range info.ReadySCs {
- scs = append(scs, sc)
- }
- return &rrPicker{
- subConns: scs,
- // Start at a random index, as the same RR balancer rebuilds a new
- // picker when SubConn states change, and we don't want to apply excess
- // load to the first server in the list.
- next: uint32(rand.IntN(len(scs))),
- }
-}
-
-type rrPicker struct {
- // subConns is the snapshot of the roundrobin balancer when this picker was
- // created. The slice is immutable. Each Get() will do a round robin
- // selection from it and return the selected SubConn.
- subConns []balancer.SubConn
- next uint32
-}
-
-func (p *rrPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
- subConnsLen := uint32(len(p.subConns))
- nextIndex := atomic.AddUint32(&p.next, 1)
-
- sc := p.subConns[nextIndex%subConnsLen]
- return balancer.PickResult{SubConn: sc}, nil
-}
diff --git a/vendor/google.golang.org/grpc/balancer/subconn.go b/vendor/google.golang.org/grpc/balancer/subconn.go
deleted file mode 100644
index ea27c4fa7..000000000
--- a/vendor/google.golang.org/grpc/balancer/subconn.go
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package balancer
-
-import (
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/resolver"
-)
-
-// A SubConn represents a single connection to a gRPC backend service.
-//
-// All SubConns start in IDLE, and will not try to connect. To trigger a
-// connection attempt, Balancers must call Connect.
-//
-// If the connection attempt fails, the SubConn will transition to
-// TRANSIENT_FAILURE for a backoff period, and then return to IDLE. If the
-// connection attempt succeeds, it will transition to READY.
-//
-// If a READY SubConn becomes disconnected, the SubConn will transition to IDLE.
-//
-// If a connection re-enters IDLE, Balancers must call Connect again to trigger
-// a new connection attempt.
-//
-// Each SubConn contains a list of addresses. gRPC will try to connect to the
-// addresses in sequence, and stop trying the remainder once the first
-// connection is successful. However, this behavior is deprecated. SubConns
-// should only use a single address.
-//
-// NOTICE: This interface is intended to be implemented by gRPC, or intercepted
-// by custom load balancing poilices. Users should not need their own complete
-// implementation of this interface -- they should always delegate to a SubConn
-// returned by ClientConn.NewSubConn() by embedding it in their implementations.
-// An embedded SubConn must never be nil, or runtime panics will occur.
-type SubConn interface {
- // UpdateAddresses updates the addresses used in this SubConn.
- // gRPC checks if currently-connected address is still in the new list.
- // If it's in the list, the connection will be kept.
- // If it's not in the list, the connection will gracefully close, and
- // a new connection will be created.
- //
- // This will trigger a state transition for the SubConn.
- //
- // Deprecated: this method will be removed. Create new SubConns for new
- // addresses instead.
- UpdateAddresses([]resolver.Address)
- // Connect starts the connecting for this SubConn.
- Connect()
- // GetOrBuildProducer returns a reference to the existing Producer for this
- // ProducerBuilder in this SubConn, or, if one does not currently exist,
- // creates a new one and returns it. Returns a close function which may be
- // called when the Producer is no longer needed. Otherwise the producer
- // will automatically be closed upon connection loss or subchannel close.
- // Should only be called on a SubConn in state Ready. Otherwise the
- // producer will be unable to create streams.
- GetOrBuildProducer(ProducerBuilder) (p Producer, close func())
- // Shutdown shuts down the SubConn gracefully. Any started RPCs will be
- // allowed to complete. No future calls should be made on the SubConn.
- // One final state update will be delivered to the StateListener (or
- // UpdateSubConnState; deprecated) with ConnectivityState of Shutdown to
- // indicate the shutdown operation. This may be delivered before
- // in-progress RPCs are complete and the actual connection is closed.
- Shutdown()
- // RegisterHealthListener registers a health listener that receives health
- // updates for a Ready SubConn. Only one health listener can be registered
- // at a time. A health listener should be registered each time the SubConn's
- // connectivity state changes to READY. Registering a health listener when
- // the connectivity state is not READY may result in undefined behaviour.
- // This method must not be called synchronously while handling an update
- // from a previously registered health listener.
- RegisterHealthListener(func(SubConnState))
- // EnforceSubConnEmbedding is included to force implementers to embed
- // another implementation of this interface, allowing gRPC to add methods
- // without breaking users.
- internal.EnforceSubConnEmbedding
-}
-
-// A ProducerBuilder is a simple constructor for a Producer. It is used by the
-// SubConn to create producers when needed.
-type ProducerBuilder interface {
- // Build creates a Producer. The first parameter is always a
- // grpc.ClientConnInterface (a type to allow creating RPCs/streams on the
- // associated SubConn), but is declared as `any` to avoid a dependency
- // cycle. Build also returns a close function that will be called when all
- // references to the Producer have been given up for a SubConn, or when a
- // connectivity state change occurs on the SubConn. The close function
- // should always block until all asynchronous cleanup work is completed.
- Build(grpcClientConnInterface any) (p Producer, close func())
-}
-
-// SubConnState describes the state of a SubConn.
-type SubConnState struct {
- // ConnectivityState is the connectivity state of the SubConn.
- ConnectivityState connectivity.State
- // ConnectionError is set if the ConnectivityState is TransientFailure,
- // describing the reason the SubConn failed. Otherwise, it is nil.
- ConnectionError error
- // connectedAddr contains the connected address when ConnectivityState is
- // Ready. Otherwise, it is indeterminate.
- connectedAddress resolver.Address
-}
-
-// connectedAddress returns the connected address for a SubConnState. The
-// address is only valid if the state is READY.
-func connectedAddress(scs SubConnState) resolver.Address {
- return scs.connectedAddress
-}
-
-// setConnectedAddress sets the connected address for a SubConnState.
-func setConnectedAddress(scs *SubConnState, addr resolver.Address) {
- scs.connectedAddress = addr
-}
-
-// A Producer is a type shared among potentially many consumers. It is
-// associated with a SubConn, and an implementation will typically contain
-// other methods to provide additional functionality, e.g. configuration or
-// subscription registration.
-type Producer any
diff --git a/vendor/google.golang.org/grpc/balancer_wrapper.go b/vendor/google.golang.org/grpc/balancer_wrapper.go
deleted file mode 100644
index 905817b5f..000000000
--- a/vendor/google.golang.org/grpc/balancer_wrapper.go
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "fmt"
- "sync"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/internal/balancer/gracefulswitch"
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/internal/grpcsync"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/status"
-)
-
-var setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnState, resolver.Address))
-
-// ccBalancerWrapper sits between the ClientConn and the Balancer.
-//
-// ccBalancerWrapper implements methods corresponding to the ones on the
-// balancer.Balancer interface. The ClientConn is free to call these methods
-// concurrently and the ccBalancerWrapper ensures that calls from the ClientConn
-// to the Balancer happen in order by performing them in the serializer, without
-// any mutexes held.
-//
-// ccBalancerWrapper also implements the balancer.ClientConn interface and is
-// passed to the Balancer implementations. It invokes unexported methods on the
-// ClientConn to handle these calls from the Balancer.
-//
-// It uses the gracefulswitch.Balancer internally to ensure that balancer
-// switches happen in a graceful manner.
-type ccBalancerWrapper struct {
- // The following fields are initialized when the wrapper is created and are
- // read-only afterwards, and therefore can be accessed without a mutex.
- cc *ClientConn
- opts balancer.BuildOptions
- serializer *grpcsync.CallbackSerializer
- serializerCancel context.CancelFunc
-
- // The following fields are only accessed within the serializer or during
- // initialization.
- curBalancerName string
- balancer *gracefulswitch.Balancer
-
- // The following field is protected by mu. Caller must take cc.mu before
- // taking mu.
- mu sync.Mutex
- closed bool
-}
-
-// newCCBalancerWrapper creates a new balancer wrapper in idle state. The
-// underlying balancer is not created until the updateClientConnState() method
-// is invoked.
-func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper {
- ctx, cancel := context.WithCancel(cc.ctx)
- ccb := &ccBalancerWrapper{
- cc: cc,
- opts: balancer.BuildOptions{
- DialCreds: cc.dopts.copts.TransportCredentials,
- CredsBundle: cc.dopts.copts.CredsBundle,
- Dialer: cc.dopts.copts.Dialer,
- Authority: cc.authority,
- CustomUserAgent: cc.dopts.copts.UserAgent,
- ChannelzParent: cc.channelz,
- Target: cc.parsedTarget,
- MetricsRecorder: cc.metricsRecorderList,
- },
- serializer: grpcsync.NewCallbackSerializer(ctx),
- serializerCancel: cancel,
- }
- ccb.balancer = gracefulswitch.NewBalancer(ccb, ccb.opts)
- return ccb
-}
-
-// updateClientConnState is invoked by grpc to push a ClientConnState update to
-// the underlying balancer. This is always executed from the serializer, so
-// it is safe to call into the balancer here.
-func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error {
- errCh := make(chan error)
- uccs := func(ctx context.Context) {
- defer close(errCh)
- if ctx.Err() != nil || ccb.balancer == nil {
- return
- }
- name := gracefulswitch.ChildName(ccs.BalancerConfig)
- if ccb.curBalancerName != name {
- ccb.curBalancerName = name
- channelz.Infof(logger, ccb.cc.channelz, "Channel switches to new LB policy %q", name)
- }
- err := ccb.balancer.UpdateClientConnState(*ccs)
- if logger.V(2) && err != nil {
- logger.Infof("error from balancer.UpdateClientConnState: %v", err)
- }
- errCh <- err
- }
- onFailure := func() { close(errCh) }
-
- // UpdateClientConnState can race with Close, and when the latter wins, the
- // serializer is closed, and the attempt to schedule the callback will fail.
- // It is acceptable to ignore this failure. But since we want to handle the
- // state update in a blocking fashion (when we successfully schedule the
- // callback), we have to use the ScheduleOr method and not the MaybeSchedule
- // method on the serializer.
- ccb.serializer.ScheduleOr(uccs, onFailure)
- return <-errCh
-}
-
-// resolverError is invoked by grpc to push a resolver error to the underlying
-// balancer. The call to the balancer is executed from the serializer.
-func (ccb *ccBalancerWrapper) resolverError(err error) {
- ccb.serializer.TrySchedule(func(ctx context.Context) {
- if ctx.Err() != nil || ccb.balancer == nil {
- return
- }
- ccb.balancer.ResolverError(err)
- })
-}
-
-// close initiates async shutdown of the wrapper. cc.mu must be held when
-// calling this function. To determine the wrapper has finished shutting down,
-// the channel should block on ccb.serializer.Done() without cc.mu held.
-func (ccb *ccBalancerWrapper) close() {
- ccb.mu.Lock()
- ccb.closed = true
- ccb.mu.Unlock()
- channelz.Info(logger, ccb.cc.channelz, "ccBalancerWrapper: closing")
- ccb.serializer.TrySchedule(func(context.Context) {
- if ccb.balancer == nil {
- return
- }
- ccb.balancer.Close()
- ccb.balancer = nil
- })
- ccb.serializerCancel()
-}
-
-// exitIdle invokes the balancer's exitIdle method in the serializer.
-func (ccb *ccBalancerWrapper) exitIdle() {
- ccb.serializer.TrySchedule(func(ctx context.Context) {
- if ctx.Err() != nil || ccb.balancer == nil {
- return
- }
- ccb.balancer.ExitIdle()
- })
-}
-
-func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {
- ccb.cc.mu.Lock()
- defer ccb.cc.mu.Unlock()
-
- ccb.mu.Lock()
- if ccb.closed {
- ccb.mu.Unlock()
- return nil, fmt.Errorf("balancer is being closed; no new SubConns allowed")
- }
- ccb.mu.Unlock()
-
- if len(addrs) == 0 {
- return nil, fmt.Errorf("grpc: cannot create SubConn with empty address list")
- }
- ac, err := ccb.cc.newAddrConnLocked(addrs, opts)
- if err != nil {
- channelz.Warningf(logger, ccb.cc.channelz, "acBalancerWrapper: NewSubConn: failed to newAddrConn: %v", err)
- return nil, err
- }
- acbw := &acBalancerWrapper{
- ccb: ccb,
- ac: ac,
- producers: make(map[balancer.ProducerBuilder]*refCountedProducer),
- stateListener: opts.StateListener,
- healthData: newHealthData(connectivity.Idle),
- }
- ac.acbw = acbw
- return acbw, nil
-}
-
-func (ccb *ccBalancerWrapper) RemoveSubConn(balancer.SubConn) {
- // The graceful switch balancer will never call this.
- logger.Errorf("ccb RemoveSubConn(%v) called unexpectedly, sc")
-}
-
-func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) {
- acbw, ok := sc.(*acBalancerWrapper)
- if !ok {
- return
- }
- acbw.UpdateAddresses(addrs)
-}
-
-func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) {
- ccb.cc.mu.Lock()
- defer ccb.cc.mu.Unlock()
- if ccb.cc.conns == nil {
- // The CC has been closed; ignore this update.
- return
- }
-
- ccb.mu.Lock()
- if ccb.closed {
- ccb.mu.Unlock()
- return
- }
- ccb.mu.Unlock()
- // Update picker before updating state. Even though the ordering here does
- // not matter, it can lead to multiple calls of Pick in the common start-up
- // case where we wait for ready and then perform an RPC. If the picker is
- // updated later, we could call the "connecting" picker when the state is
- // updated, and then call the "ready" picker after the picker gets updated.
-
- // Note that there is no need to check if the balancer wrapper was closed,
- // as we know the graceful switch LB policy will not call cc if it has been
- // closed.
- ccb.cc.pickerWrapper.updatePicker(s.Picker)
- ccb.cc.csMgr.updateState(s.ConnectivityState)
-}
-
-func (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOptions) {
- ccb.cc.mu.RLock()
- defer ccb.cc.mu.RUnlock()
-
- ccb.mu.Lock()
- if ccb.closed {
- ccb.mu.Unlock()
- return
- }
- ccb.mu.Unlock()
- ccb.cc.resolveNowLocked(o)
-}
-
-func (ccb *ccBalancerWrapper) Target() string {
- return ccb.cc.target
-}
-
-// acBalancerWrapper is a wrapper on top of ac for balancers.
-// It implements balancer.SubConn interface.
-type acBalancerWrapper struct {
- internal.EnforceSubConnEmbedding
- ac *addrConn // read-only
- ccb *ccBalancerWrapper // read-only
- stateListener func(balancer.SubConnState)
-
- producersMu sync.Mutex
- producers map[balancer.ProducerBuilder]*refCountedProducer
-
- // Access to healthData is protected by healthMu.
- healthMu sync.Mutex
- // healthData is stored as a pointer to detect when the health listener is
- // dropped or updated. This is required as closures can't be compared for
- // equality.
- healthData *healthData
-}
-
-// healthData holds data related to health state reporting.
-type healthData struct {
- // connectivityState stores the most recent connectivity state delivered
- // to the LB policy. This is stored to avoid sending updates when the
- // SubConn has already exited connectivity state READY.
- connectivityState connectivity.State
-}
-
-func newHealthData(s connectivity.State) *healthData {
- return &healthData{connectivityState: s}
-}
-
-// updateState is invoked by grpc to push a subConn state update to the
-// underlying balancer.
-func (acbw *acBalancerWrapper) updateState(s connectivity.State, curAddr resolver.Address, err error) {
- acbw.ccb.serializer.TrySchedule(func(ctx context.Context) {
- if ctx.Err() != nil || acbw.ccb.balancer == nil {
- return
- }
- // Invalidate all producers on any state change.
- acbw.closeProducers()
-
- // Even though it is optional for balancers, gracefulswitch ensures
- // opts.StateListener is set, so this cannot ever be nil.
- // TODO: delete this comment when UpdateSubConnState is removed.
- scs := balancer.SubConnState{ConnectivityState: s, ConnectionError: err}
- if s == connectivity.Ready {
- setConnectedAddress(&scs, curAddr)
- }
- // Invalidate the health listener by updating the healthData.
- acbw.healthMu.Lock()
- // A race may occur if a health listener is registered soon after the
- // connectivity state is set but before the stateListener is called.
- // Two cases may arise:
- // 1. The new state is not READY: RegisterHealthListener has checks to
- // ensure no updates are sent when the connectivity state is not
- // READY.
- // 2. The new state is READY: This means that the old state wasn't Ready.
- // The RegisterHealthListener API mentions that a health listener
- // must not be registered when a SubConn is not ready to avoid such
- // races. When this happens, the LB policy would get health updates
- // on the old listener. When the LB policy registers a new listener
- // on receiving the connectivity update, the health updates will be
- // sent to the new health listener.
- acbw.healthData = newHealthData(scs.ConnectivityState)
- acbw.healthMu.Unlock()
-
- acbw.stateListener(scs)
- })
-}
-
-func (acbw *acBalancerWrapper) String() string {
- return fmt.Sprintf("SubConn(id:%d)", acbw.ac.channelz.ID)
-}
-
-func (acbw *acBalancerWrapper) UpdateAddresses(addrs []resolver.Address) {
- acbw.ac.updateAddrs(addrs)
-}
-
-func (acbw *acBalancerWrapper) Connect() {
- go acbw.ac.connect()
-}
-
-func (acbw *acBalancerWrapper) Shutdown() {
- acbw.closeProducers()
- acbw.ccb.cc.removeAddrConn(acbw.ac, errConnDrain)
-}
-
-// NewStream begins a streaming RPC on the addrConn. If the addrConn is not
-// ready, blocks until it is or ctx expires. Returns an error when the context
-// expires or the addrConn is shut down.
-func (acbw *acBalancerWrapper) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) {
- transport := acbw.ac.getReadyTransport()
- if transport == nil {
- return nil, status.Errorf(codes.Unavailable, "SubConn state is not Ready")
-
- }
- return newNonRetryClientStream(ctx, desc, method, transport, acbw.ac, opts...)
-}
-
-// Invoke performs a unary RPC. If the addrConn is not ready, returns
-// errSubConnNotReady.
-func (acbw *acBalancerWrapper) Invoke(ctx context.Context, method string, args any, reply any, opts ...CallOption) error {
- cs, err := acbw.NewStream(ctx, unaryStreamDesc, method, opts...)
- if err != nil {
- return err
- }
- if err := cs.SendMsg(args); err != nil {
- return err
- }
- return cs.RecvMsg(reply)
-}
-
-type refCountedProducer struct {
- producer balancer.Producer
- refs int // number of current refs to the producer
- close func() // underlying producer's close function
-}
-
-func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (balancer.Producer, func()) {
- acbw.producersMu.Lock()
- defer acbw.producersMu.Unlock()
-
- // Look up existing producer from this builder.
- pData := acbw.producers[pb]
- if pData == nil {
- // Not found; create a new one and add it to the producers map.
- p, closeFn := pb.Build(acbw)
- pData = &refCountedProducer{producer: p, close: closeFn}
- acbw.producers[pb] = pData
- }
- // Account for this new reference.
- pData.refs++
-
- // Return a cleanup function wrapped in a OnceFunc to remove this reference
- // and delete the refCountedProducer from the map if the total reference
- // count goes to zero.
- unref := func() {
- acbw.producersMu.Lock()
- // If closeProducers has already closed this producer instance, refs is
- // set to 0, so the check after decrementing will never pass, and the
- // producer will not be double-closed.
- pData.refs--
- if pData.refs == 0 {
- defer pData.close() // Run outside the acbw mutex
- delete(acbw.producers, pb)
- }
- acbw.producersMu.Unlock()
- }
- return pData.producer, grpcsync.OnceFunc(unref)
-}
-
-func (acbw *acBalancerWrapper) closeProducers() {
- acbw.producersMu.Lock()
- defer acbw.producersMu.Unlock()
- for pb, pData := range acbw.producers {
- pData.refs = 0
- pData.close()
- delete(acbw.producers, pb)
- }
-}
-
-// RegisterHealthListener accepts a health listener from the LB policy. It sends
-// updates to the health listener as long as the SubConn's connectivity state
-// doesn't change and a new health listener is not registered. To invalidate
-// the currently registered health listener, acbw updates the healthData. If a
-// nil listener is registered, the active health listener is dropped.
-func (acbw *acBalancerWrapper) RegisterHealthListener(listener func(balancer.SubConnState)) {
- acbw.healthMu.Lock()
- defer acbw.healthMu.Unlock()
- // listeners should not be registered when the connectivity state
- // isn't Ready. This may happen when the balancer registers a listener
- // after the connectivityState is updated, but before it is notified
- // of the update.
- if acbw.healthData.connectivityState != connectivity.Ready {
- return
- }
- // Replace the health data to stop sending updates to any previously
- // registered health listeners.
- hd := newHealthData(connectivity.Ready)
- acbw.healthData = hd
- if listener == nil {
- return
- }
-
- acbw.ccb.serializer.TrySchedule(func(ctx context.Context) {
- if ctx.Err() != nil || acbw.ccb.balancer == nil {
- return
- }
- // Don't send updates if a new listener is registered.
- acbw.healthMu.Lock()
- defer acbw.healthMu.Unlock()
- curHD := acbw.healthData
- if curHD != hd {
- return
- }
- listener(balancer.SubConnState{ConnectivityState: connectivity.Ready})
- })
-}
diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
deleted file mode 100644
index 9e9d08069..000000000
--- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
+++ /dev/null
@@ -1,1069 +0,0 @@
-// Copyright 2018 The gRPC Authors
-// All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// The canonical version of this proto can be found at
-// https://github.com/grpc/grpc-proto/blob/master/grpc/binlog/v1/binarylog.proto
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.35.1
-// protoc v5.27.1
-// source: grpc/binlog/v1/binarylog.proto
-
-package grpc_binarylog_v1
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- durationpb "google.golang.org/protobuf/types/known/durationpb"
- timestamppb "google.golang.org/protobuf/types/known/timestamppb"
- reflect "reflect"
- sync "sync"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// Enumerates the type of event
-// Note the terminology is different from the RPC semantics
-// definition, but the same meaning is expressed here.
-type GrpcLogEntry_EventType int32
-
-const (
- GrpcLogEntry_EVENT_TYPE_UNKNOWN GrpcLogEntry_EventType = 0
- // Header sent from client to server
- GrpcLogEntry_EVENT_TYPE_CLIENT_HEADER GrpcLogEntry_EventType = 1
- // Header sent from server to client
- GrpcLogEntry_EVENT_TYPE_SERVER_HEADER GrpcLogEntry_EventType = 2
- // Message sent from client to server
- GrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE GrpcLogEntry_EventType = 3
- // Message sent from server to client
- GrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE GrpcLogEntry_EventType = 4
- // A signal that client is done sending
- GrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE GrpcLogEntry_EventType = 5
- // Trailer indicates the end of the RPC.
- // On client side, this event means a trailer was either received
- // from the network or the gRPC library locally generated a status
- // to inform the application about a failure.
- // On server side, this event means the server application requested
- // to send a trailer. Note: EVENT_TYPE_CANCEL may still arrive after
- // this due to races on server side.
- GrpcLogEntry_EVENT_TYPE_SERVER_TRAILER GrpcLogEntry_EventType = 6
- // A signal that the RPC is cancelled. On client side, this
- // indicates the client application requests a cancellation.
- // On server side, this indicates that cancellation was detected.
- // Note: This marks the end of the RPC. Events may arrive after
- // this due to races. For example, on client side a trailer
- // may arrive even though the application requested to cancel the RPC.
- GrpcLogEntry_EVENT_TYPE_CANCEL GrpcLogEntry_EventType = 7
-)
-
-// Enum value maps for GrpcLogEntry_EventType.
-var (
- GrpcLogEntry_EventType_name = map[int32]string{
- 0: "EVENT_TYPE_UNKNOWN",
- 1: "EVENT_TYPE_CLIENT_HEADER",
- 2: "EVENT_TYPE_SERVER_HEADER",
- 3: "EVENT_TYPE_CLIENT_MESSAGE",
- 4: "EVENT_TYPE_SERVER_MESSAGE",
- 5: "EVENT_TYPE_CLIENT_HALF_CLOSE",
- 6: "EVENT_TYPE_SERVER_TRAILER",
- 7: "EVENT_TYPE_CANCEL",
- }
- GrpcLogEntry_EventType_value = map[string]int32{
- "EVENT_TYPE_UNKNOWN": 0,
- "EVENT_TYPE_CLIENT_HEADER": 1,
- "EVENT_TYPE_SERVER_HEADER": 2,
- "EVENT_TYPE_CLIENT_MESSAGE": 3,
- "EVENT_TYPE_SERVER_MESSAGE": 4,
- "EVENT_TYPE_CLIENT_HALF_CLOSE": 5,
- "EVENT_TYPE_SERVER_TRAILER": 6,
- "EVENT_TYPE_CANCEL": 7,
- }
-)
-
-func (x GrpcLogEntry_EventType) Enum() *GrpcLogEntry_EventType {
- p := new(GrpcLogEntry_EventType)
- *p = x
- return p
-}
-
-func (x GrpcLogEntry_EventType) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (GrpcLogEntry_EventType) Descriptor() protoreflect.EnumDescriptor {
- return file_grpc_binlog_v1_binarylog_proto_enumTypes[0].Descriptor()
-}
-
-func (GrpcLogEntry_EventType) Type() protoreflect.EnumType {
- return &file_grpc_binlog_v1_binarylog_proto_enumTypes[0]
-}
-
-func (x GrpcLogEntry_EventType) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use GrpcLogEntry_EventType.Descriptor instead.
-func (GrpcLogEntry_EventType) EnumDescriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0, 0}
-}
-
-// Enumerates the entity that generates the log entry
-type GrpcLogEntry_Logger int32
-
-const (
- GrpcLogEntry_LOGGER_UNKNOWN GrpcLogEntry_Logger = 0
- GrpcLogEntry_LOGGER_CLIENT GrpcLogEntry_Logger = 1
- GrpcLogEntry_LOGGER_SERVER GrpcLogEntry_Logger = 2
-)
-
-// Enum value maps for GrpcLogEntry_Logger.
-var (
- GrpcLogEntry_Logger_name = map[int32]string{
- 0: "LOGGER_UNKNOWN",
- 1: "LOGGER_CLIENT",
- 2: "LOGGER_SERVER",
- }
- GrpcLogEntry_Logger_value = map[string]int32{
- "LOGGER_UNKNOWN": 0,
- "LOGGER_CLIENT": 1,
- "LOGGER_SERVER": 2,
- }
-)
-
-func (x GrpcLogEntry_Logger) Enum() *GrpcLogEntry_Logger {
- p := new(GrpcLogEntry_Logger)
- *p = x
- return p
-}
-
-func (x GrpcLogEntry_Logger) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (GrpcLogEntry_Logger) Descriptor() protoreflect.EnumDescriptor {
- return file_grpc_binlog_v1_binarylog_proto_enumTypes[1].Descriptor()
-}
-
-func (GrpcLogEntry_Logger) Type() protoreflect.EnumType {
- return &file_grpc_binlog_v1_binarylog_proto_enumTypes[1]
-}
-
-func (x GrpcLogEntry_Logger) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use GrpcLogEntry_Logger.Descriptor instead.
-func (GrpcLogEntry_Logger) EnumDescriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0, 1}
-}
-
-type Address_Type int32
-
-const (
- Address_TYPE_UNKNOWN Address_Type = 0
- // address is in 1.2.3.4 form
- Address_TYPE_IPV4 Address_Type = 1
- // address is in IPv6 canonical form (RFC5952 section 4)
- // The scope is NOT included in the address string.
- Address_TYPE_IPV6 Address_Type = 2
- // address is UDS string
- Address_TYPE_UNIX Address_Type = 3
-)
-
-// Enum value maps for Address_Type.
-var (
- Address_Type_name = map[int32]string{
- 0: "TYPE_UNKNOWN",
- 1: "TYPE_IPV4",
- 2: "TYPE_IPV6",
- 3: "TYPE_UNIX",
- }
- Address_Type_value = map[string]int32{
- "TYPE_UNKNOWN": 0,
- "TYPE_IPV4": 1,
- "TYPE_IPV6": 2,
- "TYPE_UNIX": 3,
- }
-)
-
-func (x Address_Type) Enum() *Address_Type {
- p := new(Address_Type)
- *p = x
- return p
-}
-
-func (x Address_Type) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (Address_Type) Descriptor() protoreflect.EnumDescriptor {
- return file_grpc_binlog_v1_binarylog_proto_enumTypes[2].Descriptor()
-}
-
-func (Address_Type) Type() protoreflect.EnumType {
- return &file_grpc_binlog_v1_binarylog_proto_enumTypes[2]
-}
-
-func (x Address_Type) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use Address_Type.Descriptor instead.
-func (Address_Type) EnumDescriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{7, 0}
-}
-
-// Log entry we store in binary logs
-type GrpcLogEntry struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // The timestamp of the binary log message
- Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
- // Uniquely identifies a call. The value must not be 0 in order to disambiguate
- // from an unset value.
- // Each call may have several log entries, they will all have the same call_id.
- // Nothing is guaranteed about their value other than they are unique across
- // different RPCs in the same gRPC process.
- CallId uint64 `protobuf:"varint,2,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"`
- // The entry sequence id for this call. The first GrpcLogEntry has a
- // value of 1, to disambiguate from an unset value. The purpose of
- // this field is to detect missing entries in environments where
- // durability or ordering is not guaranteed.
- SequenceIdWithinCall uint64 `protobuf:"varint,3,opt,name=sequence_id_within_call,json=sequenceIdWithinCall,proto3" json:"sequence_id_within_call,omitempty"`
- Type GrpcLogEntry_EventType `protobuf:"varint,4,opt,name=type,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_EventType" json:"type,omitempty"`
- Logger GrpcLogEntry_Logger `protobuf:"varint,5,opt,name=logger,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_Logger" json:"logger,omitempty"` // One of the above Logger enum
- // The logger uses one of the following fields to record the payload,
- // according to the type of the log entry.
- //
- // Types that are assignable to Payload:
- //
- // *GrpcLogEntry_ClientHeader
- // *GrpcLogEntry_ServerHeader
- // *GrpcLogEntry_Message
- // *GrpcLogEntry_Trailer
- Payload isGrpcLogEntry_Payload `protobuf_oneof:"payload"`
- // true if payload does not represent the full message or metadata.
- PayloadTruncated bool `protobuf:"varint,10,opt,name=payload_truncated,json=payloadTruncated,proto3" json:"payload_truncated,omitempty"`
- // Peer address information, will only be recorded on the first
- // incoming event. On client side, peer is logged on
- // EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in
- // the case of trailers-only. On server side, peer is always
- // logged on EVENT_TYPE_CLIENT_HEADER.
- Peer *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"`
-}
-
-func (x *GrpcLogEntry) Reset() {
- *x = GrpcLogEntry{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *GrpcLogEntry) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GrpcLogEntry) ProtoMessage() {}
-
-func (x *GrpcLogEntry) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use GrpcLogEntry.ProtoReflect.Descriptor instead.
-func (*GrpcLogEntry) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *GrpcLogEntry) GetTimestamp() *timestamppb.Timestamp {
- if x != nil {
- return x.Timestamp
- }
- return nil
-}
-
-func (x *GrpcLogEntry) GetCallId() uint64 {
- if x != nil {
- return x.CallId
- }
- return 0
-}
-
-func (x *GrpcLogEntry) GetSequenceIdWithinCall() uint64 {
- if x != nil {
- return x.SequenceIdWithinCall
- }
- return 0
-}
-
-func (x *GrpcLogEntry) GetType() GrpcLogEntry_EventType {
- if x != nil {
- return x.Type
- }
- return GrpcLogEntry_EVENT_TYPE_UNKNOWN
-}
-
-func (x *GrpcLogEntry) GetLogger() GrpcLogEntry_Logger {
- if x != nil {
- return x.Logger
- }
- return GrpcLogEntry_LOGGER_UNKNOWN
-}
-
-func (m *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload {
- if m != nil {
- return m.Payload
- }
- return nil
-}
-
-func (x *GrpcLogEntry) GetClientHeader() *ClientHeader {
- if x, ok := x.GetPayload().(*GrpcLogEntry_ClientHeader); ok {
- return x.ClientHeader
- }
- return nil
-}
-
-func (x *GrpcLogEntry) GetServerHeader() *ServerHeader {
- if x, ok := x.GetPayload().(*GrpcLogEntry_ServerHeader); ok {
- return x.ServerHeader
- }
- return nil
-}
-
-func (x *GrpcLogEntry) GetMessage() *Message {
- if x, ok := x.GetPayload().(*GrpcLogEntry_Message); ok {
- return x.Message
- }
- return nil
-}
-
-func (x *GrpcLogEntry) GetTrailer() *Trailer {
- if x, ok := x.GetPayload().(*GrpcLogEntry_Trailer); ok {
- return x.Trailer
- }
- return nil
-}
-
-func (x *GrpcLogEntry) GetPayloadTruncated() bool {
- if x != nil {
- return x.PayloadTruncated
- }
- return false
-}
-
-func (x *GrpcLogEntry) GetPeer() *Address {
- if x != nil {
- return x.Peer
- }
- return nil
-}
-
-type isGrpcLogEntry_Payload interface {
- isGrpcLogEntry_Payload()
-}
-
-type GrpcLogEntry_ClientHeader struct {
- ClientHeader *ClientHeader `protobuf:"bytes,6,opt,name=client_header,json=clientHeader,proto3,oneof"`
-}
-
-type GrpcLogEntry_ServerHeader struct {
- ServerHeader *ServerHeader `protobuf:"bytes,7,opt,name=server_header,json=serverHeader,proto3,oneof"`
-}
-
-type GrpcLogEntry_Message struct {
- // Used by EVENT_TYPE_CLIENT_MESSAGE, EVENT_TYPE_SERVER_MESSAGE
- Message *Message `protobuf:"bytes,8,opt,name=message,proto3,oneof"`
-}
-
-type GrpcLogEntry_Trailer struct {
- Trailer *Trailer `protobuf:"bytes,9,opt,name=trailer,proto3,oneof"`
-}
-
-func (*GrpcLogEntry_ClientHeader) isGrpcLogEntry_Payload() {}
-
-func (*GrpcLogEntry_ServerHeader) isGrpcLogEntry_Payload() {}
-
-func (*GrpcLogEntry_Message) isGrpcLogEntry_Payload() {}
-
-func (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {}
-
-type ClientHeader struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // This contains only the metadata from the application.
- Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
- // The name of the RPC method, which looks something like:
- // /<service>/<method>
- // Note the leading "/" character.
- MethodName string `protobuf:"bytes,2,opt,name=method_name,json=methodName,proto3" json:"method_name,omitempty"`
- // A single process may be used to run multiple virtual
- // servers with different identities.
- // The authority is the name of such a server identity.
- // It is typically a portion of the URI in the form of
- // <host> or <host>:<port> .
- Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"`
- // the RPC timeout
- Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"`
-}
-
-func (x *ClientHeader) Reset() {
- *x = ClientHeader{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *ClientHeader) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ClientHeader) ProtoMessage() {}
-
-func (x *ClientHeader) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[1]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ClientHeader.ProtoReflect.Descriptor instead.
-func (*ClientHeader) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *ClientHeader) GetMetadata() *Metadata {
- if x != nil {
- return x.Metadata
- }
- return nil
-}
-
-func (x *ClientHeader) GetMethodName() string {
- if x != nil {
- return x.MethodName
- }
- return ""
-}
-
-func (x *ClientHeader) GetAuthority() string {
- if x != nil {
- return x.Authority
- }
- return ""
-}
-
-func (x *ClientHeader) GetTimeout() *durationpb.Duration {
- if x != nil {
- return x.Timeout
- }
- return nil
-}
-
-type ServerHeader struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // This contains only the metadata from the application.
- Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
-}
-
-func (x *ServerHeader) Reset() {
- *x = ServerHeader{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *ServerHeader) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ServerHeader) ProtoMessage() {}
-
-func (x *ServerHeader) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[2]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ServerHeader.ProtoReflect.Descriptor instead.
-func (*ServerHeader) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *ServerHeader) GetMetadata() *Metadata {
- if x != nil {
- return x.Metadata
- }
- return nil
-}
-
-type Trailer struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // This contains only the metadata from the application.
- Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
- // The gRPC status code.
- StatusCode uint32 `protobuf:"varint,2,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"`
- // An original status message before any transport specific
- // encoding.
- StatusMessage string `protobuf:"bytes,3,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"`
- // The value of the 'grpc-status-details-bin' metadata key. If
- // present, this is always an encoded 'google.rpc.Status' message.
- StatusDetails []byte `protobuf:"bytes,4,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"`
-}
-
-func (x *Trailer) Reset() {
- *x = Trailer{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Trailer) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Trailer) ProtoMessage() {}
-
-func (x *Trailer) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[3]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Trailer.ProtoReflect.Descriptor instead.
-func (*Trailer) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *Trailer) GetMetadata() *Metadata {
- if x != nil {
- return x.Metadata
- }
- return nil
-}
-
-func (x *Trailer) GetStatusCode() uint32 {
- if x != nil {
- return x.StatusCode
- }
- return 0
-}
-
-func (x *Trailer) GetStatusMessage() string {
- if x != nil {
- return x.StatusMessage
- }
- return ""
-}
-
-func (x *Trailer) GetStatusDetails() []byte {
- if x != nil {
- return x.StatusDetails
- }
- return nil
-}
-
-// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE
-type Message struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Length of the message. It may not be the same as the length of the
- // data field, as the logging payload can be truncated or omitted.
- Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"`
- // May be truncated or omitted.
- Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
-}
-
-func (x *Message) Reset() {
- *x = Message{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Message) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Message) ProtoMessage() {}
-
-func (x *Message) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[4]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Message.ProtoReflect.Descriptor instead.
-func (*Message) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *Message) GetLength() uint32 {
- if x != nil {
- return x.Length
- }
- return 0
-}
-
-func (x *Message) GetData() []byte {
- if x != nil {
- return x.Data
- }
- return nil
-}
-
-// A list of metadata pairs, used in the payload of client header,
-// server header, and server trailer.
-// Implementations may omit some entries to honor the header limits
-// of GRPC_BINARY_LOG_CONFIG.
-//
-// Header keys added by gRPC are omitted. To be more specific,
-// implementations will not log the following entries, and this is
-// not to be treated as a truncation:
-// - entries handled by grpc that are not user visible, such as those
-// that begin with 'grpc-' (with exception of grpc-trace-bin)
-// or keys like 'lb-token'
-// - transport specific entries, including but not limited to:
-// ':path', ':authority', 'content-encoding', 'user-agent', 'te', etc
-// - entries added for call credentials
-//
-// Implementations must always log grpc-trace-bin if it is present.
-// Practically speaking it will only be visible on server side because
-// grpc-trace-bin is managed by low level client side mechanisms
-// inaccessible from the application level. On server side, the
-// header is just a normal metadata key.
-// The pair will not count towards the size limit.
-type Metadata struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Entry []*MetadataEntry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"`
-}
-
-func (x *Metadata) Reset() {
- *x = Metadata{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Metadata) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Metadata) ProtoMessage() {}
-
-func (x *Metadata) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[5]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Metadata.ProtoReflect.Descriptor instead.
-func (*Metadata) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *Metadata) GetEntry() []*MetadataEntry {
- if x != nil {
- return x.Entry
- }
- return nil
-}
-
-// A metadata key value pair
-type MetadataEntry struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
- Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
-}
-
-func (x *MetadataEntry) Reset() {
- *x = MetadataEntry{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *MetadataEntry) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MetadataEntry) ProtoMessage() {}
-
-func (x *MetadataEntry) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[6]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use MetadataEntry.ProtoReflect.Descriptor instead.
-func (*MetadataEntry) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *MetadataEntry) GetKey() string {
- if x != nil {
- return x.Key
- }
- return ""
-}
-
-func (x *MetadataEntry) GetValue() []byte {
- if x != nil {
- return x.Value
- }
- return nil
-}
-
-// Address information
-type Address struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Type Address_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"`
- Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
- // only for TYPE_IPV4 and TYPE_IPV6
- IpPort uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"`
-}
-
-func (x *Address) Reset() {
- *x = Address{}
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Address) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Address) ProtoMessage() {}
-
-func (x *Address) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[7]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Address.ProtoReflect.Descriptor instead.
-func (*Address) Descriptor() ([]byte, []int) {
- return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *Address) GetType() Address_Type {
- if x != nil {
- return x.Type
- }
- return Address_TYPE_UNKNOWN
-}
-
-func (x *Address) GetAddress() string {
- if x != nil {
- return x.Address
- }
- return ""
-}
-
-func (x *Address) GetIpPort() uint32 {
- if x != nil {
- return x.IpPort
- }
- return 0
-}
-
-var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor
-
-var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{
- 0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31,
- 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
- 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x07, 0x0a, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
- 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
- 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
- 0x17, 0x0a, 0x07, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
- 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x65, 0x71, 0x75,
- 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5f, 0x63,
- 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x73, 0x65, 0x71, 0x75, 0x65,
- 0x6e, 0x63, 0x65, 0x49, 0x64, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12,
- 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76,
- 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x45,
- 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3e,
- 0x0a, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26,
- 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e,
- 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e,
- 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x46,
- 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e,
- 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
- 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
- 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
- 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76,
- 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00,
- 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36,
- 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
- 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d,
- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65,
- 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62,
- 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69,
- 0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x2b,
- 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61,
- 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x70, 0x61, 0x79, 0x6c, 0x6f,
- 0x61, 0x64, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x70,
- 0x65, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64,
- 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x22, 0xf5, 0x01, 0x0a, 0x09,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45,
- 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
- 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
- 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12,
- 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45,
- 0x52, 0x56, 0x45, 0x52, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a,
- 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45,
- 0x4e, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19,
- 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45,
- 0x52, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x45,
- 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54,
- 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x05, 0x12, 0x1d, 0x0a,
- 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56,
- 0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4c, 0x45, 0x52, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11,
- 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45,
- 0x4c, 0x10, 0x07, 0x22, 0x42, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a,
- 0x0e, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
- 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x43, 0x4c, 0x49, 0x45,
- 0x4e, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53,
- 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f,
- 0x61, 0x64, 0x22, 0xbb, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61,
- 0x64, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e,
- 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b,
- 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a,
- 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x74,
- 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
- 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
- 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
- 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79,
- 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x54, 0x72,
- 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62,
- 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f,
- 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12,
- 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d,
- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d,
- 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x35, 0x0a,
- 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67,
- 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
- 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04,
- 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x12, 0x36, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
- 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x37, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a,
- 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e,
- 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79,
- 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07,
- 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69,
- 0x70, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x45, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a,
- 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
- 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x34, 0x10, 0x01, 0x12, 0x0d,
- 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x36, 0x10, 0x02, 0x12, 0x0d, 0x0a,
- 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x10, 0x03, 0x42, 0x5c, 0x0a, 0x14,
- 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f,
- 0x67, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x50,
- 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
- 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62,
- 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69,
- 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x33,
-}
-
-var (
- file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once
- file_grpc_binlog_v1_binarylog_proto_rawDescData = file_grpc_binlog_v1_binarylog_proto_rawDesc
-)
-
-func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte {
- file_grpc_binlog_v1_binarylog_proto_rawDescOnce.Do(func() {
- file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_binlog_v1_binarylog_proto_rawDescData)
- })
- return file_grpc_binlog_v1_binarylog_proto_rawDescData
-}
-
-var file_grpc_binlog_v1_binarylog_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_grpc_binlog_v1_binarylog_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
-var file_grpc_binlog_v1_binarylog_proto_goTypes = []any{
- (GrpcLogEntry_EventType)(0), // 0: grpc.binarylog.v1.GrpcLogEntry.EventType
- (GrpcLogEntry_Logger)(0), // 1: grpc.binarylog.v1.GrpcLogEntry.Logger
- (Address_Type)(0), // 2: grpc.binarylog.v1.Address.Type
- (*GrpcLogEntry)(nil), // 3: grpc.binarylog.v1.GrpcLogEntry
- (*ClientHeader)(nil), // 4: grpc.binarylog.v1.ClientHeader
- (*ServerHeader)(nil), // 5: grpc.binarylog.v1.ServerHeader
- (*Trailer)(nil), // 6: grpc.binarylog.v1.Trailer
- (*Message)(nil), // 7: grpc.binarylog.v1.Message
- (*Metadata)(nil), // 8: grpc.binarylog.v1.Metadata
- (*MetadataEntry)(nil), // 9: grpc.binarylog.v1.MetadataEntry
- (*Address)(nil), // 10: grpc.binarylog.v1.Address
- (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp
- (*durationpb.Duration)(nil), // 12: google.protobuf.Duration
-}
-var file_grpc_binlog_v1_binarylog_proto_depIdxs = []int32{
- 11, // 0: grpc.binarylog.v1.GrpcLogEntry.timestamp:type_name -> google.protobuf.Timestamp
- 0, // 1: grpc.binarylog.v1.GrpcLogEntry.type:type_name -> grpc.binarylog.v1.GrpcLogEntry.EventType
- 1, // 2: grpc.binarylog.v1.GrpcLogEntry.logger:type_name -> grpc.binarylog.v1.GrpcLogEntry.Logger
- 4, // 3: grpc.binarylog.v1.GrpcLogEntry.client_header:type_name -> grpc.binarylog.v1.ClientHeader
- 5, // 4: grpc.binarylog.v1.GrpcLogEntry.server_header:type_name -> grpc.binarylog.v1.ServerHeader
- 7, // 5: grpc.binarylog.v1.GrpcLogEntry.message:type_name -> grpc.binarylog.v1.Message
- 6, // 6: grpc.binarylog.v1.GrpcLogEntry.trailer:type_name -> grpc.binarylog.v1.Trailer
- 10, // 7: grpc.binarylog.v1.GrpcLogEntry.peer:type_name -> grpc.binarylog.v1.Address
- 8, // 8: grpc.binarylog.v1.ClientHeader.metadata:type_name -> grpc.binarylog.v1.Metadata
- 12, // 9: grpc.binarylog.v1.ClientHeader.timeout:type_name -> google.protobuf.Duration
- 8, // 10: grpc.binarylog.v1.ServerHeader.metadata:type_name -> grpc.binarylog.v1.Metadata
- 8, // 11: grpc.binarylog.v1.Trailer.metadata:type_name -> grpc.binarylog.v1.Metadata
- 9, // 12: grpc.binarylog.v1.Metadata.entry:type_name -> grpc.binarylog.v1.MetadataEntry
- 2, // 13: grpc.binarylog.v1.Address.type:type_name -> grpc.binarylog.v1.Address.Type
- 14, // [14:14] is the sub-list for method output_type
- 14, // [14:14] is the sub-list for method input_type
- 14, // [14:14] is the sub-list for extension type_name
- 14, // [14:14] is the sub-list for extension extendee
- 0, // [0:14] is the sub-list for field type_name
-}
-
-func init() { file_grpc_binlog_v1_binarylog_proto_init() }
-func file_grpc_binlog_v1_binarylog_proto_init() {
- if File_grpc_binlog_v1_binarylog_proto != nil {
- return
- }
- file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []any{
- (*GrpcLogEntry_ClientHeader)(nil),
- (*GrpcLogEntry_ServerHeader)(nil),
- (*GrpcLogEntry_Message)(nil),
- (*GrpcLogEntry_Trailer)(nil),
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_grpc_binlog_v1_binarylog_proto_rawDesc,
- NumEnums: 3,
- NumMessages: 8,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_grpc_binlog_v1_binarylog_proto_goTypes,
- DependencyIndexes: file_grpc_binlog_v1_binarylog_proto_depIdxs,
- EnumInfos: file_grpc_binlog_v1_binarylog_proto_enumTypes,
- MessageInfos: file_grpc_binlog_v1_binarylog_proto_msgTypes,
- }.Build()
- File_grpc_binlog_v1_binarylog_proto = out.File
- file_grpc_binlog_v1_binarylog_proto_rawDesc = nil
- file_grpc_binlog_v1_binarylog_proto_goTypes = nil
- file_grpc_binlog_v1_binarylog_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go
deleted file mode 100644
index 788c89c16..000000000
--- a/vendor/google.golang.org/grpc/call.go
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
-)
-
-// Invoke sends the RPC request on the wire and returns after response is
-// received. This is typically called by generated code.
-//
-// All errors returned by Invoke are compatible with the status package.
-func (cc *ClientConn) Invoke(ctx context.Context, method string, args, reply any, opts ...CallOption) error {
- // allow interceptor to see all applicable call options, which means those
- // configured as defaults from dial option as well as per-call options
- opts = combine(cc.dopts.callOptions, opts)
-
- if cc.dopts.unaryInt != nil {
- return cc.dopts.unaryInt(ctx, method, args, reply, cc, invoke, opts...)
- }
- return invoke(ctx, method, args, reply, cc, opts...)
-}
-
-func combine(o1 []CallOption, o2 []CallOption) []CallOption {
- // we don't use append because o1 could have extra capacity whose
- // elements would be overwritten, which could cause inadvertent
- // sharing (and race conditions) between concurrent calls
- if len(o1) == 0 {
- return o2
- } else if len(o2) == 0 {
- return o1
- }
- ret := make([]CallOption, len(o1)+len(o2))
- copy(ret, o1)
- copy(ret[len(o1):], o2)
- return ret
-}
-
-// Invoke sends the RPC request on the wire and returns after response is
-// received. This is typically called by generated code.
-//
-// DEPRECATED: Use ClientConn.Invoke instead.
-func Invoke(ctx context.Context, method string, args, reply any, cc *ClientConn, opts ...CallOption) error {
- return cc.Invoke(ctx, method, args, reply, opts...)
-}
-
-var unaryStreamDesc = &StreamDesc{ServerStreams: false, ClientStreams: false}
-
-func invoke(ctx context.Context, method string, req, reply any, cc *ClientConn, opts ...CallOption) error {
- cs, err := newClientStream(ctx, unaryStreamDesc, cc, method, opts...)
- if err != nil {
- return err
- }
- if err := cs.SendMsg(req); err != nil {
- return err
- }
- return cs.RecvMsg(reply)
-}
diff --git a/vendor/google.golang.org/grpc/channelz/channelz.go b/vendor/google.golang.org/grpc/channelz/channelz.go
deleted file mode 100644
index 32b7fa579..000000000
--- a/vendor/google.golang.org/grpc/channelz/channelz.go
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package channelz exports internals of the channelz implementation as required
-// by other gRPC packages.
-//
-// The implementation of the channelz spec as defined in
-// https://github.com/grpc/proposal/blob/master/A14-channelz.md, is provided by
-// the `internal/channelz` package.
-//
-// # Experimental
-//
-// Notice: All APIs in this package are experimental and may be removed in a
-// later release.
-package channelz
-
-import "google.golang.org/grpc/internal/channelz"
-
-// Identifier is an opaque identifier which uniquely identifies an entity in the
-// channelz database.
-type Identifier = channelz.Identifier
diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go
deleted file mode 100644
index 4f57b5543..000000000
--- a/vendor/google.golang.org/grpc/clientconn.go
+++ /dev/null
@@ -1,1806 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "errors"
- "fmt"
- "math"
- "net/url"
- "slices"
- "strings"
- "sync"
- "sync/atomic"
- "time"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/balancer/base"
- "google.golang.org/grpc/balancer/pickfirst"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/internal/grpcsync"
- "google.golang.org/grpc/internal/idle"
- iresolver "google.golang.org/grpc/internal/resolver"
- "google.golang.org/grpc/internal/stats"
- "google.golang.org/grpc/internal/transport"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/serviceconfig"
- "google.golang.org/grpc/status"
-
- _ "google.golang.org/grpc/balancer/roundrobin" // To register roundrobin.
- _ "google.golang.org/grpc/internal/resolver/passthrough" // To register passthrough resolver.
- _ "google.golang.org/grpc/internal/resolver/unix" // To register unix resolver.
- _ "google.golang.org/grpc/resolver/dns" // To register dns resolver.
-)
-
-const (
- // minimum time to give a connection to complete
- minConnectTimeout = 20 * time.Second
-)
-
-var (
- // ErrClientConnClosing indicates that the operation is illegal because
- // the ClientConn is closing.
- //
- // Deprecated: this error should not be relied upon by users; use the status
- // code of Canceled instead.
- ErrClientConnClosing = status.Error(codes.Canceled, "grpc: the client connection is closing")
- // errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs.
- errConnDrain = errors.New("grpc: the connection is drained")
- // errConnClosing indicates that the connection is closing.
- errConnClosing = errors.New("grpc: the connection is closing")
- // errConnIdling indicates the connection is being closed as the channel
- // is moving to an idle mode due to inactivity.
- errConnIdling = errors.New("grpc: the connection is closing due to channel idleness")
- // invalidDefaultServiceConfigErrPrefix is used to prefix the json parsing error for the default
- // service config.
- invalidDefaultServiceConfigErrPrefix = "grpc: the provided default service config is invalid"
- // PickFirstBalancerName is the name of the pick_first balancer.
- PickFirstBalancerName = pickfirst.Name
-)
-
-// The following errors are returned from Dial and DialContext
-var (
- // errNoTransportSecurity indicates that there is no transport security
- // being set for ClientConn. Users should either set one or explicitly
- // call WithInsecure DialOption to disable security.
- errNoTransportSecurity = errors.New("grpc: no transport security set (use grpc.WithTransportCredentials(insecure.NewCredentials()) explicitly or set credentials)")
- // errTransportCredsAndBundle indicates that creds bundle is used together
- // with other individual Transport Credentials.
- errTransportCredsAndBundle = errors.New("grpc: credentials.Bundle may not be used with individual TransportCredentials")
- // errNoTransportCredsInBundle indicated that the configured creds bundle
- // returned a transport credentials which was nil.
- errNoTransportCredsInBundle = errors.New("grpc: credentials.Bundle must return non-nil transport credentials")
- // errTransportCredentialsMissing indicates that users want to transmit
- // security information (e.g., OAuth2 token) which requires secure
- // connection on an insecure connection.
- errTransportCredentialsMissing = errors.New("grpc: the credentials require transport level security (use grpc.WithTransportCredentials() to set)")
-)
-
-const (
- defaultClientMaxReceiveMessageSize = 1024 * 1024 * 4
- defaultClientMaxSendMessageSize = math.MaxInt32
- // http2IOBufSize specifies the buffer size for sending frames.
- defaultWriteBufSize = 32 * 1024
- defaultReadBufSize = 32 * 1024
-)
-
-type defaultConfigSelector struct {
- sc *ServiceConfig
-}
-
-func (dcs *defaultConfigSelector) SelectConfig(rpcInfo iresolver.RPCInfo) (*iresolver.RPCConfig, error) {
- return &iresolver.RPCConfig{
- Context: rpcInfo.Context,
- MethodConfig: getMethodConfig(dcs.sc, rpcInfo.Method),
- }, nil
-}
-
-// NewClient creates a new gRPC "channel" for the target URI provided. No I/O
-// is performed. Use of the ClientConn for RPCs will automatically cause it to
-// connect. Connect may be used to manually create a connection, but for most
-// users this is unnecessary.
-//
-// The target name syntax is defined in
-// https://github.com/grpc/grpc/blob/master/doc/naming.md. e.g. to use dns
-// resolver, a "dns:///" prefix should be applied to the target.
-//
-// The DialOptions returned by WithBlock, WithTimeout,
-// WithReturnConnectionError, and FailOnNonTempDialError are ignored by this
-// function.
-func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) {
- cc := &ClientConn{
- target: target,
- conns: make(map[*addrConn]struct{}),
- dopts: defaultDialOptions(),
- }
-
- cc.retryThrottler.Store((*retryThrottler)(nil))
- cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil})
- cc.ctx, cc.cancel = context.WithCancel(context.Background())
-
- // Apply dial options.
- disableGlobalOpts := false
- for _, opt := range opts {
- if _, ok := opt.(*disableGlobalDialOptions); ok {
- disableGlobalOpts = true
- break
- }
- }
-
- if !disableGlobalOpts {
- for _, opt := range globalDialOptions {
- opt.apply(&cc.dopts)
- }
- }
-
- for _, opt := range opts {
- opt.apply(&cc.dopts)
- }
-
- // Determine the resolver to use.
- if err := cc.initParsedTargetAndResolverBuilder(); err != nil {
- return nil, err
- }
-
- for _, opt := range globalPerTargetDialOptions {
- opt.DialOptionForTarget(cc.parsedTarget.URL).apply(&cc.dopts)
- }
-
- chainUnaryClientInterceptors(cc)
- chainStreamClientInterceptors(cc)
-
- if err := cc.validateTransportCredentials(); err != nil {
- return nil, err
- }
-
- if cc.dopts.defaultServiceConfigRawJSON != nil {
- scpr := parseServiceConfig(*cc.dopts.defaultServiceConfigRawJSON, cc.dopts.maxCallAttempts)
- if scpr.Err != nil {
- return nil, fmt.Errorf("%s: %v", invalidDefaultServiceConfigErrPrefix, scpr.Err)
- }
- cc.dopts.defaultServiceConfig, _ = scpr.Config.(*ServiceConfig)
- }
- cc.mkp = cc.dopts.copts.KeepaliveParams
-
- if err = cc.initAuthority(); err != nil {
- return nil, err
- }
-
- // Register ClientConn with channelz. Note that this is only done after
- // channel creation cannot fail.
- cc.channelzRegistration(target)
- channelz.Infof(logger, cc.channelz, "parsed dial target is: %#v", cc.parsedTarget)
- channelz.Infof(logger, cc.channelz, "Channel authority set to %q", cc.authority)
-
- cc.csMgr = newConnectivityStateManager(cc.ctx, cc.channelz)
- cc.pickerWrapper = newPickerWrapper(cc.dopts.copts.StatsHandlers)
-
- cc.metricsRecorderList = stats.NewMetricsRecorderList(cc.dopts.copts.StatsHandlers)
-
- cc.initIdleStateLocked() // Safe to call without the lock, since nothing else has a reference to cc.
- cc.idlenessMgr = idle.NewManager((*idler)(cc), cc.dopts.idleTimeout)
-
- return cc, nil
-}
-
-// Dial calls DialContext(context.Background(), target, opts...).
-//
-// Deprecated: use NewClient instead. Will be supported throughout 1.x.
-func Dial(target string, opts ...DialOption) (*ClientConn, error) {
- return DialContext(context.Background(), target, opts...)
-}
-
-// DialContext calls NewClient and then exits idle mode. If WithBlock(true) is
-// used, it calls Connect and WaitForStateChange until either the context
-// expires or the state of the ClientConn is Ready.
-//
-// One subtle difference between NewClient and Dial and DialContext is that the
-// former uses "dns" as the default name resolver, while the latter use
-// "passthrough" for backward compatibility. This distinction should not matter
-// to most users, but could matter to legacy users that specify a custom dialer
-// and expect it to receive the target string directly.
-//
-// Deprecated: use NewClient instead. Will be supported throughout 1.x.
-func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) {
- // At the end of this method, we kick the channel out of idle, rather than
- // waiting for the first rpc.
- opts = append([]DialOption{withDefaultScheme("passthrough")}, opts...)
- cc, err := NewClient(target, opts...)
- if err != nil {
- return nil, err
- }
-
- // We start the channel off in idle mode, but kick it out of idle now,
- // instead of waiting for the first RPC. This is the legacy behavior of
- // Dial.
- defer func() {
- if err != nil {
- cc.Close()
- }
- }()
-
- // This creates the name resolver, load balancer, etc.
- if err := cc.idlenessMgr.ExitIdleMode(); err != nil {
- return nil, err
- }
-
- // Return now for non-blocking dials.
- if !cc.dopts.block {
- return cc, nil
- }
-
- if cc.dopts.timeout > 0 {
- var cancel context.CancelFunc
- ctx, cancel = context.WithTimeout(ctx, cc.dopts.timeout)
- defer cancel()
- }
- defer func() {
- select {
- case <-ctx.Done():
- switch {
- case ctx.Err() == err:
- conn = nil
- case err == nil || !cc.dopts.returnLastError:
- conn, err = nil, ctx.Err()
- default:
- conn, err = nil, fmt.Errorf("%v: %v", ctx.Err(), err)
- }
- default:
- }
- }()
-
- // A blocking dial blocks until the clientConn is ready.
- for {
- s := cc.GetState()
- if s == connectivity.Idle {
- cc.Connect()
- }
- if s == connectivity.Ready {
- return cc, nil
- } else if cc.dopts.copts.FailOnNonTempDialError && s == connectivity.TransientFailure {
- if err = cc.connectionError(); err != nil {
- terr, ok := err.(interface {
- Temporary() bool
- })
- if ok && !terr.Temporary() {
- return nil, err
- }
- }
- }
- if !cc.WaitForStateChange(ctx, s) {
- // ctx got timeout or canceled.
- if err = cc.connectionError(); err != nil && cc.dopts.returnLastError {
- return nil, err
- }
- return nil, ctx.Err()
- }
- }
-}
-
-// addTraceEvent is a helper method to add a trace event on the channel. If the
-// channel is a nested one, the same event is also added on the parent channel.
-func (cc *ClientConn) addTraceEvent(msg string) {
- ted := &channelz.TraceEvent{
- Desc: fmt.Sprintf("Channel %s", msg),
- Severity: channelz.CtInfo,
- }
- if cc.dopts.channelzParent != nil {
- ted.Parent = &channelz.TraceEvent{
- Desc: fmt.Sprintf("Nested channel(id:%d) %s", cc.channelz.ID, msg),
- Severity: channelz.CtInfo,
- }
- }
- channelz.AddTraceEvent(logger, cc.channelz, 0, ted)
-}
-
-type idler ClientConn
-
-func (i *idler) EnterIdleMode() {
- (*ClientConn)(i).enterIdleMode()
-}
-
-func (i *idler) ExitIdleMode() error {
- return (*ClientConn)(i).exitIdleMode()
-}
-
-// exitIdleMode moves the channel out of idle mode by recreating the name
-// resolver and load balancer. This should never be called directly; use
-// cc.idlenessMgr.ExitIdleMode instead.
-func (cc *ClientConn) exitIdleMode() (err error) {
- cc.mu.Lock()
- if cc.conns == nil {
- cc.mu.Unlock()
- return errConnClosing
- }
- cc.mu.Unlock()
-
- // This needs to be called without cc.mu because this builds a new resolver
- // which might update state or report error inline, which would then need to
- // acquire cc.mu.
- if err := cc.resolverWrapper.start(); err != nil {
- return err
- }
-
- cc.addTraceEvent("exiting idle mode")
- return nil
-}
-
-// initIdleStateLocked initializes common state to how it should be while idle.
-func (cc *ClientConn) initIdleStateLocked() {
- cc.resolverWrapper = newCCResolverWrapper(cc)
- cc.balancerWrapper = newCCBalancerWrapper(cc)
- cc.firstResolveEvent = grpcsync.NewEvent()
- // cc.conns == nil is a proxy for the ClientConn being closed. So, instead
- // of setting it to nil here, we recreate the map. This also means that we
- // don't have to do this when exiting idle mode.
- cc.conns = make(map[*addrConn]struct{})
-}
-
-// enterIdleMode puts the channel in idle mode, and as part of it shuts down the
-// name resolver, load balancer, and any subchannels. This should never be
-// called directly; use cc.idlenessMgr.EnterIdleMode instead.
-func (cc *ClientConn) enterIdleMode() {
- cc.mu.Lock()
-
- if cc.conns == nil {
- cc.mu.Unlock()
- return
- }
-
- conns := cc.conns
-
- rWrapper := cc.resolverWrapper
- rWrapper.close()
- cc.pickerWrapper.reset()
- bWrapper := cc.balancerWrapper
- bWrapper.close()
- cc.csMgr.updateState(connectivity.Idle)
- cc.addTraceEvent("entering idle mode")
-
- cc.initIdleStateLocked()
-
- cc.mu.Unlock()
-
- // Block until the name resolver and LB policy are closed.
- <-rWrapper.serializer.Done()
- <-bWrapper.serializer.Done()
-
- // Close all subchannels after the LB policy is closed.
- for ac := range conns {
- ac.tearDown(errConnIdling)
- }
-}
-
-// validateTransportCredentials performs a series of checks on the configured
-// transport credentials. It returns a non-nil error if any of these conditions
-// are met:
-// - no transport creds and no creds bundle is configured
-// - both transport creds and creds bundle are configured
-// - creds bundle is configured, but it lacks a transport credentials
-// - insecure transport creds configured alongside call creds that require
-// transport level security
-//
-// If none of the above conditions are met, the configured credentials are
-// deemed valid and a nil error is returned.
-func (cc *ClientConn) validateTransportCredentials() error {
- if cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil {
- return errNoTransportSecurity
- }
- if cc.dopts.copts.TransportCredentials != nil && cc.dopts.copts.CredsBundle != nil {
- return errTransportCredsAndBundle
- }
- if cc.dopts.copts.CredsBundle != nil && cc.dopts.copts.CredsBundle.TransportCredentials() == nil {
- return errNoTransportCredsInBundle
- }
- transportCreds := cc.dopts.copts.TransportCredentials
- if transportCreds == nil {
- transportCreds = cc.dopts.copts.CredsBundle.TransportCredentials()
- }
- if transportCreds.Info().SecurityProtocol == "insecure" {
- for _, cd := range cc.dopts.copts.PerRPCCredentials {
- if cd.RequireTransportSecurity() {
- return errTransportCredentialsMissing
- }
- }
- }
- return nil
-}
-
-// channelzRegistration registers the newly created ClientConn with channelz and
-// stores the returned identifier in `cc.channelz`. A channelz trace event is
-// emitted for ClientConn creation. If the newly created ClientConn is a nested
-// one, i.e a valid parent ClientConn ID is specified via a dial option, the
-// trace event is also added to the parent.
-//
-// Doesn't grab cc.mu as this method is expected to be called only at Dial time.
-func (cc *ClientConn) channelzRegistration(target string) {
- parentChannel, _ := cc.dopts.channelzParent.(*channelz.Channel)
- cc.channelz = channelz.RegisterChannel(parentChannel, target)
- cc.addTraceEvent("created")
-}
-
-// chainUnaryClientInterceptors chains all unary client interceptors into one.
-func chainUnaryClientInterceptors(cc *ClientConn) {
- interceptors := cc.dopts.chainUnaryInts
- // Prepend dopts.unaryInt to the chaining interceptors if it exists, since unaryInt will
- // be executed before any other chained interceptors.
- if cc.dopts.unaryInt != nil {
- interceptors = append([]UnaryClientInterceptor{cc.dopts.unaryInt}, interceptors...)
- }
- var chainedInt UnaryClientInterceptor
- if len(interceptors) == 0 {
- chainedInt = nil
- } else if len(interceptors) == 1 {
- chainedInt = interceptors[0]
- } else {
- chainedInt = func(ctx context.Context, method string, req, reply any, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error {
- return interceptors[0](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, 0, invoker), opts...)
- }
- }
- cc.dopts.unaryInt = chainedInt
-}
-
-// getChainUnaryInvoker recursively generate the chained unary invoker.
-func getChainUnaryInvoker(interceptors []UnaryClientInterceptor, curr int, finalInvoker UnaryInvoker) UnaryInvoker {
- if curr == len(interceptors)-1 {
- return finalInvoker
- }
- return func(ctx context.Context, method string, req, reply any, cc *ClientConn, opts ...CallOption) error {
- return interceptors[curr+1](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, curr+1, finalInvoker), opts...)
- }
-}
-
-// chainStreamClientInterceptors chains all stream client interceptors into one.
-func chainStreamClientInterceptors(cc *ClientConn) {
- interceptors := cc.dopts.chainStreamInts
- // Prepend dopts.streamInt to the chaining interceptors if it exists, since streamInt will
- // be executed before any other chained interceptors.
- if cc.dopts.streamInt != nil {
- interceptors = append([]StreamClientInterceptor{cc.dopts.streamInt}, interceptors...)
- }
- var chainedInt StreamClientInterceptor
- if len(interceptors) == 0 {
- chainedInt = nil
- } else if len(interceptors) == 1 {
- chainedInt = interceptors[0]
- } else {
- chainedInt = func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error) {
- return interceptors[0](ctx, desc, cc, method, getChainStreamer(interceptors, 0, streamer), opts...)
- }
- }
- cc.dopts.streamInt = chainedInt
-}
-
-// getChainStreamer recursively generate the chained client stream constructor.
-func getChainStreamer(interceptors []StreamClientInterceptor, curr int, finalStreamer Streamer) Streamer {
- if curr == len(interceptors)-1 {
- return finalStreamer
- }
- return func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) {
- return interceptors[curr+1](ctx, desc, cc, method, getChainStreamer(interceptors, curr+1, finalStreamer), opts...)
- }
-}
-
-// newConnectivityStateManager creates an connectivityStateManager with
-// the specified channel.
-func newConnectivityStateManager(ctx context.Context, channel *channelz.Channel) *connectivityStateManager {
- return &connectivityStateManager{
- channelz: channel,
- pubSub: grpcsync.NewPubSub(ctx),
- }
-}
-
-// connectivityStateManager keeps the connectivity.State of ClientConn.
-// This struct will eventually be exported so the balancers can access it.
-//
-// TODO: If possible, get rid of the `connectivityStateManager` type, and
-// provide this functionality using the `PubSub`, to avoid keeping track of
-// the connectivity state at two places.
-type connectivityStateManager struct {
- mu sync.Mutex
- state connectivity.State
- notifyChan chan struct{}
- channelz *channelz.Channel
- pubSub *grpcsync.PubSub
-}
-
-// updateState updates the connectivity.State of ClientConn.
-// If there's a change it notifies goroutines waiting on state change to
-// happen.
-func (csm *connectivityStateManager) updateState(state connectivity.State) {
- csm.mu.Lock()
- defer csm.mu.Unlock()
- if csm.state == connectivity.Shutdown {
- return
- }
- if csm.state == state {
- return
- }
- csm.state = state
- csm.channelz.ChannelMetrics.State.Store(&state)
- csm.pubSub.Publish(state)
-
- channelz.Infof(logger, csm.channelz, "Channel Connectivity change to %v", state)
- if csm.notifyChan != nil {
- // There are other goroutines waiting on this channel.
- close(csm.notifyChan)
- csm.notifyChan = nil
- }
-}
-
-func (csm *connectivityStateManager) getState() connectivity.State {
- csm.mu.Lock()
- defer csm.mu.Unlock()
- return csm.state
-}
-
-func (csm *connectivityStateManager) getNotifyChan() <-chan struct{} {
- csm.mu.Lock()
- defer csm.mu.Unlock()
- if csm.notifyChan == nil {
- csm.notifyChan = make(chan struct{})
- }
- return csm.notifyChan
-}
-
-// ClientConnInterface defines the functions clients need to perform unary and
-// streaming RPCs. It is implemented by *ClientConn, and is only intended to
-// be referenced by generated code.
-type ClientConnInterface interface {
- // Invoke performs a unary RPC and returns after the response is received
- // into reply.
- Invoke(ctx context.Context, method string, args any, reply any, opts ...CallOption) error
- // NewStream begins a streaming RPC.
- NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error)
-}
-
-// Assert *ClientConn implements ClientConnInterface.
-var _ ClientConnInterface = (*ClientConn)(nil)
-
-// ClientConn represents a virtual connection to a conceptual endpoint, to
-// perform RPCs.
-//
-// A ClientConn is free to have zero or more actual connections to the endpoint
-// based on configuration, load, etc. It is also free to determine which actual
-// endpoints to use and may change it every RPC, permitting client-side load
-// balancing.
-//
-// A ClientConn encapsulates a range of functionality including name
-// resolution, TCP connection establishment (with retries and backoff) and TLS
-// handshakes. It also handles errors on established connections by
-// re-resolving the name and reconnecting.
-type ClientConn struct {
- ctx context.Context // Initialized using the background context at dial time.
- cancel context.CancelFunc // Cancelled on close.
-
- // The following are initialized at dial time, and are read-only after that.
- target string // User's dial target.
- parsedTarget resolver.Target // See initParsedTargetAndResolverBuilder().
- authority string // See initAuthority().
- dopts dialOptions // Default and user specified dial options.
- channelz *channelz.Channel // Channelz object.
- resolverBuilder resolver.Builder // See initParsedTargetAndResolverBuilder().
- idlenessMgr *idle.Manager
- metricsRecorderList *stats.MetricsRecorderList
-
- // The following provide their own synchronization, and therefore don't
- // require cc.mu to be held to access them.
- csMgr *connectivityStateManager
- pickerWrapper *pickerWrapper
- safeConfigSelector iresolver.SafeConfigSelector
- retryThrottler atomic.Value // Updated from service config.
-
- // mu protects the following fields.
- // TODO: split mu so the same mutex isn't used for everything.
- mu sync.RWMutex
- resolverWrapper *ccResolverWrapper // Always recreated whenever entering idle to simplify Close.
- balancerWrapper *ccBalancerWrapper // Always recreated whenever entering idle to simplify Close.
- sc *ServiceConfig // Latest service config received from the resolver.
- conns map[*addrConn]struct{} // Set to nil on close.
- mkp keepalive.ClientParameters // May be updated upon receipt of a GoAway.
- // firstResolveEvent is used to track whether the name resolver sent us at
- // least one update. RPCs block on this event. May be accessed without mu
- // if we know we cannot be asked to enter idle mode while accessing it (e.g.
- // when the idle manager has already been closed, or if we are already
- // entering idle mode).
- firstResolveEvent *grpcsync.Event
-
- lceMu sync.Mutex // protects lastConnectionError
- lastConnectionError error
-}
-
-// WaitForStateChange waits until the connectivity.State of ClientConn changes from sourceState or
-// ctx expires. A true value is returned in former case and false in latter.
-func (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connectivity.State) bool {
- ch := cc.csMgr.getNotifyChan()
- if cc.csMgr.getState() != sourceState {
- return true
- }
- select {
- case <-ctx.Done():
- return false
- case <-ch:
- return true
- }
-}
-
-// GetState returns the connectivity.State of ClientConn.
-func (cc *ClientConn) GetState() connectivity.State {
- return cc.csMgr.getState()
-}
-
-// Connect causes all subchannels in the ClientConn to attempt to connect if
-// the channel is idle. Does not wait for the connection attempts to begin
-// before returning.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a later
-// release.
-func (cc *ClientConn) Connect() {
- if err := cc.idlenessMgr.ExitIdleMode(); err != nil {
- cc.addTraceEvent(err.Error())
- return
- }
- // If the ClientConn was not in idle mode, we need to call ExitIdle on the
- // LB policy so that connections can be created.
- cc.mu.Lock()
- cc.balancerWrapper.exitIdle()
- cc.mu.Unlock()
-}
-
-// waitForResolvedAddrs blocks until the resolver has provided addresses or the
-// context expires. Returns nil unless the context expires first; otherwise
-// returns a status error based on the context.
-func (cc *ClientConn) waitForResolvedAddrs(ctx context.Context) error {
- // This is on the RPC path, so we use a fast path to avoid the
- // more-expensive "select" below after the resolver has returned once.
- if cc.firstResolveEvent.HasFired() {
- return nil
- }
- select {
- case <-cc.firstResolveEvent.Done():
- return nil
- case <-ctx.Done():
- return status.FromContextError(ctx.Err()).Err()
- case <-cc.ctx.Done():
- return ErrClientConnClosing
- }
-}
-
-var emptyServiceConfig *ServiceConfig
-
-func init() {
- cfg := parseServiceConfig("{}", defaultMaxCallAttempts)
- if cfg.Err != nil {
- panic(fmt.Sprintf("impossible error parsing empty service config: %v", cfg.Err))
- }
- emptyServiceConfig = cfg.Config.(*ServiceConfig)
-
- internal.SubscribeToConnectivityStateChanges = func(cc *ClientConn, s grpcsync.Subscriber) func() {
- return cc.csMgr.pubSub.Subscribe(s)
- }
- internal.EnterIdleModeForTesting = func(cc *ClientConn) {
- cc.idlenessMgr.EnterIdleModeForTesting()
- }
- internal.ExitIdleModeForTesting = func(cc *ClientConn) error {
- return cc.idlenessMgr.ExitIdleMode()
- }
-}
-
-func (cc *ClientConn) maybeApplyDefaultServiceConfig() {
- if cc.sc != nil {
- cc.applyServiceConfigAndBalancer(cc.sc, nil)
- return
- }
- if cc.dopts.defaultServiceConfig != nil {
- cc.applyServiceConfigAndBalancer(cc.dopts.defaultServiceConfig, &defaultConfigSelector{cc.dopts.defaultServiceConfig})
- } else {
- cc.applyServiceConfigAndBalancer(emptyServiceConfig, &defaultConfigSelector{emptyServiceConfig})
- }
-}
-
-func (cc *ClientConn) updateResolverStateAndUnlock(s resolver.State, err error) error {
- defer cc.firstResolveEvent.Fire()
- // Check if the ClientConn is already closed. Some fields (e.g.
- // balancerWrapper) are set to nil when closing the ClientConn, and could
- // cause nil pointer panic if we don't have this check.
- if cc.conns == nil {
- cc.mu.Unlock()
- return nil
- }
-
- if err != nil {
- // May need to apply the initial service config in case the resolver
- // doesn't support service configs, or doesn't provide a service config
- // with the new addresses.
- cc.maybeApplyDefaultServiceConfig()
-
- cc.balancerWrapper.resolverError(err)
-
- // No addresses are valid with err set; return early.
- cc.mu.Unlock()
- return balancer.ErrBadResolverState
- }
-
- var ret error
- if cc.dopts.disableServiceConfig {
- channelz.Infof(logger, cc.channelz, "ignoring service config from resolver (%v) and applying the default because service config is disabled", s.ServiceConfig)
- cc.maybeApplyDefaultServiceConfig()
- } else if s.ServiceConfig == nil {
- cc.maybeApplyDefaultServiceConfig()
- // TODO: do we need to apply a failing LB policy if there is no
- // default, per the error handling design?
- } else {
- if sc, ok := s.ServiceConfig.Config.(*ServiceConfig); s.ServiceConfig.Err == nil && ok {
- configSelector := iresolver.GetConfigSelector(s)
- if configSelector != nil {
- if len(s.ServiceConfig.Config.(*ServiceConfig).Methods) != 0 {
- channelz.Infof(logger, cc.channelz, "method configs in service config will be ignored due to presence of config selector")
- }
- } else {
- configSelector = &defaultConfigSelector{sc}
- }
- cc.applyServiceConfigAndBalancer(sc, configSelector)
- } else {
- ret = balancer.ErrBadResolverState
- if cc.sc == nil {
- // Apply the failing LB only if we haven't received valid service config
- // from the name resolver in the past.
- cc.applyFailingLBLocked(s.ServiceConfig)
- cc.mu.Unlock()
- return ret
- }
- }
- }
-
- balCfg := cc.sc.lbConfig
- bw := cc.balancerWrapper
- cc.mu.Unlock()
-
- uccsErr := bw.updateClientConnState(&balancer.ClientConnState{ResolverState: s, BalancerConfig: balCfg})
- if ret == nil {
- ret = uccsErr // prefer ErrBadResolver state since any other error is
- // currently meaningless to the caller.
- }
- return ret
-}
-
-// applyFailingLBLocked is akin to configuring an LB policy on the channel which
-// always fails RPCs. Here, an actual LB policy is not configured, but an always
-// erroring picker is configured, which returns errors with information about
-// what was invalid in the received service config. A config selector with no
-// service config is configured, and the connectivity state of the channel is
-// set to TransientFailure.
-func (cc *ClientConn) applyFailingLBLocked(sc *serviceconfig.ParseResult) {
- var err error
- if sc.Err != nil {
- err = status.Errorf(codes.Unavailable, "error parsing service config: %v", sc.Err)
- } else {
- err = status.Errorf(codes.Unavailable, "illegal service config type: %T", sc.Config)
- }
- cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil})
- cc.pickerWrapper.updatePicker(base.NewErrPicker(err))
- cc.csMgr.updateState(connectivity.TransientFailure)
-}
-
-// Makes a copy of the input addresses slice. Addresses are passed during
-// subconn creation and address update operations.
-func copyAddresses(in []resolver.Address) []resolver.Address {
- out := make([]resolver.Address, len(in))
- copy(out, in)
- return out
-}
-
-// newAddrConnLocked creates an addrConn for addrs and adds it to cc.conns.
-//
-// Caller needs to make sure len(addrs) > 0.
-func (cc *ClientConn) newAddrConnLocked(addrs []resolver.Address, opts balancer.NewSubConnOptions) (*addrConn, error) {
- if cc.conns == nil {
- return nil, ErrClientConnClosing
- }
-
- ac := &addrConn{
- state: connectivity.Idle,
- cc: cc,
- addrs: copyAddresses(addrs),
- scopts: opts,
- dopts: cc.dopts,
- channelz: channelz.RegisterSubChannel(cc.channelz, ""),
- resetBackoff: make(chan struct{}),
- }
- ac.ctx, ac.cancel = context.WithCancel(cc.ctx)
- // Start with our address set to the first address; this may be updated if
- // we connect to different addresses.
- ac.channelz.ChannelMetrics.Target.Store(&addrs[0].Addr)
-
- channelz.AddTraceEvent(logger, ac.channelz, 0, &channelz.TraceEvent{
- Desc: "Subchannel created",
- Severity: channelz.CtInfo,
- Parent: &channelz.TraceEvent{
- Desc: fmt.Sprintf("Subchannel(id:%d) created", ac.channelz.ID),
- Severity: channelz.CtInfo,
- },
- })
-
- // Track ac in cc. This needs to be done before any getTransport(...) is called.
- cc.conns[ac] = struct{}{}
- return ac, nil
-}
-
-// removeAddrConn removes the addrConn in the subConn from clientConn.
-// It also tears down the ac with the given error.
-func (cc *ClientConn) removeAddrConn(ac *addrConn, err error) {
- cc.mu.Lock()
- if cc.conns == nil {
- cc.mu.Unlock()
- return
- }
- delete(cc.conns, ac)
- cc.mu.Unlock()
- ac.tearDown(err)
-}
-
-// Target returns the target string of the ClientConn.
-func (cc *ClientConn) Target() string {
- return cc.target
-}
-
-// CanonicalTarget returns the canonical target string of the ClientConn.
-func (cc *ClientConn) CanonicalTarget() string {
- return cc.parsedTarget.String()
-}
-
-func (cc *ClientConn) incrCallsStarted() {
- cc.channelz.ChannelMetrics.CallsStarted.Add(1)
- cc.channelz.ChannelMetrics.LastCallStartedTimestamp.Store(time.Now().UnixNano())
-}
-
-func (cc *ClientConn) incrCallsSucceeded() {
- cc.channelz.ChannelMetrics.CallsSucceeded.Add(1)
-}
-
-func (cc *ClientConn) incrCallsFailed() {
- cc.channelz.ChannelMetrics.CallsFailed.Add(1)
-}
-
-// connect starts creating a transport.
-// It does nothing if the ac is not IDLE.
-// TODO(bar) Move this to the addrConn section.
-func (ac *addrConn) connect() error {
- ac.mu.Lock()
- if ac.state == connectivity.Shutdown {
- if logger.V(2) {
- logger.Infof("connect called on shutdown addrConn; ignoring.")
- }
- ac.mu.Unlock()
- return errConnClosing
- }
- if ac.state != connectivity.Idle {
- if logger.V(2) {
- logger.Infof("connect called on addrConn in non-idle state (%v); ignoring.", ac.state)
- }
- ac.mu.Unlock()
- return nil
- }
-
- ac.resetTransportAndUnlock()
- return nil
-}
-
-// equalAddressIgnoringBalAttributes returns true is a and b are considered equal.
-// This is different from the Equal method on the resolver.Address type which
-// considers all fields to determine equality. Here, we only consider fields
-// that are meaningful to the subConn.
-func equalAddressIgnoringBalAttributes(a, b *resolver.Address) bool {
- return a.Addr == b.Addr && a.ServerName == b.ServerName &&
- a.Attributes.Equal(b.Attributes) &&
- a.Metadata == b.Metadata
-}
-
-func equalAddressesIgnoringBalAttributes(a, b []resolver.Address) bool {
- return slices.EqualFunc(a, b, func(a, b resolver.Address) bool { return equalAddressIgnoringBalAttributes(&a, &b) })
-}
-
-// updateAddrs updates ac.addrs with the new addresses list and handles active
-// connections or connection attempts.
-func (ac *addrConn) updateAddrs(addrs []resolver.Address) {
- addrs = copyAddresses(addrs)
- limit := len(addrs)
- if limit > 5 {
- limit = 5
- }
- channelz.Infof(logger, ac.channelz, "addrConn: updateAddrs addrs (%d of %d): %v", limit, len(addrs), addrs[:limit])
-
- ac.mu.Lock()
- if equalAddressesIgnoringBalAttributes(ac.addrs, addrs) {
- ac.mu.Unlock()
- return
- }
-
- ac.addrs = addrs
-
- if ac.state == connectivity.Shutdown ||
- ac.state == connectivity.TransientFailure ||
- ac.state == connectivity.Idle {
- // We were not connecting, so do nothing but update the addresses.
- ac.mu.Unlock()
- return
- }
-
- if ac.state == connectivity.Ready {
- // Try to find the connected address.
- for _, a := range addrs {
- a.ServerName = ac.cc.getServerName(a)
- if equalAddressIgnoringBalAttributes(&a, &ac.curAddr) {
- // We are connected to a valid address, so do nothing but
- // update the addresses.
- ac.mu.Unlock()
- return
- }
- }
- }
-
- // We are either connected to the wrong address or currently connecting.
- // Stop the current iteration and restart.
-
- ac.cancel()
- ac.ctx, ac.cancel = context.WithCancel(ac.cc.ctx)
-
- // We have to defer here because GracefulClose => onClose, which requires
- // locking ac.mu.
- if ac.transport != nil {
- defer ac.transport.GracefulClose()
- ac.transport = nil
- }
-
- if len(addrs) == 0 {
- ac.updateConnectivityState(connectivity.Idle, nil)
- }
-
- // Since we were connecting/connected, we should start a new connection
- // attempt.
- go ac.resetTransportAndUnlock()
-}
-
-// getServerName determines the serverName to be used in the connection
-// handshake. The default value for the serverName is the authority on the
-// ClientConn, which either comes from the user's dial target or through an
-// authority override specified using the WithAuthority dial option. Name
-// resolvers can specify a per-address override for the serverName through the
-// resolver.Address.ServerName field which is used only if the WithAuthority
-// dial option was not used. The rationale is that per-address authority
-// overrides specified by the name resolver can represent a security risk, while
-// an override specified by the user is more dependable since they probably know
-// what they are doing.
-func (cc *ClientConn) getServerName(addr resolver.Address) string {
- if cc.dopts.authority != "" {
- return cc.dopts.authority
- }
- if addr.ServerName != "" {
- return addr.ServerName
- }
- return cc.authority
-}
-
-func getMethodConfig(sc *ServiceConfig, method string) MethodConfig {
- if sc == nil {
- return MethodConfig{}
- }
- if m, ok := sc.Methods[method]; ok {
- return m
- }
- i := strings.LastIndex(method, "/")
- if m, ok := sc.Methods[method[:i+1]]; ok {
- return m
- }
- return sc.Methods[""]
-}
-
-// GetMethodConfig gets the method config of the input method.
-// If there's an exact match for input method (i.e. /service/method), we return
-// the corresponding MethodConfig.
-// If there isn't an exact match for the input method, we look for the service's default
-// config under the service (i.e /service/) and then for the default for all services (empty string).
-//
-// If there is a default MethodConfig for the service, we return it.
-// Otherwise, we return an empty MethodConfig.
-func (cc *ClientConn) GetMethodConfig(method string) MethodConfig {
- // TODO: Avoid the locking here.
- cc.mu.RLock()
- defer cc.mu.RUnlock()
- return getMethodConfig(cc.sc, method)
-}
-
-func (cc *ClientConn) healthCheckConfig() *healthCheckConfig {
- cc.mu.RLock()
- defer cc.mu.RUnlock()
- if cc.sc == nil {
- return nil
- }
- return cc.sc.healthCheckConfig
-}
-
-func (cc *ClientConn) getTransport(ctx context.Context, failfast bool, method string) (transport.ClientTransport, balancer.PickResult, error) {
- return cc.pickerWrapper.pick(ctx, failfast, balancer.PickInfo{
- Ctx: ctx,
- FullMethodName: method,
- })
-}
-
-func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, configSelector iresolver.ConfigSelector) {
- if sc == nil {
- // should never reach here.
- return
- }
- cc.sc = sc
- if configSelector != nil {
- cc.safeConfigSelector.UpdateConfigSelector(configSelector)
- }
-
- if cc.sc.retryThrottling != nil {
- newThrottler := &retryThrottler{
- tokens: cc.sc.retryThrottling.MaxTokens,
- max: cc.sc.retryThrottling.MaxTokens,
- thresh: cc.sc.retryThrottling.MaxTokens / 2,
- ratio: cc.sc.retryThrottling.TokenRatio,
- }
- cc.retryThrottler.Store(newThrottler)
- } else {
- cc.retryThrottler.Store((*retryThrottler)(nil))
- }
-}
-
-func (cc *ClientConn) resolveNow(o resolver.ResolveNowOptions) {
- cc.mu.RLock()
- cc.resolverWrapper.resolveNow(o)
- cc.mu.RUnlock()
-}
-
-func (cc *ClientConn) resolveNowLocked(o resolver.ResolveNowOptions) {
- cc.resolverWrapper.resolveNow(o)
-}
-
-// ResetConnectBackoff wakes up all subchannels in transient failure and causes
-// them to attempt another connection immediately. It also resets the backoff
-// times used for subsequent attempts regardless of the current state.
-//
-// In general, this function should not be used. Typical service or network
-// outages result in a reasonable client reconnection strategy by default.
-// However, if a previously unavailable network becomes available, this may be
-// used to trigger an immediate reconnect.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func (cc *ClientConn) ResetConnectBackoff() {
- cc.mu.Lock()
- conns := cc.conns
- cc.mu.Unlock()
- for ac := range conns {
- ac.resetConnectBackoff()
- }
-}
-
-// Close tears down the ClientConn and all underlying connections.
-func (cc *ClientConn) Close() error {
- defer func() {
- cc.cancel()
- <-cc.csMgr.pubSub.Done()
- }()
-
- // Prevent calls to enter/exit idle immediately, and ensure we are not
- // currently entering/exiting idle mode.
- cc.idlenessMgr.Close()
-
- cc.mu.Lock()
- if cc.conns == nil {
- cc.mu.Unlock()
- return ErrClientConnClosing
- }
-
- conns := cc.conns
- cc.conns = nil
- cc.csMgr.updateState(connectivity.Shutdown)
-
- // We can safely unlock and continue to access all fields now as
- // cc.conns==nil, preventing any further operations on cc.
- cc.mu.Unlock()
-
- cc.resolverWrapper.close()
- // The order of closing matters here since the balancer wrapper assumes the
- // picker is closed before it is closed.
- cc.pickerWrapper.close()
- cc.balancerWrapper.close()
-
- <-cc.resolverWrapper.serializer.Done()
- <-cc.balancerWrapper.serializer.Done()
- var wg sync.WaitGroup
- for ac := range conns {
- wg.Add(1)
- go func(ac *addrConn) {
- defer wg.Done()
- ac.tearDown(ErrClientConnClosing)
- }(ac)
- }
- wg.Wait()
- cc.addTraceEvent("deleted")
- // TraceEvent needs to be called before RemoveEntry, as TraceEvent may add
- // trace reference to the entity being deleted, and thus prevent it from being
- // deleted right away.
- channelz.RemoveEntry(cc.channelz.ID)
-
- return nil
-}
-
-// addrConn is a network connection to a given address.
-type addrConn struct {
- ctx context.Context
- cancel context.CancelFunc
-
- cc *ClientConn
- dopts dialOptions
- acbw *acBalancerWrapper
- scopts balancer.NewSubConnOptions
-
- // transport is set when there's a viable transport (note: ac state may not be READY as LB channel
- // health checking may require server to report healthy to set ac to READY), and is reset
- // to nil when the current transport should no longer be used to create a stream (e.g. after GoAway
- // is received, transport is closed, ac has been torn down).
- transport transport.ClientTransport // The current transport.
-
- // This mutex is used on the RPC path, so its usage should be minimized as
- // much as possible.
- // TODO: Find a lock-free way to retrieve the transport and state from the
- // addrConn.
- mu sync.Mutex
- curAddr resolver.Address // The current address.
- addrs []resolver.Address // All addresses that the resolver resolved to.
-
- // Use updateConnectivityState for updating addrConn's connectivity state.
- state connectivity.State
-
- backoffIdx int // Needs to be stateful for resetConnectBackoff.
- resetBackoff chan struct{}
-
- channelz *channelz.SubChannel
-}
-
-// Note: this requires a lock on ac.mu.
-func (ac *addrConn) updateConnectivityState(s connectivity.State, lastErr error) {
- if ac.state == s {
- return
- }
- ac.state = s
- ac.channelz.ChannelMetrics.State.Store(&s)
- if lastErr == nil {
- channelz.Infof(logger, ac.channelz, "Subchannel Connectivity change to %v", s)
- } else {
- channelz.Infof(logger, ac.channelz, "Subchannel Connectivity change to %v, last error: %s", s, lastErr)
- }
- ac.acbw.updateState(s, ac.curAddr, lastErr)
-}
-
-// adjustParams updates parameters used to create transports upon
-// receiving a GoAway.
-func (ac *addrConn) adjustParams(r transport.GoAwayReason) {
- switch r {
- case transport.GoAwayTooManyPings:
- v := 2 * ac.dopts.copts.KeepaliveParams.Time
- ac.cc.mu.Lock()
- if v > ac.cc.mkp.Time {
- ac.cc.mkp.Time = v
- }
- ac.cc.mu.Unlock()
- }
-}
-
-// resetTransportAndUnlock unconditionally connects the addrConn.
-//
-// ac.mu must be held by the caller, and this function will guarantee it is released.
-func (ac *addrConn) resetTransportAndUnlock() {
- acCtx := ac.ctx
- if acCtx.Err() != nil {
- ac.mu.Unlock()
- return
- }
-
- addrs := ac.addrs
- backoffFor := ac.dopts.bs.Backoff(ac.backoffIdx)
- // This will be the duration that dial gets to finish.
- dialDuration := minConnectTimeout
- if ac.dopts.minConnectTimeout != nil {
- dialDuration = ac.dopts.minConnectTimeout()
- }
-
- if dialDuration < backoffFor {
- // Give dial more time as we keep failing to connect.
- dialDuration = backoffFor
- }
- // We can potentially spend all the time trying the first address, and
- // if the server accepts the connection and then hangs, the following
- // addresses will never be tried.
- //
- // The spec doesn't mention what should be done for multiple addresses.
- // https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md#proposed-backoff-algorithm
- connectDeadline := time.Now().Add(dialDuration)
-
- ac.updateConnectivityState(connectivity.Connecting, nil)
- ac.mu.Unlock()
-
- if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil {
- // TODO: #7534 - Move re-resolution requests into the pick_first LB policy
- // to ensure one resolution request per pass instead of per subconn failure.
- ac.cc.resolveNow(resolver.ResolveNowOptions{})
- ac.mu.Lock()
- if acCtx.Err() != nil {
- // addrConn was torn down.
- ac.mu.Unlock()
- return
- }
- // After exhausting all addresses, the addrConn enters
- // TRANSIENT_FAILURE.
- ac.updateConnectivityState(connectivity.TransientFailure, err)
-
- // Backoff.
- b := ac.resetBackoff
- ac.mu.Unlock()
-
- timer := time.NewTimer(backoffFor)
- select {
- case <-timer.C:
- ac.mu.Lock()
- ac.backoffIdx++
- ac.mu.Unlock()
- case <-b:
- timer.Stop()
- case <-acCtx.Done():
- timer.Stop()
- return
- }
-
- ac.mu.Lock()
- if acCtx.Err() == nil {
- ac.updateConnectivityState(connectivity.Idle, err)
- }
- ac.mu.Unlock()
- return
- }
- // Success; reset backoff.
- ac.mu.Lock()
- ac.backoffIdx = 0
- ac.mu.Unlock()
-}
-
-// tryAllAddrs tries to create a connection to the addresses, and stop when at
-// the first successful one. It returns an error if no address was successfully
-// connected, or updates ac appropriately with the new transport.
-func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, connectDeadline time.Time) error {
- var firstConnErr error
- for _, addr := range addrs {
- ac.channelz.ChannelMetrics.Target.Store(&addr.Addr)
- if ctx.Err() != nil {
- return errConnClosing
- }
- ac.mu.Lock()
-
- ac.cc.mu.RLock()
- ac.dopts.copts.KeepaliveParams = ac.cc.mkp
- ac.cc.mu.RUnlock()
-
- copts := ac.dopts.copts
- if ac.scopts.CredsBundle != nil {
- copts.CredsBundle = ac.scopts.CredsBundle
- }
- ac.mu.Unlock()
-
- channelz.Infof(logger, ac.channelz, "Subchannel picks a new address %q to connect", addr.Addr)
-
- err := ac.createTransport(ctx, addr, copts, connectDeadline)
- if err == nil {
- return nil
- }
- if firstConnErr == nil {
- firstConnErr = err
- }
- ac.cc.updateConnectionError(err)
- }
-
- // Couldn't connect to any address.
- return firstConnErr
-}
-
-// createTransport creates a connection to addr. It returns an error if the
-// address was not successfully connected, or updates ac appropriately with the
-// new transport.
-func (ac *addrConn) createTransport(ctx context.Context, addr resolver.Address, copts transport.ConnectOptions, connectDeadline time.Time) error {
- addr.ServerName = ac.cc.getServerName(addr)
- hctx, hcancel := context.WithCancel(ctx)
-
- onClose := func(r transport.GoAwayReason) {
- ac.mu.Lock()
- defer ac.mu.Unlock()
- // adjust params based on GoAwayReason
- ac.adjustParams(r)
- if ctx.Err() != nil {
- // Already shut down or connection attempt canceled. tearDown() or
- // updateAddrs() already cleared the transport and canceled hctx
- // via ac.ctx, and we expected this connection to be closed, so do
- // nothing here.
- return
- }
- hcancel()
- if ac.transport == nil {
- // We're still connecting to this address, which could error. Do
- // not update the connectivity state or resolve; these will happen
- // at the end of the tryAllAddrs connection loop in the event of an
- // error.
- return
- }
- ac.transport = nil
- // Refresh the name resolver on any connection loss.
- ac.cc.resolveNow(resolver.ResolveNowOptions{})
- // Always go idle and wait for the LB policy to initiate a new
- // connection attempt.
- ac.updateConnectivityState(connectivity.Idle, nil)
- }
-
- connectCtx, cancel := context.WithDeadline(ctx, connectDeadline)
- defer cancel()
- copts.ChannelzParent = ac.channelz
-
- newTr, err := transport.NewHTTP2Client(connectCtx, ac.cc.ctx, addr, copts, onClose)
- if err != nil {
- if logger.V(2) {
- logger.Infof("Creating new client transport to %q: %v", addr, err)
- }
- // newTr is either nil, or closed.
- hcancel()
- channelz.Warningf(logger, ac.channelz, "grpc: addrConn.createTransport failed to connect to %s. Err: %v", addr, err)
- return err
- }
-
- ac.mu.Lock()
- defer ac.mu.Unlock()
- if ctx.Err() != nil {
- // This can happen if the subConn was removed while in `Connecting`
- // state. tearDown() would have set the state to `Shutdown`, but
- // would not have closed the transport since ac.transport would not
- // have been set at that point.
- //
- // We run this in a goroutine because newTr.Close() calls onClose()
- // inline, which requires locking ac.mu.
- //
- // The error we pass to Close() is immaterial since there are no open
- // streams at this point, so no trailers with error details will be sent
- // out. We just need to pass a non-nil error.
- //
- // This can also happen when updateAddrs is called during a connection
- // attempt.
- go newTr.Close(transport.ErrConnClosing)
- return nil
- }
- if hctx.Err() != nil {
- // onClose was already called for this connection, but the connection
- // was successfully established first. Consider it a success and set
- // the new state to Idle.
- ac.updateConnectivityState(connectivity.Idle, nil)
- return nil
- }
- ac.curAddr = addr
- ac.transport = newTr
- ac.startHealthCheck(hctx) // Will set state to READY if appropriate.
- return nil
-}
-
-// startHealthCheck starts the health checking stream (RPC) to watch the health
-// stats of this connection if health checking is requested and configured.
-//
-// LB channel health checking is enabled when all requirements below are met:
-// 1. it is not disabled by the user with the WithDisableHealthCheck DialOption
-// 2. internal.HealthCheckFunc is set by importing the grpc/health package
-// 3. a service config with non-empty healthCheckConfig field is provided
-// 4. the load balancer requests it
-//
-// It sets addrConn to READY if the health checking stream is not started.
-//
-// Caller must hold ac.mu.
-func (ac *addrConn) startHealthCheck(ctx context.Context) {
- var healthcheckManagingState bool
- defer func() {
- if !healthcheckManagingState {
- ac.updateConnectivityState(connectivity.Ready, nil)
- }
- }()
-
- if ac.cc.dopts.disableHealthCheck {
- return
- }
- healthCheckConfig := ac.cc.healthCheckConfig()
- if healthCheckConfig == nil {
- return
- }
- if !ac.scopts.HealthCheckEnabled {
- return
- }
- healthCheckFunc := internal.HealthCheckFunc
- if healthCheckFunc == nil {
- // The health package is not imported to set health check function.
- //
- // TODO: add a link to the health check doc in the error message.
- channelz.Error(logger, ac.channelz, "Health check is requested but health check function is not set.")
- return
- }
-
- healthcheckManagingState = true
-
- // Set up the health check helper functions.
- currentTr := ac.transport
- newStream := func(method string) (any, error) {
- ac.mu.Lock()
- if ac.transport != currentTr {
- ac.mu.Unlock()
- return nil, status.Error(codes.Canceled, "the provided transport is no longer valid to use")
- }
- ac.mu.Unlock()
- return newNonRetryClientStream(ctx, &StreamDesc{ServerStreams: true}, method, currentTr, ac)
- }
- setConnectivityState := func(s connectivity.State, lastErr error) {
- ac.mu.Lock()
- defer ac.mu.Unlock()
- if ac.transport != currentTr {
- return
- }
- ac.updateConnectivityState(s, lastErr)
- }
- // Start the health checking stream.
- go func() {
- err := healthCheckFunc(ctx, newStream, setConnectivityState, healthCheckConfig.ServiceName)
- if err != nil {
- if status.Code(err) == codes.Unimplemented {
- channelz.Error(logger, ac.channelz, "Subchannel health check is unimplemented at server side, thus health check is disabled")
- } else {
- channelz.Errorf(logger, ac.channelz, "Health checking failed: %v", err)
- }
- }
- }()
-}
-
-func (ac *addrConn) resetConnectBackoff() {
- ac.mu.Lock()
- close(ac.resetBackoff)
- ac.backoffIdx = 0
- ac.resetBackoff = make(chan struct{})
- ac.mu.Unlock()
-}
-
-// getReadyTransport returns the transport if ac's state is READY or nil if not.
-func (ac *addrConn) getReadyTransport() transport.ClientTransport {
- ac.mu.Lock()
- defer ac.mu.Unlock()
- if ac.state == connectivity.Ready {
- return ac.transport
- }
- return nil
-}
-
-// tearDown starts to tear down the addrConn.
-//
-// Note that tearDown doesn't remove ac from ac.cc.conns, so the addrConn struct
-// will leak. In most cases, call cc.removeAddrConn() instead.
-func (ac *addrConn) tearDown(err error) {
- ac.mu.Lock()
- if ac.state == connectivity.Shutdown {
- ac.mu.Unlock()
- return
- }
- curTr := ac.transport
- ac.transport = nil
- // We have to set the state to Shutdown before anything else to prevent races
- // between setting the state and logic that waits on context cancellation / etc.
- ac.updateConnectivityState(connectivity.Shutdown, nil)
- ac.cancel()
- ac.curAddr = resolver.Address{}
-
- channelz.AddTraceEvent(logger, ac.channelz, 0, &channelz.TraceEvent{
- Desc: "Subchannel deleted",
- Severity: channelz.CtInfo,
- Parent: &channelz.TraceEvent{
- Desc: fmt.Sprintf("Subchannel(id:%d) deleted", ac.channelz.ID),
- Severity: channelz.CtInfo,
- },
- })
- // TraceEvent needs to be called before RemoveEntry, as TraceEvent may add
- // trace reference to the entity being deleted, and thus prevent it from
- // being deleted right away.
- channelz.RemoveEntry(ac.channelz.ID)
- ac.mu.Unlock()
-
- // We have to release the lock before the call to GracefulClose/Close here
- // because both of them call onClose(), which requires locking ac.mu.
- if curTr != nil {
- if err == errConnDrain {
- // Close the transport gracefully when the subConn is being shutdown.
- //
- // GracefulClose() may be executed multiple times if:
- // - multiple GoAway frames are received from the server
- // - there are concurrent name resolver or balancer triggered
- // address removal and GoAway
- curTr.GracefulClose()
- } else {
- // Hard close the transport when the channel is entering idle or is
- // being shutdown. In the case where the channel is being shutdown,
- // closing of transports is also taken care of by cancellation of cc.ctx.
- // But in the case where the channel is entering idle, we need to
- // explicitly close the transports here. Instead of distinguishing
- // between these two cases, it is simpler to close the transport
- // unconditionally here.
- curTr.Close(err)
- }
- }
-}
-
-type retryThrottler struct {
- max float64
- thresh float64
- ratio float64
-
- mu sync.Mutex
- tokens float64 // TODO(dfawley): replace with atomic and remove lock.
-}
-
-// throttle subtracts a retry token from the pool and returns whether a retry
-// should be throttled (disallowed) based upon the retry throttling policy in
-// the service config.
-func (rt *retryThrottler) throttle() bool {
- if rt == nil {
- return false
- }
- rt.mu.Lock()
- defer rt.mu.Unlock()
- rt.tokens--
- if rt.tokens < 0 {
- rt.tokens = 0
- }
- return rt.tokens <= rt.thresh
-}
-
-func (rt *retryThrottler) successfulRPC() {
- if rt == nil {
- return
- }
- rt.mu.Lock()
- defer rt.mu.Unlock()
- rt.tokens += rt.ratio
- if rt.tokens > rt.max {
- rt.tokens = rt.max
- }
-}
-
-func (ac *addrConn) incrCallsStarted() {
- ac.channelz.ChannelMetrics.CallsStarted.Add(1)
- ac.channelz.ChannelMetrics.LastCallStartedTimestamp.Store(time.Now().UnixNano())
-}
-
-func (ac *addrConn) incrCallsSucceeded() {
- ac.channelz.ChannelMetrics.CallsSucceeded.Add(1)
-}
-
-func (ac *addrConn) incrCallsFailed() {
- ac.channelz.ChannelMetrics.CallsFailed.Add(1)
-}
-
-// ErrClientConnTimeout indicates that the ClientConn cannot establish the
-// underlying connections within the specified timeout.
-//
-// Deprecated: This error is never returned by grpc and should not be
-// referenced by users.
-var ErrClientConnTimeout = errors.New("grpc: timed out when dialing")
-
-// getResolver finds the scheme in the cc's resolvers or the global registry.
-// scheme should always be lowercase (typically by virtue of url.Parse()
-// performing proper RFC3986 behavior).
-func (cc *ClientConn) getResolver(scheme string) resolver.Builder {
- for _, rb := range cc.dopts.resolvers {
- if scheme == rb.Scheme() {
- return rb
- }
- }
- return resolver.Get(scheme)
-}
-
-func (cc *ClientConn) updateConnectionError(err error) {
- cc.lceMu.Lock()
- cc.lastConnectionError = err
- cc.lceMu.Unlock()
-}
-
-func (cc *ClientConn) connectionError() error {
- cc.lceMu.Lock()
- defer cc.lceMu.Unlock()
- return cc.lastConnectionError
-}
-
-// initParsedTargetAndResolverBuilder parses the user's dial target and stores
-// the parsed target in `cc.parsedTarget`.
-//
-// The resolver to use is determined based on the scheme in the parsed target
-// and the same is stored in `cc.resolverBuilder`.
-//
-// Doesn't grab cc.mu as this method is expected to be called only at Dial time.
-func (cc *ClientConn) initParsedTargetAndResolverBuilder() error {
- logger.Infof("original dial target is: %q", cc.target)
-
- var rb resolver.Builder
- parsedTarget, err := parseTarget(cc.target)
- if err == nil {
- rb = cc.getResolver(parsedTarget.URL.Scheme)
- if rb != nil {
- cc.parsedTarget = parsedTarget
- cc.resolverBuilder = rb
- return nil
- }
- }
-
- // We are here because the user's dial target did not contain a scheme or
- // specified an unregistered scheme. We should fallback to the default
- // scheme, except when a custom dialer is specified in which case, we should
- // always use passthrough scheme. For either case, we need to respect any overridden
- // global defaults set by the user.
- defScheme := cc.dopts.defaultScheme
- if internal.UserSetDefaultScheme {
- defScheme = resolver.GetDefaultScheme()
- }
-
- canonicalTarget := defScheme + ":///" + cc.target
-
- parsedTarget, err = parseTarget(canonicalTarget)
- if err != nil {
- return err
- }
- rb = cc.getResolver(parsedTarget.URL.Scheme)
- if rb == nil {
- return fmt.Errorf("could not get resolver for default scheme: %q", parsedTarget.URL.Scheme)
- }
- cc.parsedTarget = parsedTarget
- cc.resolverBuilder = rb
- return nil
-}
-
-// parseTarget uses RFC 3986 semantics to parse the given target into a
-// resolver.Target struct containing url. Query params are stripped from the
-// endpoint.
-func parseTarget(target string) (resolver.Target, error) {
- u, err := url.Parse(target)
- if err != nil {
- return resolver.Target{}, err
- }
-
- return resolver.Target{URL: *u}, nil
-}
-
-// encodeAuthority escapes the authority string based on valid chars defined in
-// https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.
-func encodeAuthority(authority string) string {
- const upperhex = "0123456789ABCDEF"
-
- // Return for characters that must be escaped as per
- // Valid chars are mentioned here:
- // https://datatracker.ietf.org/doc/html/rfc3986#section-3.2
- shouldEscape := func(c byte) bool {
- // Alphanum are always allowed.
- if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {
- return false
- }
- switch c {
- case '-', '_', '.', '~': // Unreserved characters
- return false
- case '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=': // Subdelim characters
- return false
- case ':', '[', ']', '@': // Authority related delimiters
- return false
- }
- // Everything else must be escaped.
- return true
- }
-
- hexCount := 0
- for i := 0; i < len(authority); i++ {
- c := authority[i]
- if shouldEscape(c) {
- hexCount++
- }
- }
-
- if hexCount == 0 {
- return authority
- }
-
- required := len(authority) + 2*hexCount
- t := make([]byte, required)
-
- j := 0
- // This logic is a barebones version of escape in the go net/url library.
- for i := 0; i < len(authority); i++ {
- switch c := authority[i]; {
- case shouldEscape(c):
- t[j] = '%'
- t[j+1] = upperhex[c>>4]
- t[j+2] = upperhex[c&15]
- j += 3
- default:
- t[j] = authority[i]
- j++
- }
- }
- return string(t)
-}
-
-// Determine channel authority. The order of precedence is as follows:
-// - user specified authority override using `WithAuthority` dial option
-// - creds' notion of server name for the authentication handshake
-// - endpoint from dial target of the form "scheme://[authority]/endpoint"
-//
-// Stores the determined authority in `cc.authority`.
-//
-// Returns a non-nil error if the authority returned by the transport
-// credentials do not match the authority configured through the dial option.
-//
-// Doesn't grab cc.mu as this method is expected to be called only at Dial time.
-func (cc *ClientConn) initAuthority() error {
- dopts := cc.dopts
- // Historically, we had two options for users to specify the serverName or
- // authority for a channel. One was through the transport credentials
- // (either in its constructor, or through the OverrideServerName() method).
- // The other option (for cases where WithInsecure() dial option was used)
- // was to use the WithAuthority() dial option.
- //
- // A few things have changed since:
- // - `insecure` package with an implementation of the `TransportCredentials`
- // interface for the insecure case
- // - WithAuthority() dial option support for secure credentials
- authorityFromCreds := ""
- if creds := dopts.copts.TransportCredentials; creds != nil && creds.Info().ServerName != "" {
- authorityFromCreds = creds.Info().ServerName
- }
- authorityFromDialOption := dopts.authority
- if (authorityFromCreds != "" && authorityFromDialOption != "") && authorityFromCreds != authorityFromDialOption {
- return fmt.Errorf("ClientConn's authority from transport creds %q and dial option %q don't match", authorityFromCreds, authorityFromDialOption)
- }
-
- endpoint := cc.parsedTarget.Endpoint()
- if authorityFromDialOption != "" {
- cc.authority = authorityFromDialOption
- } else if authorityFromCreds != "" {
- cc.authority = authorityFromCreds
- } else if auth, ok := cc.resolverBuilder.(resolver.AuthorityOverrider); ok {
- cc.authority = auth.OverrideAuthority(cc.parsedTarget)
- } else if strings.HasPrefix(endpoint, ":") {
- cc.authority = "localhost" + endpoint
- } else {
- cc.authority = encodeAuthority(endpoint)
- }
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/codec.go b/vendor/google.golang.org/grpc/codec.go
deleted file mode 100644
index 959c2f99d..000000000
--- a/vendor/google.golang.org/grpc/codec.go
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "google.golang.org/grpc/encoding"
- _ "google.golang.org/grpc/encoding/proto" // to register the Codec for "proto"
- "google.golang.org/grpc/mem"
-)
-
-// baseCodec captures the new encoding.CodecV2 interface without the Name
-// function, allowing it to be implemented by older Codec and encoding.Codec
-// implementations. The omitted Name function is only needed for the register in
-// the encoding package and is not part of the core functionality.
-type baseCodec interface {
- Marshal(v any) (mem.BufferSlice, error)
- Unmarshal(data mem.BufferSlice, v any) error
-}
-
-// getCodec returns an encoding.CodecV2 for the codec of the given name (if
-// registered). Initially checks the V2 registry with encoding.GetCodecV2 and
-// returns the V2 codec if it is registered. Otherwise, it checks the V1 registry
-// with encoding.GetCodec and if it is registered wraps it with newCodecV1Bridge
-// to turn it into an encoding.CodecV2. Returns nil otherwise.
-func getCodec(name string) encoding.CodecV2 {
- if codecV1 := encoding.GetCodec(name); codecV1 != nil {
- return newCodecV1Bridge(codecV1)
- }
-
- return encoding.GetCodecV2(name)
-}
-
-func newCodecV0Bridge(c Codec) baseCodec {
- return codecV0Bridge{codec: c}
-}
-
-func newCodecV1Bridge(c encoding.Codec) encoding.CodecV2 {
- return codecV1Bridge{
- codecV0Bridge: codecV0Bridge{codec: c},
- name: c.Name(),
- }
-}
-
-var _ baseCodec = codecV0Bridge{}
-
-type codecV0Bridge struct {
- codec interface {
- Marshal(v any) ([]byte, error)
- Unmarshal(data []byte, v any) error
- }
-}
-
-func (c codecV0Bridge) Marshal(v any) (mem.BufferSlice, error) {
- data, err := c.codec.Marshal(v)
- if err != nil {
- return nil, err
- }
- return mem.BufferSlice{mem.SliceBuffer(data)}, nil
-}
-
-func (c codecV0Bridge) Unmarshal(data mem.BufferSlice, v any) (err error) {
- return c.codec.Unmarshal(data.Materialize(), v)
-}
-
-var _ encoding.CodecV2 = codecV1Bridge{}
-
-type codecV1Bridge struct {
- codecV0Bridge
- name string
-}
-
-func (c codecV1Bridge) Name() string {
- return c.name
-}
-
-// Codec defines the interface gRPC uses to encode and decode messages.
-// Note that implementations of this interface must be thread safe;
-// a Codec's methods can be called from concurrent goroutines.
-//
-// Deprecated: use encoding.Codec instead.
-type Codec interface {
- // Marshal returns the wire format of v.
- Marshal(v any) ([]byte, error)
- // Unmarshal parses the wire format into v.
- Unmarshal(data []byte, v any) error
- // String returns the name of the Codec implementation. This is unused by
- // gRPC.
- String() string
-}
diff --git a/vendor/google.golang.org/grpc/codes/code_string.go b/vendor/google.golang.org/grpc/codes/code_string.go
deleted file mode 100644
index 934fac2b0..000000000
--- a/vendor/google.golang.org/grpc/codes/code_string.go
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package codes
-
-import (
- "strconv"
-
- "google.golang.org/grpc/internal"
-)
-
-func init() {
- internal.CanonicalString = canonicalString
-}
-
-func (c Code) String() string {
- switch c {
- case OK:
- return "OK"
- case Canceled:
- return "Canceled"
- case Unknown:
- return "Unknown"
- case InvalidArgument:
- return "InvalidArgument"
- case DeadlineExceeded:
- return "DeadlineExceeded"
- case NotFound:
- return "NotFound"
- case AlreadyExists:
- return "AlreadyExists"
- case PermissionDenied:
- return "PermissionDenied"
- case ResourceExhausted:
- return "ResourceExhausted"
- case FailedPrecondition:
- return "FailedPrecondition"
- case Aborted:
- return "Aborted"
- case OutOfRange:
- return "OutOfRange"
- case Unimplemented:
- return "Unimplemented"
- case Internal:
- return "Internal"
- case Unavailable:
- return "Unavailable"
- case DataLoss:
- return "DataLoss"
- case Unauthenticated:
- return "Unauthenticated"
- default:
- return "Code(" + strconv.FormatInt(int64(c), 10) + ")"
- }
-}
-
-func canonicalString(c Code) string {
- switch c {
- case OK:
- return "OK"
- case Canceled:
- return "CANCELLED"
- case Unknown:
- return "UNKNOWN"
- case InvalidArgument:
- return "INVALID_ARGUMENT"
- case DeadlineExceeded:
- return "DEADLINE_EXCEEDED"
- case NotFound:
- return "NOT_FOUND"
- case AlreadyExists:
- return "ALREADY_EXISTS"
- case PermissionDenied:
- return "PERMISSION_DENIED"
- case ResourceExhausted:
- return "RESOURCE_EXHAUSTED"
- case FailedPrecondition:
- return "FAILED_PRECONDITION"
- case Aborted:
- return "ABORTED"
- case OutOfRange:
- return "OUT_OF_RANGE"
- case Unimplemented:
- return "UNIMPLEMENTED"
- case Internal:
- return "INTERNAL"
- case Unavailable:
- return "UNAVAILABLE"
- case DataLoss:
- return "DATA_LOSS"
- case Unauthenticated:
- return "UNAUTHENTICATED"
- default:
- return "CODE(" + strconv.FormatInt(int64(c), 10) + ")"
- }
-}
diff --git a/vendor/google.golang.org/grpc/codes/codes.go b/vendor/google.golang.org/grpc/codes/codes.go
deleted file mode 100644
index 0b42c302b..000000000
--- a/vendor/google.golang.org/grpc/codes/codes.go
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package codes defines the canonical error codes used by gRPC. It is
-// consistent across various languages.
-package codes // import "google.golang.org/grpc/codes"
-
-import (
- "fmt"
- "strconv"
-)
-
-// A Code is a status code defined according to the [gRPC documentation].
-//
-// Only the codes defined as consts in this package are valid codes. Do not use
-// other code values. Behavior of other codes is implementation-specific and
-// interoperability between implementations is not guaranteed.
-//
-// [gRPC documentation]: https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
-type Code uint32
-
-const (
- // OK is returned on success.
- OK Code = 0
-
- // Canceled indicates the operation was canceled (typically by the caller).
- //
- // The gRPC framework will generate this error code when cancellation
- // is requested.
- Canceled Code = 1
-
- // Unknown error. An example of where this error may be returned is
- // if a Status value received from another address space belongs to
- // an error-space that is not known in this address space. Also
- // errors raised by APIs that do not return enough error information
- // may be converted to this error.
- //
- // The gRPC framework will generate this error code in the above two
- // mentioned cases.
- Unknown Code = 2
-
- // InvalidArgument indicates client specified an invalid argument.
- // Note that this differs from FailedPrecondition. It indicates arguments
- // that are problematic regardless of the state of the system
- // (e.g., a malformed file name).
- //
- // This error code will not be generated by the gRPC framework.
- InvalidArgument Code = 3
-
- // DeadlineExceeded means operation expired before completion.
- // For operations that change the state of the system, this error may be
- // returned even if the operation has completed successfully. For
- // example, a successful response from a server could have been delayed
- // long enough for the deadline to expire.
- //
- // The gRPC framework will generate this error code when the deadline is
- // exceeded.
- DeadlineExceeded Code = 4
-
- // NotFound means some requested entity (e.g., file or directory) was
- // not found.
- //
- // This error code will not be generated by the gRPC framework.
- NotFound Code = 5
-
- // AlreadyExists means an attempt to create an entity failed because one
- // already exists.
- //
- // This error code will not be generated by the gRPC framework.
- AlreadyExists Code = 6
-
- // PermissionDenied indicates the caller does not have permission to
- // execute the specified operation. It must not be used for rejections
- // caused by exhausting some resource (use ResourceExhausted
- // instead for those errors). It must not be
- // used if the caller cannot be identified (use Unauthenticated
- // instead for those errors).
- //
- // This error code will not be generated by the gRPC core framework,
- // but expect authentication middleware to use it.
- PermissionDenied Code = 7
-
- // ResourceExhausted indicates some resource has been exhausted, perhaps
- // a per-user quota, or perhaps the entire file system is out of space.
- //
- // This error code will be generated by the gRPC framework in
- // out-of-memory and server overload situations, or when a message is
- // larger than the configured maximum size.
- ResourceExhausted Code = 8
-
- // FailedPrecondition indicates operation was rejected because the
- // system is not in a state required for the operation's execution.
- // For example, directory to be deleted may be non-empty, an rmdir
- // operation is applied to a non-directory, etc.
- //
- // A litmus test that may help a service implementor in deciding
- // between FailedPrecondition, Aborted, and Unavailable:
- // (a) Use Unavailable if the client can retry just the failing call.
- // (b) Use Aborted if the client should retry at a higher-level
- // (e.g., restarting a read-modify-write sequence).
- // (c) Use FailedPrecondition if the client should not retry until
- // the system state has been explicitly fixed. E.g., if an "rmdir"
- // fails because the directory is non-empty, FailedPrecondition
- // should be returned since the client should not retry unless
- // they have first fixed up the directory by deleting files from it.
- // (d) Use FailedPrecondition if the client performs conditional
- // REST Get/Update/Delete on a resource and the resource on the
- // server does not match the condition. E.g., conflicting
- // read-modify-write on the same resource.
- //
- // This error code will not be generated by the gRPC framework.
- FailedPrecondition Code = 9
-
- // Aborted indicates the operation was aborted, typically due to a
- // concurrency issue like sequencer check failures, transaction aborts,
- // etc.
- //
- // See litmus test above for deciding between FailedPrecondition,
- // Aborted, and Unavailable.
- //
- // This error code will not be generated by the gRPC framework.
- Aborted Code = 10
-
- // OutOfRange means operation was attempted past the valid range.
- // E.g., seeking or reading past end of file.
- //
- // Unlike InvalidArgument, this error indicates a problem that may
- // be fixed if the system state changes. For example, a 32-bit file
- // system will generate InvalidArgument if asked to read at an
- // offset that is not in the range [0,2^32-1], but it will generate
- // OutOfRange if asked to read from an offset past the current
- // file size.
- //
- // There is a fair bit of overlap between FailedPrecondition and
- // OutOfRange. We recommend using OutOfRange (the more specific
- // error) when it applies so that callers who are iterating through
- // a space can easily look for an OutOfRange error to detect when
- // they are done.
- //
- // This error code will not be generated by the gRPC framework.
- OutOfRange Code = 11
-
- // Unimplemented indicates operation is not implemented or not
- // supported/enabled in this service.
- //
- // This error code will be generated by the gRPC framework. Most
- // commonly, you will see this error code when a method implementation
- // is missing on the server. It can also be generated for unknown
- // compression algorithms or a disagreement as to whether an RPC should
- // be streaming.
- Unimplemented Code = 12
-
- // Internal errors. Means some invariants expected by underlying
- // system has been broken. If you see one of these errors,
- // something is very broken.
- //
- // This error code will be generated by the gRPC framework in several
- // internal error conditions.
- Internal Code = 13
-
- // Unavailable indicates the service is currently unavailable.
- // This is a most likely a transient condition and may be corrected
- // by retrying with a backoff. Note that it is not always safe to retry
- // non-idempotent operations.
- //
- // See litmus test above for deciding between FailedPrecondition,
- // Aborted, and Unavailable.
- //
- // This error code will be generated by the gRPC framework during
- // abrupt shutdown of a server process or network connection.
- Unavailable Code = 14
-
- // DataLoss indicates unrecoverable data loss or corruption.
- //
- // This error code will not be generated by the gRPC framework.
- DataLoss Code = 15
-
- // Unauthenticated indicates the request does not have valid
- // authentication credentials for the operation.
- //
- // The gRPC framework will generate this error code when the
- // authentication metadata is invalid or a Credentials callback fails,
- // but also expect authentication middleware to generate it.
- Unauthenticated Code = 16
-
- _maxCode = 17
-)
-
-var strToCode = map[string]Code{
- `"OK"`: OK,
- `"CANCELLED"`:/* [sic] */ Canceled,
- `"UNKNOWN"`: Unknown,
- `"INVALID_ARGUMENT"`: InvalidArgument,
- `"DEADLINE_EXCEEDED"`: DeadlineExceeded,
- `"NOT_FOUND"`: NotFound,
- `"ALREADY_EXISTS"`: AlreadyExists,
- `"PERMISSION_DENIED"`: PermissionDenied,
- `"RESOURCE_EXHAUSTED"`: ResourceExhausted,
- `"FAILED_PRECONDITION"`: FailedPrecondition,
- `"ABORTED"`: Aborted,
- `"OUT_OF_RANGE"`: OutOfRange,
- `"UNIMPLEMENTED"`: Unimplemented,
- `"INTERNAL"`: Internal,
- `"UNAVAILABLE"`: Unavailable,
- `"DATA_LOSS"`: DataLoss,
- `"UNAUTHENTICATED"`: Unauthenticated,
-}
-
-// UnmarshalJSON unmarshals b into the Code.
-func (c *Code) UnmarshalJSON(b []byte) error {
- // From json.Unmarshaler: By convention, to approximate the behavior of
- // Unmarshal itself, Unmarshalers implement UnmarshalJSON([]byte("null")) as
- // a no-op.
- if string(b) == "null" {
- return nil
- }
- if c == nil {
- return fmt.Errorf("nil receiver passed to UnmarshalJSON")
- }
-
- if ci, err := strconv.ParseUint(string(b), 10, 32); err == nil {
- if ci >= _maxCode {
- return fmt.Errorf("invalid code: %d", ci)
- }
-
- *c = Code(ci)
- return nil
- }
-
- if jc, ok := strToCode[string(b)]; ok {
- *c = jc
- return nil
- }
- return fmt.Errorf("invalid code: %q", string(b))
-}
diff --git a/vendor/google.golang.org/grpc/connectivity/connectivity.go b/vendor/google.golang.org/grpc/connectivity/connectivity.go
deleted file mode 100644
index 4a8992642..000000000
--- a/vendor/google.golang.org/grpc/connectivity/connectivity.go
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package connectivity defines connectivity semantics.
-// For details, see https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md.
-package connectivity
-
-import (
- "google.golang.org/grpc/grpclog"
-)
-
-var logger = grpclog.Component("core")
-
-// State indicates the state of connectivity.
-// It can be the state of a ClientConn or SubConn.
-type State int
-
-func (s State) String() string {
- switch s {
- case Idle:
- return "IDLE"
- case Connecting:
- return "CONNECTING"
- case Ready:
- return "READY"
- case TransientFailure:
- return "TRANSIENT_FAILURE"
- case Shutdown:
- return "SHUTDOWN"
- default:
- logger.Errorf("unknown connectivity state: %d", s)
- return "INVALID_STATE"
- }
-}
-
-const (
- // Idle indicates the ClientConn is idle.
- Idle State = iota
- // Connecting indicates the ClientConn is connecting.
- Connecting
- // Ready indicates the ClientConn is ready for work.
- Ready
- // TransientFailure indicates the ClientConn has seen a failure but expects to recover.
- TransientFailure
- // Shutdown indicates the ClientConn has started shutting down.
- Shutdown
-)
-
-// ServingMode indicates the current mode of operation of the server.
-//
-// Only xDS enabled gRPC servers currently report their serving mode.
-type ServingMode int
-
-const (
- // ServingModeStarting indicates that the server is starting up.
- ServingModeStarting ServingMode = iota
- // ServingModeServing indicates that the server contains all required
- // configuration and is serving RPCs.
- ServingModeServing
- // ServingModeNotServing indicates that the server is not accepting new
- // connections. Existing connections will be closed gracefully, allowing
- // in-progress RPCs to complete. A server enters this mode when it does not
- // contain the required configuration to serve RPCs.
- ServingModeNotServing
-)
-
-func (s ServingMode) String() string {
- switch s {
- case ServingModeStarting:
- return "STARTING"
- case ServingModeServing:
- return "SERVING"
- case ServingModeNotServing:
- return "NOT_SERVING"
- default:
- logger.Errorf("unknown serving mode: %d", s)
- return "INVALID_MODE"
- }
-}
diff --git a/vendor/google.golang.org/grpc/credentials/credentials.go b/vendor/google.golang.org/grpc/credentials/credentials.go
deleted file mode 100644
index 665e790bb..000000000
--- a/vendor/google.golang.org/grpc/credentials/credentials.go
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package credentials implements various credentials supported by gRPC library,
-// which encapsulate all the state needed by a client to authenticate with a
-// server and make various assertions, e.g., about the client's identity, role,
-// or whether it is authorized to make a particular call.
-package credentials // import "google.golang.org/grpc/credentials"
-
-import (
- "context"
- "errors"
- "fmt"
- "net"
-
- "google.golang.org/grpc/attributes"
- icredentials "google.golang.org/grpc/internal/credentials"
- "google.golang.org/protobuf/proto"
-)
-
-// PerRPCCredentials defines the common interface for the credentials which need to
-// attach security information to every RPC (e.g., oauth2).
-type PerRPCCredentials interface {
- // GetRequestMetadata gets the current request metadata, refreshing tokens
- // if required. This should be called by the transport layer on each
- // request, and the data should be populated in headers or other
- // context. If a status code is returned, it will be used as the status for
- // the RPC (restricted to an allowable set of codes as defined by gRFC
- // A54). uri is the URI of the entry point for the request. When supported
- // by the underlying implementation, ctx can be used for timeout and
- // cancellation. Additionally, RequestInfo data will be available via ctx
- // to this call. TODO(zhaoq): Define the set of the qualified keys instead
- // of leaving it as an arbitrary string.
- GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error)
- // RequireTransportSecurity indicates whether the credentials requires
- // transport security.
- RequireTransportSecurity() bool
-}
-
-// SecurityLevel defines the protection level on an established connection.
-//
-// This API is experimental.
-type SecurityLevel int
-
-const (
- // InvalidSecurityLevel indicates an invalid security level.
- // The zero SecurityLevel value is invalid for backward compatibility.
- InvalidSecurityLevel SecurityLevel = iota
- // NoSecurity indicates a connection is insecure.
- NoSecurity
- // IntegrityOnly indicates a connection only provides integrity protection.
- IntegrityOnly
- // PrivacyAndIntegrity indicates a connection provides both privacy and integrity protection.
- PrivacyAndIntegrity
-)
-
-// String returns SecurityLevel in a string format.
-func (s SecurityLevel) String() string {
- switch s {
- case NoSecurity:
- return "NoSecurity"
- case IntegrityOnly:
- return "IntegrityOnly"
- case PrivacyAndIntegrity:
- return "PrivacyAndIntegrity"
- }
- return fmt.Sprintf("invalid SecurityLevel: %v", int(s))
-}
-
-// CommonAuthInfo contains authenticated information common to AuthInfo implementations.
-// It should be embedded in a struct implementing AuthInfo to provide additional information
-// about the credentials.
-//
-// This API is experimental.
-type CommonAuthInfo struct {
- SecurityLevel SecurityLevel
-}
-
-// GetCommonAuthInfo returns the pointer to CommonAuthInfo struct.
-func (c CommonAuthInfo) GetCommonAuthInfo() CommonAuthInfo {
- return c
-}
-
-// ProtocolInfo provides information regarding the gRPC wire protocol version,
-// security protocol, security protocol version in use, server name, etc.
-type ProtocolInfo struct {
- // ProtocolVersion is the gRPC wire protocol version.
- ProtocolVersion string
- // SecurityProtocol is the security protocol in use.
- SecurityProtocol string
- // SecurityVersion is the security protocol version. It is a static version string from the
- // credentials, not a value that reflects per-connection protocol negotiation. To retrieve
- // details about the credentials used for a connection, use the Peer's AuthInfo field instead.
- //
- // Deprecated: please use Peer.AuthInfo.
- SecurityVersion string
- // ServerName is the user-configured server name.
- ServerName string
-}
-
-// AuthInfo defines the common interface for the auth information the users are interested in.
-// A struct that implements AuthInfo should embed CommonAuthInfo by including additional
-// information about the credentials in it.
-type AuthInfo interface {
- AuthType() string
-}
-
-// ErrConnDispatched indicates that rawConn has been dispatched out of gRPC
-// and the caller should not close rawConn.
-var ErrConnDispatched = errors.New("credentials: rawConn is dispatched out of gRPC")
-
-// TransportCredentials defines the common interface for all the live gRPC wire
-// protocols and supported transport security protocols (e.g., TLS, SSL).
-type TransportCredentials interface {
- // ClientHandshake does the authentication handshake specified by the
- // corresponding authentication protocol on rawConn for clients. It returns
- // the authenticated connection and the corresponding auth information
- // about the connection. The auth information should embed CommonAuthInfo
- // to return additional information about the credentials. Implementations
- // must use the provided context to implement timely cancellation. gRPC
- // will try to reconnect if the error returned is a temporary error
- // (io.EOF, context.DeadlineExceeded or err.Temporary() == true). If the
- // returned error is a wrapper error, implementations should make sure that
- // the error implements Temporary() to have the correct retry behaviors.
- // Additionally, ClientHandshakeInfo data will be available via the context
- // passed to this call.
- //
- // The second argument to this method is the `:authority` header value used
- // while creating new streams on this connection after authentication
- // succeeds. Implementations must use this as the server name during the
- // authentication handshake.
- //
- // If the returned net.Conn is closed, it MUST close the net.Conn provided.
- ClientHandshake(context.Context, string, net.Conn) (net.Conn, AuthInfo, error)
- // ServerHandshake does the authentication handshake for servers. It returns
- // the authenticated connection and the corresponding auth information about
- // the connection. The auth information should embed CommonAuthInfo to return additional information
- // about the credentials.
- //
- // If the returned net.Conn is closed, it MUST close the net.Conn provided.
- ServerHandshake(net.Conn) (net.Conn, AuthInfo, error)
- // Info provides the ProtocolInfo of this TransportCredentials.
- Info() ProtocolInfo
- // Clone makes a copy of this TransportCredentials.
- Clone() TransportCredentials
- // OverrideServerName specifies the value used for the following:
- // - verifying the hostname on the returned certificates
- // - as SNI in the client's handshake to support virtual hosting
- // - as the value for `:authority` header at stream creation time
- //
- // Deprecated: use grpc.WithAuthority instead. Will be supported
- // throughout 1.x.
- OverrideServerName(string) error
-}
-
-// Bundle is a combination of TransportCredentials and PerRPCCredentials.
-//
-// It also contains a mode switching method, so it can be used as a combination
-// of different credential policies.
-//
-// Bundle cannot be used together with individual TransportCredentials.
-// PerRPCCredentials from Bundle will be appended to other PerRPCCredentials.
-//
-// This API is experimental.
-type Bundle interface {
- // TransportCredentials returns the transport credentials from the Bundle.
- //
- // Implementations must return non-nil transport credentials. If transport
- // security is not needed by the Bundle, implementations may choose to
- // return insecure.NewCredentials().
- TransportCredentials() TransportCredentials
-
- // PerRPCCredentials returns the per-RPC credentials from the Bundle.
- //
- // May be nil if per-RPC credentials are not needed.
- PerRPCCredentials() PerRPCCredentials
-
- // NewWithMode should make a copy of Bundle, and switch mode. Modifying the
- // existing Bundle may cause races.
- //
- // NewWithMode returns nil if the requested mode is not supported.
- NewWithMode(mode string) (Bundle, error)
-}
-
-// RequestInfo contains request data attached to the context passed to GetRequestMetadata calls.
-//
-// This API is experimental.
-type RequestInfo struct {
- // The method passed to Invoke or NewStream for this RPC. (For proto methods, this has the format "/some.Service/Method")
- Method string
- // AuthInfo contains the information from a security handshake (TransportCredentials.ClientHandshake, TransportCredentials.ServerHandshake)
- AuthInfo AuthInfo
-}
-
-// RequestInfoFromContext extracts the RequestInfo from the context if it exists.
-//
-// This API is experimental.
-func RequestInfoFromContext(ctx context.Context) (ri RequestInfo, ok bool) {
- ri, ok = icredentials.RequestInfoFromContext(ctx).(RequestInfo)
- return ri, ok
-}
-
-// ClientHandshakeInfo holds data to be passed to ClientHandshake. This makes
-// it possible to pass arbitrary data to the handshaker from gRPC, resolver,
-// balancer etc. Individual credential implementations control the actual
-// format of the data that they are willing to receive.
-//
-// This API is experimental.
-type ClientHandshakeInfo struct {
- // Attributes contains the attributes for the address. It could be provided
- // by the gRPC, resolver, balancer etc.
- Attributes *attributes.Attributes
-}
-
-// ClientHandshakeInfoFromContext returns the ClientHandshakeInfo struct stored
-// in ctx.
-//
-// This API is experimental.
-func ClientHandshakeInfoFromContext(ctx context.Context) ClientHandshakeInfo {
- chi, _ := icredentials.ClientHandshakeInfoFromContext(ctx).(ClientHandshakeInfo)
- return chi
-}
-
-// CheckSecurityLevel checks if a connection's security level is greater than or equal to the specified one.
-// It returns success if 1) the condition is satisfied or 2) AuthInfo struct does not implement GetCommonAuthInfo() method
-// or 3) CommonAuthInfo.SecurityLevel has an invalid zero value. For 2) and 3), it is for the purpose of backward-compatibility.
-//
-// This API is experimental.
-func CheckSecurityLevel(ai AuthInfo, level SecurityLevel) error {
- type internalInfo interface {
- GetCommonAuthInfo() CommonAuthInfo
- }
- if ai == nil {
- return errors.New("AuthInfo is nil")
- }
- if ci, ok := ai.(internalInfo); ok {
- // CommonAuthInfo.SecurityLevel has an invalid value.
- if ci.GetCommonAuthInfo().SecurityLevel == InvalidSecurityLevel {
- return nil
- }
- if ci.GetCommonAuthInfo().SecurityLevel < level {
- return fmt.Errorf("requires SecurityLevel %v; connection has %v", level, ci.GetCommonAuthInfo().SecurityLevel)
- }
- }
- // The condition is satisfied or AuthInfo struct does not implement GetCommonAuthInfo() method.
- return nil
-}
-
-// ChannelzSecurityInfo defines the interface that security protocols should implement
-// in order to provide security info to channelz.
-//
-// This API is experimental.
-type ChannelzSecurityInfo interface {
- GetSecurityValue() ChannelzSecurityValue
-}
-
-// ChannelzSecurityValue defines the interface that GetSecurityValue() return value
-// should satisfy. This interface should only be satisfied by *TLSChannelzSecurityValue
-// and *OtherChannelzSecurityValue.
-//
-// This API is experimental.
-type ChannelzSecurityValue interface {
- isChannelzSecurityValue()
-}
-
-// OtherChannelzSecurityValue defines the struct that non-TLS protocol should return
-// from GetSecurityValue(), which contains protocol specific security info. Note
-// the Value field will be sent to users of channelz requesting channel info, and
-// thus sensitive info should better be avoided.
-//
-// This API is experimental.
-type OtherChannelzSecurityValue struct {
- ChannelzSecurityValue
- Name string
- Value proto.Message
-}
diff --git a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go b/vendor/google.golang.org/grpc/credentials/insecure/insecure.go
deleted file mode 100644
index 4c805c644..000000000
--- a/vendor/google.golang.org/grpc/credentials/insecure/insecure.go
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package insecure provides an implementation of the
-// credentials.TransportCredentials interface which disables transport security.
-package insecure
-
-import (
- "context"
- "net"
-
- "google.golang.org/grpc/credentials"
-)
-
-// NewCredentials returns a credentials which disables transport security.
-//
-// Note that using this credentials with per-RPC credentials which require
-// transport security is incompatible and will cause grpc.Dial() to fail.
-func NewCredentials() credentials.TransportCredentials {
- return insecureTC{}
-}
-
-// insecureTC implements the insecure transport credentials. The handshake
-// methods simply return the passed in net.Conn and set the security level to
-// NoSecurity.
-type insecureTC struct{}
-
-func (insecureTC) ClientHandshake(_ context.Context, _ string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) {
- return conn, info{credentials.CommonAuthInfo{SecurityLevel: credentials.NoSecurity}}, nil
-}
-
-func (insecureTC) ServerHandshake(conn net.Conn) (net.Conn, credentials.AuthInfo, error) {
- return conn, info{credentials.CommonAuthInfo{SecurityLevel: credentials.NoSecurity}}, nil
-}
-
-func (insecureTC) Info() credentials.ProtocolInfo {
- return credentials.ProtocolInfo{SecurityProtocol: "insecure"}
-}
-
-func (insecureTC) Clone() credentials.TransportCredentials {
- return insecureTC{}
-}
-
-func (insecureTC) OverrideServerName(string) error {
- return nil
-}
-
-// info contains the auth information for an insecure connection.
-// It implements the AuthInfo interface.
-type info struct {
- credentials.CommonAuthInfo
-}
-
-// AuthType returns the type of info as a string.
-func (info) AuthType() string {
- return "insecure"
-}
-
-// insecureBundle implements an insecure bundle.
-// An insecure bundle provides a thin wrapper around insecureTC to support
-// the credentials.Bundle interface.
-type insecureBundle struct{}
-
-// NewBundle returns a bundle with disabled transport security and no per rpc credential.
-func NewBundle() credentials.Bundle {
- return insecureBundle{}
-}
-
-// NewWithMode returns a new insecure Bundle. The mode is ignored.
-func (insecureBundle) NewWithMode(string) (credentials.Bundle, error) {
- return insecureBundle{}, nil
-}
-
-// PerRPCCredentials returns an nil implementation as insecure
-// bundle does not support a per rpc credential.
-func (insecureBundle) PerRPCCredentials() credentials.PerRPCCredentials {
- return nil
-}
-
-// TransportCredentials returns the underlying insecure transport credential.
-func (insecureBundle) TransportCredentials() credentials.TransportCredentials {
- return NewCredentials()
-}
diff --git a/vendor/google.golang.org/grpc/credentials/tls.go b/vendor/google.golang.org/grpc/credentials/tls.go
deleted file mode 100644
index e163a473d..000000000
--- a/vendor/google.golang.org/grpc/credentials/tls.go
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package credentials
-
-import (
- "context"
- "crypto/tls"
- "crypto/x509"
- "fmt"
- "net"
- "net/url"
- "os"
-
- "google.golang.org/grpc/grpclog"
- credinternal "google.golang.org/grpc/internal/credentials"
- "google.golang.org/grpc/internal/envconfig"
-)
-
-var logger = grpclog.Component("credentials")
-
-// TLSInfo contains the auth information for a TLS authenticated connection.
-// It implements the AuthInfo interface.
-type TLSInfo struct {
- State tls.ConnectionState
- CommonAuthInfo
- // This API is experimental.
- SPIFFEID *url.URL
-}
-
-// AuthType returns the type of TLSInfo as a string.
-func (t TLSInfo) AuthType() string {
- return "tls"
-}
-
-// cipherSuiteLookup returns the string version of a TLS cipher suite ID.
-func cipherSuiteLookup(cipherSuiteID uint16) string {
- for _, s := range tls.CipherSuites() {
- if s.ID == cipherSuiteID {
- return s.Name
- }
- }
- for _, s := range tls.InsecureCipherSuites() {
- if s.ID == cipherSuiteID {
- return s.Name
- }
- }
- return fmt.Sprintf("unknown ID: %v", cipherSuiteID)
-}
-
-// GetSecurityValue returns security info requested by channelz.
-func (t TLSInfo) GetSecurityValue() ChannelzSecurityValue {
- v := &TLSChannelzSecurityValue{
- StandardName: cipherSuiteLookup(t.State.CipherSuite),
- }
- // Currently there's no way to get LocalCertificate info from tls package.
- if len(t.State.PeerCertificates) > 0 {
- v.RemoteCertificate = t.State.PeerCertificates[0].Raw
- }
- return v
-}
-
-// tlsCreds is the credentials required for authenticating a connection using TLS.
-type tlsCreds struct {
- // TLS configuration
- config *tls.Config
-}
-
-func (c tlsCreds) Info() ProtocolInfo {
- return ProtocolInfo{
- SecurityProtocol: "tls",
- SecurityVersion: "1.2",
- ServerName: c.config.ServerName,
- }
-}
-
-func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) {
- // use local cfg to avoid clobbering ServerName if using multiple endpoints
- cfg := credinternal.CloneTLSConfig(c.config)
- if cfg.ServerName == "" {
- serverName, _, err := net.SplitHostPort(authority)
- if err != nil {
- // If the authority had no host port or if the authority cannot be parsed, use it as-is.
- serverName = authority
- }
- cfg.ServerName = serverName
- }
- conn := tls.Client(rawConn, cfg)
- errChannel := make(chan error, 1)
- go func() {
- errChannel <- conn.Handshake()
- close(errChannel)
- }()
- select {
- case err := <-errChannel:
- if err != nil {
- conn.Close()
- return nil, nil, err
- }
- case <-ctx.Done():
- conn.Close()
- return nil, nil, ctx.Err()
- }
-
- // The negotiated protocol can be either of the following:
- // 1. h2: When the server supports ALPN. Only HTTP/2 can be negotiated since
- // it is the only protocol advertised by the client during the handshake.
- // The tls library ensures that the server chooses a protocol advertised
- // by the client.
- // 2. "" (empty string): If the server doesn't support ALPN. ALPN is a requirement
- // for using HTTP/2 over TLS. We can terminate the connection immediately.
- np := conn.ConnectionState().NegotiatedProtocol
- if np == "" {
- if envconfig.EnforceALPNEnabled {
- conn.Close()
- return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property")
- }
- logger.Warningf("Allowing TLS connection to server %q with ALPN disabled. TLS connections to servers with ALPN disabled will be disallowed in future grpc-go releases", cfg.ServerName)
- }
- tlsInfo := TLSInfo{
- State: conn.ConnectionState(),
- CommonAuthInfo: CommonAuthInfo{
- SecurityLevel: PrivacyAndIntegrity,
- },
- }
- id := credinternal.SPIFFEIDFromState(conn.ConnectionState())
- if id != nil {
- tlsInfo.SPIFFEID = id
- }
- return credinternal.WrapSyscallConn(rawConn, conn), tlsInfo, nil
-}
-
-func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) {
- conn := tls.Server(rawConn, c.config)
- if err := conn.Handshake(); err != nil {
- conn.Close()
- return nil, nil, err
- }
- cs := conn.ConnectionState()
- // The negotiated application protocol can be empty only if the client doesn't
- // support ALPN. In such cases, we can close the connection since ALPN is required
- // for using HTTP/2 over TLS.
- if cs.NegotiatedProtocol == "" {
- if envconfig.EnforceALPNEnabled {
- conn.Close()
- return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property")
- } else if logger.V(2) {
- logger.Info("Allowing TLS connection from client with ALPN disabled. TLS connections with ALPN disabled will be disallowed in future grpc-go releases")
- }
- }
- tlsInfo := TLSInfo{
- State: cs,
- CommonAuthInfo: CommonAuthInfo{
- SecurityLevel: PrivacyAndIntegrity,
- },
- }
- id := credinternal.SPIFFEIDFromState(conn.ConnectionState())
- if id != nil {
- tlsInfo.SPIFFEID = id
- }
- return credinternal.WrapSyscallConn(rawConn, conn), tlsInfo, nil
-}
-
-func (c *tlsCreds) Clone() TransportCredentials {
- return NewTLS(c.config)
-}
-
-func (c *tlsCreds) OverrideServerName(serverNameOverride string) error {
- c.config.ServerName = serverNameOverride
- return nil
-}
-
-// The following cipher suites are forbidden for use with HTTP/2 by
-// https://datatracker.ietf.org/doc/html/rfc7540#appendix-A
-var tls12ForbiddenCipherSuites = map[uint16]struct{}{
- tls.TLS_RSA_WITH_AES_128_CBC_SHA: {},
- tls.TLS_RSA_WITH_AES_256_CBC_SHA: {},
- tls.TLS_RSA_WITH_AES_128_GCM_SHA256: {},
- tls.TLS_RSA_WITH_AES_256_GCM_SHA384: {},
- tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: {},
- tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: {},
- tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: {},
- tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: {},
-}
-
-// NewTLS uses c to construct a TransportCredentials based on TLS.
-func NewTLS(c *tls.Config) TransportCredentials {
- config := applyDefaults(c)
- if config.GetConfigForClient != nil {
- oldFn := config.GetConfigForClient
- config.GetConfigForClient = func(hello *tls.ClientHelloInfo) (*tls.Config, error) {
- cfgForClient, err := oldFn(hello)
- if err != nil || cfgForClient == nil {
- return cfgForClient, err
- }
- return applyDefaults(cfgForClient), nil
- }
- }
- return &tlsCreds{config: config}
-}
-
-func applyDefaults(c *tls.Config) *tls.Config {
- config := credinternal.CloneTLSConfig(c)
- config.NextProtos = credinternal.AppendH2ToNextProtos(config.NextProtos)
- // If the user did not configure a MinVersion and did not configure a
- // MaxVersion < 1.2, use MinVersion=1.2, which is required by
- // https://datatracker.ietf.org/doc/html/rfc7540#section-9.2
- if config.MinVersion == 0 && (config.MaxVersion == 0 || config.MaxVersion >= tls.VersionTLS12) {
- config.MinVersion = tls.VersionTLS12
- }
- // If the user did not configure CipherSuites, use all "secure" cipher
- // suites reported by the TLS package, but remove some explicitly forbidden
- // by https://datatracker.ietf.org/doc/html/rfc7540#appendix-A
- if config.CipherSuites == nil {
- for _, cs := range tls.CipherSuites() {
- if _, ok := tls12ForbiddenCipherSuites[cs.ID]; !ok {
- config.CipherSuites = append(config.CipherSuites, cs.ID)
- }
- }
- }
- return config
-}
-
-// NewClientTLSFromCert constructs TLS credentials from the provided root
-// certificate authority certificate(s) to validate server connections. If
-// certificates to establish the identity of the client need to be included in
-// the credentials (eg: for mTLS), use NewTLS instead, where a complete
-// tls.Config can be specified.
-// serverNameOverride is for testing only. If set to a non empty string,
-// it will override the virtual host name of authority (e.g. :authority header
-// field) in requests.
-func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials {
- return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp})
-}
-
-// NewClientTLSFromFile constructs TLS credentials from the provided root
-// certificate authority certificate file(s) to validate server connections. If
-// certificates to establish the identity of the client need to be included in
-// the credentials (eg: for mTLS), use NewTLS instead, where a complete
-// tls.Config can be specified.
-// serverNameOverride is for testing only. If set to a non empty string,
-// it will override the virtual host name of authority (e.g. :authority header
-// field) in requests.
-func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) {
- b, err := os.ReadFile(certFile)
- if err != nil {
- return nil, err
- }
- cp := x509.NewCertPool()
- if !cp.AppendCertsFromPEM(b) {
- return nil, fmt.Errorf("credentials: failed to append certificates")
- }
- return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp}), nil
-}
-
-// NewServerTLSFromCert constructs TLS credentials from the input certificate for server.
-func NewServerTLSFromCert(cert *tls.Certificate) TransportCredentials {
- return NewTLS(&tls.Config{Certificates: []tls.Certificate{*cert}})
-}
-
-// NewServerTLSFromFile constructs TLS credentials from the input certificate file and key
-// file for server.
-func NewServerTLSFromFile(certFile, keyFile string) (TransportCredentials, error) {
- cert, err := tls.LoadX509KeyPair(certFile, keyFile)
- if err != nil {
- return nil, err
- }
- return NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}), nil
-}
-
-// TLSChannelzSecurityValue defines the struct that TLS protocol should return
-// from GetSecurityValue(), containing security info like cipher and certificate used.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type TLSChannelzSecurityValue struct {
- ChannelzSecurityValue
- StandardName string
- LocalCertificate []byte
- RemoteCertificate []byte
-}
diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go
deleted file mode 100644
index 7494ae591..000000000
--- a/vendor/google.golang.org/grpc/dialoptions.go
+++ /dev/null
@@ -1,751 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "net"
- "net/url"
- "time"
-
- "google.golang.org/grpc/backoff"
- "google.golang.org/grpc/channelz"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/credentials/insecure"
- "google.golang.org/grpc/internal"
- internalbackoff "google.golang.org/grpc/internal/backoff"
- "google.golang.org/grpc/internal/binarylog"
- "google.golang.org/grpc/internal/transport"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/stats"
-)
-
-const (
- // https://github.com/grpc/proposal/blob/master/A6-client-retries.md#limits-on-retries-and-hedges
- defaultMaxCallAttempts = 5
-)
-
-func init() {
- internal.AddGlobalDialOptions = func(opt ...DialOption) {
- globalDialOptions = append(globalDialOptions, opt...)
- }
- internal.ClearGlobalDialOptions = func() {
- globalDialOptions = nil
- }
- internal.AddGlobalPerTargetDialOptions = func(opt any) {
- if ptdo, ok := opt.(perTargetDialOption); ok {
- globalPerTargetDialOptions = append(globalPerTargetDialOptions, ptdo)
- }
- }
- internal.ClearGlobalPerTargetDialOptions = func() {
- globalPerTargetDialOptions = nil
- }
- internal.WithBinaryLogger = withBinaryLogger
- internal.JoinDialOptions = newJoinDialOption
- internal.DisableGlobalDialOptions = newDisableGlobalDialOptions
- internal.WithBufferPool = withBufferPool
-}
-
-// dialOptions configure a Dial call. dialOptions are set by the DialOption
-// values passed to Dial.
-type dialOptions struct {
- unaryInt UnaryClientInterceptor
- streamInt StreamClientInterceptor
-
- chainUnaryInts []UnaryClientInterceptor
- chainStreamInts []StreamClientInterceptor
-
- cp Compressor
- dc Decompressor
- bs internalbackoff.Strategy
- block bool
- returnLastError bool
- timeout time.Duration
- authority string
- binaryLogger binarylog.Logger
- copts transport.ConnectOptions
- callOptions []CallOption
- channelzParent channelz.Identifier
- disableServiceConfig bool
- disableRetry bool
- disableHealthCheck bool
- minConnectTimeout func() time.Duration
- defaultServiceConfig *ServiceConfig // defaultServiceConfig is parsed from defaultServiceConfigRawJSON.
- defaultServiceConfigRawJSON *string
- resolvers []resolver.Builder
- idleTimeout time.Duration
- defaultScheme string
- maxCallAttempts int
-}
-
-// DialOption configures how we set up the connection.
-type DialOption interface {
- apply(*dialOptions)
-}
-
-var globalDialOptions []DialOption
-
-// perTargetDialOption takes a parsed target and returns a dial option to apply.
-//
-// This gets called after NewClient() parses the target, and allows per target
-// configuration set through a returned DialOption. The DialOption will not take
-// effect if specifies a resolver builder, as that Dial Option is factored in
-// while parsing target.
-type perTargetDialOption interface {
- // DialOption returns a Dial Option to apply.
- DialOptionForTarget(parsedTarget url.URL) DialOption
-}
-
-var globalPerTargetDialOptions []perTargetDialOption
-
-// EmptyDialOption does not alter the dial configuration. It can be embedded in
-// another structure to build custom dial options.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type EmptyDialOption struct{}
-
-func (EmptyDialOption) apply(*dialOptions) {}
-
-type disableGlobalDialOptions struct{}
-
-func (disableGlobalDialOptions) apply(*dialOptions) {}
-
-// newDisableGlobalDialOptions returns a DialOption that prevents the ClientConn
-// from applying the global DialOptions (set via AddGlobalDialOptions).
-func newDisableGlobalDialOptions() DialOption {
- return &disableGlobalDialOptions{}
-}
-
-// funcDialOption wraps a function that modifies dialOptions into an
-// implementation of the DialOption interface.
-type funcDialOption struct {
- f func(*dialOptions)
-}
-
-func (fdo *funcDialOption) apply(do *dialOptions) {
- fdo.f(do)
-}
-
-func newFuncDialOption(f func(*dialOptions)) *funcDialOption {
- return &funcDialOption{
- f: f,
- }
-}
-
-type joinDialOption struct {
- opts []DialOption
-}
-
-func (jdo *joinDialOption) apply(do *dialOptions) {
- for _, opt := range jdo.opts {
- opt.apply(do)
- }
-}
-
-func newJoinDialOption(opts ...DialOption) DialOption {
- return &joinDialOption{opts: opts}
-}
-
-// WithSharedWriteBuffer allows reusing per-connection transport write buffer.
-// If this option is set to true every connection will release the buffer after
-// flushing the data on the wire.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithSharedWriteBuffer(val bool) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.SharedWriteBuffer = val
- })
-}
-
-// WithWriteBufferSize determines how much data can be batched before doing a
-// write on the wire. The default value for this buffer is 32KB.
-//
-// Zero or negative values will disable the write buffer such that each write
-// will be on underlying connection. Note: A Send call may not directly
-// translate to a write.
-func WithWriteBufferSize(s int) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.WriteBufferSize = s
- })
-}
-
-// WithReadBufferSize lets you set the size of read buffer, this determines how
-// much data can be read at most for each read syscall.
-//
-// The default value for this buffer is 32KB. Zero or negative values will
-// disable read buffer for a connection so data framer can access the
-// underlying conn directly.
-func WithReadBufferSize(s int) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.ReadBufferSize = s
- })
-}
-
-// WithInitialWindowSize returns a DialOption which sets the value for initial
-// window size on a stream. The lower bound for window size is 64K and any value
-// smaller than that will be ignored.
-func WithInitialWindowSize(s int32) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.InitialWindowSize = s
- })
-}
-
-// WithInitialConnWindowSize returns a DialOption which sets the value for
-// initial window size on a connection. The lower bound for window size is 64K
-// and any value smaller than that will be ignored.
-func WithInitialConnWindowSize(s int32) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.InitialConnWindowSize = s
- })
-}
-
-// WithMaxMsgSize returns a DialOption which sets the maximum message size the
-// client can receive.
-//
-// Deprecated: use WithDefaultCallOptions(MaxCallRecvMsgSize(s)) instead. Will
-// be supported throughout 1.x.
-func WithMaxMsgSize(s int) DialOption {
- return WithDefaultCallOptions(MaxCallRecvMsgSize(s))
-}
-
-// WithDefaultCallOptions returns a DialOption which sets the default
-// CallOptions for calls over the connection.
-func WithDefaultCallOptions(cos ...CallOption) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.callOptions = append(o.callOptions, cos...)
- })
-}
-
-// WithCodec returns a DialOption which sets a codec for message marshaling and
-// unmarshaling.
-//
-// Deprecated: use WithDefaultCallOptions(ForceCodec(_)) instead. Will be
-// supported throughout 1.x.
-func WithCodec(c Codec) DialOption {
- return WithDefaultCallOptions(CallCustomCodec(c))
-}
-
-// WithCompressor returns a DialOption which sets a Compressor to use for
-// message compression. It has lower priority than the compressor set by the
-// UseCompressor CallOption.
-//
-// Deprecated: use UseCompressor instead. Will be supported throughout 1.x.
-func WithCompressor(cp Compressor) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.cp = cp
- })
-}
-
-// WithDecompressor returns a DialOption which sets a Decompressor to use for
-// incoming message decompression. If incoming response messages are encoded
-// using the decompressor's Type(), it will be used. Otherwise, the message
-// encoding will be used to look up the compressor registered via
-// encoding.RegisterCompressor, which will then be used to decompress the
-// message. If no compressor is registered for the encoding, an Unimplemented
-// status error will be returned.
-//
-// Deprecated: use encoding.RegisterCompressor instead. Will be supported
-// throughout 1.x.
-func WithDecompressor(dc Decompressor) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.dc = dc
- })
-}
-
-// WithConnectParams configures the ClientConn to use the provided ConnectParams
-// for creating and maintaining connections to servers.
-//
-// The backoff configuration specified as part of the ConnectParams overrides
-// all defaults specified in
-// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. Consider
-// using the backoff.DefaultConfig as a base, in cases where you want to
-// override only a subset of the backoff configuration.
-func WithConnectParams(p ConnectParams) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.bs = internalbackoff.Exponential{Config: p.Backoff}
- o.minConnectTimeout = func() time.Duration {
- return p.MinConnectTimeout
- }
- })
-}
-
-// WithBackoffMaxDelay configures the dialer to use the provided maximum delay
-// when backing off after failed connection attempts.
-//
-// Deprecated: use WithConnectParams instead. Will be supported throughout 1.x.
-func WithBackoffMaxDelay(md time.Duration) DialOption {
- return WithBackoffConfig(BackoffConfig{MaxDelay: md})
-}
-
-// WithBackoffConfig configures the dialer to use the provided backoff
-// parameters after connection failures.
-//
-// Deprecated: use WithConnectParams instead. Will be supported throughout 1.x.
-func WithBackoffConfig(b BackoffConfig) DialOption {
- bc := backoff.DefaultConfig
- bc.MaxDelay = b.MaxDelay
- return withBackoff(internalbackoff.Exponential{Config: bc})
-}
-
-// withBackoff sets the backoff strategy used for connectRetryNum after a failed
-// connection attempt.
-//
-// This can be exported if arbitrary backoff strategies are allowed by gRPC.
-func withBackoff(bs internalbackoff.Strategy) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.bs = bs
- })
-}
-
-// WithBlock returns a DialOption which makes callers of Dial block until the
-// underlying connection is up. Without this, Dial returns immediately and
-// connecting the server happens in background.
-//
-// Use of this feature is not recommended. For more information, please see:
-// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md
-//
-// Deprecated: this DialOption is not supported by NewClient.
-// Will be supported throughout 1.x.
-func WithBlock() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.block = true
- })
-}
-
-// WithReturnConnectionError returns a DialOption which makes the client connection
-// return a string containing both the last connection error that occurred and
-// the context.DeadlineExceeded error.
-// Implies WithBlock()
-//
-// Use of this feature is not recommended. For more information, please see:
-// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md
-//
-// Deprecated: this DialOption is not supported by NewClient.
-// Will be supported throughout 1.x.
-func WithReturnConnectionError() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.block = true
- o.returnLastError = true
- })
-}
-
-// WithInsecure returns a DialOption which disables transport security for this
-// ClientConn. Under the hood, it uses insecure.NewCredentials().
-//
-// Note that using this DialOption with per-RPC credentials (through
-// WithCredentialsBundle or WithPerRPCCredentials) which require transport
-// security is incompatible and will cause grpc.Dial() to fail.
-//
-// Deprecated: use WithTransportCredentials and insecure.NewCredentials()
-// instead. Will be supported throughout 1.x.
-func WithInsecure() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.TransportCredentials = insecure.NewCredentials()
- })
-}
-
-// WithNoProxy returns a DialOption which disables the use of proxies for this
-// ClientConn. This is ignored if WithDialer or WithContextDialer are used.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithNoProxy() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.UseProxy = false
- })
-}
-
-// WithTransportCredentials returns a DialOption which configures a connection
-// level security credentials (e.g., TLS/SSL). This should not be used together
-// with WithCredentialsBundle.
-func WithTransportCredentials(creds credentials.TransportCredentials) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.TransportCredentials = creds
- })
-}
-
-// WithPerRPCCredentials returns a DialOption which sets credentials and places
-// auth state on each outbound RPC.
-func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.PerRPCCredentials = append(o.copts.PerRPCCredentials, creds)
- })
-}
-
-// WithCredentialsBundle returns a DialOption to set a credentials bundle for
-// the ClientConn.WithCreds. This should not be used together with
-// WithTransportCredentials.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithCredentialsBundle(b credentials.Bundle) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.CredsBundle = b
- })
-}
-
-// WithTimeout returns a DialOption that configures a timeout for dialing a
-// ClientConn initially. This is valid if and only if WithBlock() is present.
-//
-// Deprecated: this DialOption is not supported by NewClient.
-// Will be supported throughout 1.x.
-func WithTimeout(d time.Duration) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.timeout = d
- })
-}
-
-// WithContextDialer returns a DialOption that sets a dialer to create
-// connections. If FailOnNonTempDialError() is set to true, and an error is
-// returned by f, gRPC checks the error's Temporary() method to decide if it
-// should try to reconnect to the network address.
-//
-// Note: All supported releases of Go (as of December 2023) override the OS
-// defaults for TCP keepalive time and interval to 15s. To enable TCP keepalive
-// with OS defaults for keepalive time and interval, use a net.Dialer that sets
-// the KeepAlive field to a negative value, and sets the SO_KEEPALIVE socket
-// option to true from the Control field. For a concrete example of how to do
-// this, see internal.NetDialerWithTCPKeepalive().
-//
-// For more information, please see [issue 23459] in the Go GitHub repo.
-//
-// [issue 23459]: https://github.com/golang/go/issues/23459
-func WithContextDialer(f func(context.Context, string) (net.Conn, error)) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.Dialer = f
- })
-}
-
-// WithDialer returns a DialOption that specifies a function to use for dialing
-// network addresses. If FailOnNonTempDialError() is set to true, and an error
-// is returned by f, gRPC checks the error's Temporary() method to decide if it
-// should try to reconnect to the network address.
-//
-// Deprecated: use WithContextDialer instead. Will be supported throughout
-// 1.x.
-func WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption {
- return WithContextDialer(
- func(ctx context.Context, addr string) (net.Conn, error) {
- if deadline, ok := ctx.Deadline(); ok {
- return f(addr, time.Until(deadline))
- }
- return f(addr, 0)
- })
-}
-
-// WithStatsHandler returns a DialOption that specifies the stats handler for
-// all the RPCs and underlying network connections in this ClientConn.
-func WithStatsHandler(h stats.Handler) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- if h == nil {
- logger.Error("ignoring nil parameter in grpc.WithStatsHandler ClientOption")
- // Do not allow a nil stats handler, which would otherwise cause
- // panics.
- return
- }
- o.copts.StatsHandlers = append(o.copts.StatsHandlers, h)
- })
-}
-
-// withBinaryLogger returns a DialOption that specifies the binary logger for
-// this ClientConn.
-func withBinaryLogger(bl binarylog.Logger) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.binaryLogger = bl
- })
-}
-
-// FailOnNonTempDialError returns a DialOption that specifies if gRPC fails on
-// non-temporary dial errors. If f is true, and dialer returns a non-temporary
-// error, gRPC will fail the connection to the network address and won't try to
-// reconnect. The default value of FailOnNonTempDialError is false.
-//
-// FailOnNonTempDialError only affects the initial dial, and does not do
-// anything useful unless you are also using WithBlock().
-//
-// Use of this feature is not recommended. For more information, please see:
-// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md
-//
-// Deprecated: this DialOption is not supported by NewClient.
-// This API may be changed or removed in a
-// later release.
-func FailOnNonTempDialError(f bool) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.FailOnNonTempDialError = f
- })
-}
-
-// WithUserAgent returns a DialOption that specifies a user agent string for all
-// the RPCs.
-func WithUserAgent(s string) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.UserAgent = s + " " + grpcUA
- })
-}
-
-// WithKeepaliveParams returns a DialOption that specifies keepalive parameters
-// for the client transport.
-//
-// Keepalive is disabled by default.
-func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption {
- if kp.Time < internal.KeepaliveMinPingTime {
- logger.Warningf("Adjusting keepalive ping interval to minimum period of %v", internal.KeepaliveMinPingTime)
- kp.Time = internal.KeepaliveMinPingTime
- }
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.KeepaliveParams = kp
- })
-}
-
-// WithUnaryInterceptor returns a DialOption that specifies the interceptor for
-// unary RPCs.
-func WithUnaryInterceptor(f UnaryClientInterceptor) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.unaryInt = f
- })
-}
-
-// WithChainUnaryInterceptor returns a DialOption that specifies the chained
-// interceptor for unary RPCs. The first interceptor will be the outer most,
-// while the last interceptor will be the inner most wrapper around the real call.
-// All interceptors added by this method will be chained, and the interceptor
-// defined by WithUnaryInterceptor will always be prepended to the chain.
-func WithChainUnaryInterceptor(interceptors ...UnaryClientInterceptor) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.chainUnaryInts = append(o.chainUnaryInts, interceptors...)
- })
-}
-
-// WithStreamInterceptor returns a DialOption that specifies the interceptor for
-// streaming RPCs.
-func WithStreamInterceptor(f StreamClientInterceptor) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.streamInt = f
- })
-}
-
-// WithChainStreamInterceptor returns a DialOption that specifies the chained
-// interceptor for streaming RPCs. The first interceptor will be the outer most,
-// while the last interceptor will be the inner most wrapper around the real call.
-// All interceptors added by this method will be chained, and the interceptor
-// defined by WithStreamInterceptor will always be prepended to the chain.
-func WithChainStreamInterceptor(interceptors ...StreamClientInterceptor) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.chainStreamInts = append(o.chainStreamInts, interceptors...)
- })
-}
-
-// WithAuthority returns a DialOption that specifies the value to be used as the
-// :authority pseudo-header and as the server name in authentication handshake.
-func WithAuthority(a string) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.authority = a
- })
-}
-
-// WithChannelzParentID returns a DialOption that specifies the channelz ID of
-// current ClientConn's parent. This function is used in nested channel creation
-// (e.g. grpclb dial).
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithChannelzParentID(c channelz.Identifier) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.channelzParent = c
- })
-}
-
-// WithDisableServiceConfig returns a DialOption that causes gRPC to ignore any
-// service config provided by the resolver and provides a hint to the resolver
-// to not fetch service configs.
-//
-// Note that this dial option only disables service config from resolver. If
-// default service config is provided, gRPC will use the default service config.
-func WithDisableServiceConfig() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.disableServiceConfig = true
- })
-}
-
-// WithDefaultServiceConfig returns a DialOption that configures the default
-// service config, which will be used in cases where:
-//
-// 1. WithDisableServiceConfig is also used, or
-//
-// 2. The name resolver does not provide a service config or provides an
-// invalid service config.
-//
-// The parameter s is the JSON representation of the default service config.
-// For more information about service configs, see:
-// https://github.com/grpc/grpc/blob/master/doc/service_config.md
-// For a simple example of usage, see:
-// examples/features/load_balancing/client/main.go
-func WithDefaultServiceConfig(s string) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.defaultServiceConfigRawJSON = &s
- })
-}
-
-// WithDisableRetry returns a DialOption that disables retries, even if the
-// service config enables them. This does not impact transparent retries, which
-// will happen automatically if no data is written to the wire or if the RPC is
-// unprocessed by the remote server.
-func WithDisableRetry() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.disableRetry = true
- })
-}
-
-// MaxHeaderListSizeDialOption is a DialOption that specifies the maximum
-// (uncompressed) size of header list that the client is prepared to accept.
-type MaxHeaderListSizeDialOption struct {
- MaxHeaderListSize uint32
-}
-
-func (o MaxHeaderListSizeDialOption) apply(do *dialOptions) {
- do.copts.MaxHeaderListSize = &o.MaxHeaderListSize
-}
-
-// WithMaxHeaderListSize returns a DialOption that specifies the maximum
-// (uncompressed) size of header list that the client is prepared to accept.
-func WithMaxHeaderListSize(s uint32) DialOption {
- return MaxHeaderListSizeDialOption{
- MaxHeaderListSize: s,
- }
-}
-
-// WithDisableHealthCheck disables the LB channel health checking for all
-// SubConns of this ClientConn.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithDisableHealthCheck() DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.disableHealthCheck = true
- })
-}
-
-func defaultDialOptions() dialOptions {
- return dialOptions{
- copts: transport.ConnectOptions{
- ReadBufferSize: defaultReadBufSize,
- WriteBufferSize: defaultWriteBufSize,
- UseProxy: true,
- UserAgent: grpcUA,
- BufferPool: mem.DefaultBufferPool(),
- },
- bs: internalbackoff.DefaultExponential,
- idleTimeout: 30 * time.Minute,
- defaultScheme: "dns",
- maxCallAttempts: defaultMaxCallAttempts,
- }
-}
-
-// withMinConnectDeadline specifies the function that clientconn uses to
-// get minConnectDeadline. This can be used to make connection attempts happen
-// faster/slower.
-//
-// For testing purpose only.
-func withMinConnectDeadline(f func() time.Duration) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.minConnectTimeout = f
- })
-}
-
-// withDefaultScheme is used to allow Dial to use "passthrough" as the default
-// name resolver, while NewClient uses "dns" otherwise.
-func withDefaultScheme(s string) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.defaultScheme = s
- })
-}
-
-// WithResolvers allows a list of resolver implementations to be registered
-// locally with the ClientConn without needing to be globally registered via
-// resolver.Register. They will be matched against the scheme used for the
-// current Dial only, and will take precedence over the global registry.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithResolvers(rs ...resolver.Builder) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.resolvers = append(o.resolvers, rs...)
- })
-}
-
-// WithIdleTimeout returns a DialOption that configures an idle timeout for the
-// channel. If the channel is idle for the configured timeout, i.e there are no
-// ongoing RPCs and no new RPCs are initiated, the channel will enter idle mode
-// and as a result the name resolver and load balancer will be shut down. The
-// channel will exit idle mode when the Connect() method is called or when an
-// RPC is initiated.
-//
-// A default timeout of 30 minutes will be used if this dial option is not set
-// at dial time and idleness can be disabled by passing a timeout of zero.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WithIdleTimeout(d time.Duration) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.idleTimeout = d
- })
-}
-
-// WithMaxCallAttempts returns a DialOption that configures the maximum number
-// of attempts per call (including retries and hedging) using the channel.
-// Service owners may specify a higher value for these parameters, but higher
-// values will be treated as equal to the maximum value by the client
-// implementation. This mitigates security concerns related to the service
-// config being transferred to the client via DNS.
-//
-// A value of 5 will be used if this dial option is not set or n < 2.
-func WithMaxCallAttempts(n int) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- if n < 2 {
- n = defaultMaxCallAttempts
- }
- o.maxCallAttempts = n
- })
-}
-
-func withBufferPool(bufferPool mem.BufferPool) DialOption {
- return newFuncDialOption(func(o *dialOptions) {
- o.copts.BufferPool = bufferPool
- })
-}
diff --git a/vendor/google.golang.org/grpc/doc.go b/vendor/google.golang.org/grpc/doc.go
deleted file mode 100644
index e7b532b6f..000000000
--- a/vendor/google.golang.org/grpc/doc.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-//go:generate ./scripts/regenerate.sh
-
-/*
-Package grpc implements an RPC system called gRPC.
-
-See grpc.io for more information about gRPC.
-*/
-package grpc // import "google.golang.org/grpc"
diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go
deleted file mode 100644
index 11d0ae142..000000000
--- a/vendor/google.golang.org/grpc/encoding/encoding.go
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package encoding defines the interface for the compressor and codec, and
-// functions to register and retrieve compressors and codecs.
-//
-// # Experimental
-//
-// Notice: This package is EXPERIMENTAL and may be changed or removed in a
-// later release.
-package encoding
-
-import (
- "io"
- "strings"
-
- "google.golang.org/grpc/internal/grpcutil"
-)
-
-// Identity specifies the optional encoding for uncompressed streams.
-// It is intended for grpc internal use only.
-const Identity = "identity"
-
-// Compressor is used for compressing and decompressing when sending or
-// receiving messages.
-//
-// If a Compressor implements `DecompressedSize(compressedBytes []byte) int`,
-// gRPC will invoke it to determine the size of the buffer allocated for the
-// result of decompression. A return value of -1 indicates unknown size.
-type Compressor interface {
- // Compress writes the data written to wc to w after compressing it. If an
- // error occurs while initializing the compressor, that error is returned
- // instead.
- Compress(w io.Writer) (io.WriteCloser, error)
- // Decompress reads data from r, decompresses it, and provides the
- // uncompressed data via the returned io.Reader. If an error occurs while
- // initializing the decompressor, that error is returned instead.
- Decompress(r io.Reader) (io.Reader, error)
- // Name is the name of the compression codec and is used to set the content
- // coding header. The result must be static; the result cannot change
- // between calls.
- Name() string
-}
-
-var registeredCompressor = make(map[string]Compressor)
-
-// RegisterCompressor registers the compressor with gRPC by its name. It can
-// be activated when sending an RPC via grpc.UseCompressor(). It will be
-// automatically accessed when receiving a message based on the content coding
-// header. Servers also use it to send a response with the same encoding as
-// the request.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple Compressors are
-// registered with the same name, the one registered last will take effect.
-func RegisterCompressor(c Compressor) {
- registeredCompressor[c.Name()] = c
- if !grpcutil.IsCompressorNameRegistered(c.Name()) {
- grpcutil.RegisteredCompressorNames = append(grpcutil.RegisteredCompressorNames, c.Name())
- }
-}
-
-// GetCompressor returns Compressor for the given compressor name.
-func GetCompressor(name string) Compressor {
- return registeredCompressor[name]
-}
-
-// Codec defines the interface gRPC uses to encode and decode messages. Note
-// that implementations of this interface must be thread safe; a Codec's
-// methods can be called from concurrent goroutines.
-type Codec interface {
- // Marshal returns the wire format of v.
- Marshal(v any) ([]byte, error)
- // Unmarshal parses the wire format into v.
- Unmarshal(data []byte, v any) error
- // Name returns the name of the Codec implementation. The returned string
- // will be used as part of content type in transmission. The result must be
- // static; the result cannot change between calls.
- Name() string
-}
-
-var registeredCodecs = make(map[string]any)
-
-// RegisterCodec registers the provided Codec for use with all gRPC clients and
-// servers.
-//
-// The Codec will be stored and looked up by result of its Name() method, which
-// should match the content-subtype of the encoding handled by the Codec. This
-// is case-insensitive, and is stored and looked up as lowercase. If the
-// result of calling Name() is an empty string, RegisterCodec will panic. See
-// Content-Type on
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple Codecs are
-// registered with the same name, the one registered last will take effect.
-func RegisterCodec(codec Codec) {
- if codec == nil {
- panic("cannot register a nil Codec")
- }
- if codec.Name() == "" {
- panic("cannot register Codec with empty string result for Name()")
- }
- contentSubtype := strings.ToLower(codec.Name())
- registeredCodecs[contentSubtype] = codec
-}
-
-// GetCodec gets a registered Codec by content-subtype, or nil if no Codec is
-// registered for the content-subtype.
-//
-// The content-subtype is expected to be lowercase.
-func GetCodec(contentSubtype string) Codec {
- c, _ := registeredCodecs[contentSubtype].(Codec)
- return c
-}
diff --git a/vendor/google.golang.org/grpc/encoding/encoding_v2.go b/vendor/google.golang.org/grpc/encoding/encoding_v2.go
deleted file mode 100644
index 074c5e234..000000000
--- a/vendor/google.golang.org/grpc/encoding/encoding_v2.go
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package encoding
-
-import (
- "strings"
-
- "google.golang.org/grpc/mem"
-)
-
-// CodecV2 defines the interface gRPC uses to encode and decode messages. Note
-// that implementations of this interface must be thread safe; a CodecV2's
-// methods can be called from concurrent goroutines.
-type CodecV2 interface {
- // Marshal returns the wire format of v. The buffers in the returned
- // [mem.BufferSlice] must have at least one reference each, which will be freed
- // by gRPC when they are no longer needed.
- Marshal(v any) (out mem.BufferSlice, err error)
- // Unmarshal parses the wire format into v. Note that data will be freed as soon
- // as this function returns. If the codec wishes to guarantee access to the data
- // after this function, it must take its own reference that it frees when it is
- // no longer needed.
- Unmarshal(data mem.BufferSlice, v any) error
- // Name returns the name of the Codec implementation. The returned string
- // will be used as part of content type in transmission. The result must be
- // static; the result cannot change between calls.
- Name() string
-}
-
-// RegisterCodecV2 registers the provided CodecV2 for use with all gRPC clients and
-// servers.
-//
-// The CodecV2 will be stored and looked up by result of its Name() method, which
-// should match the content-subtype of the encoding handled by the CodecV2. This
-// is case-insensitive, and is stored and looked up as lowercase. If the
-// result of calling Name() is an empty string, RegisterCodecV2 will panic. See
-// Content-Type on
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details.
-//
-// If both a Codec and CodecV2 are registered with the same name, the CodecV2
-// will be used.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple Codecs are
-// registered with the same name, the one registered last will take effect.
-func RegisterCodecV2(codec CodecV2) {
- if codec == nil {
- panic("cannot register a nil CodecV2")
- }
- if codec.Name() == "" {
- panic("cannot register CodecV2 with empty string result for Name()")
- }
- contentSubtype := strings.ToLower(codec.Name())
- registeredCodecs[contentSubtype] = codec
-}
-
-// GetCodecV2 gets a registered CodecV2 by content-subtype, or nil if no CodecV2 is
-// registered for the content-subtype.
-//
-// The content-subtype is expected to be lowercase.
-func GetCodecV2(contentSubtype string) CodecV2 {
- c, _ := registeredCodecs[contentSubtype].(CodecV2)
- return c
-}
diff --git a/vendor/google.golang.org/grpc/encoding/gzip/gzip.go b/vendor/google.golang.org/grpc/encoding/gzip/gzip.go
deleted file mode 100644
index 6306e8bb0..000000000
--- a/vendor/google.golang.org/grpc/encoding/gzip/gzip.go
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package gzip implements and registers the gzip compressor
-// during the initialization.
-//
-// # Experimental
-//
-// Notice: This package is EXPERIMENTAL and may be changed or removed in a
-// later release.
-package gzip
-
-import (
- "compress/gzip"
- "encoding/binary"
- "fmt"
- "io"
- "sync"
-
- "google.golang.org/grpc/encoding"
-)
-
-// Name is the name registered for the gzip compressor.
-const Name = "gzip"
-
-func init() {
- c := &compressor{}
- c.poolCompressor.New = func() any {
- return &writer{Writer: gzip.NewWriter(io.Discard), pool: &c.poolCompressor}
- }
- encoding.RegisterCompressor(c)
-}
-
-type writer struct {
- *gzip.Writer
- pool *sync.Pool
-}
-
-// SetLevel updates the registered gzip compressor to use the compression level specified (gzip.HuffmanOnly is not supported).
-// NOTE: this function must only be called during initialization time (i.e. in an init() function),
-// and is not thread-safe.
-//
-// The error returned will be nil if the specified level is valid.
-func SetLevel(level int) error {
- if level < gzip.DefaultCompression || level > gzip.BestCompression {
- return fmt.Errorf("grpc: invalid gzip compression level: %d", level)
- }
- c := encoding.GetCompressor(Name).(*compressor)
- c.poolCompressor.New = func() any {
- w, err := gzip.NewWriterLevel(io.Discard, level)
- if err != nil {
- panic(err)
- }
- return &writer{Writer: w, pool: &c.poolCompressor}
- }
- return nil
-}
-
-func (c *compressor) Compress(w io.Writer) (io.WriteCloser, error) {
- z := c.poolCompressor.Get().(*writer)
- z.Writer.Reset(w)
- return z, nil
-}
-
-func (z *writer) Close() error {
- defer z.pool.Put(z)
- return z.Writer.Close()
-}
-
-type reader struct {
- *gzip.Reader
- pool *sync.Pool
-}
-
-func (c *compressor) Decompress(r io.Reader) (io.Reader, error) {
- z, inPool := c.poolDecompressor.Get().(*reader)
- if !inPool {
- newZ, err := gzip.NewReader(r)
- if err != nil {
- return nil, err
- }
- return &reader{Reader: newZ, pool: &c.poolDecompressor}, nil
- }
- if err := z.Reset(r); err != nil {
- c.poolDecompressor.Put(z)
- return nil, err
- }
- return z, nil
-}
-
-func (z *reader) Read(p []byte) (n int, err error) {
- n, err = z.Reader.Read(p)
- if err == io.EOF {
- z.pool.Put(z)
- }
- return n, err
-}
-
-// RFC1952 specifies that the last four bytes "contains the size of
-// the original (uncompressed) input data modulo 2^32."
-// gRPC has a max message size of 2GB so we don't need to worry about wraparound.
-func (c *compressor) DecompressedSize(buf []byte) int {
- last := len(buf)
- if last < 4 {
- return -1
- }
- return int(binary.LittleEndian.Uint32(buf[last-4 : last]))
-}
-
-func (c *compressor) Name() string {
- return Name
-}
-
-type compressor struct {
- poolCompressor sync.Pool
- poolDecompressor sync.Pool
-}
diff --git a/vendor/google.golang.org/grpc/encoding/proto/proto.go b/vendor/google.golang.org/grpc/encoding/proto/proto.go
deleted file mode 100644
index ceec319dd..000000000
--- a/vendor/google.golang.org/grpc/encoding/proto/proto.go
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package proto defines the protobuf codec. Importing this package will
-// register the codec.
-package proto
-
-import (
- "fmt"
-
- "google.golang.org/grpc/encoding"
- "google.golang.org/grpc/mem"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/protoadapt"
-)
-
-// Name is the name registered for the proto compressor.
-const Name = "proto"
-
-func init() {
- encoding.RegisterCodecV2(&codecV2{})
-}
-
-// codec is a CodecV2 implementation with protobuf. It is the default codec for
-// gRPC.
-type codecV2 struct{}
-
-func (c *codecV2) Marshal(v any) (data mem.BufferSlice, err error) {
- vv := messageV2Of(v)
- if vv == nil {
- return nil, fmt.Errorf("proto: failed to marshal, message is %T, want proto.Message", v)
- }
-
- size := proto.Size(vv)
- if mem.IsBelowBufferPoolingThreshold(size) {
- buf, err := proto.Marshal(vv)
- if err != nil {
- return nil, err
- }
- data = append(data, mem.SliceBuffer(buf))
- } else {
- pool := mem.DefaultBufferPool()
- buf := pool.Get(size)
- if _, err := (proto.MarshalOptions{}).MarshalAppend((*buf)[:0], vv); err != nil {
- pool.Put(buf)
- return nil, err
- }
- data = append(data, mem.NewBuffer(buf, pool))
- }
-
- return data, nil
-}
-
-func (c *codecV2) Unmarshal(data mem.BufferSlice, v any) (err error) {
- vv := messageV2Of(v)
- if vv == nil {
- return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v)
- }
-
- buf := data.MaterializeToBuffer(mem.DefaultBufferPool())
- defer buf.Free()
- // TODO: Upgrade proto.Unmarshal to support mem.BufferSlice. Right now, it's not
- // really possible without a major overhaul of the proto package, but the
- // vtprotobuf library may be able to support this.
- return proto.Unmarshal(buf.ReadOnlyData(), vv)
-}
-
-func messageV2Of(v any) proto.Message {
- switch v := v.(type) {
- case protoadapt.MessageV1:
- return protoadapt.MessageV2Of(v)
- case protoadapt.MessageV2:
- return v
- }
-
- return nil
-}
-
-func (c *codecV2) Name() string {
- return Name
-}
diff --git a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go b/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go
deleted file mode 100644
index ad75313a1..000000000
--- a/vendor/google.golang.org/grpc/experimental/stats/metricregistry.go
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package stats
-
-import (
- "maps"
-
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/stats"
-)
-
-func init() {
- internal.SnapshotMetricRegistryForTesting = snapshotMetricsRegistryForTesting
-}
-
-var logger = grpclog.Component("metrics-registry")
-
-// DefaultMetrics are the default metrics registered through global metrics
-// registry. This is written to at initialization time only, and is read only
-// after initialization.
-var DefaultMetrics = stats.NewMetricSet()
-
-// MetricDescriptor is the data for a registered metric.
-type MetricDescriptor struct {
- // The name of this metric. This name must be unique across the whole binary
- // (including any per call metrics). See
- // https://github.com/grpc/proposal/blob/master/A79-non-per-call-metrics-architecture.md#metric-instrument-naming-conventions
- // for metric naming conventions.
- Name string
- // The description of this metric.
- Description string
- // The unit (e.g. entries, seconds) of this metric.
- Unit string
- // The required label keys for this metric. These are intended to
- // metrics emitted from a stats handler.
- Labels []string
- // The optional label keys for this metric. These are intended to attached
- // to metrics emitted from a stats handler if configured.
- OptionalLabels []string
- // Whether this metric is on by default.
- Default bool
- // The type of metric. This is set by the metric registry, and not intended
- // to be set by a component registering a metric.
- Type MetricType
- // Bounds are the bounds of this metric. This only applies to histogram
- // metrics. If unset or set with length 0, stats handlers will fall back to
- // default bounds.
- Bounds []float64
-}
-
-// MetricType is the type of metric.
-type MetricType int
-
-// Type of metric supported by this instrument registry.
-const (
- MetricTypeIntCount MetricType = iota
- MetricTypeFloatCount
- MetricTypeIntHisto
- MetricTypeFloatHisto
- MetricTypeIntGauge
-)
-
-// Int64CountHandle is a typed handle for a int count metric. This handle
-// is passed at the recording point in order to know which metric to record
-// on.
-type Int64CountHandle MetricDescriptor
-
-// Descriptor returns the int64 count handle typecast to a pointer to a
-// MetricDescriptor.
-func (h *Int64CountHandle) Descriptor() *MetricDescriptor {
- return (*MetricDescriptor)(h)
-}
-
-// Record records the int64 count value on the metrics recorder provided.
-func (h *Int64CountHandle) Record(recorder MetricsRecorder, incr int64, labels ...string) {
- recorder.RecordInt64Count(h, incr, labels...)
-}
-
-// Float64CountHandle is a typed handle for a float count metric. This handle is
-// passed at the recording point in order to know which metric to record on.
-type Float64CountHandle MetricDescriptor
-
-// Descriptor returns the float64 count handle typecast to a pointer to a
-// MetricDescriptor.
-func (h *Float64CountHandle) Descriptor() *MetricDescriptor {
- return (*MetricDescriptor)(h)
-}
-
-// Record records the float64 count value on the metrics recorder provided.
-func (h *Float64CountHandle) Record(recorder MetricsRecorder, incr float64, labels ...string) {
- recorder.RecordFloat64Count(h, incr, labels...)
-}
-
-// Int64HistoHandle is a typed handle for an int histogram metric. This handle
-// is passed at the recording point in order to know which metric to record on.
-type Int64HistoHandle MetricDescriptor
-
-// Descriptor returns the int64 histo handle typecast to a pointer to a
-// MetricDescriptor.
-func (h *Int64HistoHandle) Descriptor() *MetricDescriptor {
- return (*MetricDescriptor)(h)
-}
-
-// Record records the int64 histo value on the metrics recorder provided.
-func (h *Int64HistoHandle) Record(recorder MetricsRecorder, incr int64, labels ...string) {
- recorder.RecordInt64Histo(h, incr, labels...)
-}
-
-// Float64HistoHandle is a typed handle for a float histogram metric. This
-// handle is passed at the recording point in order to know which metric to
-// record on.
-type Float64HistoHandle MetricDescriptor
-
-// Descriptor returns the float64 histo handle typecast to a pointer to a
-// MetricDescriptor.
-func (h *Float64HistoHandle) Descriptor() *MetricDescriptor {
- return (*MetricDescriptor)(h)
-}
-
-// Record records the float64 histo value on the metrics recorder provided.
-func (h *Float64HistoHandle) Record(recorder MetricsRecorder, incr float64, labels ...string) {
- recorder.RecordFloat64Histo(h, incr, labels...)
-}
-
-// Int64GaugeHandle is a typed handle for an int gauge metric. This handle is
-// passed at the recording point in order to know which metric to record on.
-type Int64GaugeHandle MetricDescriptor
-
-// Descriptor returns the int64 gauge handle typecast to a pointer to a
-// MetricDescriptor.
-func (h *Int64GaugeHandle) Descriptor() *MetricDescriptor {
- return (*MetricDescriptor)(h)
-}
-
-// Record records the int64 histo value on the metrics recorder provided.
-func (h *Int64GaugeHandle) Record(recorder MetricsRecorder, incr int64, labels ...string) {
- recorder.RecordInt64Gauge(h, incr, labels...)
-}
-
-// registeredMetrics are the registered metric descriptor names.
-var registeredMetrics = make(map[string]bool)
-
-// metricsRegistry contains all of the registered metrics.
-//
-// This is written to only at init time, and read only after that.
-var metricsRegistry = make(map[string]*MetricDescriptor)
-
-// DescriptorForMetric returns the MetricDescriptor from the global registry.
-//
-// Returns nil if MetricDescriptor not present.
-func DescriptorForMetric(metricName string) *MetricDescriptor {
- return metricsRegistry[metricName]
-}
-
-func registerMetric(metricName string, def bool) {
- if registeredMetrics[metricName] {
- logger.Fatalf("metric %v already registered", metricName)
- }
- registeredMetrics[metricName] = true
- if def {
- DefaultMetrics = DefaultMetrics.Add(metricName)
- }
-}
-
-// RegisterInt64Count registers the metric description onto the global registry.
-// It returns a typed handle to use to recording data.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple metrics are
-// registered with the same name, this function will panic.
-func RegisterInt64Count(descriptor MetricDescriptor) *Int64CountHandle {
- registerMetric(descriptor.Name, descriptor.Default)
- descriptor.Type = MetricTypeIntCount
- descPtr := &descriptor
- metricsRegistry[descriptor.Name] = descPtr
- return (*Int64CountHandle)(descPtr)
-}
-
-// RegisterFloat64Count registers the metric description onto the global
-// registry. It returns a typed handle to use to recording data.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple metrics are
-// registered with the same name, this function will panic.
-func RegisterFloat64Count(descriptor MetricDescriptor) *Float64CountHandle {
- registerMetric(descriptor.Name, descriptor.Default)
- descriptor.Type = MetricTypeFloatCount
- descPtr := &descriptor
- metricsRegistry[descriptor.Name] = descPtr
- return (*Float64CountHandle)(descPtr)
-}
-
-// RegisterInt64Histo registers the metric description onto the global registry.
-// It returns a typed handle to use to recording data.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple metrics are
-// registered with the same name, this function will panic.
-func RegisterInt64Histo(descriptor MetricDescriptor) *Int64HistoHandle {
- registerMetric(descriptor.Name, descriptor.Default)
- descriptor.Type = MetricTypeIntHisto
- descPtr := &descriptor
- metricsRegistry[descriptor.Name] = descPtr
- return (*Int64HistoHandle)(descPtr)
-}
-
-// RegisterFloat64Histo registers the metric description onto the global
-// registry. It returns a typed handle to use to recording data.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple metrics are
-// registered with the same name, this function will panic.
-func RegisterFloat64Histo(descriptor MetricDescriptor) *Float64HistoHandle {
- registerMetric(descriptor.Name, descriptor.Default)
- descriptor.Type = MetricTypeFloatHisto
- descPtr := &descriptor
- metricsRegistry[descriptor.Name] = descPtr
- return (*Float64HistoHandle)(descPtr)
-}
-
-// RegisterInt64Gauge registers the metric description onto the global registry.
-// It returns a typed handle to use to recording data.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple metrics are
-// registered with the same name, this function will panic.
-func RegisterInt64Gauge(descriptor MetricDescriptor) *Int64GaugeHandle {
- registerMetric(descriptor.Name, descriptor.Default)
- descriptor.Type = MetricTypeIntGauge
- descPtr := &descriptor
- metricsRegistry[descriptor.Name] = descPtr
- return (*Int64GaugeHandle)(descPtr)
-}
-
-// snapshotMetricsRegistryForTesting snapshots the global data of the metrics
-// registry. Returns a cleanup function that sets the metrics registry to its
-// original state.
-func snapshotMetricsRegistryForTesting() func() {
- oldDefaultMetrics := DefaultMetrics
- oldRegisteredMetrics := registeredMetrics
- oldMetricsRegistry := metricsRegistry
-
- registeredMetrics = make(map[string]bool)
- metricsRegistry = make(map[string]*MetricDescriptor)
- maps.Copy(registeredMetrics, registeredMetrics)
- maps.Copy(metricsRegistry, metricsRegistry)
-
- return func() {
- DefaultMetrics = oldDefaultMetrics
- registeredMetrics = oldRegisteredMetrics
- metricsRegistry = oldMetricsRegistry
- }
-}
diff --git a/vendor/google.golang.org/grpc/experimental/stats/metrics.go b/vendor/google.golang.org/grpc/experimental/stats/metrics.go
deleted file mode 100644
index ee1423605..000000000
--- a/vendor/google.golang.org/grpc/experimental/stats/metrics.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package stats contains experimental metrics/stats API's.
-package stats
-
-import "google.golang.org/grpc/stats"
-
-// MetricsRecorder records on metrics derived from metric registry.
-type MetricsRecorder interface {
- // RecordInt64Count records the measurement alongside labels on the int
- // count associated with the provided handle.
- RecordInt64Count(handle *Int64CountHandle, incr int64, labels ...string)
- // RecordFloat64Count records the measurement alongside labels on the float
- // count associated with the provided handle.
- RecordFloat64Count(handle *Float64CountHandle, incr float64, labels ...string)
- // RecordInt64Histo records the measurement alongside labels on the int
- // histo associated with the provided handle.
- RecordInt64Histo(handle *Int64HistoHandle, incr int64, labels ...string)
- // RecordFloat64Histo records the measurement alongside labels on the float
- // histo associated with the provided handle.
- RecordFloat64Histo(handle *Float64HistoHandle, incr float64, labels ...string)
- // RecordInt64Gauge records the measurement alongside labels on the int
- // gauge associated with the provided handle.
- RecordInt64Gauge(handle *Int64GaugeHandle, incr int64, labels ...string)
-}
-
-// Metrics is an experimental legacy alias of the now-stable stats.MetricSet.
-// Metrics will be deleted in a future release.
-type Metrics = stats.MetricSet
-
-// Metric was replaced by direct usage of strings.
-type Metric = string
-
-// NewMetrics is an experimental legacy alias of the now-stable
-// stats.NewMetricSet. NewMetrics will be deleted in a future release.
-func NewMetrics(metrics ...Metric) *Metrics {
- return stats.NewMetricSet(metrics...)
-}
diff --git a/vendor/google.golang.org/grpc/grpclog/component.go b/vendor/google.golang.org/grpc/grpclog/component.go
deleted file mode 100644
index f1ae080dc..000000000
--- a/vendor/google.golang.org/grpc/grpclog/component.go
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpclog
-
-import (
- "fmt"
-)
-
-// componentData records the settings for a component.
-type componentData struct {
- name string
-}
-
-var cache = map[string]*componentData{}
-
-func (c *componentData) InfoDepth(depth int, args ...any) {
- args = append([]any{"[" + string(c.name) + "]"}, args...)
- InfoDepth(depth+1, args...)
-}
-
-func (c *componentData) WarningDepth(depth int, args ...any) {
- args = append([]any{"[" + string(c.name) + "]"}, args...)
- WarningDepth(depth+1, args...)
-}
-
-func (c *componentData) ErrorDepth(depth int, args ...any) {
- args = append([]any{"[" + string(c.name) + "]"}, args...)
- ErrorDepth(depth+1, args...)
-}
-
-func (c *componentData) FatalDepth(depth int, args ...any) {
- args = append([]any{"[" + string(c.name) + "]"}, args...)
- FatalDepth(depth+1, args...)
-}
-
-func (c *componentData) Info(args ...any) {
- c.InfoDepth(1, args...)
-}
-
-func (c *componentData) Warning(args ...any) {
- c.WarningDepth(1, args...)
-}
-
-func (c *componentData) Error(args ...any) {
- c.ErrorDepth(1, args...)
-}
-
-func (c *componentData) Fatal(args ...any) {
- c.FatalDepth(1, args...)
-}
-
-func (c *componentData) Infof(format string, args ...any) {
- c.InfoDepth(1, fmt.Sprintf(format, args...))
-}
-
-func (c *componentData) Warningf(format string, args ...any) {
- c.WarningDepth(1, fmt.Sprintf(format, args...))
-}
-
-func (c *componentData) Errorf(format string, args ...any) {
- c.ErrorDepth(1, fmt.Sprintf(format, args...))
-}
-
-func (c *componentData) Fatalf(format string, args ...any) {
- c.FatalDepth(1, fmt.Sprintf(format, args...))
-}
-
-func (c *componentData) Infoln(args ...any) {
- c.InfoDepth(1, args...)
-}
-
-func (c *componentData) Warningln(args ...any) {
- c.WarningDepth(1, args...)
-}
-
-func (c *componentData) Errorln(args ...any) {
- c.ErrorDepth(1, args...)
-}
-
-func (c *componentData) Fatalln(args ...any) {
- c.FatalDepth(1, args...)
-}
-
-func (c *componentData) V(l int) bool {
- return V(l)
-}
-
-// Component creates a new component and returns it for logging. If a component
-// with the name already exists, nothing will be created and it will be
-// returned. SetLoggerV2 will panic if it is called with a logger created by
-// Component.
-func Component(componentName string) DepthLoggerV2 {
- if cData, ok := cache[componentName]; ok {
- return cData
- }
- c := &componentData{componentName}
- cache[componentName] = c
- return c
-}
diff --git a/vendor/google.golang.org/grpc/grpclog/grpclog.go b/vendor/google.golang.org/grpc/grpclog/grpclog.go
deleted file mode 100644
index db320105e..000000000
--- a/vendor/google.golang.org/grpc/grpclog/grpclog.go
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package grpclog defines logging for grpc.
-//
-// In the default logger, severity level can be set by environment variable
-// GRPC_GO_LOG_SEVERITY_LEVEL, verbosity level can be set by
-// GRPC_GO_LOG_VERBOSITY_LEVEL.
-package grpclog
-
-import (
- "os"
-
- "google.golang.org/grpc/grpclog/internal"
-)
-
-func init() {
- SetLoggerV2(newLoggerV2())
-}
-
-// V reports whether verbosity level l is at least the requested verbose level.
-func V(l int) bool {
- return internal.LoggerV2Impl.V(l)
-}
-
-// Info logs to the INFO log.
-func Info(args ...any) {
- internal.LoggerV2Impl.Info(args...)
-}
-
-// Infof logs to the INFO log. Arguments are handled in the manner of fmt.Printf.
-func Infof(format string, args ...any) {
- internal.LoggerV2Impl.Infof(format, args...)
-}
-
-// Infoln logs to the INFO log. Arguments are handled in the manner of fmt.Println.
-func Infoln(args ...any) {
- internal.LoggerV2Impl.Infoln(args...)
-}
-
-// Warning logs to the WARNING log.
-func Warning(args ...any) {
- internal.LoggerV2Impl.Warning(args...)
-}
-
-// Warningf logs to the WARNING log. Arguments are handled in the manner of fmt.Printf.
-func Warningf(format string, args ...any) {
- internal.LoggerV2Impl.Warningf(format, args...)
-}
-
-// Warningln logs to the WARNING log. Arguments are handled in the manner of fmt.Println.
-func Warningln(args ...any) {
- internal.LoggerV2Impl.Warningln(args...)
-}
-
-// Error logs to the ERROR log.
-func Error(args ...any) {
- internal.LoggerV2Impl.Error(args...)
-}
-
-// Errorf logs to the ERROR log. Arguments are handled in the manner of fmt.Printf.
-func Errorf(format string, args ...any) {
- internal.LoggerV2Impl.Errorf(format, args...)
-}
-
-// Errorln logs to the ERROR log. Arguments are handled in the manner of fmt.Println.
-func Errorln(args ...any) {
- internal.LoggerV2Impl.Errorln(args...)
-}
-
-// Fatal logs to the FATAL log. Arguments are handled in the manner of fmt.Print.
-// It calls os.Exit() with exit code 1.
-func Fatal(args ...any) {
- internal.LoggerV2Impl.Fatal(args...)
- // Make sure fatal logs will exit.
- os.Exit(1)
-}
-
-// Fatalf logs to the FATAL log. Arguments are handled in the manner of fmt.Printf.
-// It calls os.Exit() with exit code 1.
-func Fatalf(format string, args ...any) {
- internal.LoggerV2Impl.Fatalf(format, args...)
- // Make sure fatal logs will exit.
- os.Exit(1)
-}
-
-// Fatalln logs to the FATAL log. Arguments are handled in the manner of fmt.Println.
-// It calls os.Exit() with exit code 1.
-func Fatalln(args ...any) {
- internal.LoggerV2Impl.Fatalln(args...)
- // Make sure fatal logs will exit.
- os.Exit(1)
-}
-
-// Print prints to the logger. Arguments are handled in the manner of fmt.Print.
-//
-// Deprecated: use Info.
-func Print(args ...any) {
- internal.LoggerV2Impl.Info(args...)
-}
-
-// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf.
-//
-// Deprecated: use Infof.
-func Printf(format string, args ...any) {
- internal.LoggerV2Impl.Infof(format, args...)
-}
-
-// Println prints to the logger. Arguments are handled in the manner of fmt.Println.
-//
-// Deprecated: use Infoln.
-func Println(args ...any) {
- internal.LoggerV2Impl.Infoln(args...)
-}
-
-// InfoDepth logs to the INFO log at the specified depth.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func InfoDepth(depth int, args ...any) {
- if internal.DepthLoggerV2Impl != nil {
- internal.DepthLoggerV2Impl.InfoDepth(depth, args...)
- } else {
- internal.LoggerV2Impl.Infoln(args...)
- }
-}
-
-// WarningDepth logs to the WARNING log at the specified depth.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WarningDepth(depth int, args ...any) {
- if internal.DepthLoggerV2Impl != nil {
- internal.DepthLoggerV2Impl.WarningDepth(depth, args...)
- } else {
- internal.LoggerV2Impl.Warningln(args...)
- }
-}
-
-// ErrorDepth logs to the ERROR log at the specified depth.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ErrorDepth(depth int, args ...any) {
- if internal.DepthLoggerV2Impl != nil {
- internal.DepthLoggerV2Impl.ErrorDepth(depth, args...)
- } else {
- internal.LoggerV2Impl.Errorln(args...)
- }
-}
-
-// FatalDepth logs to the FATAL log at the specified depth.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func FatalDepth(depth int, args ...any) {
- if internal.DepthLoggerV2Impl != nil {
- internal.DepthLoggerV2Impl.FatalDepth(depth, args...)
- } else {
- internal.LoggerV2Impl.Fatalln(args...)
- }
- os.Exit(1)
-}
diff --git a/vendor/google.golang.org/grpc/grpclog/internal/grpclog.go b/vendor/google.golang.org/grpc/grpclog/internal/grpclog.go
deleted file mode 100644
index 59c03bc14..000000000
--- a/vendor/google.golang.org/grpc/grpclog/internal/grpclog.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package internal contains functionality internal to the grpclog package.
-package internal
-
-// LoggerV2Impl is the logger used for the non-depth log functions.
-var LoggerV2Impl LoggerV2
-
-// DepthLoggerV2Impl is the logger used for the depth log functions.
-var DepthLoggerV2Impl DepthLoggerV2
diff --git a/vendor/google.golang.org/grpc/grpclog/internal/logger.go b/vendor/google.golang.org/grpc/grpclog/internal/logger.go
deleted file mode 100644
index e524fdd40..000000000
--- a/vendor/google.golang.org/grpc/grpclog/internal/logger.go
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package internal
-
-// Logger mimics golang's standard Logger as an interface.
-//
-// Deprecated: use LoggerV2.
-type Logger interface {
- Fatal(args ...any)
- Fatalf(format string, args ...any)
- Fatalln(args ...any)
- Print(args ...any)
- Printf(format string, args ...any)
- Println(args ...any)
-}
-
-// LoggerWrapper wraps Logger into a LoggerV2.
-type LoggerWrapper struct {
- Logger
-}
-
-// Info logs to INFO log. Arguments are handled in the manner of fmt.Print.
-func (l *LoggerWrapper) Info(args ...any) {
- l.Logger.Print(args...)
-}
-
-// Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println.
-func (l *LoggerWrapper) Infoln(args ...any) {
- l.Logger.Println(args...)
-}
-
-// Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf.
-func (l *LoggerWrapper) Infof(format string, args ...any) {
- l.Logger.Printf(format, args...)
-}
-
-// Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print.
-func (l *LoggerWrapper) Warning(args ...any) {
- l.Logger.Print(args...)
-}
-
-// Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println.
-func (l *LoggerWrapper) Warningln(args ...any) {
- l.Logger.Println(args...)
-}
-
-// Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf.
-func (l *LoggerWrapper) Warningf(format string, args ...any) {
- l.Logger.Printf(format, args...)
-}
-
-// Error logs to ERROR log. Arguments are handled in the manner of fmt.Print.
-func (l *LoggerWrapper) Error(args ...any) {
- l.Logger.Print(args...)
-}
-
-// Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println.
-func (l *LoggerWrapper) Errorln(args ...any) {
- l.Logger.Println(args...)
-}
-
-// Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf.
-func (l *LoggerWrapper) Errorf(format string, args ...any) {
- l.Logger.Printf(format, args...)
-}
-
-// V reports whether verbosity level l is at least the requested verbose level.
-func (*LoggerWrapper) V(int) bool {
- // Returns true for all verbose level.
- return true
-}
diff --git a/vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go b/vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go
deleted file mode 100644
index ed90060c3..000000000
--- a/vendor/google.golang.org/grpc/grpclog/internal/loggerv2.go
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package internal
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "log"
- "os"
-)
-
-// LoggerV2 does underlying logging work for grpclog.
-type LoggerV2 interface {
- // Info logs to INFO log. Arguments are handled in the manner of fmt.Print.
- Info(args ...any)
- // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println.
- Infoln(args ...any)
- // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf.
- Infof(format string, args ...any)
- // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print.
- Warning(args ...any)
- // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println.
- Warningln(args ...any)
- // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf.
- Warningf(format string, args ...any)
- // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print.
- Error(args ...any)
- // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println.
- Errorln(args ...any)
- // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf.
- Errorf(format string, args ...any)
- // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print.
- // gRPC ensures that all Fatal logs will exit with os.Exit(1).
- // Implementations may also call os.Exit() with a non-zero exit code.
- Fatal(args ...any)
- // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println.
- // gRPC ensures that all Fatal logs will exit with os.Exit(1).
- // Implementations may also call os.Exit() with a non-zero exit code.
- Fatalln(args ...any)
- // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf.
- // gRPC ensures that all Fatal logs will exit with os.Exit(1).
- // Implementations may also call os.Exit() with a non-zero exit code.
- Fatalf(format string, args ...any)
- // V reports whether verbosity level l is at least the requested verbose level.
- V(l int) bool
-}
-
-// DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements
-// DepthLoggerV2, the below functions will be called with the appropriate stack
-// depth set for trivial functions the logger may ignore.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type DepthLoggerV2 interface {
- LoggerV2
- // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println.
- InfoDepth(depth int, args ...any)
- // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println.
- WarningDepth(depth int, args ...any)
- // ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println.
- ErrorDepth(depth int, args ...any)
- // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println.
- FatalDepth(depth int, args ...any)
-}
-
-const (
- // infoLog indicates Info severity.
- infoLog int = iota
- // warningLog indicates Warning severity.
- warningLog
- // errorLog indicates Error severity.
- errorLog
- // fatalLog indicates Fatal severity.
- fatalLog
-)
-
-// severityName contains the string representation of each severity.
-var severityName = []string{
- infoLog: "INFO",
- warningLog: "WARNING",
- errorLog: "ERROR",
- fatalLog: "FATAL",
-}
-
-// sprintf is fmt.Sprintf.
-// These vars exist to make it possible to test that expensive format calls aren't made unnecessarily.
-var sprintf = fmt.Sprintf
-
-// sprint is fmt.Sprint.
-// These vars exist to make it possible to test that expensive format calls aren't made unnecessarily.
-var sprint = fmt.Sprint
-
-// sprintln is fmt.Sprintln.
-// These vars exist to make it possible to test that expensive format calls aren't made unnecessarily.
-var sprintln = fmt.Sprintln
-
-// exit is os.Exit.
-// This var exists to make it possible to test functions calling os.Exit.
-var exit = os.Exit
-
-// loggerT is the default logger used by grpclog.
-type loggerT struct {
- m []*log.Logger
- v int
- jsonFormat bool
-}
-
-func (g *loggerT) output(severity int, s string) {
- sevStr := severityName[severity]
- if !g.jsonFormat {
- g.m[severity].Output(2, sevStr+": "+s)
- return
- }
- // TODO: we can also include the logging component, but that needs more
- // (API) changes.
- b, _ := json.Marshal(map[string]string{
- "severity": sevStr,
- "message": s,
- })
- g.m[severity].Output(2, string(b))
-}
-
-func (g *loggerT) printf(severity int, format string, args ...any) {
- // Note the discard check is duplicated in each print func, rather than in
- // output, to avoid the expensive Sprint calls.
- // De-duplicating this by moving to output would be a significant performance regression!
- if lg := g.m[severity]; lg.Writer() == io.Discard {
- return
- }
- g.output(severity, sprintf(format, args...))
-}
-
-func (g *loggerT) print(severity int, v ...any) {
- if lg := g.m[severity]; lg.Writer() == io.Discard {
- return
- }
- g.output(severity, sprint(v...))
-}
-
-func (g *loggerT) println(severity int, v ...any) {
- if lg := g.m[severity]; lg.Writer() == io.Discard {
- return
- }
- g.output(severity, sprintln(v...))
-}
-
-func (g *loggerT) Info(args ...any) {
- g.print(infoLog, args...)
-}
-
-func (g *loggerT) Infoln(args ...any) {
- g.println(infoLog, args...)
-}
-
-func (g *loggerT) Infof(format string, args ...any) {
- g.printf(infoLog, format, args...)
-}
-
-func (g *loggerT) Warning(args ...any) {
- g.print(warningLog, args...)
-}
-
-func (g *loggerT) Warningln(args ...any) {
- g.println(warningLog, args...)
-}
-
-func (g *loggerT) Warningf(format string, args ...any) {
- g.printf(warningLog, format, args...)
-}
-
-func (g *loggerT) Error(args ...any) {
- g.print(errorLog, args...)
-}
-
-func (g *loggerT) Errorln(args ...any) {
- g.println(errorLog, args...)
-}
-
-func (g *loggerT) Errorf(format string, args ...any) {
- g.printf(errorLog, format, args...)
-}
-
-func (g *loggerT) Fatal(args ...any) {
- g.print(fatalLog, args...)
- exit(1)
-}
-
-func (g *loggerT) Fatalln(args ...any) {
- g.println(fatalLog, args...)
- exit(1)
-}
-
-func (g *loggerT) Fatalf(format string, args ...any) {
- g.printf(fatalLog, format, args...)
- exit(1)
-}
-
-func (g *loggerT) V(l int) bool {
- return l <= g.v
-}
-
-// LoggerV2Config configures the LoggerV2 implementation.
-type LoggerV2Config struct {
- // Verbosity sets the verbosity level of the logger.
- Verbosity int
- // FormatJSON controls whether the logger should output logs in JSON format.
- FormatJSON bool
-}
-
-// combineLoggers returns a combined logger for both higher & lower severity logs,
-// or only one if the other is io.Discard.
-//
-// This uses io.Discard instead of io.MultiWriter when all loggers
-// are set to io.Discard. Both this package and the standard log package have
-// significant optimizations for io.Discard, which io.MultiWriter lacks (as of
-// this writing).
-func combineLoggers(lower, higher io.Writer) io.Writer {
- if lower == io.Discard {
- return higher
- }
- if higher == io.Discard {
- return lower
- }
- return io.MultiWriter(lower, higher)
-}
-
-// NewLoggerV2 creates a new LoggerV2 instance with the provided configuration.
-// The infoW, warningW, and errorW writers are used to write log messages of
-// different severity levels.
-func NewLoggerV2(infoW, warningW, errorW io.Writer, c LoggerV2Config) LoggerV2 {
- flag := log.LstdFlags
- if c.FormatJSON {
- flag = 0
- }
-
- warningW = combineLoggers(infoW, warningW)
- errorW = combineLoggers(errorW, warningW)
-
- fatalW := errorW
-
- m := []*log.Logger{
- log.New(infoW, "", flag),
- log.New(warningW, "", flag),
- log.New(errorW, "", flag),
- log.New(fatalW, "", flag),
- }
- return &loggerT{m: m, v: c.Verbosity, jsonFormat: c.FormatJSON}
-}
diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go
deleted file mode 100644
index 4b2035857..000000000
--- a/vendor/google.golang.org/grpc/grpclog/logger.go
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpclog
-
-import "google.golang.org/grpc/grpclog/internal"
-
-// Logger mimics golang's standard Logger as an interface.
-//
-// Deprecated: use LoggerV2.
-type Logger internal.Logger
-
-// SetLogger sets the logger that is used in grpc. Call only from
-// init() functions.
-//
-// Deprecated: use SetLoggerV2.
-func SetLogger(l Logger) {
- internal.LoggerV2Impl = &internal.LoggerWrapper{Logger: l}
-}
diff --git a/vendor/google.golang.org/grpc/grpclog/loggerv2.go b/vendor/google.golang.org/grpc/grpclog/loggerv2.go
deleted file mode 100644
index 892dc13d1..000000000
--- a/vendor/google.golang.org/grpc/grpclog/loggerv2.go
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpclog
-
-import (
- "io"
- "os"
- "strconv"
- "strings"
-
- "google.golang.org/grpc/grpclog/internal"
-)
-
-// LoggerV2 does underlying logging work for grpclog.
-type LoggerV2 internal.LoggerV2
-
-// SetLoggerV2 sets logger that is used in grpc to a V2 logger.
-// Not mutex-protected, should be called before any gRPC functions.
-func SetLoggerV2(l LoggerV2) {
- if _, ok := l.(*componentData); ok {
- panic("cannot use component logger as grpclog logger")
- }
- internal.LoggerV2Impl = l
- internal.DepthLoggerV2Impl, _ = l.(internal.DepthLoggerV2)
-}
-
-// NewLoggerV2 creates a loggerV2 with the provided writers.
-// Fatal logs will be written to errorW, warningW, infoW, followed by exit(1).
-// Error logs will be written to errorW, warningW and infoW.
-// Warning logs will be written to warningW and infoW.
-// Info logs will be written to infoW.
-func NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 {
- return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{})
-}
-
-// NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and
-// verbosity level.
-func NewLoggerV2WithVerbosity(infoW, warningW, errorW io.Writer, v int) LoggerV2 {
- return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{Verbosity: v})
-}
-
-// newLoggerV2 creates a loggerV2 to be used as default logger.
-// All logs are written to stderr.
-func newLoggerV2() LoggerV2 {
- errorW := io.Discard
- warningW := io.Discard
- infoW := io.Discard
-
- logLevel := os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL")
- switch logLevel {
- case "", "ERROR", "error": // If env is unset, set level to ERROR.
- errorW = os.Stderr
- case "WARNING", "warning":
- warningW = os.Stderr
- case "INFO", "info":
- infoW = os.Stderr
- }
-
- var v int
- vLevel := os.Getenv("GRPC_GO_LOG_VERBOSITY_LEVEL")
- if vl, err := strconv.Atoi(vLevel); err == nil {
- v = vl
- }
-
- jsonFormat := strings.EqualFold(os.Getenv("GRPC_GO_LOG_FORMATTER"), "json")
-
- return internal.NewLoggerV2(infoW, warningW, errorW, internal.LoggerV2Config{
- Verbosity: v,
- FormatJSON: jsonFormat,
- })
-}
-
-// DepthLoggerV2 logs at a specified call frame. If a LoggerV2 also implements
-// DepthLoggerV2, the below functions will be called with the appropriate stack
-// depth set for trivial functions the logger may ignore.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type DepthLoggerV2 internal.DepthLoggerV2
diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
deleted file mode 100644
index 26e16d919..000000000
--- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2015 The gRPC Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// The canonical version of this proto can be found at
-// https://github.com/grpc/grpc-proto/blob/master/grpc/health/v1/health.proto
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.35.1
-// protoc v5.27.1
-// source: grpc/health/v1/health.proto
-
-package grpc_health_v1
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- reflect "reflect"
- sync "sync"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-type HealthCheckResponse_ServingStatus int32
-
-const (
- HealthCheckResponse_UNKNOWN HealthCheckResponse_ServingStatus = 0
- HealthCheckResponse_SERVING HealthCheckResponse_ServingStatus = 1
- HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2
- HealthCheckResponse_SERVICE_UNKNOWN HealthCheckResponse_ServingStatus = 3 // Used only by the Watch method.
-)
-
-// Enum value maps for HealthCheckResponse_ServingStatus.
-var (
- HealthCheckResponse_ServingStatus_name = map[int32]string{
- 0: "UNKNOWN",
- 1: "SERVING",
- 2: "NOT_SERVING",
- 3: "SERVICE_UNKNOWN",
- }
- HealthCheckResponse_ServingStatus_value = map[string]int32{
- "UNKNOWN": 0,
- "SERVING": 1,
- "NOT_SERVING": 2,
- "SERVICE_UNKNOWN": 3,
- }
-)
-
-func (x HealthCheckResponse_ServingStatus) Enum() *HealthCheckResponse_ServingStatus {
- p := new(HealthCheckResponse_ServingStatus)
- *p = x
- return p
-}
-
-func (x HealthCheckResponse_ServingStatus) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (HealthCheckResponse_ServingStatus) Descriptor() protoreflect.EnumDescriptor {
- return file_grpc_health_v1_health_proto_enumTypes[0].Descriptor()
-}
-
-func (HealthCheckResponse_ServingStatus) Type() protoreflect.EnumType {
- return &file_grpc_health_v1_health_proto_enumTypes[0]
-}
-
-func (x HealthCheckResponse_ServingStatus) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead.
-func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) {
- return file_grpc_health_v1_health_proto_rawDescGZIP(), []int{1, 0}
-}
-
-type HealthCheckRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
-}
-
-func (x *HealthCheckRequest) Reset() {
- *x = HealthCheckRequest{}
- mi := &file_grpc_health_v1_health_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *HealthCheckRequest) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*HealthCheckRequest) ProtoMessage() {}
-
-func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_health_v1_health_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead.
-func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
- return file_grpc_health_v1_health_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *HealthCheckRequest) GetService() string {
- if x != nil {
- return x.Service
- }
- return ""
-}
-
-type HealthCheckResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
-}
-
-func (x *HealthCheckResponse) Reset() {
- *x = HealthCheckResponse{}
- mi := &file_grpc_health_v1_health_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *HealthCheckResponse) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*HealthCheckResponse) ProtoMessage() {}
-
-func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message {
- mi := &file_grpc_health_v1_health_proto_msgTypes[1]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead.
-func (*HealthCheckResponse) Descriptor() ([]byte, []int) {
- return file_grpc_health_v1_health_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus {
- if x != nil {
- return x.Status
- }
- return HealthCheckResponse_UNKNOWN
-}
-
-var File_grpc_health_v1_health_proto protoreflect.FileDescriptor
-
-var file_grpc_health_v1_health_proto_rawDesc = []byte{
- 0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x31,
- 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67,
- 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a,
- 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0xb1, 0x01,
- 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61,
- 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65,
- 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69,
- 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x22, 0x4f, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75,
- 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b,
- 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e,
- 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f,
- 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
- 0x03, 0x32, 0xae, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x05,
- 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61,
- 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65,
- 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63,
- 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74,
- 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52,
- 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68,
- 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43,
- 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72,
- 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61,
- 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x30, 0x01, 0x42, 0x61, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65,
- 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50,
- 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
- 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68,
- 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74,
- 0x68, 0x5f, 0x76, 0x31, 0xaa, 0x02, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c,
- 0x74, 0x68, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_grpc_health_v1_health_proto_rawDescOnce sync.Once
- file_grpc_health_v1_health_proto_rawDescData = file_grpc_health_v1_health_proto_rawDesc
-)
-
-func file_grpc_health_v1_health_proto_rawDescGZIP() []byte {
- file_grpc_health_v1_health_proto_rawDescOnce.Do(func() {
- file_grpc_health_v1_health_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_health_v1_health_proto_rawDescData)
- })
- return file_grpc_health_v1_health_proto_rawDescData
-}
-
-var file_grpc_health_v1_health_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_grpc_health_v1_health_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_grpc_health_v1_health_proto_goTypes = []any{
- (HealthCheckResponse_ServingStatus)(0), // 0: grpc.health.v1.HealthCheckResponse.ServingStatus
- (*HealthCheckRequest)(nil), // 1: grpc.health.v1.HealthCheckRequest
- (*HealthCheckResponse)(nil), // 2: grpc.health.v1.HealthCheckResponse
-}
-var file_grpc_health_v1_health_proto_depIdxs = []int32{
- 0, // 0: grpc.health.v1.HealthCheckResponse.status:type_name -> grpc.health.v1.HealthCheckResponse.ServingStatus
- 1, // 1: grpc.health.v1.Health.Check:input_type -> grpc.health.v1.HealthCheckRequest
- 1, // 2: grpc.health.v1.Health.Watch:input_type -> grpc.health.v1.HealthCheckRequest
- 2, // 3: grpc.health.v1.Health.Check:output_type -> grpc.health.v1.HealthCheckResponse
- 2, // 4: grpc.health.v1.Health.Watch:output_type -> grpc.health.v1.HealthCheckResponse
- 3, // [3:5] is the sub-list for method output_type
- 1, // [1:3] is the sub-list for method input_type
- 1, // [1:1] is the sub-list for extension type_name
- 1, // [1:1] is the sub-list for extension extendee
- 0, // [0:1] is the sub-list for field type_name
-}
-
-func init() { file_grpc_health_v1_health_proto_init() }
-func file_grpc_health_v1_health_proto_init() {
- if File_grpc_health_v1_health_proto != nil {
- return
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_grpc_health_v1_health_proto_rawDesc,
- NumEnums: 1,
- NumMessages: 2,
- NumExtensions: 0,
- NumServices: 1,
- },
- GoTypes: file_grpc_health_v1_health_proto_goTypes,
- DependencyIndexes: file_grpc_health_v1_health_proto_depIdxs,
- EnumInfos: file_grpc_health_v1_health_proto_enumTypes,
- MessageInfos: file_grpc_health_v1_health_proto_msgTypes,
- }.Build()
- File_grpc_health_v1_health_proto = out.File
- file_grpc_health_v1_health_proto_rawDesc = nil
- file_grpc_health_v1_health_proto_goTypes = nil
- file_grpc_health_v1_health_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go
deleted file mode 100644
index f96b8ab49..000000000
--- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2015 The gRPC Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// The canonical version of this proto can be found at
-// https://github.com/grpc/grpc-proto/blob/master/grpc/health/v1/health.proto
-
-// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-// versions:
-// - protoc-gen-go-grpc v1.5.1
-// - protoc v5.27.1
-// source: grpc/health/v1/health.proto
-
-package grpc_health_v1
-
-import (
- context "context"
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
-)
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-// Requires gRPC-Go v1.64.0 or later.
-const _ = grpc.SupportPackageIsVersion9
-
-const (
- Health_Check_FullMethodName = "/grpc.health.v1.Health/Check"
- Health_Watch_FullMethodName = "/grpc.health.v1.Health/Watch"
-)
-
-// HealthClient is the client API for Health service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
-//
-// Health is gRPC's mechanism for checking whether a server is able to handle
-// RPCs. Its semantics are documented in
-// https://github.com/grpc/grpc/blob/master/doc/health-checking.md.
-type HealthClient interface {
- // Check gets the health of the specified service. If the requested service
- // is unknown, the call will fail with status NOT_FOUND. If the caller does
- // not specify a service name, the server should respond with its overall
- // health status.
- //
- // Clients should set a deadline when calling Check, and can declare the
- // server unhealthy if they do not receive a timely response.
- //
- // Check implementations should be idempotent and side effect free.
- Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error)
- // Performs a watch for the serving status of the requested service.
- // The server will immediately send back a message indicating the current
- // serving status. It will then subsequently send a new message whenever
- // the service's serving status changes.
- //
- // If the requested service is unknown when the call is received, the
- // server will send a message setting the serving status to
- // SERVICE_UNKNOWN but will *not* terminate the call. If at some
- // future point, the serving status of the service becomes known, the
- // server will send a new message with the service's serving status.
- //
- // If the call terminates with status UNIMPLEMENTED, then clients
- // should assume this method is not supported and should not retry the
- // call. If the call terminates with any other status (including OK),
- // clients should retry the call with appropriate exponential backoff.
- Watch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[HealthCheckResponse], error)
-}
-
-type healthClient struct {
- cc grpc.ClientConnInterface
-}
-
-func NewHealthClient(cc grpc.ClientConnInterface) HealthClient {
- return &healthClient{cc}
-}
-
-func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) {
- cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
- out := new(HealthCheckResponse)
- err := c.cc.Invoke(ctx, Health_Check_FullMethodName, in, out, cOpts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-func (c *healthClient) Watch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[HealthCheckResponse], error) {
- cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
- stream, err := c.cc.NewStream(ctx, &Health_ServiceDesc.Streams[0], Health_Watch_FullMethodName, cOpts...)
- if err != nil {
- return nil, err
- }
- x := &grpc.GenericClientStream[HealthCheckRequest, HealthCheckResponse]{ClientStream: stream}
- if err := x.ClientStream.SendMsg(in); err != nil {
- return nil, err
- }
- if err := x.ClientStream.CloseSend(); err != nil {
- return nil, err
- }
- return x, nil
-}
-
-// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
-type Health_WatchClient = grpc.ServerStreamingClient[HealthCheckResponse]
-
-// HealthServer is the server API for Health service.
-// All implementations should embed UnimplementedHealthServer
-// for forward compatibility.
-//
-// Health is gRPC's mechanism for checking whether a server is able to handle
-// RPCs. Its semantics are documented in
-// https://github.com/grpc/grpc/blob/master/doc/health-checking.md.
-type HealthServer interface {
- // Check gets the health of the specified service. If the requested service
- // is unknown, the call will fail with status NOT_FOUND. If the caller does
- // not specify a service name, the server should respond with its overall
- // health status.
- //
- // Clients should set a deadline when calling Check, and can declare the
- // server unhealthy if they do not receive a timely response.
- //
- // Check implementations should be idempotent and side effect free.
- Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error)
- // Performs a watch for the serving status of the requested service.
- // The server will immediately send back a message indicating the current
- // serving status. It will then subsequently send a new message whenever
- // the service's serving status changes.
- //
- // If the requested service is unknown when the call is received, the
- // server will send a message setting the serving status to
- // SERVICE_UNKNOWN but will *not* terminate the call. If at some
- // future point, the serving status of the service becomes known, the
- // server will send a new message with the service's serving status.
- //
- // If the call terminates with status UNIMPLEMENTED, then clients
- // should assume this method is not supported and should not retry the
- // call. If the call terminates with any other status (including OK),
- // clients should retry the call with appropriate exponential backoff.
- Watch(*HealthCheckRequest, grpc.ServerStreamingServer[HealthCheckResponse]) error
-}
-
-// UnimplementedHealthServer should be embedded to have
-// forward compatible implementations.
-//
-// NOTE: this should be embedded by value instead of pointer to avoid a nil
-// pointer dereference when methods are called.
-type UnimplementedHealthServer struct{}
-
-func (UnimplementedHealthServer) Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
-}
-func (UnimplementedHealthServer) Watch(*HealthCheckRequest, grpc.ServerStreamingServer[HealthCheckResponse]) error {
- return status.Errorf(codes.Unimplemented, "method Watch not implemented")
-}
-func (UnimplementedHealthServer) testEmbeddedByValue() {}
-
-// UnsafeHealthServer may be embedded to opt out of forward compatibility for this service.
-// Use of this interface is not recommended, as added methods to HealthServer will
-// result in compilation errors.
-type UnsafeHealthServer interface {
- mustEmbedUnimplementedHealthServer()
-}
-
-func RegisterHealthServer(s grpc.ServiceRegistrar, srv HealthServer) {
- // If the following call panics, it indicates UnimplementedHealthServer was
- // embedded by pointer and is nil. This will cause panics if an
- // unimplemented method is ever invoked, so we test this at initialization
- // time to prevent it from happening at runtime later due to I/O.
- if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
- t.testEmbeddedByValue()
- }
- s.RegisterService(&Health_ServiceDesc, srv)
-}
-
-func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(HealthCheckRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(HealthServer).Check(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: Health_Check_FullMethodName,
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func _Health_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {
- m := new(HealthCheckRequest)
- if err := stream.RecvMsg(m); err != nil {
- return err
- }
- return srv.(HealthServer).Watch(m, &grpc.GenericServerStream[HealthCheckRequest, HealthCheckResponse]{ServerStream: stream})
-}
-
-// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
-type Health_WatchServer = grpc.ServerStreamingServer[HealthCheckResponse]
-
-// Health_ServiceDesc is the grpc.ServiceDesc for Health service.
-// It's only intended for direct use with grpc.RegisterService,
-// and not to be introspected or modified (even as a copy)
-var Health_ServiceDesc = grpc.ServiceDesc{
- ServiceName: "grpc.health.v1.Health",
- HandlerType: (*HealthServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Check",
- Handler: _Health_Check_Handler,
- },
- },
- Streams: []grpc.StreamDesc{
- {
- StreamName: "Watch",
- Handler: _Health_Watch_Handler,
- ServerStreams: true,
- },
- },
- Metadata: "grpc/health/v1/health.proto",
-}
diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go
deleted file mode 100644
index 877d78fc3..000000000
--- a/vendor/google.golang.org/grpc/interceptor.go
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- *
- * Copyright 2016 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
-)
-
-// UnaryInvoker is called by UnaryClientInterceptor to complete RPCs.
-type UnaryInvoker func(ctx context.Context, method string, req, reply any, cc *ClientConn, opts ...CallOption) error
-
-// UnaryClientInterceptor intercepts the execution of a unary RPC on the client.
-// Unary interceptors can be specified as a DialOption, using
-// WithUnaryInterceptor() or WithChainUnaryInterceptor(), when creating a
-// ClientConn. When a unary interceptor(s) is set on a ClientConn, gRPC
-// delegates all unary RPC invocations to the interceptor, and it is the
-// responsibility of the interceptor to call invoker to complete the processing
-// of the RPC.
-//
-// method is the RPC name. req and reply are the corresponding request and
-// response messages. cc is the ClientConn on which the RPC was invoked. invoker
-// is the handler to complete the RPC and it is the responsibility of the
-// interceptor to call it. opts contain all applicable call options, including
-// defaults from the ClientConn as well as per-call options.
-//
-// The returned error must be compatible with the status package.
-type UnaryClientInterceptor func(ctx context.Context, method string, req, reply any, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error
-
-// Streamer is called by StreamClientInterceptor to create a ClientStream.
-type Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error)
-
-// StreamClientInterceptor intercepts the creation of a ClientStream. Stream
-// interceptors can be specified as a DialOption, using WithStreamInterceptor()
-// or WithChainStreamInterceptor(), when creating a ClientConn. When a stream
-// interceptor(s) is set on the ClientConn, gRPC delegates all stream creations
-// to the interceptor, and it is the responsibility of the interceptor to call
-// streamer.
-//
-// desc contains a description of the stream. cc is the ClientConn on which the
-// RPC was invoked. streamer is the handler to create a ClientStream and it is
-// the responsibility of the interceptor to call it. opts contain all applicable
-// call options, including defaults from the ClientConn as well as per-call
-// options.
-//
-// StreamClientInterceptor may return a custom ClientStream to intercept all I/O
-// operations. The returned error must be compatible with the status package.
-type StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error)
-
-// UnaryServerInfo consists of various information about a unary RPC on
-// server side. All per-rpc information may be mutated by the interceptor.
-type UnaryServerInfo struct {
- // Server is the service implementation the user provides. This is read-only.
- Server any
- // FullMethod is the full RPC method string, i.e., /package.service/method.
- FullMethod string
-}
-
-// UnaryHandler defines the handler invoked by UnaryServerInterceptor to complete the normal
-// execution of a unary RPC.
-//
-// If a UnaryHandler returns an error, it should either be produced by the
-// status package, or be one of the context errors. Otherwise, gRPC will use
-// codes.Unknown as the status code and err.Error() as the status message of the
-// RPC.
-type UnaryHandler func(ctx context.Context, req any) (any, error)
-
-// UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info
-// contains all the information of this RPC the interceptor can operate on. And handler is the wrapper
-// of the service method implementation. It is the responsibility of the interceptor to invoke handler
-// to complete the RPC.
-type UnaryServerInterceptor func(ctx context.Context, req any, info *UnaryServerInfo, handler UnaryHandler) (resp any, err error)
-
-// StreamServerInfo consists of various information about a streaming RPC on
-// server side. All per-rpc information may be mutated by the interceptor.
-type StreamServerInfo struct {
- // FullMethod is the full RPC method string, i.e., /package.service/method.
- FullMethod string
- // IsClientStream indicates whether the RPC is a client streaming RPC.
- IsClientStream bool
- // IsServerStream indicates whether the RPC is a server streaming RPC.
- IsServerStream bool
-}
-
-// StreamServerInterceptor provides a hook to intercept the execution of a streaming RPC on the server.
-// info contains all the information of this RPC the interceptor can operate on. And handler is the
-// service method implementation. It is the responsibility of the interceptor to invoke handler to
-// complete the RPC.
-type StreamServerInterceptor func(srv any, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error
diff --git a/vendor/google.golang.org/grpc/internal/backoff/backoff.go b/vendor/google.golang.org/grpc/internal/backoff/backoff.go
deleted file mode 100644
index b6ae7f258..000000000
--- a/vendor/google.golang.org/grpc/internal/backoff/backoff.go
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package backoff implement the backoff strategy for gRPC.
-//
-// This is kept in internal until the gRPC project decides whether or not to
-// allow alternative backoff strategies.
-package backoff
-
-import (
- "context"
- "errors"
- rand "math/rand/v2"
- "time"
-
- grpcbackoff "google.golang.org/grpc/backoff"
-)
-
-// Strategy defines the methodology for backing off after a grpc connection
-// failure.
-type Strategy interface {
- // Backoff returns the amount of time to wait before the next retry given
- // the number of consecutive failures.
- Backoff(retries int) time.Duration
-}
-
-// DefaultExponential is an exponential backoff implementation using the
-// default values for all the configurable knobs defined in
-// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
-var DefaultExponential = Exponential{Config: grpcbackoff.DefaultConfig}
-
-// Exponential implements exponential backoff algorithm as defined in
-// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
-type Exponential struct {
- // Config contains all options to configure the backoff algorithm.
- Config grpcbackoff.Config
-}
-
-// Backoff returns the amount of time to wait before the next retry given the
-// number of retries.
-func (bc Exponential) Backoff(retries int) time.Duration {
- if retries == 0 {
- return bc.Config.BaseDelay
- }
- backoff, max := float64(bc.Config.BaseDelay), float64(bc.Config.MaxDelay)
- for backoff < max && retries > 0 {
- backoff *= bc.Config.Multiplier
- retries--
- }
- if backoff > max {
- backoff = max
- }
- // Randomize backoff delays so that if a cluster of requests start at
- // the same time, they won't operate in lockstep.
- backoff *= 1 + bc.Config.Jitter*(rand.Float64()*2-1)
- if backoff < 0 {
- return 0
- }
- return time.Duration(backoff)
-}
-
-// ErrResetBackoff is the error to be returned by the function executed by RunF,
-// to instruct the latter to reset its backoff state.
-var ErrResetBackoff = errors.New("reset backoff state")
-
-// RunF provides a convenient way to run a function f repeatedly until the
-// context expires or f returns a non-nil error that is not ErrResetBackoff.
-// When f returns ErrResetBackoff, RunF continues to run f, but resets its
-// backoff state before doing so. backoff accepts an integer representing the
-// number of retries, and returns the amount of time to backoff.
-func RunF(ctx context.Context, f func() error, backoff func(int) time.Duration) {
- attempt := 0
- timer := time.NewTimer(0)
- for ctx.Err() == nil {
- select {
- case <-timer.C:
- case <-ctx.Done():
- timer.Stop()
- return
- }
-
- err := f()
- if errors.Is(err, ErrResetBackoff) {
- timer.Reset(0)
- attempt = 0
- continue
- }
- if err != nil {
- return
- }
- timer.Reset(backoff(attempt))
- attempt++
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/config.go b/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/config.go
deleted file mode 100644
index 85540f86a..000000000
--- a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/config.go
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package gracefulswitch
-
-import (
- "encoding/json"
- "fmt"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/serviceconfig"
-)
-
-type lbConfig struct {
- serviceconfig.LoadBalancingConfig
-
- childBuilder balancer.Builder
- childConfig serviceconfig.LoadBalancingConfig
-}
-
-// ChildName returns the name of the child balancer of the gracefulswitch
-// Balancer.
-func ChildName(l serviceconfig.LoadBalancingConfig) string {
- return l.(*lbConfig).childBuilder.Name()
-}
-
-// ParseConfig parses a child config list and returns a LB config for the
-// gracefulswitch Balancer.
-//
-// cfg is expected to be a json.RawMessage containing a JSON array of LB policy
-// names + configs as the format of the "loadBalancingConfig" field in
-// ServiceConfig. It returns a type that should be passed to
-// UpdateClientConnState in the BalancerConfig field.
-func ParseConfig(cfg json.RawMessage) (serviceconfig.LoadBalancingConfig, error) {
- var lbCfg []map[string]json.RawMessage
- if err := json.Unmarshal(cfg, &lbCfg); err != nil {
- return nil, err
- }
- for i, e := range lbCfg {
- if len(e) != 1 {
- return nil, fmt.Errorf("expected a JSON struct with one entry; received entry %v at index %d", e, i)
- }
-
- var name string
- var jsonCfg json.RawMessage
- for name, jsonCfg = range e {
- }
-
- builder := balancer.Get(name)
- if builder == nil {
- // Skip unregistered balancer names.
- continue
- }
-
- parser, ok := builder.(balancer.ConfigParser)
- if !ok {
- // This is a valid child with no config.
- return &lbConfig{childBuilder: builder}, nil
- }
-
- cfg, err := parser.ParseConfig(jsonCfg)
- if err != nil {
- return nil, fmt.Errorf("error parsing config for policy %q: %v", name, err)
- }
- return &lbConfig{childBuilder: builder, childConfig: cfg}, nil
- }
-
- return nil, fmt.Errorf("no supported policies found in config: %v", string(cfg))
-}
diff --git a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go b/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
deleted file mode 100644
index 73bb4c4ee..000000000
--- a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package gracefulswitch implements a graceful switch load balancer.
-package gracefulswitch
-
-import (
- "errors"
- "fmt"
- "sync"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/balancer/base"
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/resolver"
-)
-
-var errBalancerClosed = errors.New("gracefulSwitchBalancer is closed")
-var _ balancer.Balancer = (*Balancer)(nil)
-
-// NewBalancer returns a graceful switch Balancer.
-func NewBalancer(cc balancer.ClientConn, opts balancer.BuildOptions) *Balancer {
- return &Balancer{
- cc: cc,
- bOpts: opts,
- }
-}
-
-// Balancer is a utility to gracefully switch from one balancer to
-// a new balancer. It implements the balancer.Balancer interface.
-type Balancer struct {
- bOpts balancer.BuildOptions
- cc balancer.ClientConn
-
- // mu protects the following fields and all fields within balancerCurrent
- // and balancerPending. mu does not need to be held when calling into the
- // child balancers, as all calls into these children happen only as a direct
- // result of a call into the gracefulSwitchBalancer, which are also
- // guaranteed to be synchronous. There is one exception: an UpdateState call
- // from a child balancer when current and pending are populated can lead to
- // calling Close() on the current. To prevent that racing with an
- // UpdateSubConnState from the channel, we hold currentMu during Close and
- // UpdateSubConnState calls.
- mu sync.Mutex
- balancerCurrent *balancerWrapper
- balancerPending *balancerWrapper
- closed bool // set to true when this balancer is closed
-
- // currentMu must be locked before mu. This mutex guards against this
- // sequence of events: UpdateSubConnState() called, finds the
- // balancerCurrent, gives up lock, updateState comes in, causes Close() on
- // balancerCurrent before the UpdateSubConnState is called on the
- // balancerCurrent.
- currentMu sync.Mutex
-}
-
-// swap swaps out the current lb with the pending lb and updates the ClientConn.
-// The caller must hold gsb.mu.
-func (gsb *Balancer) swap() {
- gsb.cc.UpdateState(gsb.balancerPending.lastState)
- cur := gsb.balancerCurrent
- gsb.balancerCurrent = gsb.balancerPending
- gsb.balancerPending = nil
- go func() {
- gsb.currentMu.Lock()
- defer gsb.currentMu.Unlock()
- cur.Close()
- }()
-}
-
-// Helper function that checks if the balancer passed in is current or pending.
-// The caller must hold gsb.mu.
-func (gsb *Balancer) balancerCurrentOrPending(bw *balancerWrapper) bool {
- return bw == gsb.balancerCurrent || bw == gsb.balancerPending
-}
-
-// SwitchTo initializes the graceful switch process, which completes based on
-// connectivity state changes on the current/pending balancer. Thus, the switch
-// process is not complete when this method returns. This method must be called
-// synchronously alongside the rest of the balancer.Balancer methods this
-// Graceful Switch Balancer implements.
-//
-// Deprecated: use ParseConfig and pass a parsed config to UpdateClientConnState
-// to cause the Balancer to automatically change to the new child when necessary.
-func (gsb *Balancer) SwitchTo(builder balancer.Builder) error {
- _, err := gsb.switchTo(builder)
- return err
-}
-
-func (gsb *Balancer) switchTo(builder balancer.Builder) (*balancerWrapper, error) {
- gsb.mu.Lock()
- if gsb.closed {
- gsb.mu.Unlock()
- return nil, errBalancerClosed
- }
- bw := &balancerWrapper{
- builder: builder,
- gsb: gsb,
- lastState: balancer.State{
- ConnectivityState: connectivity.Connecting,
- Picker: base.NewErrPicker(balancer.ErrNoSubConnAvailable),
- },
- subconns: make(map[balancer.SubConn]bool),
- }
- balToClose := gsb.balancerPending // nil if there is no pending balancer
- if gsb.balancerCurrent == nil {
- gsb.balancerCurrent = bw
- } else {
- gsb.balancerPending = bw
- }
- gsb.mu.Unlock()
- balToClose.Close()
- // This function takes a builder instead of a balancer because builder.Build
- // can call back inline, and this utility needs to handle the callbacks.
- newBalancer := builder.Build(bw, gsb.bOpts)
- if newBalancer == nil {
- // This is illegal and should never happen; we clear the balancerWrapper
- // we were constructing if it happens to avoid a potential panic.
- gsb.mu.Lock()
- if gsb.balancerPending != nil {
- gsb.balancerPending = nil
- } else {
- gsb.balancerCurrent = nil
- }
- gsb.mu.Unlock()
- return nil, balancer.ErrBadResolverState
- }
-
- // This write doesn't need to take gsb.mu because this field never gets read
- // or written to on any calls from the current or pending. Calls from grpc
- // to this balancer are guaranteed to be called synchronously, so this
- // bw.Balancer field will never be forwarded to until this SwitchTo()
- // function returns.
- bw.Balancer = newBalancer
- return bw, nil
-}
-
-// Returns nil if the graceful switch balancer is closed.
-func (gsb *Balancer) latestBalancer() *balancerWrapper {
- gsb.mu.Lock()
- defer gsb.mu.Unlock()
- if gsb.balancerPending != nil {
- return gsb.balancerPending
- }
- return gsb.balancerCurrent
-}
-
-// UpdateClientConnState forwards the update to the latest balancer created.
-//
-// If the state's BalancerConfig is the config returned by a call to
-// gracefulswitch.ParseConfig, then this function will automatically SwitchTo
-// the balancer indicated by the config before forwarding its config to it, if
-// necessary.
-func (gsb *Balancer) UpdateClientConnState(state balancer.ClientConnState) error {
- // The resolver data is only relevant to the most recent LB Policy.
- balToUpdate := gsb.latestBalancer()
- gsbCfg, ok := state.BalancerConfig.(*lbConfig)
- if ok {
- // Switch to the child in the config unless it is already active.
- if balToUpdate == nil || gsbCfg.childBuilder.Name() != balToUpdate.builder.Name() {
- var err error
- balToUpdate, err = gsb.switchTo(gsbCfg.childBuilder)
- if err != nil {
- return fmt.Errorf("could not switch to new child balancer: %w", err)
- }
- }
- // Unwrap the child balancer's config.
- state.BalancerConfig = gsbCfg.childConfig
- }
-
- if balToUpdate == nil {
- return errBalancerClosed
- }
-
- // Perform this call without gsb.mu to prevent deadlocks if the child calls
- // back into the channel. The latest balancer can never be closed during a
- // call from the channel, even without gsb.mu held.
- return balToUpdate.UpdateClientConnState(state)
-}
-
-// ResolverError forwards the error to the latest balancer created.
-func (gsb *Balancer) ResolverError(err error) {
- // The resolver data is only relevant to the most recent LB Policy.
- balToUpdate := gsb.latestBalancer()
- if balToUpdate == nil {
- gsb.cc.UpdateState(balancer.State{
- ConnectivityState: connectivity.TransientFailure,
- Picker: base.NewErrPicker(err),
- })
- return
- }
- // Perform this call without gsb.mu to prevent deadlocks if the child calls
- // back into the channel. The latest balancer can never be closed during a
- // call from the channel, even without gsb.mu held.
- balToUpdate.ResolverError(err)
-}
-
-// ExitIdle forwards the call to the latest balancer created.
-//
-// If the latest balancer does not support ExitIdle, the subConns are
-// re-connected to manually.
-func (gsb *Balancer) ExitIdle() {
- balToUpdate := gsb.latestBalancer()
- if balToUpdate == nil {
- return
- }
- // There is no need to protect this read with a mutex, as the write to the
- // Balancer field happens in SwitchTo, which completes before this can be
- // called.
- if ei, ok := balToUpdate.Balancer.(balancer.ExitIdler); ok {
- ei.ExitIdle()
- return
- }
- gsb.mu.Lock()
- defer gsb.mu.Unlock()
- for sc := range balToUpdate.subconns {
- sc.Connect()
- }
-}
-
-// updateSubConnState forwards the update to the appropriate child.
-func (gsb *Balancer) updateSubConnState(sc balancer.SubConn, state balancer.SubConnState, cb func(balancer.SubConnState)) {
- gsb.currentMu.Lock()
- defer gsb.currentMu.Unlock()
- gsb.mu.Lock()
- // Forward update to the appropriate child. Even if there is a pending
- // balancer, the current balancer should continue to get SubConn updates to
- // maintain the proper state while the pending is still connecting.
- var balToUpdate *balancerWrapper
- if gsb.balancerCurrent != nil && gsb.balancerCurrent.subconns[sc] {
- balToUpdate = gsb.balancerCurrent
- } else if gsb.balancerPending != nil && gsb.balancerPending.subconns[sc] {
- balToUpdate = gsb.balancerPending
- }
- if balToUpdate == nil {
- // SubConn belonged to a stale lb policy that has not yet fully closed,
- // or the balancer was already closed.
- gsb.mu.Unlock()
- return
- }
- if state.ConnectivityState == connectivity.Shutdown {
- delete(balToUpdate.subconns, sc)
- }
- gsb.mu.Unlock()
- if cb != nil {
- cb(state)
- } else {
- balToUpdate.UpdateSubConnState(sc, state)
- }
-}
-
-// UpdateSubConnState forwards the update to the appropriate child.
-func (gsb *Balancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
- gsb.updateSubConnState(sc, state, nil)
-}
-
-// Close closes any active child balancers.
-func (gsb *Balancer) Close() {
- gsb.mu.Lock()
- gsb.closed = true
- currentBalancerToClose := gsb.balancerCurrent
- gsb.balancerCurrent = nil
- pendingBalancerToClose := gsb.balancerPending
- gsb.balancerPending = nil
- gsb.mu.Unlock()
-
- currentBalancerToClose.Close()
- pendingBalancerToClose.Close()
-}
-
-// balancerWrapper wraps a balancer.Balancer, and overrides some Balancer
-// methods to help cleanup SubConns created by the wrapped balancer.
-//
-// It implements the balancer.ClientConn interface and is passed down in that
-// capacity to the wrapped balancer. It maintains a set of subConns created by
-// the wrapped balancer and calls from the latter to create/update/shutdown
-// SubConns update this set before being forwarded to the parent ClientConn.
-// State updates from the wrapped balancer can result in invocation of the
-// graceful switch logic.
-type balancerWrapper struct {
- balancer.Balancer
- gsb *Balancer
- builder balancer.Builder
-
- lastState balancer.State
- subconns map[balancer.SubConn]bool // subconns created by this balancer
-}
-
-// Close closes the underlying LB policy and shuts down the subconns it
-// created. bw must not be referenced via balancerCurrent or balancerPending in
-// gsb when called. gsb.mu must not be held. Does not panic with a nil
-// receiver.
-func (bw *balancerWrapper) Close() {
- // before Close is called.
- if bw == nil {
- return
- }
- // There is no need to protect this read with a mutex, as Close() is
- // impossible to be called concurrently with the write in SwitchTo(). The
- // callsites of Close() for this balancer in Graceful Switch Balancer will
- // never be called until SwitchTo() returns.
- bw.Balancer.Close()
- bw.gsb.mu.Lock()
- for sc := range bw.subconns {
- sc.Shutdown()
- }
- bw.gsb.mu.Unlock()
-}
-
-func (bw *balancerWrapper) UpdateState(state balancer.State) {
- // Hold the mutex for this entire call to ensure it cannot occur
- // concurrently with other updateState() calls. This causes updates to
- // lastState and calls to cc.UpdateState to happen atomically.
- bw.gsb.mu.Lock()
- defer bw.gsb.mu.Unlock()
- bw.lastState = state
-
- if !bw.gsb.balancerCurrentOrPending(bw) {
- return
- }
-
- if bw == bw.gsb.balancerCurrent {
- // In the case that the current balancer exits READY, and there is a pending
- // balancer, you can forward the pending balancer's cached State up to
- // ClientConn and swap the pending into the current. This is because there
- // is no reason to gracefully switch from and keep using the old policy as
- // the ClientConn is not connected to any backends.
- if state.ConnectivityState != connectivity.Ready && bw.gsb.balancerPending != nil {
- bw.gsb.swap()
- return
- }
- // Even if there is a pending balancer waiting to be gracefully switched to,
- // continue to forward current balancer updates to the Client Conn. Ignoring
- // state + picker from the current would cause undefined behavior/cause the
- // system to behave incorrectly from the current LB policies perspective.
- // Also, the current LB is still being used by grpc to choose SubConns per
- // RPC, and thus should use the most updated form of the current balancer.
- bw.gsb.cc.UpdateState(state)
- return
- }
- // This method is now dealing with a state update from the pending balancer.
- // If the current balancer is currently in a state other than READY, the new
- // policy can be swapped into place immediately. This is because there is no
- // reason to gracefully switch from and keep using the old policy as the
- // ClientConn is not connected to any backends.
- if state.ConnectivityState != connectivity.Connecting || bw.gsb.balancerCurrent.lastState.ConnectivityState != connectivity.Ready {
- bw.gsb.swap()
- }
-}
-
-func (bw *balancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {
- bw.gsb.mu.Lock()
- if !bw.gsb.balancerCurrentOrPending(bw) {
- bw.gsb.mu.Unlock()
- return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw)
- }
- bw.gsb.mu.Unlock()
-
- var sc balancer.SubConn
- oldListener := opts.StateListener
- opts.StateListener = func(state balancer.SubConnState) { bw.gsb.updateSubConnState(sc, state, oldListener) }
- sc, err := bw.gsb.cc.NewSubConn(addrs, opts)
- if err != nil {
- return nil, err
- }
- bw.gsb.mu.Lock()
- if !bw.gsb.balancerCurrentOrPending(bw) { // balancer was closed during this call
- sc.Shutdown()
- bw.gsb.mu.Unlock()
- return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw)
- }
- bw.subconns[sc] = true
- bw.gsb.mu.Unlock()
- return sc, nil
-}
-
-func (bw *balancerWrapper) ResolveNow(opts resolver.ResolveNowOptions) {
- // Ignore ResolveNow requests from anything other than the most recent
- // balancer, because older balancers were already removed from the config.
- if bw != bw.gsb.latestBalancer() {
- return
- }
- bw.gsb.cc.ResolveNow(opts)
-}
-
-func (bw *balancerWrapper) RemoveSubConn(sc balancer.SubConn) {
- // Note: existing third party balancers may call this, so it must remain
- // until RemoveSubConn is fully removed.
- sc.Shutdown()
-}
-
-func (bw *balancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) {
- bw.gsb.mu.Lock()
- if !bw.gsb.balancerCurrentOrPending(bw) {
- bw.gsb.mu.Unlock()
- return
- }
- bw.gsb.mu.Unlock()
- bw.gsb.cc.UpdateAddresses(sc, addrs)
-}
-
-func (bw *balancerWrapper) Target() string {
- return bw.gsb.cc.Target()
-}
diff --git a/vendor/google.golang.org/grpc/internal/balancerload/load.go b/vendor/google.golang.org/grpc/internal/balancerload/load.go
deleted file mode 100644
index 94a08d687..000000000
--- a/vendor/google.golang.org/grpc/internal/balancerload/load.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2019 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Package balancerload defines APIs to parse server loads in trailers. The
-// parsed loads are sent to balancers in DoneInfo.
-package balancerload
-
-import (
- "google.golang.org/grpc/metadata"
-)
-
-// Parser converts loads from metadata into a concrete type.
-type Parser interface {
- // Parse parses loads from metadata.
- Parse(md metadata.MD) any
-}
-
-var parser Parser
-
-// SetParser sets the load parser.
-//
-// Not mutex-protected, should be called before any gRPC functions.
-func SetParser(lr Parser) {
- parser = lr
-}
-
-// Parse calls parser.Read().
-func Parse(md metadata.MD) any {
- if parser == nil {
- return nil
- }
- return parser.Parse(md)
-}
diff --git a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go
deleted file mode 100644
index 755fdebc1..000000000
--- a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package binarylog implementation binary logging as defined in
-// https://github.com/grpc/proposal/blob/master/A16-binary-logging.md.
-package binarylog
-
-import (
- "fmt"
- "os"
-
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal/grpcutil"
-)
-
-var grpclogLogger = grpclog.Component("binarylog")
-
-// Logger specifies MethodLoggers for method names with a Log call that
-// takes a context.
-//
-// This is used in the 1.0 release of gcp/observability, and thus must not be
-// deleted or changed.
-type Logger interface {
- GetMethodLogger(methodName string) MethodLogger
-}
-
-// binLogger is the global binary logger for the binary. One of this should be
-// built at init time from the configuration (environment variable or flags).
-//
-// It is used to get a MethodLogger for each individual method.
-var binLogger Logger
-
-// SetLogger sets the binary logger.
-//
-// Only call this at init time.
-func SetLogger(l Logger) {
- binLogger = l
-}
-
-// GetLogger gets the binary logger.
-//
-// Only call this at init time.
-func GetLogger() Logger {
- return binLogger
-}
-
-// GetMethodLogger returns the MethodLogger for the given methodName.
-//
-// methodName should be in the format of "/service/method".
-//
-// Each MethodLogger returned by this method is a new instance. This is to
-// generate sequence id within the call.
-func GetMethodLogger(methodName string) MethodLogger {
- if binLogger == nil {
- return nil
- }
- return binLogger.GetMethodLogger(methodName)
-}
-
-func init() {
- const envStr = "GRPC_BINARY_LOG_FILTER"
- configStr := os.Getenv(envStr)
- binLogger = NewLoggerFromConfigString(configStr)
-}
-
-// MethodLoggerConfig contains the setting for logging behavior of a method
-// logger. Currently, it contains the max length of header and message.
-type MethodLoggerConfig struct {
- // Max length of header and message.
- Header, Message uint64
-}
-
-// LoggerConfig contains the config for loggers to create method loggers.
-type LoggerConfig struct {
- All *MethodLoggerConfig
- Services map[string]*MethodLoggerConfig
- Methods map[string]*MethodLoggerConfig
-
- Blacklist map[string]struct{}
-}
-
-type logger struct {
- config LoggerConfig
-}
-
-// NewLoggerFromConfig builds a logger with the given LoggerConfig.
-func NewLoggerFromConfig(config LoggerConfig) Logger {
- return &logger{config: config}
-}
-
-// newEmptyLogger creates an empty logger. The map fields need to be filled in
-// using the set* functions.
-func newEmptyLogger() *logger {
- return &logger{}
-}
-
-// Set method logger for "*".
-func (l *logger) setDefaultMethodLogger(ml *MethodLoggerConfig) error {
- if l.config.All != nil {
- return fmt.Errorf("conflicting global rules found")
- }
- l.config.All = ml
- return nil
-}
-
-// Set method logger for "service/*".
-//
-// New MethodLogger with same service overrides the old one.
-func (l *logger) setServiceMethodLogger(service string, ml *MethodLoggerConfig) error {
- if _, ok := l.config.Services[service]; ok {
- return fmt.Errorf("conflicting service rules for service %v found", service)
- }
- if l.config.Services == nil {
- l.config.Services = make(map[string]*MethodLoggerConfig)
- }
- l.config.Services[service] = ml
- return nil
-}
-
-// Set method logger for "service/method".
-//
-// New MethodLogger with same method overrides the old one.
-func (l *logger) setMethodMethodLogger(method string, ml *MethodLoggerConfig) error {
- if _, ok := l.config.Blacklist[method]; ok {
- return fmt.Errorf("conflicting blacklist rules for method %v found", method)
- }
- if _, ok := l.config.Methods[method]; ok {
- return fmt.Errorf("conflicting method rules for method %v found", method)
- }
- if l.config.Methods == nil {
- l.config.Methods = make(map[string]*MethodLoggerConfig)
- }
- l.config.Methods[method] = ml
- return nil
-}
-
-// Set blacklist method for "-service/method".
-func (l *logger) setBlacklist(method string) error {
- if _, ok := l.config.Blacklist[method]; ok {
- return fmt.Errorf("conflicting blacklist rules for method %v found", method)
- }
- if _, ok := l.config.Methods[method]; ok {
- return fmt.Errorf("conflicting method rules for method %v found", method)
- }
- if l.config.Blacklist == nil {
- l.config.Blacklist = make(map[string]struct{})
- }
- l.config.Blacklist[method] = struct{}{}
- return nil
-}
-
-// getMethodLogger returns the MethodLogger for the given methodName.
-//
-// methodName should be in the format of "/service/method".
-//
-// Each MethodLogger returned by this method is a new instance. This is to
-// generate sequence id within the call.
-func (l *logger) GetMethodLogger(methodName string) MethodLogger {
- s, m, err := grpcutil.ParseMethod(methodName)
- if err != nil {
- grpclogLogger.Infof("binarylogging: failed to parse %q: %v", methodName, err)
- return nil
- }
- if ml, ok := l.config.Methods[s+"/"+m]; ok {
- return NewTruncatingMethodLogger(ml.Header, ml.Message)
- }
- if _, ok := l.config.Blacklist[s+"/"+m]; ok {
- return nil
- }
- if ml, ok := l.config.Services[s]; ok {
- return NewTruncatingMethodLogger(ml.Header, ml.Message)
- }
- if l.config.All == nil {
- return nil
- }
- return NewTruncatingMethodLogger(l.config.All.Header, l.config.All.Message)
-}
diff --git a/vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go b/vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go
deleted file mode 100644
index 1ee00a39a..000000000
--- a/vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// This file contains exported variables/functions that are exported for testing
-// only.
-//
-// An ideal way for this would be to put those in a *_test.go but in binarylog
-// package. But this doesn't work with staticcheck with go module. Error was:
-// "MdToMetadataProto not declared by package binarylog". This could be caused
-// by the way staticcheck looks for files for a certain package, which doesn't
-// support *_test.go files.
-//
-// Move those to binary_test.go when staticcheck is fixed.
-
-package binarylog
-
-var (
- // AllLogger is a logger that logs all headers/messages for all RPCs. It's
- // for testing only.
- AllLogger = NewLoggerFromConfigString("*")
- // MdToMetadataProto converts metadata to a binary logging proto message.
- // It's for testing only.
- MdToMetadataProto = mdToMetadataProto
- // AddrToProto converts an address to a binary logging proto message. It's
- // for testing only.
- AddrToProto = addrToProto
-)
diff --git a/vendor/google.golang.org/grpc/internal/binarylog/env_config.go b/vendor/google.golang.org/grpc/internal/binarylog/env_config.go
deleted file mode 100644
index f9e80e27a..000000000
--- a/vendor/google.golang.org/grpc/internal/binarylog/env_config.go
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package binarylog
-
-import (
- "errors"
- "fmt"
- "regexp"
- "strconv"
- "strings"
-)
-
-// NewLoggerFromConfigString reads the string and build a logger. It can be used
-// to build a new logger and assign it to binarylog.Logger.
-//
-// Example filter config strings:
-// - "" Nothing will be logged
-// - "*" All headers and messages will be fully logged.
-// - "*{h}" Only headers will be logged.
-// - "*{m:256}" Only the first 256 bytes of each message will be logged.
-// - "Foo/*" Logs every method in service Foo
-// - "Foo/*,-Foo/Bar" Logs every method in service Foo except method /Foo/Bar
-// - "Foo/*,Foo/Bar{m:256}" Logs the first 256 bytes of each message in method
-// /Foo/Bar, logs all headers and messages in every other method in service
-// Foo.
-//
-// If two configs exist for one certain method or service, the one specified
-// later overrides the previous config.
-func NewLoggerFromConfigString(s string) Logger {
- if s == "" {
- return nil
- }
- l := newEmptyLogger()
- methods := strings.Split(s, ",")
- for _, method := range methods {
- if err := l.fillMethodLoggerWithConfigString(method); err != nil {
- grpclogLogger.Warningf("failed to parse binary log config: %v", err)
- return nil
- }
- }
- return l
-}
-
-// fillMethodLoggerWithConfigString parses config, creates TruncatingMethodLogger and adds
-// it to the right map in the logger.
-func (l *logger) fillMethodLoggerWithConfigString(config string) error {
- // "" is invalid.
- if config == "" {
- return errors.New("empty string is not a valid method binary logging config")
- }
-
- // "-service/method", blacklist, no * or {} allowed.
- if config[0] == '-' {
- s, m, suffix, err := parseMethodConfigAndSuffix(config[1:])
- if err != nil {
- return fmt.Errorf("invalid config: %q, %v", config, err)
- }
- if m == "*" {
- return fmt.Errorf("invalid config: %q, %v", config, "* not allowed in blacklist config")
- }
- if suffix != "" {
- return fmt.Errorf("invalid config: %q, %v", config, "header/message limit not allowed in blacklist config")
- }
- if err := l.setBlacklist(s + "/" + m); err != nil {
- return fmt.Errorf("invalid config: %v", err)
- }
- return nil
- }
-
- // "*{h:256;m:256}"
- if config[0] == '*' {
- hdr, msg, err := parseHeaderMessageLengthConfig(config[1:])
- if err != nil {
- return fmt.Errorf("invalid config: %q, %v", config, err)
- }
- if err := l.setDefaultMethodLogger(&MethodLoggerConfig{Header: hdr, Message: msg}); err != nil {
- return fmt.Errorf("invalid config: %v", err)
- }
- return nil
- }
-
- s, m, suffix, err := parseMethodConfigAndSuffix(config)
- if err != nil {
- return fmt.Errorf("invalid config: %q, %v", config, err)
- }
- hdr, msg, err := parseHeaderMessageLengthConfig(suffix)
- if err != nil {
- return fmt.Errorf("invalid header/message length config: %q, %v", suffix, err)
- }
- if m == "*" {
- if err := l.setServiceMethodLogger(s, &MethodLoggerConfig{Header: hdr, Message: msg}); err != nil {
- return fmt.Errorf("invalid config: %v", err)
- }
- } else {
- if err := l.setMethodMethodLogger(s+"/"+m, &MethodLoggerConfig{Header: hdr, Message: msg}); err != nil {
- return fmt.Errorf("invalid config: %v", err)
- }
- }
- return nil
-}
-
-const (
- // TODO: this const is only used by env_config now. But could be useful for
- // other config. Move to binarylog.go if necessary.
- maxUInt = ^uint64(0)
-
- // For "p.s/m" plus any suffix. Suffix will be parsed again. See test for
- // expected output.
- longMethodConfigRegexpStr = `^([\w./]+)/((?:\w+)|[*])(.+)?$`
-
- // For suffix from above, "{h:123,m:123}". See test for expected output.
- optionalLengthRegexpStr = `(?::(\d+))?` // Optional ":123".
- headerConfigRegexpStr = `^{h` + optionalLengthRegexpStr + `}$`
- messageConfigRegexpStr = `^{m` + optionalLengthRegexpStr + `}$`
- headerMessageConfigRegexpStr = `^{h` + optionalLengthRegexpStr + `;m` + optionalLengthRegexpStr + `}$`
-)
-
-var (
- longMethodConfigRegexp = regexp.MustCompile(longMethodConfigRegexpStr)
- headerConfigRegexp = regexp.MustCompile(headerConfigRegexpStr)
- messageConfigRegexp = regexp.MustCompile(messageConfigRegexpStr)
- headerMessageConfigRegexp = regexp.MustCompile(headerMessageConfigRegexpStr)
-)
-
-// Turn "service/method{h;m}" into "service", "method", "{h;m}".
-func parseMethodConfigAndSuffix(c string) (service, method, suffix string, _ error) {
- // Regexp result:
- //
- // in: "p.s/m{h:123,m:123}",
- // out: []string{"p.s/m{h:123,m:123}", "p.s", "m", "{h:123,m:123}"},
- match := longMethodConfigRegexp.FindStringSubmatch(c)
- if match == nil {
- return "", "", "", fmt.Errorf("%q contains invalid substring", c)
- }
- service = match[1]
- method = match[2]
- suffix = match[3]
- return
-}
-
-// Turn "{h:123;m:345}" into 123, 345.
-//
-// Return maxUInt if length is unspecified.
-func parseHeaderMessageLengthConfig(c string) (hdrLenStr, msgLenStr uint64, err error) {
- if c == "" {
- return maxUInt, maxUInt, nil
- }
- // Header config only.
- if match := headerConfigRegexp.FindStringSubmatch(c); match != nil {
- if s := match[1]; s != "" {
- hdrLenStr, err = strconv.ParseUint(s, 10, 64)
- if err != nil {
- return 0, 0, fmt.Errorf("failed to convert %q to uint", s)
- }
- return hdrLenStr, 0, nil
- }
- return maxUInt, 0, nil
- }
-
- // Message config only.
- if match := messageConfigRegexp.FindStringSubmatch(c); match != nil {
- if s := match[1]; s != "" {
- msgLenStr, err = strconv.ParseUint(s, 10, 64)
- if err != nil {
- return 0, 0, fmt.Errorf("failed to convert %q to uint", s)
- }
- return 0, msgLenStr, nil
- }
- return 0, maxUInt, nil
- }
-
- // Header and message config both.
- if match := headerMessageConfigRegexp.FindStringSubmatch(c); match != nil {
- // Both hdr and msg are specified, but one or two of them might be empty.
- hdrLenStr = maxUInt
- msgLenStr = maxUInt
- if s := match[1]; s != "" {
- hdrLenStr, err = strconv.ParseUint(s, 10, 64)
- if err != nil {
- return 0, 0, fmt.Errorf("failed to convert %q to uint", s)
- }
- }
- if s := match[2]; s != "" {
- msgLenStr, err = strconv.ParseUint(s, 10, 64)
- if err != nil {
- return 0, 0, fmt.Errorf("failed to convert %q to uint", s)
- }
- }
- return hdrLenStr, msgLenStr, nil
- }
- return 0, 0, fmt.Errorf("%q contains invalid substring", c)
-}
diff --git a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
deleted file mode 100644
index 966932891..000000000
--- a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package binarylog
-
-import (
- "context"
- "net"
- "strings"
- "sync/atomic"
- "time"
-
- binlogpb "google.golang.org/grpc/binarylog/grpc_binarylog_v1"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/status"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/types/known/durationpb"
- "google.golang.org/protobuf/types/known/timestamppb"
-)
-
-type callIDGenerator struct {
- id uint64
-}
-
-func (g *callIDGenerator) next() uint64 {
- id := atomic.AddUint64(&g.id, 1)
- return id
-}
-
-// reset is for testing only, and doesn't need to be thread safe.
-func (g *callIDGenerator) reset() {
- g.id = 0
-}
-
-var idGen callIDGenerator
-
-// MethodLogger is the sub-logger for each method.
-//
-// This is used in the 1.0 release of gcp/observability, and thus must not be
-// deleted or changed.
-type MethodLogger interface {
- Log(context.Context, LogEntryConfig)
-}
-
-// TruncatingMethodLogger is a method logger that truncates headers and messages
-// based on configured fields.
-type TruncatingMethodLogger struct {
- headerMaxLen, messageMaxLen uint64
-
- callID uint64
- idWithinCallGen *callIDGenerator
-
- sink Sink // TODO(blog): make this pluggable.
-}
-
-// NewTruncatingMethodLogger returns a new truncating method logger.
-//
-// This is used in the 1.0 release of gcp/observability, and thus must not be
-// deleted or changed.
-func NewTruncatingMethodLogger(h, m uint64) *TruncatingMethodLogger {
- return &TruncatingMethodLogger{
- headerMaxLen: h,
- messageMaxLen: m,
-
- callID: idGen.next(),
- idWithinCallGen: &callIDGenerator{},
-
- sink: DefaultSink, // TODO(blog): make it pluggable.
- }
-}
-
-// Build is an internal only method for building the proto message out of the
-// input event. It's made public to enable other library to reuse as much logic
-// in TruncatingMethodLogger as possible.
-func (ml *TruncatingMethodLogger) Build(c LogEntryConfig) *binlogpb.GrpcLogEntry {
- m := c.toProto()
- timestamp := timestamppb.Now()
- m.Timestamp = timestamp
- m.CallId = ml.callID
- m.SequenceIdWithinCall = ml.idWithinCallGen.next()
-
- switch pay := m.Payload.(type) {
- case *binlogpb.GrpcLogEntry_ClientHeader:
- m.PayloadTruncated = ml.truncateMetadata(pay.ClientHeader.GetMetadata())
- case *binlogpb.GrpcLogEntry_ServerHeader:
- m.PayloadTruncated = ml.truncateMetadata(pay.ServerHeader.GetMetadata())
- case *binlogpb.GrpcLogEntry_Message:
- m.PayloadTruncated = ml.truncateMessage(pay.Message)
- }
- return m
-}
-
-// Log creates a proto binary log entry, and logs it to the sink.
-func (ml *TruncatingMethodLogger) Log(_ context.Context, c LogEntryConfig) {
- ml.sink.Write(ml.Build(c))
-}
-
-func (ml *TruncatingMethodLogger) truncateMetadata(mdPb *binlogpb.Metadata) (truncated bool) {
- if ml.headerMaxLen == maxUInt {
- return false
- }
- var (
- bytesLimit = ml.headerMaxLen
- index int
- )
- // At the end of the loop, index will be the first entry where the total
- // size is greater than the limit:
- //
- // len(entry[:index]) <= ml.hdr && len(entry[:index+1]) > ml.hdr.
- for ; index < len(mdPb.Entry); index++ {
- entry := mdPb.Entry[index]
- if entry.Key == "grpc-trace-bin" {
- // "grpc-trace-bin" is a special key. It's kept in the log entry,
- // but not counted towards the size limit.
- continue
- }
- currentEntryLen := uint64(len(entry.GetKey())) + uint64(len(entry.GetValue()))
- if currentEntryLen > bytesLimit {
- break
- }
- bytesLimit -= currentEntryLen
- }
- truncated = index < len(mdPb.Entry)
- mdPb.Entry = mdPb.Entry[:index]
- return truncated
-}
-
-func (ml *TruncatingMethodLogger) truncateMessage(msgPb *binlogpb.Message) (truncated bool) {
- if ml.messageMaxLen == maxUInt {
- return false
- }
- if ml.messageMaxLen >= uint64(len(msgPb.Data)) {
- return false
- }
- msgPb.Data = msgPb.Data[:ml.messageMaxLen]
- return true
-}
-
-// LogEntryConfig represents the configuration for binary log entry.
-//
-// This is used in the 1.0 release of gcp/observability, and thus must not be
-// deleted or changed.
-type LogEntryConfig interface {
- toProto() *binlogpb.GrpcLogEntry
-}
-
-// ClientHeader configs the binary log entry to be a ClientHeader entry.
-type ClientHeader struct {
- OnClientSide bool
- Header metadata.MD
- MethodName string
- Authority string
- Timeout time.Duration
- // PeerAddr is required only when it's on server side.
- PeerAddr net.Addr
-}
-
-func (c *ClientHeader) toProto() *binlogpb.GrpcLogEntry {
- // This function doesn't need to set all the fields (e.g. seq ID). The Log
- // function will set the fields when necessary.
- clientHeader := &binlogpb.ClientHeader{
- Metadata: mdToMetadataProto(c.Header),
- MethodName: c.MethodName,
- Authority: c.Authority,
- }
- if c.Timeout > 0 {
- clientHeader.Timeout = durationpb.New(c.Timeout)
- }
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CLIENT_HEADER,
- Payload: &binlogpb.GrpcLogEntry_ClientHeader{
- ClientHeader: clientHeader,
- },
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- if c.PeerAddr != nil {
- ret.Peer = addrToProto(c.PeerAddr)
- }
- return ret
-}
-
-// ServerHeader configs the binary log entry to be a ServerHeader entry.
-type ServerHeader struct {
- OnClientSide bool
- Header metadata.MD
- // PeerAddr is required only when it's on client side.
- PeerAddr net.Addr
-}
-
-func (c *ServerHeader) toProto() *binlogpb.GrpcLogEntry {
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_SERVER_HEADER,
- Payload: &binlogpb.GrpcLogEntry_ServerHeader{
- ServerHeader: &binlogpb.ServerHeader{
- Metadata: mdToMetadataProto(c.Header),
- },
- },
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- if c.PeerAddr != nil {
- ret.Peer = addrToProto(c.PeerAddr)
- }
- return ret
-}
-
-// ClientMessage configs the binary log entry to be a ClientMessage entry.
-type ClientMessage struct {
- OnClientSide bool
- // Message can be a proto.Message or []byte. Other messages formats are not
- // supported.
- Message any
-}
-
-func (c *ClientMessage) toProto() *binlogpb.GrpcLogEntry {
- var (
- data []byte
- err error
- )
- if m, ok := c.Message.(proto.Message); ok {
- data, err = proto.Marshal(m)
- if err != nil {
- grpclogLogger.Infof("binarylogging: failed to marshal proto message: %v", err)
- }
- } else if b, ok := c.Message.([]byte); ok {
- data = b
- } else {
- grpclogLogger.Infof("binarylogging: message to log is neither proto.message nor []byte")
- }
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE,
- Payload: &binlogpb.GrpcLogEntry_Message{
- Message: &binlogpb.Message{
- Length: uint32(len(data)),
- Data: data,
- },
- },
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- return ret
-}
-
-// ServerMessage configs the binary log entry to be a ServerMessage entry.
-type ServerMessage struct {
- OnClientSide bool
- // Message can be a proto.Message or []byte. Other messages formats are not
- // supported.
- Message any
-}
-
-func (c *ServerMessage) toProto() *binlogpb.GrpcLogEntry {
- var (
- data []byte
- err error
- )
- if m, ok := c.Message.(proto.Message); ok {
- data, err = proto.Marshal(m)
- if err != nil {
- grpclogLogger.Infof("binarylogging: failed to marshal proto message: %v", err)
- }
- } else if b, ok := c.Message.([]byte); ok {
- data = b
- } else {
- grpclogLogger.Infof("binarylogging: message to log is neither proto.message nor []byte")
- }
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE,
- Payload: &binlogpb.GrpcLogEntry_Message{
- Message: &binlogpb.Message{
- Length: uint32(len(data)),
- Data: data,
- },
- },
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- return ret
-}
-
-// ClientHalfClose configs the binary log entry to be a ClientHalfClose entry.
-type ClientHalfClose struct {
- OnClientSide bool
-}
-
-func (c *ClientHalfClose) toProto() *binlogpb.GrpcLogEntry {
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE,
- Payload: nil, // No payload here.
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- return ret
-}
-
-// ServerTrailer configs the binary log entry to be a ServerTrailer entry.
-type ServerTrailer struct {
- OnClientSide bool
- Trailer metadata.MD
- // Err is the status error.
- Err error
- // PeerAddr is required only when it's on client side and the RPC is trailer
- // only.
- PeerAddr net.Addr
-}
-
-func (c *ServerTrailer) toProto() *binlogpb.GrpcLogEntry {
- st, ok := status.FromError(c.Err)
- if !ok {
- grpclogLogger.Info("binarylogging: error in trailer is not a status error")
- }
- var (
- detailsBytes []byte
- err error
- )
- stProto := st.Proto()
- if stProto != nil && len(stProto.Details) != 0 {
- detailsBytes, err = proto.Marshal(stProto)
- if err != nil {
- grpclogLogger.Infof("binarylogging: failed to marshal status proto: %v", err)
- }
- }
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_SERVER_TRAILER,
- Payload: &binlogpb.GrpcLogEntry_Trailer{
- Trailer: &binlogpb.Trailer{
- Metadata: mdToMetadataProto(c.Trailer),
- StatusCode: uint32(st.Code()),
- StatusMessage: st.Message(),
- StatusDetails: detailsBytes,
- },
- },
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- if c.PeerAddr != nil {
- ret.Peer = addrToProto(c.PeerAddr)
- }
- return ret
-}
-
-// Cancel configs the binary log entry to be a Cancel entry.
-type Cancel struct {
- OnClientSide bool
-}
-
-func (c *Cancel) toProto() *binlogpb.GrpcLogEntry {
- ret := &binlogpb.GrpcLogEntry{
- Type: binlogpb.GrpcLogEntry_EVENT_TYPE_CANCEL,
- Payload: nil,
- }
- if c.OnClientSide {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_CLIENT
- } else {
- ret.Logger = binlogpb.GrpcLogEntry_LOGGER_SERVER
- }
- return ret
-}
-
-// metadataKeyOmit returns whether the metadata entry with this key should be
-// omitted.
-func metadataKeyOmit(key string) bool {
- switch key {
- case "lb-token", ":path", ":authority", "content-encoding", "content-type", "user-agent", "te":
- return true
- case "grpc-trace-bin": // grpc-trace-bin is special because it's visible to users.
- return false
- }
- return strings.HasPrefix(key, "grpc-")
-}
-
-func mdToMetadataProto(md metadata.MD) *binlogpb.Metadata {
- ret := &binlogpb.Metadata{}
- for k, vv := range md {
- if metadataKeyOmit(k) {
- continue
- }
- for _, v := range vv {
- ret.Entry = append(ret.Entry,
- &binlogpb.MetadataEntry{
- Key: k,
- Value: []byte(v),
- },
- )
- }
- }
- return ret
-}
-
-func addrToProto(addr net.Addr) *binlogpb.Address {
- ret := &binlogpb.Address{}
- switch a := addr.(type) {
- case *net.TCPAddr:
- if a.IP.To4() != nil {
- ret.Type = binlogpb.Address_TYPE_IPV4
- } else if a.IP.To16() != nil {
- ret.Type = binlogpb.Address_TYPE_IPV6
- } else {
- ret.Type = binlogpb.Address_TYPE_UNKNOWN
- // Do not set address and port fields.
- break
- }
- ret.Address = a.IP.String()
- ret.IpPort = uint32(a.Port)
- case *net.UnixAddr:
- ret.Type = binlogpb.Address_TYPE_UNIX
- ret.Address = a.String()
- default:
- ret.Type = binlogpb.Address_TYPE_UNKNOWN
- }
- return ret
-}
diff --git a/vendor/google.golang.org/grpc/internal/binarylog/sink.go b/vendor/google.golang.org/grpc/internal/binarylog/sink.go
deleted file mode 100644
index 9ea598b14..000000000
--- a/vendor/google.golang.org/grpc/internal/binarylog/sink.go
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package binarylog
-
-import (
- "bufio"
- "encoding/binary"
- "io"
- "sync"
- "time"
-
- binlogpb "google.golang.org/grpc/binarylog/grpc_binarylog_v1"
- "google.golang.org/protobuf/proto"
-)
-
-var (
- // DefaultSink is the sink where the logs will be written to. It's exported
- // for the binarylog package to update.
- DefaultSink Sink = &noopSink{} // TODO(blog): change this default (file in /tmp).
-)
-
-// Sink writes log entry into the binary log sink.
-//
-// sink is a copy of the exported binarylog.Sink, to avoid circular dependency.
-type Sink interface {
- // Write will be called to write the log entry into the sink.
- //
- // It should be thread-safe so it can be called in parallel.
- Write(*binlogpb.GrpcLogEntry) error
- // Close will be called when the Sink is replaced by a new Sink.
- Close() error
-}
-
-type noopSink struct{}
-
-func (ns *noopSink) Write(*binlogpb.GrpcLogEntry) error { return nil }
-func (ns *noopSink) Close() error { return nil }
-
-// newWriterSink creates a binary log sink with the given writer.
-//
-// Write() marshals the proto message and writes it to the given writer. Each
-// message is prefixed with a 4 byte big endian unsigned integer as the length.
-//
-// No buffer is done, Close() doesn't try to close the writer.
-func newWriterSink(w io.Writer) Sink {
- return &writerSink{out: w}
-}
-
-type writerSink struct {
- out io.Writer
-}
-
-func (ws *writerSink) Write(e *binlogpb.GrpcLogEntry) error {
- b, err := proto.Marshal(e)
- if err != nil {
- grpclogLogger.Errorf("binary logging: failed to marshal proto message: %v", err)
- return err
- }
- hdr := make([]byte, 4)
- binary.BigEndian.PutUint32(hdr, uint32(len(b)))
- if _, err := ws.out.Write(hdr); err != nil {
- return err
- }
- if _, err := ws.out.Write(b); err != nil {
- return err
- }
- return nil
-}
-
-func (ws *writerSink) Close() error { return nil }
-
-type bufferedSink struct {
- mu sync.Mutex
- closer io.Closer
- out Sink // out is built on buf.
- buf *bufio.Writer // buf is kept for flush.
- flusherStarted bool
-
- writeTicker *time.Ticker
- done chan struct{}
-}
-
-func (fs *bufferedSink) Write(e *binlogpb.GrpcLogEntry) error {
- fs.mu.Lock()
- defer fs.mu.Unlock()
- if !fs.flusherStarted {
- // Start the write loop when Write is called.
- fs.startFlushGoroutine()
- fs.flusherStarted = true
- }
- if err := fs.out.Write(e); err != nil {
- return err
- }
- return nil
-}
-
-const (
- bufFlushDuration = 60 * time.Second
-)
-
-func (fs *bufferedSink) startFlushGoroutine() {
- fs.writeTicker = time.NewTicker(bufFlushDuration)
- go func() {
- for {
- select {
- case <-fs.done:
- return
- case <-fs.writeTicker.C:
- }
- fs.mu.Lock()
- if err := fs.buf.Flush(); err != nil {
- grpclogLogger.Warningf("failed to flush to Sink: %v", err)
- }
- fs.mu.Unlock()
- }
- }()
-}
-
-func (fs *bufferedSink) Close() error {
- fs.mu.Lock()
- defer fs.mu.Unlock()
- if fs.writeTicker != nil {
- fs.writeTicker.Stop()
- }
- close(fs.done)
- if err := fs.buf.Flush(); err != nil {
- grpclogLogger.Warningf("failed to flush to Sink: %v", err)
- }
- if err := fs.closer.Close(); err != nil {
- grpclogLogger.Warningf("failed to close the underlying WriterCloser: %v", err)
- }
- if err := fs.out.Close(); err != nil {
- grpclogLogger.Warningf("failed to close the Sink: %v", err)
- }
- return nil
-}
-
-// NewBufferedSink creates a binary log sink with the given WriteCloser.
-//
-// Write() marshals the proto message and writes it to the given writer. Each
-// message is prefixed with a 4 byte big endian unsigned integer as the length.
-//
-// Content is kept in a buffer, and is flushed every 60 seconds.
-//
-// Close closes the WriteCloser.
-func NewBufferedSink(o io.WriteCloser) Sink {
- bufW := bufio.NewWriter(o)
- return &bufferedSink{
- closer: o,
- out: newWriterSink(bufW),
- buf: bufW,
- done: make(chan struct{}),
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/buffer/unbounded.go b/vendor/google.golang.org/grpc/internal/buffer/unbounded.go
deleted file mode 100644
index 11f91668a..000000000
--- a/vendor/google.golang.org/grpc/internal/buffer/unbounded.go
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2019 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package buffer provides an implementation of an unbounded buffer.
-package buffer
-
-import (
- "errors"
- "sync"
-)
-
-// Unbounded is an implementation of an unbounded buffer which does not use
-// extra goroutines. This is typically used for passing updates from one entity
-// to another within gRPC.
-//
-// All methods on this type are thread-safe and don't block on anything except
-// the underlying mutex used for synchronization.
-//
-// Unbounded supports values of any type to be stored in it by using a channel
-// of `any`. This means that a call to Put() incurs an extra memory allocation,
-// and also that users need a type assertion while reading. For performance
-// critical code paths, using Unbounded is strongly discouraged and defining a
-// new type specific implementation of this buffer is preferred. See
-// internal/transport/transport.go for an example of this.
-type Unbounded struct {
- c chan any
- closed bool
- closing bool
- mu sync.Mutex
- backlog []any
-}
-
-// NewUnbounded returns a new instance of Unbounded.
-func NewUnbounded() *Unbounded {
- return &Unbounded{c: make(chan any, 1)}
-}
-
-var errBufferClosed = errors.New("Put called on closed buffer.Unbounded")
-
-// Put adds t to the unbounded buffer.
-func (b *Unbounded) Put(t any) error {
- b.mu.Lock()
- defer b.mu.Unlock()
- if b.closing {
- return errBufferClosed
- }
- if len(b.backlog) == 0 {
- select {
- case b.c <- t:
- return nil
- default:
- }
- }
- b.backlog = append(b.backlog, t)
- return nil
-}
-
-// Load sends the earliest buffered data, if any, onto the read channel returned
-// by Get(). Users are expected to call this every time they successfully read a
-// value from the read channel.
-func (b *Unbounded) Load() {
- b.mu.Lock()
- defer b.mu.Unlock()
- if len(b.backlog) > 0 {
- select {
- case b.c <- b.backlog[0]:
- b.backlog[0] = nil
- b.backlog = b.backlog[1:]
- default:
- }
- } else if b.closing && !b.closed {
- close(b.c)
- }
-}
-
-// Get returns a read channel on which values added to the buffer, via Put(),
-// are sent on.
-//
-// Upon reading a value from this channel, users are expected to call Load() to
-// send the next buffered value onto the channel if there is any.
-//
-// If the unbounded buffer is closed, the read channel returned by this method
-// is closed after all data is drained.
-func (b *Unbounded) Get() <-chan any {
- return b.c
-}
-
-// Close closes the unbounded buffer. No subsequent data may be Put(), and the
-// channel returned from Get() will be closed after all the data is read and
-// Load() is called for the final time.
-func (b *Unbounded) Close() {
- b.mu.Lock()
- defer b.mu.Unlock()
- if b.closing {
- return
- }
- b.closing = true
- if len(b.backlog) == 0 {
- b.closed = true
- close(b.c)
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/channel.go b/vendor/google.golang.org/grpc/internal/channelz/channel.go
deleted file mode 100644
index 3ec662799..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/channel.go
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
- "sync/atomic"
-
- "google.golang.org/grpc/connectivity"
-)
-
-// Channel represents a channel within channelz, which includes metrics and
-// internal channelz data, such as channelz id, child list, etc.
-type Channel struct {
- Entity
- // ID is the channelz id of this channel.
- ID int64
- // RefName is the human readable reference string of this channel.
- RefName string
-
- closeCalled bool
- nestedChans map[int64]string
- subChans map[int64]string
- Parent *Channel
- trace *ChannelTrace
- // traceRefCount is the number of trace events that reference this channel.
- // Non-zero traceRefCount means the trace of this channel cannot be deleted.
- traceRefCount int32
-
- // ChannelMetrics holds connectivity state, target and call metrics for the
- // channel within channelz.
- ChannelMetrics ChannelMetrics
-}
-
-// Implemented to make Channel implement the Identifier interface used for
-// nesting.
-func (c *Channel) channelzIdentifier() {}
-
-// String returns a string representation of the Channel, including its parent
-// entity and ID.
-func (c *Channel) String() string {
- if c.Parent == nil {
- return fmt.Sprintf("Channel #%d", c.ID)
- }
- return fmt.Sprintf("%s Channel #%d", c.Parent, c.ID)
-}
-
-func (c *Channel) id() int64 {
- return c.ID
-}
-
-// SubChans returns a copy of the map of sub-channels associated with the
-// Channel.
-func (c *Channel) SubChans() map[int64]string {
- db.mu.RLock()
- defer db.mu.RUnlock()
- return copyMap(c.subChans)
-}
-
-// NestedChans returns a copy of the map of nested channels associated with the
-// Channel.
-func (c *Channel) NestedChans() map[int64]string {
- db.mu.RLock()
- defer db.mu.RUnlock()
- return copyMap(c.nestedChans)
-}
-
-// Trace returns a copy of the Channel's trace data.
-func (c *Channel) Trace() *ChannelTrace {
- db.mu.RLock()
- defer db.mu.RUnlock()
- return c.trace.copy()
-}
-
-// ChannelMetrics holds connectivity state, target and call metrics for the
-// channel within channelz.
-type ChannelMetrics struct {
- // The current connectivity state of the channel.
- State atomic.Pointer[connectivity.State]
- // The target this channel originally tried to connect to. May be absent
- Target atomic.Pointer[string]
- // The number of calls started on the channel.
- CallsStarted atomic.Int64
- // The number of calls that have completed with an OK status.
- CallsSucceeded atomic.Int64
- // The number of calls that have a completed with a non-OK status.
- CallsFailed atomic.Int64
- // The last time a call was started on the channel.
- LastCallStartedTimestamp atomic.Int64
-}
-
-// CopyFrom copies the metrics in o to c. For testing only.
-func (c *ChannelMetrics) CopyFrom(o *ChannelMetrics) {
- c.State.Store(o.State.Load())
- c.Target.Store(o.Target.Load())
- c.CallsStarted.Store(o.CallsStarted.Load())
- c.CallsSucceeded.Store(o.CallsSucceeded.Load())
- c.CallsFailed.Store(o.CallsFailed.Load())
- c.LastCallStartedTimestamp.Store(o.LastCallStartedTimestamp.Load())
-}
-
-// Equal returns true iff the metrics of c are the same as the metrics of o.
-// For testing only.
-func (c *ChannelMetrics) Equal(o any) bool {
- oc, ok := o.(*ChannelMetrics)
- if !ok {
- return false
- }
- if (c.State.Load() == nil) != (oc.State.Load() == nil) {
- return false
- }
- if c.State.Load() != nil && *c.State.Load() != *oc.State.Load() {
- return false
- }
- if (c.Target.Load() == nil) != (oc.Target.Load() == nil) {
- return false
- }
- if c.Target.Load() != nil && *c.Target.Load() != *oc.Target.Load() {
- return false
- }
- return c.CallsStarted.Load() == oc.CallsStarted.Load() &&
- c.CallsFailed.Load() == oc.CallsFailed.Load() &&
- c.CallsSucceeded.Load() == oc.CallsSucceeded.Load() &&
- c.LastCallStartedTimestamp.Load() == oc.LastCallStartedTimestamp.Load()
-}
-
-func strFromPointer(s *string) string {
- if s == nil {
- return ""
- }
- return *s
-}
-
-// String returns a string representation of the ChannelMetrics, including its
-// state, target, and call metrics.
-func (c *ChannelMetrics) String() string {
- return fmt.Sprintf("State: %v, Target: %s, CallsStarted: %v, CallsSucceeded: %v, CallsFailed: %v, LastCallStartedTimestamp: %v",
- c.State.Load(), strFromPointer(c.Target.Load()), c.CallsStarted.Load(), c.CallsSucceeded.Load(), c.CallsFailed.Load(), c.LastCallStartedTimestamp.Load(),
- )
-}
-
-// NewChannelMetricForTesting creates a new instance of ChannelMetrics with
-// specified initial values for testing purposes.
-func NewChannelMetricForTesting(state connectivity.State, target string, started, succeeded, failed, timestamp int64) *ChannelMetrics {
- c := &ChannelMetrics{}
- c.State.Store(&state)
- c.Target.Store(&target)
- c.CallsStarted.Store(started)
- c.CallsSucceeded.Store(succeeded)
- c.CallsFailed.Store(failed)
- c.LastCallStartedTimestamp.Store(timestamp)
- return c
-}
-
-func (c *Channel) addChild(id int64, e entry) {
- switch v := e.(type) {
- case *SubChannel:
- c.subChans[id] = v.RefName
- case *Channel:
- c.nestedChans[id] = v.RefName
- default:
- logger.Errorf("cannot add a child (id = %d) of type %T to a channel", id, e)
- }
-}
-
-func (c *Channel) deleteChild(id int64) {
- delete(c.subChans, id)
- delete(c.nestedChans, id)
- c.deleteSelfIfReady()
-}
-
-func (c *Channel) triggerDelete() {
- c.closeCalled = true
- c.deleteSelfIfReady()
-}
-
-func (c *Channel) getParentID() int64 {
- if c.Parent == nil {
- return -1
- }
- return c.Parent.ID
-}
-
-// deleteSelfFromTree tries to delete the channel from the channelz entry relation tree, which means
-// deleting the channel reference from its parent's child list.
-//
-// In order for a channel to be deleted from the tree, it must meet the criteria that, removal of the
-// corresponding grpc object has been invoked, and the channel does not have any children left.
-//
-// The returned boolean value indicates whether the channel has been successfully deleted from tree.
-func (c *Channel) deleteSelfFromTree() (deleted bool) {
- if !c.closeCalled || len(c.subChans)+len(c.nestedChans) != 0 {
- return false
- }
- // not top channel
- if c.Parent != nil {
- c.Parent.deleteChild(c.ID)
- }
- return true
-}
-
-// deleteSelfFromMap checks whether it is valid to delete the channel from the map, which means
-// deleting the channel from channelz's tracking entirely. Users can no longer use id to query the
-// channel, and its memory will be garbage collected.
-//
-// The trace reference count of the channel must be 0 in order to be deleted from the map. This is
-// specified in the channel tracing gRFC that as long as some other trace has reference to an entity,
-// the trace of the referenced entity must not be deleted. In order to release the resource allocated
-// by grpc, the reference to the grpc object is reset to a dummy object.
-//
-// deleteSelfFromMap must be called after deleteSelfFromTree returns true.
-//
-// It returns a bool to indicate whether the channel can be safely deleted from map.
-func (c *Channel) deleteSelfFromMap() (delete bool) {
- return c.getTraceRefCount() == 0
-}
-
-// deleteSelfIfReady tries to delete the channel itself from the channelz database.
-// The delete process includes two steps:
-// 1. delete the channel from the entry relation tree, i.e. delete the channel reference from its
-// parent's child list.
-// 2. delete the channel from the map, i.e. delete the channel entirely from channelz. Lookup by id
-// will return entry not found error.
-func (c *Channel) deleteSelfIfReady() {
- if !c.deleteSelfFromTree() {
- return
- }
- if !c.deleteSelfFromMap() {
- return
- }
- db.deleteEntry(c.ID)
- c.trace.clear()
-}
-
-func (c *Channel) getChannelTrace() *ChannelTrace {
- return c.trace
-}
-
-func (c *Channel) incrTraceRefCount() {
- atomic.AddInt32(&c.traceRefCount, 1)
-}
-
-func (c *Channel) decrTraceRefCount() {
- atomic.AddInt32(&c.traceRefCount, -1)
-}
-
-func (c *Channel) getTraceRefCount() int {
- i := atomic.LoadInt32(&c.traceRefCount)
- return int(i)
-}
-
-func (c *Channel) getRefName() string {
- return c.RefName
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go b/vendor/google.golang.org/grpc/internal/channelz/channelmap.go
deleted file mode 100644
index 64c791953..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/channelmap.go
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
- "sort"
- "sync"
- "time"
-)
-
-// entry represents a node in the channelz database.
-type entry interface {
- // addChild adds a child e, whose channelz id is id to child list
- addChild(id int64, e entry)
- // deleteChild deletes a child with channelz id to be id from child list
- deleteChild(id int64)
- // triggerDelete tries to delete self from channelz database. However, if
- // child list is not empty, then deletion from the database is on hold until
- // the last child is deleted from database.
- triggerDelete()
- // deleteSelfIfReady check whether triggerDelete() has been called before,
- // and whether child list is now empty. If both conditions are met, then
- // delete self from database.
- deleteSelfIfReady()
- // getParentID returns parent ID of the entry. 0 value parent ID means no parent.
- getParentID() int64
- Entity
-}
-
-// channelMap is the storage data structure for channelz.
-//
-// Methods of channelMap can be divided into two categories with respect to
-// locking.
-//
-// 1. Methods acquire the global lock.
-// 2. Methods that can only be called when global lock is held.
-//
-// A second type of method need always to be called inside a first type of method.
-type channelMap struct {
- mu sync.RWMutex
- topLevelChannels map[int64]struct{}
- channels map[int64]*Channel
- subChannels map[int64]*SubChannel
- sockets map[int64]*Socket
- servers map[int64]*Server
-}
-
-func newChannelMap() *channelMap {
- return &channelMap{
- topLevelChannels: make(map[int64]struct{}),
- channels: make(map[int64]*Channel),
- subChannels: make(map[int64]*SubChannel),
- sockets: make(map[int64]*Socket),
- servers: make(map[int64]*Server),
- }
-}
-
-func (c *channelMap) addServer(id int64, s *Server) {
- c.mu.Lock()
- defer c.mu.Unlock()
- s.cm = c
- c.servers[id] = s
-}
-
-func (c *channelMap) addChannel(id int64, cn *Channel, isTopChannel bool, pid int64) {
- c.mu.Lock()
- defer c.mu.Unlock()
- cn.trace.cm = c
- c.channels[id] = cn
- if isTopChannel {
- c.topLevelChannels[id] = struct{}{}
- } else if p := c.channels[pid]; p != nil {
- p.addChild(id, cn)
- } else {
- logger.Infof("channel %d references invalid parent ID %d", id, pid)
- }
-}
-
-func (c *channelMap) addSubChannel(id int64, sc *SubChannel, pid int64) {
- c.mu.Lock()
- defer c.mu.Unlock()
- sc.trace.cm = c
- c.subChannels[id] = sc
- if p := c.channels[pid]; p != nil {
- p.addChild(id, sc)
- } else {
- logger.Infof("subchannel %d references invalid parent ID %d", id, pid)
- }
-}
-
-func (c *channelMap) addSocket(s *Socket) {
- c.mu.Lock()
- defer c.mu.Unlock()
- s.cm = c
- c.sockets[s.ID] = s
- if s.Parent == nil {
- logger.Infof("normal socket %d has no parent", s.ID)
- }
- s.Parent.(entry).addChild(s.ID, s)
-}
-
-// removeEntry triggers the removal of an entry, which may not indeed delete the
-// entry, if it has to wait on the deletion of its children and until no other
-// entity's channel trace references it. It may lead to a chain of entry
-// deletion. For example, deleting the last socket of a gracefully shutting down
-// server will lead to the server being also deleted.
-func (c *channelMap) removeEntry(id int64) {
- c.mu.Lock()
- defer c.mu.Unlock()
- c.findEntry(id).triggerDelete()
-}
-
-// tracedChannel represents tracing operations which are present on both
-// channels and subChannels.
-type tracedChannel interface {
- getChannelTrace() *ChannelTrace
- incrTraceRefCount()
- decrTraceRefCount()
- getRefName() string
-}
-
-// c.mu must be held by the caller
-func (c *channelMap) decrTraceRefCount(id int64) {
- e := c.findEntry(id)
- if v, ok := e.(tracedChannel); ok {
- v.decrTraceRefCount()
- e.deleteSelfIfReady()
- }
-}
-
-// c.mu must be held by the caller.
-func (c *channelMap) findEntry(id int64) entry {
- if v, ok := c.channels[id]; ok {
- return v
- }
- if v, ok := c.subChannels[id]; ok {
- return v
- }
- if v, ok := c.servers[id]; ok {
- return v
- }
- if v, ok := c.sockets[id]; ok {
- return v
- }
- return &dummyEntry{idNotFound: id}
-}
-
-// c.mu must be held by the caller
-//
-// deleteEntry deletes an entry from the channelMap. Before calling this method,
-// caller must check this entry is ready to be deleted, i.e removeEntry() has
-// been called on it, and no children still exist.
-func (c *channelMap) deleteEntry(id int64) entry {
- if v, ok := c.sockets[id]; ok {
- delete(c.sockets, id)
- return v
- }
- if v, ok := c.subChannels[id]; ok {
- delete(c.subChannels, id)
- return v
- }
- if v, ok := c.channels[id]; ok {
- delete(c.channels, id)
- delete(c.topLevelChannels, id)
- return v
- }
- if v, ok := c.servers[id]; ok {
- delete(c.servers, id)
- return v
- }
- return &dummyEntry{idNotFound: id}
-}
-
-func (c *channelMap) traceEvent(id int64, desc *TraceEvent) {
- c.mu.Lock()
- defer c.mu.Unlock()
- child := c.findEntry(id)
- childTC, ok := child.(tracedChannel)
- if !ok {
- return
- }
- childTC.getChannelTrace().append(&traceEvent{Desc: desc.Desc, Severity: desc.Severity, Timestamp: time.Now()})
- if desc.Parent != nil {
- parent := c.findEntry(child.getParentID())
- var chanType RefChannelType
- switch child.(type) {
- case *Channel:
- chanType = RefChannel
- case *SubChannel:
- chanType = RefSubChannel
- }
- if parentTC, ok := parent.(tracedChannel); ok {
- parentTC.getChannelTrace().append(&traceEvent{
- Desc: desc.Parent.Desc,
- Severity: desc.Parent.Severity,
- Timestamp: time.Now(),
- RefID: id,
- RefName: childTC.getRefName(),
- RefType: chanType,
- })
- childTC.incrTraceRefCount()
- }
- }
-}
-
-type int64Slice []int64
-
-func (s int64Slice) Len() int { return len(s) }
-func (s int64Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s int64Slice) Less(i, j int) bool { return s[i] < s[j] }
-
-func copyMap(m map[int64]string) map[int64]string {
- n := make(map[int64]string)
- for k, v := range m {
- n[k] = v
- }
- return n
-}
-
-func (c *channelMap) getTopChannels(id int64, maxResults int) ([]*Channel, bool) {
- if maxResults <= 0 {
- maxResults = EntriesPerPage
- }
- c.mu.RLock()
- defer c.mu.RUnlock()
- l := int64(len(c.topLevelChannels))
- ids := make([]int64, 0, l)
-
- for k := range c.topLevelChannels {
- ids = append(ids, k)
- }
- sort.Sort(int64Slice(ids))
- idx := sort.Search(len(ids), func(i int) bool { return ids[i] >= id })
- end := true
- var t []*Channel
- for _, v := range ids[idx:] {
- if len(t) == maxResults {
- end = false
- break
- }
- if cn, ok := c.channels[v]; ok {
- t = append(t, cn)
- }
- }
- return t, end
-}
-
-func (c *channelMap) getServers(id int64, maxResults int) ([]*Server, bool) {
- if maxResults <= 0 {
- maxResults = EntriesPerPage
- }
- c.mu.RLock()
- defer c.mu.RUnlock()
- ids := make([]int64, 0, len(c.servers))
- for k := range c.servers {
- ids = append(ids, k)
- }
- sort.Sort(int64Slice(ids))
- idx := sort.Search(len(ids), func(i int) bool { return ids[i] >= id })
- end := true
- var s []*Server
- for _, v := range ids[idx:] {
- if len(s) == maxResults {
- end = false
- break
- }
- if svr, ok := c.servers[v]; ok {
- s = append(s, svr)
- }
- }
- return s, end
-}
-
-func (c *channelMap) getServerSockets(id int64, startID int64, maxResults int) ([]*Socket, bool) {
- if maxResults <= 0 {
- maxResults = EntriesPerPage
- }
- c.mu.RLock()
- defer c.mu.RUnlock()
- svr, ok := c.servers[id]
- if !ok {
- // server with id doesn't exist.
- return nil, true
- }
- svrskts := svr.sockets
- ids := make([]int64, 0, len(svrskts))
- sks := make([]*Socket, 0, min(len(svrskts), maxResults))
- for k := range svrskts {
- ids = append(ids, k)
- }
- sort.Sort(int64Slice(ids))
- idx := sort.Search(len(ids), func(i int) bool { return ids[i] >= startID })
- end := true
- for _, v := range ids[idx:] {
- if len(sks) == maxResults {
- end = false
- break
- }
- if ns, ok := c.sockets[v]; ok {
- sks = append(sks, ns)
- }
- }
- return sks, end
-}
-
-func (c *channelMap) getChannel(id int64) *Channel {
- c.mu.RLock()
- defer c.mu.RUnlock()
- return c.channels[id]
-}
-
-func (c *channelMap) getSubChannel(id int64) *SubChannel {
- c.mu.RLock()
- defer c.mu.RUnlock()
- return c.subChannels[id]
-}
-
-func (c *channelMap) getSocket(id int64) *Socket {
- c.mu.RLock()
- defer c.mu.RUnlock()
- return c.sockets[id]
-}
-
-func (c *channelMap) getServer(id int64) *Server {
- c.mu.RLock()
- defer c.mu.RUnlock()
- return c.servers[id]
-}
-
-type dummyEntry struct {
- // dummyEntry is a fake entry to handle entry not found case.
- idNotFound int64
- Entity
-}
-
-func (d *dummyEntry) String() string {
- return fmt.Sprintf("non-existent entity #%d", d.idNotFound)
-}
-
-func (d *dummyEntry) ID() int64 { return d.idNotFound }
-
-func (d *dummyEntry) addChild(id int64, e entry) {
- // Note: It is possible for a normal program to reach here under race
- // condition. For example, there could be a race between ClientConn.Close()
- // info being propagated to addrConn and http2Client. ClientConn.Close()
- // cancel the context and result in http2Client to error. The error info is
- // then caught by transport monitor and before addrConn.tearDown() is called
- // in side ClientConn.Close(). Therefore, the addrConn will create a new
- // transport. And when registering the new transport in channelz, its parent
- // addrConn could have already been torn down and deleted from channelz
- // tracking, and thus reach the code here.
- logger.Infof("attempt to add child of type %T with id %d to a parent (id=%d) that doesn't currently exist", e, id, d.idNotFound)
-}
-
-func (d *dummyEntry) deleteChild(id int64) {
- // It is possible for a normal program to reach here under race condition.
- // Refer to the example described in addChild().
- logger.Infof("attempt to delete child with id %d from a parent (id=%d) that doesn't currently exist", id, d.idNotFound)
-}
-
-func (d *dummyEntry) triggerDelete() {
- logger.Warningf("attempt to delete an entry (id=%d) that doesn't currently exist", d.idNotFound)
-}
-
-func (*dummyEntry) deleteSelfIfReady() {
- // code should not reach here. deleteSelfIfReady is always called on an existing entry.
-}
-
-func (*dummyEntry) getParentID() int64 {
- return 0
-}
-
-// Entity is implemented by all channelz types.
-type Entity interface {
- isEntity()
- fmt.Stringer
- id() int64
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/funcs.go b/vendor/google.golang.org/grpc/internal/channelz/funcs.go
deleted file mode 100644
index 078bb8123..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/funcs.go
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package channelz defines internal APIs for enabling channelz service, entry
-// registration/deletion, and accessing channelz data. It also defines channelz
-// metric struct formats.
-package channelz
-
-import (
- "sync/atomic"
- "time"
-
- "google.golang.org/grpc/internal"
-)
-
-var (
- // IDGen is the global channelz entity ID generator. It should not be used
- // outside this package except by tests.
- IDGen IDGenerator
-
- db = newChannelMap()
- // EntriesPerPage defines the number of channelz entries to be shown on a web page.
- EntriesPerPage = 50
- curState int32
-)
-
-// TurnOn turns on channelz data collection.
-func TurnOn() {
- atomic.StoreInt32(&curState, 1)
-}
-
-func init() {
- internal.ChannelzTurnOffForTesting = func() {
- atomic.StoreInt32(&curState, 0)
- }
-}
-
-// IsOn returns whether channelz data collection is on.
-func IsOn() bool {
- return atomic.LoadInt32(&curState) == 1
-}
-
-// GetTopChannels returns a slice of top channel's ChannelMetric, along with a
-// boolean indicating whether there's more top channels to be queried for.
-//
-// The arg id specifies that only top channel with id at or above it will be
-// included in the result. The returned slice is up to a length of the arg
-// maxResults or EntriesPerPage if maxResults is zero, and is sorted in ascending
-// id order.
-func GetTopChannels(id int64, maxResults int) ([]*Channel, bool) {
- return db.getTopChannels(id, maxResults)
-}
-
-// GetServers returns a slice of server's ServerMetric, along with a
-// boolean indicating whether there's more servers to be queried for.
-//
-// The arg id specifies that only server with id at or above it will be included
-// in the result. The returned slice is up to a length of the arg maxResults or
-// EntriesPerPage if maxResults is zero, and is sorted in ascending id order.
-func GetServers(id int64, maxResults int) ([]*Server, bool) {
- return db.getServers(id, maxResults)
-}
-
-// GetServerSockets returns a slice of server's (identified by id) normal socket's
-// SocketMetrics, along with a boolean indicating whether there's more sockets to
-// be queried for.
-//
-// The arg startID specifies that only sockets with id at or above it will be
-// included in the result. The returned slice is up to a length of the arg maxResults
-// or EntriesPerPage if maxResults is zero, and is sorted in ascending id order.
-func GetServerSockets(id int64, startID int64, maxResults int) ([]*Socket, bool) {
- return db.getServerSockets(id, startID, maxResults)
-}
-
-// GetChannel returns the Channel for the channel (identified by id).
-func GetChannel(id int64) *Channel {
- return db.getChannel(id)
-}
-
-// GetSubChannel returns the SubChannel for the subchannel (identified by id).
-func GetSubChannel(id int64) *SubChannel {
- return db.getSubChannel(id)
-}
-
-// GetSocket returns the Socket for the socket (identified by id).
-func GetSocket(id int64) *Socket {
- return db.getSocket(id)
-}
-
-// GetServer returns the ServerMetric for the server (identified by id).
-func GetServer(id int64) *Server {
- return db.getServer(id)
-}
-
-// RegisterChannel registers the given channel c in the channelz database with
-// target as its target and reference name, and adds it to the child list of its
-// parent. parent == nil means no parent.
-//
-// Returns a unique channelz identifier assigned to this channel.
-//
-// If channelz is not turned ON, the channelz database is not mutated.
-func RegisterChannel(parent *Channel, target string) *Channel {
- id := IDGen.genID()
-
- if !IsOn() {
- return &Channel{ID: id}
- }
-
- isTopChannel := parent == nil
-
- cn := &Channel{
- ID: id,
- RefName: target,
- nestedChans: make(map[int64]string),
- subChans: make(map[int64]string),
- Parent: parent,
- trace: &ChannelTrace{CreationTime: time.Now(), Events: make([]*traceEvent, 0, getMaxTraceEntry())},
- }
- cn.ChannelMetrics.Target.Store(&target)
- db.addChannel(id, cn, isTopChannel, cn.getParentID())
- return cn
-}
-
-// RegisterSubChannel registers the given subChannel c in the channelz database
-// with ref as its reference name, and adds it to the child list of its parent
-// (identified by pid).
-//
-// Returns a unique channelz identifier assigned to this subChannel.
-//
-// If channelz is not turned ON, the channelz database is not mutated.
-func RegisterSubChannel(parent *Channel, ref string) *SubChannel {
- id := IDGen.genID()
- sc := &SubChannel{
- ID: id,
- RefName: ref,
- parent: parent,
- }
-
- if !IsOn() {
- return sc
- }
-
- sc.sockets = make(map[int64]string)
- sc.trace = &ChannelTrace{CreationTime: time.Now(), Events: make([]*traceEvent, 0, getMaxTraceEntry())}
- db.addSubChannel(id, sc, parent.ID)
- return sc
-}
-
-// RegisterServer registers the given server s in channelz database. It returns
-// the unique channelz tracking id assigned to this server.
-//
-// If channelz is not turned ON, the channelz database is not mutated.
-func RegisterServer(ref string) *Server {
- id := IDGen.genID()
- if !IsOn() {
- return &Server{ID: id}
- }
-
- svr := &Server{
- RefName: ref,
- sockets: make(map[int64]string),
- listenSockets: make(map[int64]string),
- ID: id,
- }
- db.addServer(id, svr)
- return svr
-}
-
-// RegisterSocket registers the given normal socket s in channelz database
-// with ref as its reference name, and adds it to the child list of its parent
-// (identified by skt.Parent, which must be set). It returns the unique channelz
-// tracking id assigned to this normal socket.
-//
-// If channelz is not turned ON, the channelz database is not mutated.
-func RegisterSocket(skt *Socket) *Socket {
- skt.ID = IDGen.genID()
- if IsOn() {
- db.addSocket(skt)
- }
- return skt
-}
-
-// RemoveEntry removes an entry with unique channelz tracking id to be id from
-// channelz database.
-//
-// If channelz is not turned ON, this function is a no-op.
-func RemoveEntry(id int64) {
- if !IsOn() {
- return
- }
- db.removeEntry(id)
-}
-
-// IDGenerator is an incrementing atomic that tracks IDs for channelz entities.
-type IDGenerator struct {
- id int64
-}
-
-// Reset resets the generated ID back to zero. Should only be used at
-// initialization or by tests sensitive to the ID number.
-func (i *IDGenerator) Reset() {
- atomic.StoreInt64(&i.id, 0)
-}
-
-func (i *IDGenerator) genID() int64 {
- return atomic.AddInt64(&i.id, 1)
-}
-
-// Identifier is an opaque channelz identifier used to expose channelz symbols
-// outside of grpc. Currently only implemented by Channel since no other
-// types require exposure outside grpc.
-type Identifier interface {
- Entity
- channelzIdentifier()
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/logging.go b/vendor/google.golang.org/grpc/internal/channelz/logging.go
deleted file mode 100644
index ee4d72125..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/logging.go
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
-
- "google.golang.org/grpc/grpclog"
-)
-
-var logger = grpclog.Component("channelz")
-
-// Info logs and adds a trace event if channelz is on.
-func Info(l grpclog.DepthLoggerV2, e Entity, args ...any) {
- AddTraceEvent(l, e, 1, &TraceEvent{
- Desc: fmt.Sprint(args...),
- Severity: CtInfo,
- })
-}
-
-// Infof logs and adds a trace event if channelz is on.
-func Infof(l grpclog.DepthLoggerV2, e Entity, format string, args ...any) {
- AddTraceEvent(l, e, 1, &TraceEvent{
- Desc: fmt.Sprintf(format, args...),
- Severity: CtInfo,
- })
-}
-
-// Warning logs and adds a trace event if channelz is on.
-func Warning(l grpclog.DepthLoggerV2, e Entity, args ...any) {
- AddTraceEvent(l, e, 1, &TraceEvent{
- Desc: fmt.Sprint(args...),
- Severity: CtWarning,
- })
-}
-
-// Warningf logs and adds a trace event if channelz is on.
-func Warningf(l grpclog.DepthLoggerV2, e Entity, format string, args ...any) {
- AddTraceEvent(l, e, 1, &TraceEvent{
- Desc: fmt.Sprintf(format, args...),
- Severity: CtWarning,
- })
-}
-
-// Error logs and adds a trace event if channelz is on.
-func Error(l grpclog.DepthLoggerV2, e Entity, args ...any) {
- AddTraceEvent(l, e, 1, &TraceEvent{
- Desc: fmt.Sprint(args...),
- Severity: CtError,
- })
-}
-
-// Errorf logs and adds a trace event if channelz is on.
-func Errorf(l grpclog.DepthLoggerV2, e Entity, format string, args ...any) {
- AddTraceEvent(l, e, 1, &TraceEvent{
- Desc: fmt.Sprintf(format, args...),
- Severity: CtError,
- })
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/server.go b/vendor/google.golang.org/grpc/internal/channelz/server.go
deleted file mode 100644
index b5a824992..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/server.go
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
- "sync/atomic"
-)
-
-// Server is the channelz representation of a server.
-type Server struct {
- Entity
- ID int64
- RefName string
-
- ServerMetrics ServerMetrics
-
- closeCalled bool
- sockets map[int64]string
- listenSockets map[int64]string
- cm *channelMap
-}
-
-// ServerMetrics defines a struct containing metrics for servers.
-type ServerMetrics struct {
- // The number of incoming calls started on the server.
- CallsStarted atomic.Int64
- // The number of incoming calls that have completed with an OK status.
- CallsSucceeded atomic.Int64
- // The number of incoming calls that have a completed with a non-OK status.
- CallsFailed atomic.Int64
- // The last time a call was started on the server.
- LastCallStartedTimestamp atomic.Int64
-}
-
-// NewServerMetricsForTesting returns an initialized ServerMetrics.
-func NewServerMetricsForTesting(started, succeeded, failed, timestamp int64) *ServerMetrics {
- sm := &ServerMetrics{}
- sm.CallsStarted.Store(started)
- sm.CallsSucceeded.Store(succeeded)
- sm.CallsFailed.Store(failed)
- sm.LastCallStartedTimestamp.Store(timestamp)
- return sm
-}
-
-// CopyFrom copies the metrics data from the provided ServerMetrics
-// instance into the current instance.
-func (sm *ServerMetrics) CopyFrom(o *ServerMetrics) {
- sm.CallsStarted.Store(o.CallsStarted.Load())
- sm.CallsSucceeded.Store(o.CallsSucceeded.Load())
- sm.CallsFailed.Store(o.CallsFailed.Load())
- sm.LastCallStartedTimestamp.Store(o.LastCallStartedTimestamp.Load())
-}
-
-// ListenSockets returns the listening sockets for s.
-func (s *Server) ListenSockets() map[int64]string {
- db.mu.RLock()
- defer db.mu.RUnlock()
- return copyMap(s.listenSockets)
-}
-
-// String returns a printable description of s.
-func (s *Server) String() string {
- return fmt.Sprintf("Server #%d", s.ID)
-}
-
-func (s *Server) id() int64 {
- return s.ID
-}
-
-func (s *Server) addChild(id int64, e entry) {
- switch v := e.(type) {
- case *Socket:
- switch v.SocketType {
- case SocketTypeNormal:
- s.sockets[id] = v.RefName
- case SocketTypeListen:
- s.listenSockets[id] = v.RefName
- }
- default:
- logger.Errorf("cannot add a child (id = %d) of type %T to a server", id, e)
- }
-}
-
-func (s *Server) deleteChild(id int64) {
- delete(s.sockets, id)
- delete(s.listenSockets, id)
- s.deleteSelfIfReady()
-}
-
-func (s *Server) triggerDelete() {
- s.closeCalled = true
- s.deleteSelfIfReady()
-}
-
-func (s *Server) deleteSelfIfReady() {
- if !s.closeCalled || len(s.sockets)+len(s.listenSockets) != 0 {
- return
- }
- s.cm.deleteEntry(s.ID)
-}
-
-func (s *Server) getParentID() int64 {
- return 0
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/socket.go b/vendor/google.golang.org/grpc/internal/channelz/socket.go
deleted file mode 100644
index 90103847c..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/socket.go
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
- "net"
- "sync/atomic"
-
- "google.golang.org/grpc/credentials"
-)
-
-// SocketMetrics defines the struct that the implementor of Socket interface
-// should return from ChannelzMetric().
-type SocketMetrics struct {
- // The number of streams that have been started.
- StreamsStarted atomic.Int64
- // The number of streams that have ended successfully:
- // On client side, receiving frame with eos bit set.
- // On server side, sending frame with eos bit set.
- StreamsSucceeded atomic.Int64
- // The number of streams that have ended unsuccessfully:
- // On client side, termination without receiving frame with eos bit set.
- // On server side, termination without sending frame with eos bit set.
- StreamsFailed atomic.Int64
- // The number of messages successfully sent on this socket.
- MessagesSent atomic.Int64
- MessagesReceived atomic.Int64
- // The number of keep alives sent. This is typically implemented with HTTP/2
- // ping messages.
- KeepAlivesSent atomic.Int64
- // The last time a stream was created by this endpoint. Usually unset for
- // servers.
- LastLocalStreamCreatedTimestamp atomic.Int64
- // The last time a stream was created by the remote endpoint. Usually unset
- // for clients.
- LastRemoteStreamCreatedTimestamp atomic.Int64
- // The last time a message was sent by this endpoint.
- LastMessageSentTimestamp atomic.Int64
- // The last time a message was received by this endpoint.
- LastMessageReceivedTimestamp atomic.Int64
-}
-
-// EphemeralSocketMetrics are metrics that change rapidly and are tracked
-// outside of channelz.
-type EphemeralSocketMetrics struct {
- // The amount of window, granted to the local endpoint by the remote endpoint.
- // This may be slightly out of date due to network latency. This does NOT
- // include stream level or TCP level flow control info.
- LocalFlowControlWindow int64
- // The amount of window, granted to the remote endpoint by the local endpoint.
- // This may be slightly out of date due to network latency. This does NOT
- // include stream level or TCP level flow control info.
- RemoteFlowControlWindow int64
-}
-
-// SocketType represents the type of socket.
-type SocketType string
-
-// SocketType can be one of these.
-const (
- SocketTypeNormal = "NormalSocket"
- SocketTypeListen = "ListenSocket"
-)
-
-// Socket represents a socket within channelz which includes socket
-// metrics and data related to socket activity and provides methods
-// for managing and interacting with sockets.
-type Socket struct {
- Entity
- SocketType SocketType
- ID int64
- Parent Entity
- cm *channelMap
- SocketMetrics SocketMetrics
- EphemeralMetrics func() *EphemeralSocketMetrics
-
- RefName string
- // The locally bound address. Immutable.
- LocalAddr net.Addr
- // The remote bound address. May be absent. Immutable.
- RemoteAddr net.Addr
- // Optional, represents the name of the remote endpoint, if different than
- // the original target name. Immutable.
- RemoteName string
- // Immutable.
- SocketOptions *SocketOptionData
- // Immutable.
- Security credentials.ChannelzSecurityValue
-}
-
-// String returns a string representation of the Socket, including its parent
-// entity, socket type, and ID.
-func (ls *Socket) String() string {
- return fmt.Sprintf("%s %s #%d", ls.Parent, ls.SocketType, ls.ID)
-}
-
-func (ls *Socket) id() int64 {
- return ls.ID
-}
-
-func (ls *Socket) addChild(id int64, e entry) {
- logger.Errorf("cannot add a child (id = %d) of type %T to a listen socket", id, e)
-}
-
-func (ls *Socket) deleteChild(id int64) {
- logger.Errorf("cannot delete a child (id = %d) from a listen socket", id)
-}
-
-func (ls *Socket) triggerDelete() {
- ls.cm.deleteEntry(ls.ID)
- ls.Parent.(entry).deleteChild(ls.ID)
-}
-
-func (ls *Socket) deleteSelfIfReady() {
- logger.Errorf("cannot call deleteSelfIfReady on a listen socket")
-}
-
-func (ls *Socket) getParentID() int64 {
- return ls.Parent.id()
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/subchannel.go b/vendor/google.golang.org/grpc/internal/channelz/subchannel.go
deleted file mode 100644
index b20802e6e..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/subchannel.go
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
- "sync/atomic"
-)
-
-// SubChannel is the channelz representation of a subchannel.
-type SubChannel struct {
- Entity
- // ID is the channelz id of this subchannel.
- ID int64
- // RefName is the human readable reference string of this subchannel.
- RefName string
- closeCalled bool
- sockets map[int64]string
- parent *Channel
- trace *ChannelTrace
- traceRefCount int32
-
- ChannelMetrics ChannelMetrics
-}
-
-func (sc *SubChannel) String() string {
- return fmt.Sprintf("%s SubChannel #%d", sc.parent, sc.ID)
-}
-
-func (sc *SubChannel) id() int64 {
- return sc.ID
-}
-
-// Sockets returns a copy of the sockets map associated with the SubChannel.
-func (sc *SubChannel) Sockets() map[int64]string {
- db.mu.RLock()
- defer db.mu.RUnlock()
- return copyMap(sc.sockets)
-}
-
-// Trace returns a copy of the ChannelTrace associated with the SubChannel.
-func (sc *SubChannel) Trace() *ChannelTrace {
- db.mu.RLock()
- defer db.mu.RUnlock()
- return sc.trace.copy()
-}
-
-func (sc *SubChannel) addChild(id int64, e entry) {
- if v, ok := e.(*Socket); ok && v.SocketType == SocketTypeNormal {
- sc.sockets[id] = v.RefName
- } else {
- logger.Errorf("cannot add a child (id = %d) of type %T to a subChannel", id, e)
- }
-}
-
-func (sc *SubChannel) deleteChild(id int64) {
- delete(sc.sockets, id)
- sc.deleteSelfIfReady()
-}
-
-func (sc *SubChannel) triggerDelete() {
- sc.closeCalled = true
- sc.deleteSelfIfReady()
-}
-
-func (sc *SubChannel) getParentID() int64 {
- return sc.parent.ID
-}
-
-// deleteSelfFromTree tries to delete the subchannel from the channelz entry relation tree, which
-// means deleting the subchannel reference from its parent's child list.
-//
-// In order for a subchannel to be deleted from the tree, it must meet the criteria that, removal of
-// the corresponding grpc object has been invoked, and the subchannel does not have any children left.
-//
-// The returned boolean value indicates whether the channel has been successfully deleted from tree.
-func (sc *SubChannel) deleteSelfFromTree() (deleted bool) {
- if !sc.closeCalled || len(sc.sockets) != 0 {
- return false
- }
- sc.parent.deleteChild(sc.ID)
- return true
-}
-
-// deleteSelfFromMap checks whether it is valid to delete the subchannel from the map, which means
-// deleting the subchannel from channelz's tracking entirely. Users can no longer use id to query
-// the subchannel, and its memory will be garbage collected.
-//
-// The trace reference count of the subchannel must be 0 in order to be deleted from the map. This is
-// specified in the channel tracing gRFC that as long as some other trace has reference to an entity,
-// the trace of the referenced entity must not be deleted. In order to release the resource allocated
-// by grpc, the reference to the grpc object is reset to a dummy object.
-//
-// deleteSelfFromMap must be called after deleteSelfFromTree returns true.
-//
-// It returns a bool to indicate whether the channel can be safely deleted from map.
-func (sc *SubChannel) deleteSelfFromMap() (delete bool) {
- return sc.getTraceRefCount() == 0
-}
-
-// deleteSelfIfReady tries to delete the subchannel itself from the channelz database.
-// The delete process includes two steps:
-// 1. delete the subchannel from the entry relation tree, i.e. delete the subchannel reference from
-// its parent's child list.
-// 2. delete the subchannel from the map, i.e. delete the subchannel entirely from channelz. Lookup
-// by id will return entry not found error.
-func (sc *SubChannel) deleteSelfIfReady() {
- if !sc.deleteSelfFromTree() {
- return
- }
- if !sc.deleteSelfFromMap() {
- return
- }
- db.deleteEntry(sc.ID)
- sc.trace.clear()
-}
-
-func (sc *SubChannel) getChannelTrace() *ChannelTrace {
- return sc.trace
-}
-
-func (sc *SubChannel) incrTraceRefCount() {
- atomic.AddInt32(&sc.traceRefCount, 1)
-}
-
-func (sc *SubChannel) decrTraceRefCount() {
- atomic.AddInt32(&sc.traceRefCount, -1)
-}
-
-func (sc *SubChannel) getTraceRefCount() int {
- i := atomic.LoadInt32(&sc.traceRefCount)
- return int(i)
-}
-
-func (sc *SubChannel) getRefName() string {
- return sc.RefName
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/syscall_linux.go b/vendor/google.golang.org/grpc/internal/channelz/syscall_linux.go
deleted file mode 100644
index 5ac73ff83..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/syscall_linux.go
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "syscall"
-
- "golang.org/x/sys/unix"
-)
-
-// SocketOptionData defines the struct to hold socket option data, and related
-// getter function to obtain info from fd.
-type SocketOptionData struct {
- Linger *unix.Linger
- RecvTimeout *unix.Timeval
- SendTimeout *unix.Timeval
- TCPInfo *unix.TCPInfo
-}
-
-// Getsockopt defines the function to get socket options requested by channelz.
-// It is to be passed to syscall.RawConn.Control().
-func (s *SocketOptionData) Getsockopt(fd uintptr) {
- if v, err := unix.GetsockoptLinger(int(fd), syscall.SOL_SOCKET, syscall.SO_LINGER); err == nil {
- s.Linger = v
- }
- if v, err := unix.GetsockoptTimeval(int(fd), syscall.SOL_SOCKET, syscall.SO_RCVTIMEO); err == nil {
- s.RecvTimeout = v
- }
- if v, err := unix.GetsockoptTimeval(int(fd), syscall.SOL_SOCKET, syscall.SO_SNDTIMEO); err == nil {
- s.SendTimeout = v
- }
- if v, err := unix.GetsockoptTCPInfo(int(fd), syscall.SOL_TCP, syscall.TCP_INFO); err == nil {
- s.TCPInfo = v
- }
-}
-
-// GetSocketOption gets the socket option info of the conn.
-func GetSocketOption(socket any) *SocketOptionData {
- c, ok := socket.(syscall.Conn)
- if !ok {
- return nil
- }
- data := &SocketOptionData{}
- if rawConn, err := c.SyscallConn(); err == nil {
- rawConn.Control(data.Getsockopt)
- return data
- }
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go
deleted file mode 100644
index 0e6e18e18..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/syscall_nonlinux.go
+++ /dev/null
@@ -1,47 +0,0 @@
-//go:build !linux
-
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "sync"
-)
-
-var once sync.Once
-
-// SocketOptionData defines the struct to hold socket option data, and related
-// getter function to obtain info from fd.
-// Windows OS doesn't support Socket Option
-type SocketOptionData struct {
-}
-
-// Getsockopt defines the function to get socket options requested by channelz.
-// It is to be passed to syscall.RawConn.Control().
-// Windows OS doesn't support Socket Option
-func (s *SocketOptionData) Getsockopt(uintptr) {
- once.Do(func() {
- logger.Warning("Channelz: socket options are not supported on non-linux environments")
- })
-}
-
-// GetSocketOption gets the socket option info of the conn.
-func GetSocketOption(any) *SocketOptionData {
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/channelz/trace.go b/vendor/google.golang.org/grpc/internal/channelz/trace.go
deleted file mode 100644
index 2bffe4777..000000000
--- a/vendor/google.golang.org/grpc/internal/channelz/trace.go
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package channelz
-
-import (
- "fmt"
- "sync"
- "sync/atomic"
- "time"
-
- "google.golang.org/grpc/grpclog"
-)
-
-const (
- defaultMaxTraceEntry int32 = 30
-)
-
-var maxTraceEntry = defaultMaxTraceEntry
-
-// SetMaxTraceEntry sets maximum number of trace entries per entity (i.e.
-// channel/subchannel). Setting it to 0 will disable channel tracing.
-func SetMaxTraceEntry(i int32) {
- atomic.StoreInt32(&maxTraceEntry, i)
-}
-
-// ResetMaxTraceEntryToDefault resets the maximum number of trace entries per
-// entity to default.
-func ResetMaxTraceEntryToDefault() {
- atomic.StoreInt32(&maxTraceEntry, defaultMaxTraceEntry)
-}
-
-func getMaxTraceEntry() int {
- i := atomic.LoadInt32(&maxTraceEntry)
- return int(i)
-}
-
-// traceEvent is an internal representation of a single trace event
-type traceEvent struct {
- // Desc is a simple description of the trace event.
- Desc string
- // Severity states the severity of this trace event.
- Severity Severity
- // Timestamp is the event time.
- Timestamp time.Time
- // RefID is the id of the entity that gets referenced in the event. RefID is 0 if no other entity is
- // involved in this event.
- // e.g. SubChannel (id: 4[]) Created. --> RefID = 4, RefName = "" (inside [])
- RefID int64
- // RefName is the reference name for the entity that gets referenced in the event.
- RefName string
- // RefType indicates the referenced entity type, i.e Channel or SubChannel.
- RefType RefChannelType
-}
-
-// TraceEvent is what the caller of AddTraceEvent should provide to describe the
-// event to be added to the channel trace.
-//
-// The Parent field is optional. It is used for an event that will be recorded
-// in the entity's parent trace.
-type TraceEvent struct {
- Desc string
- Severity Severity
- Parent *TraceEvent
-}
-
-// ChannelTrace provides tracing information for a channel.
-// It tracks various events and metadata related to the channel's lifecycle
-// and operations.
-type ChannelTrace struct {
- cm *channelMap
- clearCalled bool
- // The time when the trace was created.
- CreationTime time.Time
- // A counter for the number of events recorded in the
- // trace.
- EventNum int64
- mu sync.Mutex
- // A slice of traceEvent pointers representing the events recorded for
- // this channel.
- Events []*traceEvent
-}
-
-func (c *ChannelTrace) copy() *ChannelTrace {
- return &ChannelTrace{
- CreationTime: c.CreationTime,
- EventNum: c.EventNum,
- Events: append(([]*traceEvent)(nil), c.Events...),
- }
-}
-
-func (c *ChannelTrace) append(e *traceEvent) {
- c.mu.Lock()
- if len(c.Events) == getMaxTraceEntry() {
- del := c.Events[0]
- c.Events = c.Events[1:]
- if del.RefID != 0 {
- // start recursive cleanup in a goroutine to not block the call originated from grpc.
- go func() {
- // need to acquire c.cm.mu lock to call the unlocked attemptCleanup func.
- c.cm.mu.Lock()
- c.cm.decrTraceRefCount(del.RefID)
- c.cm.mu.Unlock()
- }()
- }
- }
- e.Timestamp = time.Now()
- c.Events = append(c.Events, e)
- c.EventNum++
- c.mu.Unlock()
-}
-
-func (c *ChannelTrace) clear() {
- if c.clearCalled {
- return
- }
- c.clearCalled = true
- c.mu.Lock()
- for _, e := range c.Events {
- if e.RefID != 0 {
- // caller should have already held the c.cm.mu lock.
- c.cm.decrTraceRefCount(e.RefID)
- }
- }
- c.mu.Unlock()
-}
-
-// Severity is the severity level of a trace event.
-// The canonical enumeration of all valid values is here:
-// https://github.com/grpc/grpc-proto/blob/9b13d199cc0d4703c7ea26c9c330ba695866eb23/grpc/channelz/v1/channelz.proto#L126.
-type Severity int
-
-const (
- // CtUnknown indicates unknown severity of a trace event.
- CtUnknown Severity = iota
- // CtInfo indicates info level severity of a trace event.
- CtInfo
- // CtWarning indicates warning level severity of a trace event.
- CtWarning
- // CtError indicates error level severity of a trace event.
- CtError
-)
-
-// RefChannelType is the type of the entity being referenced in a trace event.
-type RefChannelType int
-
-const (
- // RefUnknown indicates an unknown entity type, the zero value for this type.
- RefUnknown RefChannelType = iota
- // RefChannel indicates the referenced entity is a Channel.
- RefChannel
- // RefSubChannel indicates the referenced entity is a SubChannel.
- RefSubChannel
- // RefServer indicates the referenced entity is a Server.
- RefServer
- // RefListenSocket indicates the referenced entity is a ListenSocket.
- RefListenSocket
- // RefNormalSocket indicates the referenced entity is a NormalSocket.
- RefNormalSocket
-)
-
-var refChannelTypeToString = map[RefChannelType]string{
- RefUnknown: "Unknown",
- RefChannel: "Channel",
- RefSubChannel: "SubChannel",
- RefServer: "Server",
- RefListenSocket: "ListenSocket",
- RefNormalSocket: "NormalSocket",
-}
-
-// String returns a string representation of the RefChannelType
-func (r RefChannelType) String() string {
- return refChannelTypeToString[r]
-}
-
-// AddTraceEvent adds trace related to the entity with specified id, using the
-// provided TraceEventDesc.
-//
-// If channelz is not turned ON, this will simply log the event descriptions.
-func AddTraceEvent(l grpclog.DepthLoggerV2, e Entity, depth int, desc *TraceEvent) {
- // Log only the trace description associated with the bottom most entity.
- d := fmt.Sprintf("[%s]%s", e, desc.Desc)
- switch desc.Severity {
- case CtUnknown, CtInfo:
- l.InfoDepth(depth+1, d)
- case CtWarning:
- l.WarningDepth(depth+1, d)
- case CtError:
- l.ErrorDepth(depth+1, d)
- }
-
- if getMaxTraceEntry() == 0 {
- return
- }
- if IsOn() {
- db.traceEvent(e.id(), desc)
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/credentials/credentials.go b/vendor/google.golang.org/grpc/internal/credentials/credentials.go
deleted file mode 100644
index 9deee7f65..000000000
--- a/vendor/google.golang.org/grpc/internal/credentials/credentials.go
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2021 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package credentials
-
-import (
- "context"
-)
-
-// requestInfoKey is a struct to be used as the key to store RequestInfo in a
-// context.
-type requestInfoKey struct{}
-
-// NewRequestInfoContext creates a context with ri.
-func NewRequestInfoContext(ctx context.Context, ri any) context.Context {
- return context.WithValue(ctx, requestInfoKey{}, ri)
-}
-
-// RequestInfoFromContext extracts the RequestInfo from ctx.
-func RequestInfoFromContext(ctx context.Context) any {
- return ctx.Value(requestInfoKey{})
-}
-
-// clientHandshakeInfoKey is a struct used as the key to store
-// ClientHandshakeInfo in a context.
-type clientHandshakeInfoKey struct{}
-
-// ClientHandshakeInfoFromContext extracts the ClientHandshakeInfo from ctx.
-func ClientHandshakeInfoFromContext(ctx context.Context) any {
- return ctx.Value(clientHandshakeInfoKey{})
-}
-
-// NewClientHandshakeInfoContext creates a context with chi.
-func NewClientHandshakeInfoContext(ctx context.Context, chi any) context.Context {
- return context.WithValue(ctx, clientHandshakeInfoKey{}, chi)
-}
diff --git a/vendor/google.golang.org/grpc/internal/credentials/spiffe.go b/vendor/google.golang.org/grpc/internal/credentials/spiffe.go
deleted file mode 100644
index 25ade6230..000000000
--- a/vendor/google.golang.org/grpc/internal/credentials/spiffe.go
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package credentials defines APIs for parsing SPIFFE ID.
-//
-// All APIs in this package are experimental.
-package credentials
-
-import (
- "crypto/tls"
- "crypto/x509"
- "net/url"
-
- "google.golang.org/grpc/grpclog"
-)
-
-var logger = grpclog.Component("credentials")
-
-// SPIFFEIDFromState parses the SPIFFE ID from State. If the SPIFFE ID format
-// is invalid, return nil with warning.
-func SPIFFEIDFromState(state tls.ConnectionState) *url.URL {
- if len(state.PeerCertificates) == 0 || len(state.PeerCertificates[0].URIs) == 0 {
- return nil
- }
- return SPIFFEIDFromCert(state.PeerCertificates[0])
-}
-
-// SPIFFEIDFromCert parses the SPIFFE ID from x509.Certificate. If the SPIFFE
-// ID format is invalid, return nil with warning.
-func SPIFFEIDFromCert(cert *x509.Certificate) *url.URL {
- if cert == nil || cert.URIs == nil {
- return nil
- }
- var spiffeID *url.URL
- for _, uri := range cert.URIs {
- if uri == nil || uri.Scheme != "spiffe" || uri.Opaque != "" || (uri.User != nil && uri.User.Username() != "") {
- continue
- }
- // From this point, we assume the uri is intended for a SPIFFE ID.
- if len(uri.String()) > 2048 {
- logger.Warning("invalid SPIFFE ID: total ID length larger than 2048 bytes")
- return nil
- }
- if len(uri.Host) == 0 || len(uri.Path) == 0 {
- logger.Warning("invalid SPIFFE ID: domain or workload ID is empty")
- return nil
- }
- if len(uri.Host) > 255 {
- logger.Warning("invalid SPIFFE ID: domain length larger than 255 characters")
- return nil
- }
- // A valid SPIFFE certificate can only have exactly one URI SAN field.
- if len(cert.URIs) > 1 {
- logger.Warning("invalid SPIFFE ID: multiple URI SANs")
- return nil
- }
- spiffeID = uri
- }
- return spiffeID
-}
diff --git a/vendor/google.golang.org/grpc/internal/credentials/syscallconn.go b/vendor/google.golang.org/grpc/internal/credentials/syscallconn.go
deleted file mode 100644
index 2919632d6..000000000
--- a/vendor/google.golang.org/grpc/internal/credentials/syscallconn.go
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package credentials
-
-import (
- "net"
- "syscall"
-)
-
-type sysConn = syscall.Conn
-
-// syscallConn keeps reference of rawConn to support syscall.Conn for channelz.
-// SyscallConn() (the method in interface syscall.Conn) is explicitly
-// implemented on this type,
-//
-// Interface syscall.Conn is implemented by most net.Conn implementations (e.g.
-// TCPConn, UnixConn), but is not part of net.Conn interface. So wrapper conns
-// that embed net.Conn don't implement syscall.Conn. (Side note: tls.Conn
-// doesn't embed net.Conn, so even if syscall.Conn is part of net.Conn, it won't
-// help here).
-type syscallConn struct {
- net.Conn
- // sysConn is a type alias of syscall.Conn. It's necessary because the name
- // `Conn` collides with `net.Conn`.
- sysConn
-}
-
-// WrapSyscallConn tries to wrap rawConn and newConn into a net.Conn that
-// implements syscall.Conn. rawConn will be used to support syscall, and newConn
-// will be used for read/write.
-//
-// This function returns newConn if rawConn doesn't implement syscall.Conn.
-func WrapSyscallConn(rawConn, newConn net.Conn) net.Conn {
- sysConn, ok := rawConn.(syscall.Conn)
- if !ok {
- return newConn
- }
- return &syscallConn{
- Conn: newConn,
- sysConn: sysConn,
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/credentials/util.go b/vendor/google.golang.org/grpc/internal/credentials/util.go
deleted file mode 100644
index f792fd22c..000000000
--- a/vendor/google.golang.org/grpc/internal/credentials/util.go
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package credentials
-
-import (
- "crypto/tls"
-)
-
-const alpnProtoStrH2 = "h2"
-
-// AppendH2ToNextProtos appends h2 to next protos.
-func AppendH2ToNextProtos(ps []string) []string {
- for _, p := range ps {
- if p == alpnProtoStrH2 {
- return ps
- }
- }
- ret := make([]string, 0, len(ps)+1)
- ret = append(ret, ps...)
- return append(ret, alpnProtoStrH2)
-}
-
-// CloneTLSConfig returns a shallow clone of the exported
-// fields of cfg, ignoring the unexported sync.Once, which
-// contains a mutex and must not be copied.
-//
-// If cfg is nil, a new zero tls.Config is returned.
-//
-// TODO: inline this function if possible.
-func CloneTLSConfig(cfg *tls.Config) *tls.Config {
- if cfg == nil {
- return &tls.Config{}
- }
-
- return cfg.Clone()
-}
diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
deleted file mode 100644
index 6e7dd6b77..000000000
--- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package envconfig contains grpc settings configured by environment variables.
-package envconfig
-
-import (
- "os"
- "strconv"
- "strings"
-)
-
-var (
- // TXTErrIgnore is set if TXT errors should be ignored ("GRPC_GO_IGNORE_TXT_ERRORS" is not "false").
- TXTErrIgnore = boolFromEnv("GRPC_GO_IGNORE_TXT_ERRORS", true)
- // RingHashCap indicates the maximum ring size which defaults to 4096
- // entries but may be overridden by setting the environment variable
- // "GRPC_RING_HASH_CAP". This does not override the default bounds
- // checking which NACKs configs specifying ring sizes > 8*1024*1024 (~8M).
- RingHashCap = uint64FromEnv("GRPC_RING_HASH_CAP", 4096, 1, 8*1024*1024)
- // LeastRequestLB is set if we should support the least_request_experimental
- // LB policy, which can be enabled by setting the environment variable
- // "GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST" to "true".
- LeastRequestLB = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST", false)
- // ALTSMaxConcurrentHandshakes is the maximum number of concurrent ALTS
- // handshakes that can be performed.
- ALTSMaxConcurrentHandshakes = uint64FromEnv("GRPC_ALTS_MAX_CONCURRENT_HANDSHAKES", 100, 1, 100)
- // EnforceALPNEnabled is set if TLS connections to servers with ALPN disabled
- // should be rejected. The HTTP/2 protocol requires ALPN to be enabled, this
- // option is present for backward compatibility. This option may be overridden
- // by setting the environment variable "GRPC_ENFORCE_ALPN_ENABLED" to "true"
- // or "false".
- EnforceALPNEnabled = boolFromEnv("GRPC_ENFORCE_ALPN_ENABLED", true)
- // XDSFallbackSupport is the env variable that controls whether support for
- // xDS fallback is turned on. If this is unset or is false, only the first
- // xDS server in the list of server configs will be used.
- XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", false)
- // NewPickFirstEnabled is set if the new pickfirst leaf policy is to be used
- // instead of the exiting pickfirst implementation. This can be enabled by
- // setting the environment variable "GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST"
- // to "true".
- NewPickFirstEnabled = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST", false)
-)
-
-func boolFromEnv(envVar string, def bool) bool {
- if def {
- // The default is true; return true unless the variable is "false".
- return !strings.EqualFold(os.Getenv(envVar), "false")
- }
- // The default is false; return false unless the variable is "true".
- return strings.EqualFold(os.Getenv(envVar), "true")
-}
-
-func uint64FromEnv(envVar string, def, min, max uint64) uint64 {
- v, err := strconv.ParseUint(os.Getenv(envVar), 10, 64)
- if err != nil {
- return def
- }
- if v < min {
- return min
- }
- if v > max {
- return max
- }
- return v
-}
diff --git a/vendor/google.golang.org/grpc/internal/envconfig/observability.go b/vendor/google.golang.org/grpc/internal/envconfig/observability.go
deleted file mode 100644
index dd314cfb1..000000000
--- a/vendor/google.golang.org/grpc/internal/envconfig/observability.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package envconfig
-
-import "os"
-
-const (
- envObservabilityConfig = "GRPC_GCP_OBSERVABILITY_CONFIG"
- envObservabilityConfigFile = "GRPC_GCP_OBSERVABILITY_CONFIG_FILE"
-)
-
-var (
- // ObservabilityConfig is the json configuration for the gcp/observability
- // package specified directly in the envObservabilityConfig env var.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- ObservabilityConfig = os.Getenv(envObservabilityConfig)
- // ObservabilityConfigFile is the json configuration for the
- // gcp/observability specified in a file with the location specified in
- // envObservabilityConfigFile env var.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- ObservabilityConfigFile = os.Getenv(envObservabilityConfigFile)
-)
diff --git a/vendor/google.golang.org/grpc/internal/envconfig/xds.go b/vendor/google.golang.org/grpc/internal/envconfig/xds.go
deleted file mode 100644
index 29f234acb..000000000
--- a/vendor/google.golang.org/grpc/internal/envconfig/xds.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package envconfig
-
-import (
- "os"
-)
-
-const (
- // XDSBootstrapFileNameEnv is the env variable to set bootstrap file name.
- // Do not use this and read from env directly. Its value is read and kept in
- // variable XDSBootstrapFileName.
- //
- // When both bootstrap FileName and FileContent are set, FileName is used.
- XDSBootstrapFileNameEnv = "GRPC_XDS_BOOTSTRAP"
- // XDSBootstrapFileContentEnv is the env variable to set bootstrap file
- // content. Do not use this and read from env directly. Its value is read
- // and kept in variable XDSBootstrapFileContent.
- //
- // When both bootstrap FileName and FileContent are set, FileName is used.
- XDSBootstrapFileContentEnv = "GRPC_XDS_BOOTSTRAP_CONFIG"
-)
-
-var (
- // XDSBootstrapFileName holds the name of the file which contains xDS
- // bootstrap configuration. Users can specify the location of the bootstrap
- // file by setting the environment variable "GRPC_XDS_BOOTSTRAP".
- //
- // When both bootstrap FileName and FileContent are set, FileName is used.
- XDSBootstrapFileName = os.Getenv(XDSBootstrapFileNameEnv)
- // XDSBootstrapFileContent holds the content of the xDS bootstrap
- // configuration. Users can specify the bootstrap config by setting the
- // environment variable "GRPC_XDS_BOOTSTRAP_CONFIG".
- //
- // When both bootstrap FileName and FileContent are set, FileName is used.
- XDSBootstrapFileContent = os.Getenv(XDSBootstrapFileContentEnv)
-
- // C2PResolverTestOnlyTrafficDirectorURI is the TD URI for testing.
- C2PResolverTestOnlyTrafficDirectorURI = os.Getenv("GRPC_TEST_ONLY_GOOGLE_C2P_RESOLVER_TRAFFIC_DIRECTOR_URI")
-)
diff --git a/vendor/google.golang.org/grpc/internal/experimental.go b/vendor/google.golang.org/grpc/internal/experimental.go
deleted file mode 100644
index 7617be215..000000000
--- a/vendor/google.golang.org/grpc/internal/experimental.go
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package internal
-
-var (
- // WithBufferPool is implemented by the grpc package and returns a dial
- // option to configure a shared buffer pool for a grpc.ClientConn.
- WithBufferPool any // func (grpc.SharedBufferPool) grpc.DialOption
-
- // BufferPool is implemented by the grpc package and returns a server
- // option to configure a shared buffer pool for a grpc.Server.
- BufferPool any // func (grpc.SharedBufferPool) grpc.ServerOption
-)
diff --git a/vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go b/vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go
deleted file mode 100644
index 092ad187a..000000000
--- a/vendor/google.golang.org/grpc/internal/grpclog/prefix_logger.go
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package grpclog provides logging functionality for internal gRPC packages,
-// outside of the functionality provided by the external `grpclog` package.
-package grpclog
-
-import (
- "fmt"
-
- "google.golang.org/grpc/grpclog"
-)
-
-// PrefixLogger does logging with a prefix.
-//
-// Logging method on a nil logs without any prefix.
-type PrefixLogger struct {
- logger grpclog.DepthLoggerV2
- prefix string
-}
-
-// Infof does info logging.
-func (pl *PrefixLogger) Infof(format string, args ...any) {
- if pl != nil {
- // Handle nil, so the tests can pass in a nil logger.
- format = pl.prefix + format
- pl.logger.InfoDepth(1, fmt.Sprintf(format, args...))
- return
- }
- grpclog.InfoDepth(1, fmt.Sprintf(format, args...))
-}
-
-// Warningf does warning logging.
-func (pl *PrefixLogger) Warningf(format string, args ...any) {
- if pl != nil {
- format = pl.prefix + format
- pl.logger.WarningDepth(1, fmt.Sprintf(format, args...))
- return
- }
- grpclog.WarningDepth(1, fmt.Sprintf(format, args...))
-}
-
-// Errorf does error logging.
-func (pl *PrefixLogger) Errorf(format string, args ...any) {
- if pl != nil {
- format = pl.prefix + format
- pl.logger.ErrorDepth(1, fmt.Sprintf(format, args...))
- return
- }
- grpclog.ErrorDepth(1, fmt.Sprintf(format, args...))
-}
-
-// V reports whether verbosity level l is at least the requested verbose level.
-func (pl *PrefixLogger) V(l int) bool {
- if pl != nil {
- return pl.logger.V(l)
- }
- return true
-}
-
-// NewPrefixLogger creates a prefix logger with the given prefix.
-func NewPrefixLogger(logger grpclog.DepthLoggerV2, prefix string) *PrefixLogger {
- return &PrefixLogger{logger: logger, prefix: prefix}
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go
deleted file mode 100644
index 8e8e86128..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcsync
-
-import (
- "context"
-
- "google.golang.org/grpc/internal/buffer"
-)
-
-// CallbackSerializer provides a mechanism to schedule callbacks in a
-// synchronized manner. It provides a FIFO guarantee on the order of execution
-// of scheduled callbacks. New callbacks can be scheduled by invoking the
-// Schedule() method.
-//
-// This type is safe for concurrent access.
-type CallbackSerializer struct {
- // done is closed once the serializer is shut down completely, i.e all
- // scheduled callbacks are executed and the serializer has deallocated all
- // its resources.
- done chan struct{}
-
- callbacks *buffer.Unbounded
-}
-
-// NewCallbackSerializer returns a new CallbackSerializer instance. The provided
-// context will be passed to the scheduled callbacks. Users should cancel the
-// provided context to shutdown the CallbackSerializer. It is guaranteed that no
-// callbacks will be added once this context is canceled, and any pending un-run
-// callbacks will be executed before the serializer is shut down.
-func NewCallbackSerializer(ctx context.Context) *CallbackSerializer {
- cs := &CallbackSerializer{
- done: make(chan struct{}),
- callbacks: buffer.NewUnbounded(),
- }
- go cs.run(ctx)
- return cs
-}
-
-// TrySchedule tries to schedule the provided callback function f to be
-// executed in the order it was added. This is a best-effort operation. If the
-// context passed to NewCallbackSerializer was canceled before this method is
-// called, the callback will not be scheduled.
-//
-// Callbacks are expected to honor the context when performing any blocking
-// operations, and should return early when the context is canceled.
-func (cs *CallbackSerializer) TrySchedule(f func(ctx context.Context)) {
- cs.callbacks.Put(f)
-}
-
-// ScheduleOr schedules the provided callback function f to be executed in the
-// order it was added. If the context passed to NewCallbackSerializer has been
-// canceled before this method is called, the onFailure callback will be
-// executed inline instead.
-//
-// Callbacks are expected to honor the context when performing any blocking
-// operations, and should return early when the context is canceled.
-func (cs *CallbackSerializer) ScheduleOr(f func(ctx context.Context), onFailure func()) {
- if cs.callbacks.Put(f) != nil {
- onFailure()
- }
-}
-
-func (cs *CallbackSerializer) run(ctx context.Context) {
- defer close(cs.done)
-
- // TODO: when Go 1.21 is the oldest supported version, this loop and Close
- // can be replaced with:
- //
- // context.AfterFunc(ctx, cs.callbacks.Close)
- for ctx.Err() == nil {
- select {
- case <-ctx.Done():
- // Do nothing here. Next iteration of the for loop will not happen,
- // since ctx.Err() would be non-nil.
- case cb := <-cs.callbacks.Get():
- cs.callbacks.Load()
- cb.(func(context.Context))(ctx)
- }
- }
-
- // Close the buffer to prevent new callbacks from being added.
- cs.callbacks.Close()
-
- // Run all pending callbacks.
- for cb := range cs.callbacks.Get() {
- cs.callbacks.Load()
- cb.(func(context.Context))(ctx)
- }
-}
-
-// Done returns a channel that is closed after the context passed to
-// NewCallbackSerializer is canceled and all callbacks have been executed.
-func (cs *CallbackSerializer) Done() <-chan struct{} {
- return cs.done
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/event.go b/vendor/google.golang.org/grpc/internal/grpcsync/event.go
deleted file mode 100644
index fbe697c37..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcsync/event.go
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package grpcsync implements additional synchronization primitives built upon
-// the sync package.
-package grpcsync
-
-import (
- "sync"
- "sync/atomic"
-)
-
-// Event represents a one-time event that may occur in the future.
-type Event struct {
- fired int32
- c chan struct{}
- o sync.Once
-}
-
-// Fire causes e to complete. It is safe to call multiple times, and
-// concurrently. It returns true iff this call to Fire caused the signaling
-// channel returned by Done to close.
-func (e *Event) Fire() bool {
- ret := false
- e.o.Do(func() {
- atomic.StoreInt32(&e.fired, 1)
- close(e.c)
- ret = true
- })
- return ret
-}
-
-// Done returns a channel that will be closed when Fire is called.
-func (e *Event) Done() <-chan struct{} {
- return e.c
-}
-
-// HasFired returns true if Fire has been called.
-func (e *Event) HasFired() bool {
- return atomic.LoadInt32(&e.fired) == 1
-}
-
-// NewEvent returns a new, ready-to-use Event.
-func NewEvent() *Event {
- return &Event{c: make(chan struct{})}
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go b/vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go
deleted file mode 100644
index 6635f7bca..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcsync
-
-import (
- "sync"
-)
-
-// OnceFunc returns a function wrapping f which ensures f is only executed
-// once even if the returned function is executed multiple times.
-func OnceFunc(f func()) func() {
- var once sync.Once
- return func() {
- once.Do(f)
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go
deleted file mode 100644
index 6d8c2f518..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcsync
-
-import (
- "context"
- "sync"
-)
-
-// Subscriber represents an entity that is subscribed to messages published on
-// a PubSub. It wraps the callback to be invoked by the PubSub when a new
-// message is published.
-type Subscriber interface {
- // OnMessage is invoked when a new message is published. Implementations
- // must not block in this method.
- OnMessage(msg any)
-}
-
-// PubSub is a simple one-to-many publish-subscribe system that supports
-// messages of arbitrary type. It guarantees that messages are delivered in
-// the same order in which they were published.
-//
-// Publisher invokes the Publish() method to publish new messages, while
-// subscribers interested in receiving these messages register a callback
-// via the Subscribe() method.
-//
-// Once a PubSub is stopped, no more messages can be published, but any pending
-// published messages will be delivered to the subscribers. Done may be used
-// to determine when all published messages have been delivered.
-type PubSub struct {
- cs *CallbackSerializer
-
- // Access to the below fields are guarded by this mutex.
- mu sync.Mutex
- msg any
- subscribers map[Subscriber]bool
-}
-
-// NewPubSub returns a new PubSub instance. Users should cancel the
-// provided context to shutdown the PubSub.
-func NewPubSub(ctx context.Context) *PubSub {
- return &PubSub{
- cs: NewCallbackSerializer(ctx),
- subscribers: map[Subscriber]bool{},
- }
-}
-
-// Subscribe registers the provided Subscriber to the PubSub.
-//
-// If the PubSub contains a previously published message, the Subscriber's
-// OnMessage() callback will be invoked asynchronously with the existing
-// message to begin with, and subsequently for every newly published message.
-//
-// The caller is responsible for invoking the returned cancel function to
-// unsubscribe itself from the PubSub.
-func (ps *PubSub) Subscribe(sub Subscriber) (cancel func()) {
- ps.mu.Lock()
- defer ps.mu.Unlock()
-
- ps.subscribers[sub] = true
-
- if ps.msg != nil {
- msg := ps.msg
- ps.cs.TrySchedule(func(context.Context) {
- ps.mu.Lock()
- defer ps.mu.Unlock()
- if !ps.subscribers[sub] {
- return
- }
- sub.OnMessage(msg)
- })
- }
-
- return func() {
- ps.mu.Lock()
- defer ps.mu.Unlock()
- delete(ps.subscribers, sub)
- }
-}
-
-// Publish publishes the provided message to the PubSub, and invokes
-// callbacks registered by subscribers asynchronously.
-func (ps *PubSub) Publish(msg any) {
- ps.mu.Lock()
- defer ps.mu.Unlock()
-
- ps.msg = msg
- for sub := range ps.subscribers {
- s := sub
- ps.cs.TrySchedule(func(context.Context) {
- ps.mu.Lock()
- defer ps.mu.Unlock()
- if !ps.subscribers[s] {
- return
- }
- s.OnMessage(msg)
- })
- }
-}
-
-// Done returns a channel that is closed after the context passed to NewPubSub
-// is canceled and all updates have been sent to subscribers.
-func (ps *PubSub) Done() <-chan struct{} {
- return ps.cs.Done()
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/compressor.go b/vendor/google.golang.org/grpc/internal/grpcutil/compressor.go
deleted file mode 100644
index e8d866984..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcutil/compressor.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcutil
-
-import (
- "strings"
-)
-
-// RegisteredCompressorNames holds names of the registered compressors.
-var RegisteredCompressorNames []string
-
-// IsCompressorNameRegistered returns true when name is available in registry.
-func IsCompressorNameRegistered(name string) bool {
- for _, compressor := range RegisteredCompressorNames {
- if compressor == name {
- return true
- }
- }
- return false
-}
-
-// RegisteredCompressors returns a string of registered compressor names
-// separated by comma.
-func RegisteredCompressors() string {
- return strings.Join(RegisteredCompressorNames, ",")
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go b/vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go
deleted file mode 100644
index b25b0baec..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcutil
-
-import (
- "strconv"
- "time"
-)
-
-const maxTimeoutValue int64 = 100000000 - 1
-
-// div does integer division and round-up the result. Note that this is
-// equivalent to (d+r-1)/r but has less chance to overflow.
-func div(d, r time.Duration) int64 {
- if d%r > 0 {
- return int64(d/r + 1)
- }
- return int64(d / r)
-}
-
-// EncodeDuration encodes the duration to the format grpc-timeout header
-// accepts.
-//
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests
-func EncodeDuration(t time.Duration) string {
- // TODO: This is simplistic and not bandwidth efficient. Improve it.
- if t <= 0 {
- return "0n"
- }
- if d := div(t, time.Nanosecond); d <= maxTimeoutValue {
- return strconv.FormatInt(d, 10) + "n"
- }
- if d := div(t, time.Microsecond); d <= maxTimeoutValue {
- return strconv.FormatInt(d, 10) + "u"
- }
- if d := div(t, time.Millisecond); d <= maxTimeoutValue {
- return strconv.FormatInt(d, 10) + "m"
- }
- if d := div(t, time.Second); d <= maxTimeoutValue {
- return strconv.FormatInt(d, 10) + "S"
- }
- if d := div(t, time.Minute); d <= maxTimeoutValue {
- return strconv.FormatInt(d, 10) + "M"
- }
- // Note that maxTimeoutValue * time.Hour > MaxInt64.
- return strconv.FormatInt(div(t, time.Hour), 10) + "H"
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go b/vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go
deleted file mode 100644
index e2f948e8f..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcutil/grpcutil.go
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 2021 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package grpcutil provides utility functions used across the gRPC codebase.
-package grpcutil
diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/metadata.go b/vendor/google.golang.org/grpc/internal/grpcutil/metadata.go
deleted file mode 100644
index 6f22bd891..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcutil/metadata.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcutil
-
-import (
- "context"
-
- "google.golang.org/grpc/metadata"
-)
-
-type mdExtraKey struct{}
-
-// WithExtraMetadata creates a new context with incoming md attached.
-func WithExtraMetadata(ctx context.Context, md metadata.MD) context.Context {
- return context.WithValue(ctx, mdExtraKey{}, md)
-}
-
-// ExtraMetadata returns the incoming metadata in ctx if it exists. The
-// returned MD should not be modified. Writing to it may cause races.
-// Modification should be made to copies of the returned MD.
-func ExtraMetadata(ctx context.Context) (md metadata.MD, ok bool) {
- md, ok = ctx.Value(mdExtraKey{}).(metadata.MD)
- return
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/method.go b/vendor/google.golang.org/grpc/internal/grpcutil/method.go
deleted file mode 100644
index 683d1955c..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcutil/method.go
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcutil
-
-import (
- "errors"
- "strings"
-)
-
-// ParseMethod splits service and method from the input. It expects format
-// "/service/method".
-func ParseMethod(methodName string) (service, method string, _ error) {
- if !strings.HasPrefix(methodName, "/") {
- return "", "", errors.New("invalid method name: should start with /")
- }
- methodName = methodName[1:]
-
- pos := strings.LastIndex(methodName, "/")
- if pos < 0 {
- return "", "", errors.New("invalid method name: suffix /method is missing")
- }
- return methodName[:pos], methodName[pos+1:], nil
-}
-
-// baseContentType is the base content-type for gRPC. This is a valid
-// content-type on its own, but can also include a content-subtype such as
-// "proto" as a suffix after "+" or ";". See
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests
-// for more details.
-const baseContentType = "application/grpc"
-
-// ContentSubtype returns the content-subtype for the given content-type. The
-// given content-type must be a valid content-type that starts with
-// "application/grpc". A content-subtype will follow "application/grpc" after a
-// "+" or ";". See
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details.
-//
-// If contentType is not a valid content-type for gRPC, the boolean
-// will be false, otherwise true. If content-type == "application/grpc",
-// "application/grpc+", or "application/grpc;", the boolean will be true,
-// but no content-subtype will be returned.
-//
-// contentType is assumed to be lowercase already.
-func ContentSubtype(contentType string) (string, bool) {
- if contentType == baseContentType {
- return "", true
- }
- if !strings.HasPrefix(contentType, baseContentType) {
- return "", false
- }
- // guaranteed since != baseContentType and has baseContentType prefix
- switch contentType[len(baseContentType)] {
- case '+', ';':
- // this will return true for "application/grpc+" or "application/grpc;"
- // which the previous validContentType function tested to be valid, so we
- // just say that no content-subtype is specified in this case
- return contentType[len(baseContentType)+1:], true
- default:
- return "", false
- }
-}
-
-// ContentType builds full content type with the given sub-type.
-//
-// contentSubtype is assumed to be lowercase
-func ContentType(contentSubtype string) string {
- if contentSubtype == "" {
- return baseContentType
- }
- return baseContentType + "+" + contentSubtype
-}
diff --git a/vendor/google.golang.org/grpc/internal/grpcutil/regex.go b/vendor/google.golang.org/grpc/internal/grpcutil/regex.go
deleted file mode 100644
index 7a092b2b8..000000000
--- a/vendor/google.golang.org/grpc/internal/grpcutil/regex.go
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *
- * Copyright 2021 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpcutil
-
-import "regexp"
-
-// FullMatchWithRegex returns whether the full text matches the regex provided.
-func FullMatchWithRegex(re *regexp.Regexp, text string) bool {
- if len(text) == 0 {
- return re.MatchString(text)
- }
- re.Longest()
- rem := re.FindString(text)
- return len(rem) == len(text)
-}
diff --git a/vendor/google.golang.org/grpc/internal/idle/idle.go b/vendor/google.golang.org/grpc/internal/idle/idle.go
deleted file mode 100644
index 2c13ee9da..000000000
--- a/vendor/google.golang.org/grpc/internal/idle/idle.go
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- *
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package idle contains a component for managing idleness (entering and exiting)
-// based on RPC activity.
-package idle
-
-import (
- "fmt"
- "math"
- "sync"
- "sync/atomic"
- "time"
-)
-
-// For overriding in unit tests.
-var timeAfterFunc = func(d time.Duration, f func()) *time.Timer {
- return time.AfterFunc(d, f)
-}
-
-// Enforcer is the functionality provided by grpc.ClientConn to enter
-// and exit from idle mode.
-type Enforcer interface {
- ExitIdleMode() error
- EnterIdleMode()
-}
-
-// Manager implements idleness detection and calls the configured Enforcer to
-// enter/exit idle mode when appropriate. Must be created by NewManager.
-type Manager struct {
- // State accessed atomically.
- lastCallEndTime int64 // Unix timestamp in nanos; time when the most recent RPC completed.
- activeCallsCount int32 // Count of active RPCs; -math.MaxInt32 means channel is idle or is trying to get there.
- activeSinceLastTimerCheck int32 // Boolean; True if there was an RPC since the last timer callback.
- closed int32 // Boolean; True when the manager is closed.
-
- // Can be accessed without atomics or mutex since these are set at creation
- // time and read-only after that.
- enforcer Enforcer // Functionality provided by grpc.ClientConn.
- timeout time.Duration
-
- // idleMu is used to guarantee mutual exclusion in two scenarios:
- // - Opposing intentions:
- // - a: Idle timeout has fired and handleIdleTimeout() is trying to put
- // the channel in idle mode because the channel has been inactive.
- // - b: At the same time an RPC is made on the channel, and OnCallBegin()
- // is trying to prevent the channel from going idle.
- // - Competing intentions:
- // - The channel is in idle mode and there are multiple RPCs starting at
- // the same time, all trying to move the channel out of idle. Only one
- // of them should succeed in doing so, while the other RPCs should
- // piggyback on the first one and be successfully handled.
- idleMu sync.RWMutex
- actuallyIdle bool
- timer *time.Timer
-}
-
-// NewManager creates a new idleness manager implementation for the
-// given idle timeout. It begins in idle mode.
-func NewManager(enforcer Enforcer, timeout time.Duration) *Manager {
- return &Manager{
- enforcer: enforcer,
- timeout: timeout,
- actuallyIdle: true,
- activeCallsCount: -math.MaxInt32,
- }
-}
-
-// resetIdleTimerLocked resets the idle timer to the given duration. Called
-// when exiting idle mode or when the timer fires and we need to reset it.
-func (m *Manager) resetIdleTimerLocked(d time.Duration) {
- if m.isClosed() || m.timeout == 0 || m.actuallyIdle {
- return
- }
-
- // It is safe to ignore the return value from Reset() because this method is
- // only ever called from the timer callback or when exiting idle mode.
- if m.timer != nil {
- m.timer.Stop()
- }
- m.timer = timeAfterFunc(d, m.handleIdleTimeout)
-}
-
-func (m *Manager) resetIdleTimer(d time.Duration) {
- m.idleMu.Lock()
- defer m.idleMu.Unlock()
- m.resetIdleTimerLocked(d)
-}
-
-// handleIdleTimeout is the timer callback that is invoked upon expiry of the
-// configured idle timeout. The channel is considered inactive if there are no
-// ongoing calls and no RPC activity since the last time the timer fired.
-func (m *Manager) handleIdleTimeout() {
- if m.isClosed() {
- return
- }
-
- if atomic.LoadInt32(&m.activeCallsCount) > 0 {
- m.resetIdleTimer(m.timeout)
- return
- }
-
- // There has been activity on the channel since we last got here. Reset the
- // timer and return.
- if atomic.LoadInt32(&m.activeSinceLastTimerCheck) == 1 {
- // Set the timer to fire after a duration of idle timeout, calculated
- // from the time the most recent RPC completed.
- atomic.StoreInt32(&m.activeSinceLastTimerCheck, 0)
- m.resetIdleTimer(time.Duration(atomic.LoadInt64(&m.lastCallEndTime)-time.Now().UnixNano()) + m.timeout)
- return
- }
-
- // Now that we've checked that there has been no activity, attempt to enter
- // idle mode, which is very likely to succeed.
- if m.tryEnterIdleMode() {
- // Successfully entered idle mode. No timer needed until we exit idle.
- return
- }
-
- // Failed to enter idle mode due to a concurrent RPC that kept the channel
- // active, or because of an error from the channel. Undo the attempt to
- // enter idle, and reset the timer to try again later.
- m.resetIdleTimer(m.timeout)
-}
-
-// tryEnterIdleMode instructs the channel to enter idle mode. But before
-// that, it performs a last minute check to ensure that no new RPC has come in,
-// making the channel active.
-//
-// Return value indicates whether or not the channel moved to idle mode.
-//
-// Holds idleMu which ensures mutual exclusion with exitIdleMode.
-func (m *Manager) tryEnterIdleMode() bool {
- // Setting the activeCallsCount to -math.MaxInt32 indicates to OnCallBegin()
- // that the channel is either in idle mode or is trying to get there.
- if !atomic.CompareAndSwapInt32(&m.activeCallsCount, 0, -math.MaxInt32) {
- // This CAS operation can fail if an RPC started after we checked for
- // activity in the timer handler, or one was ongoing from before the
- // last time the timer fired, or if a test is attempting to enter idle
- // mode without checking. In all cases, abort going into idle mode.
- return false
- }
- // N.B. if we fail to enter idle mode after this, we must re-add
- // math.MaxInt32 to m.activeCallsCount.
-
- m.idleMu.Lock()
- defer m.idleMu.Unlock()
-
- if atomic.LoadInt32(&m.activeCallsCount) != -math.MaxInt32 {
- // We raced and lost to a new RPC. Very rare, but stop entering idle.
- atomic.AddInt32(&m.activeCallsCount, math.MaxInt32)
- return false
- }
- if atomic.LoadInt32(&m.activeSinceLastTimerCheck) == 1 {
- // A very short RPC could have come in (and also finished) after we
- // checked for calls count and activity in handleIdleTimeout(), but
- // before the CAS operation. So, we need to check for activity again.
- atomic.AddInt32(&m.activeCallsCount, math.MaxInt32)
- return false
- }
-
- // No new RPCs have come in since we set the active calls count value to
- // -math.MaxInt32. And since we have the lock, it is safe to enter idle mode
- // unconditionally now.
- m.enforcer.EnterIdleMode()
- m.actuallyIdle = true
- return true
-}
-
-// EnterIdleModeForTesting instructs the channel to enter idle mode.
-func (m *Manager) EnterIdleModeForTesting() {
- m.tryEnterIdleMode()
-}
-
-// OnCallBegin is invoked at the start of every RPC.
-func (m *Manager) OnCallBegin() error {
- if m.isClosed() {
- return nil
- }
-
- if atomic.AddInt32(&m.activeCallsCount, 1) > 0 {
- // Channel is not idle now. Set the activity bit and allow the call.
- atomic.StoreInt32(&m.activeSinceLastTimerCheck, 1)
- return nil
- }
-
- // Channel is either in idle mode or is in the process of moving to idle
- // mode. Attempt to exit idle mode to allow this RPC.
- if err := m.ExitIdleMode(); err != nil {
- // Undo the increment to calls count, and return an error causing the
- // RPC to fail.
- atomic.AddInt32(&m.activeCallsCount, -1)
- return err
- }
-
- atomic.StoreInt32(&m.activeSinceLastTimerCheck, 1)
- return nil
-}
-
-// ExitIdleMode instructs m to call the enforcer's ExitIdleMode and update m's
-// internal state.
-func (m *Manager) ExitIdleMode() error {
- // Holds idleMu which ensures mutual exclusion with tryEnterIdleMode.
- m.idleMu.Lock()
- defer m.idleMu.Unlock()
-
- if m.isClosed() || !m.actuallyIdle {
- // This can happen in three scenarios:
- // - handleIdleTimeout() set the calls count to -math.MaxInt32 and called
- // tryEnterIdleMode(). But before the latter could grab the lock, an RPC
- // came in and OnCallBegin() noticed that the calls count is negative.
- // - Channel is in idle mode, and multiple new RPCs come in at the same
- // time, all of them notice a negative calls count in OnCallBegin and get
- // here. The first one to get the lock would get the channel to exit idle.
- // - Channel is not in idle mode, and the user calls Connect which calls
- // m.ExitIdleMode.
- //
- // In any case, there is nothing to do here.
- return nil
- }
-
- if err := m.enforcer.ExitIdleMode(); err != nil {
- return fmt.Errorf("failed to exit idle mode: %w", err)
- }
-
- // Undo the idle entry process. This also respects any new RPC attempts.
- atomic.AddInt32(&m.activeCallsCount, math.MaxInt32)
- m.actuallyIdle = false
-
- // Start a new timer to fire after the configured idle timeout.
- m.resetIdleTimerLocked(m.timeout)
- return nil
-}
-
-// OnCallEnd is invoked at the end of every RPC.
-func (m *Manager) OnCallEnd() {
- if m.isClosed() {
- return
- }
-
- // Record the time at which the most recent call finished.
- atomic.StoreInt64(&m.lastCallEndTime, time.Now().UnixNano())
-
- // Decrement the active calls count. This count can temporarily go negative
- // when the timer callback is in the process of moving the channel to idle
- // mode, but one or more RPCs come in and complete before the timer callback
- // can get done with the process of moving to idle mode.
- atomic.AddInt32(&m.activeCallsCount, -1)
-}
-
-func (m *Manager) isClosed() bool {
- return atomic.LoadInt32(&m.closed) == 1
-}
-
-// Close stops the timer associated with the Manager, if it exists.
-func (m *Manager) Close() {
- atomic.StoreInt32(&m.closed, 1)
-
- m.idleMu.Lock()
- if m.timer != nil {
- m.timer.Stop()
- m.timer = nil
- }
- m.idleMu.Unlock()
-}
diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go
deleted file mode 100644
index 3afc18134..000000000
--- a/vendor/google.golang.org/grpc/internal/internal.go
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright 2016 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package internal contains gRPC-internal code, to avoid polluting
-// the godoc of the top-level grpc package. It must not import any grpc
-// symbols to avoid circular dependencies.
-package internal
-
-import (
- "context"
- "time"
-
- "google.golang.org/grpc/connectivity"
- "google.golang.org/grpc/serviceconfig"
-)
-
-var (
- // HealthCheckFunc is used to provide client-side LB channel health checking
- HealthCheckFunc HealthChecker
- // BalancerUnregister is exported by package balancer to unregister a balancer.
- BalancerUnregister func(name string)
- // KeepaliveMinPingTime is the minimum ping interval. This must be 10s by
- // default, but tests may wish to set it lower for convenience.
- KeepaliveMinPingTime = 10 * time.Second
- // KeepaliveMinServerPingTime is the minimum ping interval for servers.
- // This must be 1s by default, but tests may wish to set it lower for
- // convenience.
- KeepaliveMinServerPingTime = time.Second
- // ParseServiceConfig parses a JSON representation of the service config.
- ParseServiceConfig any // func(string) *serviceconfig.ParseResult
- // EqualServiceConfigForTesting is for testing service config generation and
- // parsing. Both a and b should be returned by ParseServiceConfig.
- // This function compares the config without rawJSON stripped, in case the
- // there's difference in white space.
- EqualServiceConfigForTesting func(a, b serviceconfig.Config) bool
- // GetCertificateProviderBuilder returns the registered builder for the
- // given name. This is set by package certprovider for use from xDS
- // bootstrap code while parsing certificate provider configs in the
- // bootstrap file.
- GetCertificateProviderBuilder any // func(string) certprovider.Builder
- // GetXDSHandshakeInfoForTesting returns a pointer to the xds.HandshakeInfo
- // stored in the passed in attributes. This is set by
- // credentials/xds/xds.go.
- GetXDSHandshakeInfoForTesting any // func (*attributes.Attributes) *unsafe.Pointer
- // GetServerCredentials returns the transport credentials configured on a
- // gRPC server. An xDS-enabled server needs to know what type of credentials
- // is configured on the underlying gRPC server. This is set by server.go.
- GetServerCredentials any // func (*grpc.Server) credentials.TransportCredentials
- // CanonicalString returns the canonical string of the code defined here:
- // https://github.com/grpc/grpc/blob/master/doc/statuscodes.md.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- CanonicalString any // func (codes.Code) string
- // IsRegisteredMethod returns whether the passed in method is registered as
- // a method on the server.
- IsRegisteredMethod any // func(*grpc.Server, string) bool
- // ServerFromContext returns the server from the context.
- ServerFromContext any // func(context.Context) *grpc.Server
- // AddGlobalServerOptions adds an array of ServerOption that will be
- // effective globally for newly created servers. The priority will be: 1.
- // user-provided; 2. this method; 3. default values.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- AddGlobalServerOptions any // func(opt ...ServerOption)
- // ClearGlobalServerOptions clears the array of extra ServerOption. This
- // method is useful in testing and benchmarking.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- ClearGlobalServerOptions func()
- // AddGlobalDialOptions adds an array of DialOption that will be effective
- // globally for newly created client channels. The priority will be: 1.
- // user-provided; 2. this method; 3. default values.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- AddGlobalDialOptions any // func(opt ...DialOption)
- // DisableGlobalDialOptions returns a DialOption that prevents the
- // ClientConn from applying the global DialOptions (set via
- // AddGlobalDialOptions).
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- DisableGlobalDialOptions any // func() grpc.DialOption
- // ClearGlobalDialOptions clears the array of extra DialOption. This
- // method is useful in testing and benchmarking.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- ClearGlobalDialOptions func()
-
- // AddGlobalPerTargetDialOptions adds a PerTargetDialOption that will be
- // configured for newly created ClientConns.
- AddGlobalPerTargetDialOptions any // func (opt any)
- // ClearGlobalPerTargetDialOptions clears the slice of global late apply
- // dial options.
- ClearGlobalPerTargetDialOptions func()
-
- // JoinDialOptions combines the dial options passed as arguments into a
- // single dial option.
- JoinDialOptions any // func(...grpc.DialOption) grpc.DialOption
- // JoinServerOptions combines the server options passed as arguments into a
- // single server option.
- JoinServerOptions any // func(...grpc.ServerOption) grpc.ServerOption
-
- // WithBinaryLogger returns a DialOption that specifies the binary logger
- // for a ClientConn.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- WithBinaryLogger any // func(binarylog.Logger) grpc.DialOption
- // BinaryLogger returns a ServerOption that can set the binary logger for a
- // server.
- //
- // This is used in the 1.0 release of gcp/observability, and thus must not be
- // deleted or changed.
- BinaryLogger any // func(binarylog.Logger) grpc.ServerOption
-
- // SubscribeToConnectivityStateChanges adds a grpcsync.Subscriber to a
- // provided grpc.ClientConn.
- SubscribeToConnectivityStateChanges any // func(*grpc.ClientConn, grpcsync.Subscriber)
-
- // NewXDSResolverWithConfigForTesting creates a new xds resolver builder using
- // the provided xds bootstrap config instead of the global configuration from
- // the supported environment variables. The resolver.Builder is meant to be
- // used in conjunction with the grpc.WithResolvers DialOption.
- //
- // Testing Only
- //
- // This function should ONLY be used for testing and may not work with some
- // other features, including the CSDS service.
- NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error)
-
- // NewXDSResolverWithClientForTesting creates a new xDS resolver builder
- // using the provided xDS client instead of creating a new one using the
- // bootstrap configuration specified by the supported environment variables.
- // The resolver.Builder is meant to be used in conjunction with the
- // grpc.WithResolvers DialOption. The resolver.Builder does not take
- // ownership of the provided xDS client and it is the responsibility of the
- // caller to close the client when no longer required.
- //
- // Testing Only
- //
- // This function should ONLY be used for testing and may not work with some
- // other features, including the CSDS service.
- NewXDSResolverWithClientForTesting any // func(xdsclient.XDSClient) (resolver.Builder, error)
-
- // RegisterRLSClusterSpecifierPluginForTesting registers the RLS Cluster
- // Specifier Plugin for testing purposes, regardless of the XDSRLS environment
- // variable.
- //
- // TODO: Remove this function once the RLS env var is removed.
- RegisterRLSClusterSpecifierPluginForTesting func()
-
- // UnregisterRLSClusterSpecifierPluginForTesting unregisters the RLS Cluster
- // Specifier Plugin for testing purposes. This is needed because there is no way
- // to unregister the RLS Cluster Specifier Plugin after registering it solely
- // for testing purposes using RegisterRLSClusterSpecifierPluginForTesting().
- //
- // TODO: Remove this function once the RLS env var is removed.
- UnregisterRLSClusterSpecifierPluginForTesting func()
-
- // RegisterRBACHTTPFilterForTesting registers the RBAC HTTP Filter for testing
- // purposes, regardless of the RBAC environment variable.
- //
- // TODO: Remove this function once the RBAC env var is removed.
- RegisterRBACHTTPFilterForTesting func()
-
- // UnregisterRBACHTTPFilterForTesting unregisters the RBAC HTTP Filter for
- // testing purposes. This is needed because there is no way to unregister the
- // HTTP Filter after registering it solely for testing purposes using
- // RegisterRBACHTTPFilterForTesting().
- //
- // TODO: Remove this function once the RBAC env var is removed.
- UnregisterRBACHTTPFilterForTesting func()
-
- // ORCAAllowAnyMinReportingInterval is for examples/orca use ONLY.
- ORCAAllowAnyMinReportingInterval any // func(so *orca.ServiceOptions)
-
- // GRPCResolverSchemeExtraMetadata determines when gRPC will add extra
- // metadata to RPCs.
- GRPCResolverSchemeExtraMetadata = "xds"
-
- // EnterIdleModeForTesting gets the ClientConn to enter IDLE mode.
- EnterIdleModeForTesting any // func(*grpc.ClientConn)
-
- // ExitIdleModeForTesting gets the ClientConn to exit IDLE mode.
- ExitIdleModeForTesting any // func(*grpc.ClientConn) error
-
- // ChannelzTurnOffForTesting disables the Channelz service for testing
- // purposes.
- ChannelzTurnOffForTesting func()
-
- // TriggerXDSResourceNotFoundForTesting causes the provided xDS Client to
- // invoke resource-not-found error for the given resource type and name.
- TriggerXDSResourceNotFoundForTesting any // func(xdsclient.XDSClient, xdsresource.Type, string) error
-
- // FromOutgoingContextRaw returns the un-merged, intermediary contents of
- // metadata.rawMD.
- FromOutgoingContextRaw any // func(context.Context) (metadata.MD, [][]string, bool)
-
- // UserSetDefaultScheme is set to true if the user has overridden the
- // default resolver scheme.
- UserSetDefaultScheme = false
-
- // ConnectedAddress returns the connected address for a SubConnState. The
- // address is only valid if the state is READY.
- ConnectedAddress any // func (scs SubConnState) resolver.Address
-
- // SetConnectedAddress sets the connected address for a SubConnState.
- SetConnectedAddress any // func(scs *SubConnState, addr resolver.Address)
-
- // SnapshotMetricRegistryForTesting snapshots the global data of the metric
- // registry. Returns a cleanup function that sets the metric registry to its
- // original state. Only called in testing functions.
- SnapshotMetricRegistryForTesting func() func()
-
- // SetDefaultBufferPoolForTesting updates the default buffer pool, for
- // testing purposes.
- SetDefaultBufferPoolForTesting any // func(mem.BufferPool)
-
- // SetBufferPoolingThresholdForTesting updates the buffer pooling threshold, for
- // testing purposes.
- SetBufferPoolingThresholdForTesting any // func(int)
-)
-
-// HealthChecker defines the signature of the client-side LB channel health
-// checking function.
-//
-// The implementation is expected to create a health checking RPC stream by
-// calling newStream(), watch for the health status of serviceName, and report
-// its health back by calling setConnectivityState().
-//
-// The health checking protocol is defined at:
-// https://github.com/grpc/grpc/blob/master/doc/health-checking.md
-type HealthChecker func(ctx context.Context, newStream func(string) (any, error), setConnectivityState func(connectivity.State, error), serviceName string) error
-
-const (
- // CredsBundleModeFallback switches GoogleDefaultCreds to fallback mode.
- CredsBundleModeFallback = "fallback"
- // CredsBundleModeBalancer switches GoogleDefaultCreds to grpclb balancer
- // mode.
- CredsBundleModeBalancer = "balancer"
- // CredsBundleModeBackendFromBalancer switches GoogleDefaultCreds to mode
- // that supports backend returned by grpclb balancer.
- CredsBundleModeBackendFromBalancer = "backend-from-balancer"
-)
-
-// RLSLoadBalancingPolicyName is the name of the RLS LB policy.
-//
-// It currently has an experimental suffix which would be removed once
-// end-to-end testing of the policy is completed.
-const RLSLoadBalancingPolicyName = "rls_experimental"
-
-// EnforceSubConnEmbedding is used to enforce proper SubConn implementation
-// embedding.
-type EnforceSubConnEmbedding interface {
- enforceSubConnEmbedding()
-}
diff --git a/vendor/google.golang.org/grpc/internal/metadata/metadata.go b/vendor/google.golang.org/grpc/internal/metadata/metadata.go
deleted file mode 100644
index 900bfb716..000000000
--- a/vendor/google.golang.org/grpc/internal/metadata/metadata.go
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package metadata contains functions to set and get metadata from addresses.
-//
-// This package is experimental.
-package metadata
-
-import (
- "fmt"
- "strings"
-
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/resolver"
-)
-
-type mdKeyType string
-
-const mdKey = mdKeyType("grpc.internal.address.metadata")
-
-type mdValue metadata.MD
-
-func (m mdValue) Equal(o any) bool {
- om, ok := o.(mdValue)
- if !ok {
- return false
- }
- if len(m) != len(om) {
- return false
- }
- for k, v := range m {
- ov := om[k]
- if len(ov) != len(v) {
- return false
- }
- for i, ve := range v {
- if ov[i] != ve {
- return false
- }
- }
- }
- return true
-}
-
-// Get returns the metadata of addr.
-func Get(addr resolver.Address) metadata.MD {
- attrs := addr.Attributes
- if attrs == nil {
- return nil
- }
- md, _ := attrs.Value(mdKey).(mdValue)
- return metadata.MD(md)
-}
-
-// Set sets (overrides) the metadata in addr.
-//
-// When a SubConn is created with this address, the RPCs sent on it will all
-// have this metadata.
-func Set(addr resolver.Address, md metadata.MD) resolver.Address {
- addr.Attributes = addr.Attributes.WithValue(mdKey, mdValue(md))
- return addr
-}
-
-// Validate validates every pair in md with ValidatePair.
-func Validate(md metadata.MD) error {
- for k, vals := range md {
- if err := ValidatePair(k, vals...); err != nil {
- return err
- }
- }
- return nil
-}
-
-// hasNotPrintable return true if msg contains any characters which are not in %x20-%x7E
-func hasNotPrintable(msg string) bool {
- // for i that saving a conversion if not using for range
- for i := 0; i < len(msg); i++ {
- if msg[i] < 0x20 || msg[i] > 0x7E {
- return true
- }
- }
- return false
-}
-
-// ValidatePair validate a key-value pair with the following rules (the pseudo-header will be skipped) :
-//
-// - key must contain one or more characters.
-// - the characters in the key must be contained in [0-9 a-z _ - .].
-// - if the key ends with a "-bin" suffix, no validation of the corresponding value is performed.
-// - the characters in the every value must be printable (in [%x20-%x7E]).
-func ValidatePair(key string, vals ...string) error {
- // key should not be empty
- if key == "" {
- return fmt.Errorf("there is an empty key in the header")
- }
- // pseudo-header will be ignored
- if key[0] == ':' {
- return nil
- }
- // check key, for i that saving a conversion if not using for range
- for i := 0; i < len(key); i++ {
- r := key[i]
- if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' {
- return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", key)
- }
- }
- if strings.HasSuffix(key, "-bin") {
- return nil
- }
- // check value
- for _, val := range vals {
- if hasNotPrintable(val) {
- return fmt.Errorf("header key %q contains value with non-printable ASCII characters", key)
- }
- }
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/pretty/pretty.go b/vendor/google.golang.org/grpc/internal/pretty/pretty.go
deleted file mode 100644
index dbee7a60d..000000000
--- a/vendor/google.golang.org/grpc/internal/pretty/pretty.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *
- * Copyright 2021 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package pretty defines helper functions to pretty-print structs for logging.
-package pretty
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
-
- "google.golang.org/protobuf/encoding/protojson"
- "google.golang.org/protobuf/protoadapt"
-)
-
-const jsonIndent = " "
-
-// ToJSON marshals the input into a json string.
-//
-// If marshal fails, it falls back to fmt.Sprintf("%+v").
-func ToJSON(e any) string {
- if ee, ok := e.(protoadapt.MessageV1); ok {
- e = protoadapt.MessageV2Of(ee)
- }
-
- if ee, ok := e.(protoadapt.MessageV2); ok {
- mm := protojson.MarshalOptions{
- Indent: jsonIndent,
- Multiline: true,
- }
- ret, err := mm.Marshal(ee)
- if err != nil {
- // This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2
- // messages are not imported, and this will fail because the message
- // is not found.
- return fmt.Sprintf("%+v", ee)
- }
- return string(ret)
- }
-
- ret, err := json.MarshalIndent(e, "", jsonIndent)
- if err != nil {
- return fmt.Sprintf("%+v", e)
- }
- return string(ret)
-}
-
-// FormatJSON formats the input json bytes with indentation.
-//
-// If Indent fails, it returns the unchanged input as string.
-func FormatJSON(b []byte) string {
- var out bytes.Buffer
- err := json.Indent(&out, b, "", jsonIndent)
- if err != nil {
- return string(b)
- }
- return out.String()
-}
diff --git a/vendor/google.golang.org/grpc/internal/resolver/config_selector.go b/vendor/google.golang.org/grpc/internal/resolver/config_selector.go
deleted file mode 100644
index f0603871c..000000000
--- a/vendor/google.golang.org/grpc/internal/resolver/config_selector.go
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package resolver provides internal resolver-related functionality.
-package resolver
-
-import (
- "context"
- "sync"
-
- "google.golang.org/grpc/internal/serviceconfig"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/resolver"
-)
-
-// ConfigSelector controls what configuration to use for every RPC.
-type ConfigSelector interface {
- // Selects the configuration for the RPC, or terminates it using the error.
- // This error will be converted by the gRPC library to a status error with
- // code UNKNOWN if it is not returned as a status error.
- SelectConfig(RPCInfo) (*RPCConfig, error)
-}
-
-// RPCInfo contains RPC information needed by a ConfigSelector.
-type RPCInfo struct {
- // Context is the user's context for the RPC and contains headers and
- // application timeout. It is passed for interception purposes and for
- // efficiency reasons. SelectConfig should not be blocking.
- Context context.Context
- Method string // i.e. "/Service/Method"
-}
-
-// RPCConfig describes the configuration to use for each RPC.
-type RPCConfig struct {
- // The context to use for the remainder of the RPC; can pass info to LB
- // policy or affect timeout or metadata.
- Context context.Context
- MethodConfig serviceconfig.MethodConfig // configuration to use for this RPC
- OnCommitted func() // Called when the RPC has been committed (retries no longer possible)
- Interceptor ClientInterceptor
-}
-
-// ClientStream is the same as grpc.ClientStream, but defined here for circular
-// dependency reasons.
-type ClientStream interface {
- // Header returns the header metadata received from the server if there
- // is any. It blocks if the metadata is not ready to read.
- Header() (metadata.MD, error)
- // Trailer returns the trailer metadata from the server, if there is any.
- // It must only be called after stream.CloseAndRecv has returned, or
- // stream.Recv has returned a non-nil error (including io.EOF).
- Trailer() metadata.MD
- // CloseSend closes the send direction of the stream. It closes the stream
- // when non-nil error is met. It is also not safe to call CloseSend
- // concurrently with SendMsg.
- CloseSend() error
- // Context returns the context for this stream.
- //
- // It should not be called until after Header or RecvMsg has returned. Once
- // called, subsequent client-side retries are disabled.
- Context() context.Context
- // SendMsg is generally called by generated code. On error, SendMsg aborts
- // the stream. If the error was generated by the client, the status is
- // returned directly; otherwise, io.EOF is returned and the status of
- // the stream may be discovered using RecvMsg.
- //
- // SendMsg blocks until:
- // - There is sufficient flow control to schedule m with the transport, or
- // - The stream is done, or
- // - The stream breaks.
- //
- // SendMsg does not wait until the message is received by the server. An
- // untimely stream closure may result in lost messages. To ensure delivery,
- // users should ensure the RPC completed successfully using RecvMsg.
- //
- // It is safe to have a goroutine calling SendMsg and another goroutine
- // calling RecvMsg on the same stream at the same time, but it is not safe
- // to call SendMsg on the same stream in different goroutines. It is also
- // not safe to call CloseSend concurrently with SendMsg.
- SendMsg(m any) error
- // RecvMsg blocks until it receives a message into m or the stream is
- // done. It returns io.EOF when the stream completes successfully. On
- // any other error, the stream is aborted and the error contains the RPC
- // status.
- //
- // It is safe to have a goroutine calling SendMsg and another goroutine
- // calling RecvMsg on the same stream at the same time, but it is not
- // safe to call RecvMsg on the same stream in different goroutines.
- RecvMsg(m any) error
-}
-
-// ClientInterceptor is an interceptor for gRPC client streams.
-type ClientInterceptor interface {
- // NewStream produces a ClientStream for an RPC which may optionally use
- // the provided function to produce a stream for delegation. Note:
- // RPCInfo.Context should not be used (will be nil).
- //
- // done is invoked when the RPC is finished using its connection, or could
- // not be assigned a connection. RPC operations may still occur on
- // ClientStream after done is called, since the interceptor is invoked by
- // application-layer operations. done must never be nil when called.
- NewStream(ctx context.Context, ri RPCInfo, done func(), newStream func(ctx context.Context, done func()) (ClientStream, error)) (ClientStream, error)
-}
-
-// ServerInterceptor is an interceptor for incoming RPC's on gRPC server side.
-type ServerInterceptor interface {
- // AllowRPC checks if an incoming RPC is allowed to proceed based on
- // information about connection RPC was received on, and HTTP Headers. This
- // information will be piped into context.
- AllowRPC(ctx context.Context) error // TODO: Make this a real interceptor for filters such as rate limiting.
-}
-
-type csKeyType string
-
-const csKey = csKeyType("grpc.internal.resolver.configSelector")
-
-// SetConfigSelector sets the config selector in state and returns the new
-// state.
-func SetConfigSelector(state resolver.State, cs ConfigSelector) resolver.State {
- state.Attributes = state.Attributes.WithValue(csKey, cs)
- return state
-}
-
-// GetConfigSelector retrieves the config selector from state, if present, and
-// returns it or nil if absent.
-func GetConfigSelector(state resolver.State) ConfigSelector {
- cs, _ := state.Attributes.Value(csKey).(ConfigSelector)
- return cs
-}
-
-// SafeConfigSelector allows for safe switching of ConfigSelector
-// implementations such that previous values are guaranteed to not be in use
-// when UpdateConfigSelector returns.
-type SafeConfigSelector struct {
- mu sync.RWMutex
- cs ConfigSelector
-}
-
-// UpdateConfigSelector swaps to the provided ConfigSelector and blocks until
-// all uses of the previous ConfigSelector have completed.
-func (scs *SafeConfigSelector) UpdateConfigSelector(cs ConfigSelector) {
- scs.mu.Lock()
- defer scs.mu.Unlock()
- scs.cs = cs
-}
-
-// SelectConfig defers to the current ConfigSelector in scs.
-func (scs *SafeConfigSelector) SelectConfig(r RPCInfo) (*RPCConfig, error) {
- scs.mu.RLock()
- defer scs.mu.RUnlock()
- return scs.cs.SelectConfig(r)
-}
diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
deleted file mode 100644
index ba5c5a95d..000000000
--- a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package dns implements a dns resolver to be installed as the default resolver
-// in grpc.
-package dns
-
-import (
- "context"
- "encoding/json"
- "fmt"
- rand "math/rand/v2"
- "net"
- "net/netip"
- "os"
- "strconv"
- "strings"
- "sync"
- "time"
-
- grpclbstate "google.golang.org/grpc/balancer/grpclb/state"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal/backoff"
- "google.golang.org/grpc/internal/envconfig"
- "google.golang.org/grpc/internal/resolver/dns/internal"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/serviceconfig"
-)
-
-var (
- // EnableSRVLookups controls whether the DNS resolver attempts to fetch gRPCLB
- // addresses from SRV records. Must not be changed after init time.
- EnableSRVLookups = false
-
- // MinResolutionInterval is the minimum interval at which re-resolutions are
- // allowed. This helps to prevent excessive re-resolution.
- MinResolutionInterval = 30 * time.Second
-
- // ResolvingTimeout specifies the maximum duration for a DNS resolution request.
- // If the timeout expires before a response is received, the request will be canceled.
- //
- // It is recommended to set this value at application startup. Avoid modifying this variable
- // after initialization as it's not thread-safe for concurrent modification.
- ResolvingTimeout = 30 * time.Second
-
- logger = grpclog.Component("dns")
-)
-
-func init() {
- resolver.Register(NewBuilder())
- internal.TimeAfterFunc = time.After
- internal.TimeNowFunc = time.Now
- internal.TimeUntilFunc = time.Until
- internal.NewNetResolver = newNetResolver
- internal.AddressDialer = addressDialer
-}
-
-const (
- defaultPort = "443"
- defaultDNSSvrPort = "53"
- golang = "GO"
- // txtPrefix is the prefix string to be prepended to the host name for txt
- // record lookup.
- txtPrefix = "_grpc_config."
- // In DNS, service config is encoded in a TXT record via the mechanism
- // described in RFC-1464 using the attribute name grpc_config.
- txtAttribute = "grpc_config="
-)
-
-var addressDialer = func(address string) func(context.Context, string, string) (net.Conn, error) {
- return func(ctx context.Context, network, _ string) (net.Conn, error) {
- var dialer net.Dialer
- return dialer.DialContext(ctx, network, address)
- }
-}
-
-var newNetResolver = func(authority string) (internal.NetResolver, error) {
- if authority == "" {
- return net.DefaultResolver, nil
- }
-
- host, port, err := parseTarget(authority, defaultDNSSvrPort)
- if err != nil {
- return nil, err
- }
-
- authorityWithPort := net.JoinHostPort(host, port)
-
- return &net.Resolver{
- PreferGo: true,
- Dial: internal.AddressDialer(authorityWithPort),
- }, nil
-}
-
-// NewBuilder creates a dnsBuilder which is used to factory DNS resolvers.
-func NewBuilder() resolver.Builder {
- return &dnsBuilder{}
-}
-
-type dnsBuilder struct{}
-
-// Build creates and starts a DNS resolver that watches the name resolution of
-// the target.
-func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
- host, port, err := parseTarget(target.Endpoint(), defaultPort)
- if err != nil {
- return nil, err
- }
-
- // IP address.
- if ipAddr, err := formatIP(host); err == nil {
- addr := []resolver.Address{{Addr: ipAddr + ":" + port}}
- cc.UpdateState(resolver.State{Addresses: addr})
- return deadResolver{}, nil
- }
-
- // DNS address (non-IP).
- ctx, cancel := context.WithCancel(context.Background())
- d := &dnsResolver{
- host: host,
- port: port,
- ctx: ctx,
- cancel: cancel,
- cc: cc,
- rn: make(chan struct{}, 1),
- disableServiceConfig: opts.DisableServiceConfig,
- }
-
- d.resolver, err = internal.NewNetResolver(target.URL.Host)
- if err != nil {
- return nil, err
- }
-
- d.wg.Add(1)
- go d.watcher()
- return d, nil
-}
-
-// Scheme returns the naming scheme of this resolver builder, which is "dns".
-func (b *dnsBuilder) Scheme() string {
- return "dns"
-}
-
-// deadResolver is a resolver that does nothing.
-type deadResolver struct{}
-
-func (deadResolver) ResolveNow(resolver.ResolveNowOptions) {}
-
-func (deadResolver) Close() {}
-
-// dnsResolver watches for the name resolution update for a non-IP target.
-type dnsResolver struct {
- host string
- port string
- resolver internal.NetResolver
- ctx context.Context
- cancel context.CancelFunc
- cc resolver.ClientConn
- // rn channel is used by ResolveNow() to force an immediate resolution of the
- // target.
- rn chan struct{}
- // wg is used to enforce Close() to return after the watcher() goroutine has
- // finished. Otherwise, data race will be possible. [Race Example] in
- // dns_resolver_test we replace the real lookup functions with mocked ones to
- // facilitate testing. If Close() doesn't wait for watcher() goroutine
- // finishes, race detector sometimes will warn lookup (READ the lookup
- // function pointers) inside watcher() goroutine has data race with
- // replaceNetFunc (WRITE the lookup function pointers).
- wg sync.WaitGroup
- disableServiceConfig bool
-}
-
-// ResolveNow invoke an immediate resolution of the target that this
-// dnsResolver watches.
-func (d *dnsResolver) ResolveNow(resolver.ResolveNowOptions) {
- select {
- case d.rn <- struct{}{}:
- default:
- }
-}
-
-// Close closes the dnsResolver.
-func (d *dnsResolver) Close() {
- d.cancel()
- d.wg.Wait()
-}
-
-func (d *dnsResolver) watcher() {
- defer d.wg.Done()
- backoffIndex := 1
- for {
- state, err := d.lookup()
- if err != nil {
- // Report error to the underlying grpc.ClientConn.
- d.cc.ReportError(err)
- } else {
- err = d.cc.UpdateState(*state)
- }
-
- var nextResolutionTime time.Time
- if err == nil {
- // Success resolving, wait for the next ResolveNow. However, also wait 30
- // seconds at the very least to prevent constantly re-resolving.
- backoffIndex = 1
- nextResolutionTime = internal.TimeNowFunc().Add(MinResolutionInterval)
- select {
- case <-d.ctx.Done():
- return
- case <-d.rn:
- }
- } else {
- // Poll on an error found in DNS Resolver or an error received from
- // ClientConn.
- nextResolutionTime = internal.TimeNowFunc().Add(backoff.DefaultExponential.Backoff(backoffIndex))
- backoffIndex++
- }
- select {
- case <-d.ctx.Done():
- return
- case <-internal.TimeAfterFunc(internal.TimeUntilFunc(nextResolutionTime)):
- }
- }
-}
-
-func (d *dnsResolver) lookupSRV(ctx context.Context) ([]resolver.Address, error) {
- // Skip this particular host to avoid timeouts with some versions of
- // systemd-resolved.
- if !EnableSRVLookups || d.host == "metadata.google.internal." {
- return nil, nil
- }
- var newAddrs []resolver.Address
- _, srvs, err := d.resolver.LookupSRV(ctx, "grpclb", "tcp", d.host)
- if err != nil {
- err = handleDNSError(err, "SRV") // may become nil
- return nil, err
- }
- for _, s := range srvs {
- lbAddrs, err := d.resolver.LookupHost(ctx, s.Target)
- if err != nil {
- err = handleDNSError(err, "A") // may become nil
- if err == nil {
- // If there are other SRV records, look them up and ignore this
- // one that does not exist.
- continue
- }
- return nil, err
- }
- for _, a := range lbAddrs {
- ip, err := formatIP(a)
- if err != nil {
- return nil, fmt.Errorf("dns: error parsing A record IP address %v: %v", a, err)
- }
- addr := ip + ":" + strconv.Itoa(int(s.Port))
- newAddrs = append(newAddrs, resolver.Address{Addr: addr, ServerName: s.Target})
- }
- }
- return newAddrs, nil
-}
-
-func handleDNSError(err error, lookupType string) error {
- dnsErr, ok := err.(*net.DNSError)
- if ok && !dnsErr.IsTimeout && !dnsErr.IsTemporary {
- // Timeouts and temporary errors should be communicated to gRPC to
- // attempt another DNS query (with backoff). Other errors should be
- // suppressed (they may represent the absence of a TXT record).
- return nil
- }
- if err != nil {
- err = fmt.Errorf("dns: %v record lookup error: %v", lookupType, err)
- logger.Info(err)
- }
- return err
-}
-
-func (d *dnsResolver) lookupTXT(ctx context.Context) *serviceconfig.ParseResult {
- ss, err := d.resolver.LookupTXT(ctx, txtPrefix+d.host)
- if err != nil {
- if envconfig.TXTErrIgnore {
- return nil
- }
- if err = handleDNSError(err, "TXT"); err != nil {
- return &serviceconfig.ParseResult{Err: err}
- }
- return nil
- }
- var res string
- for _, s := range ss {
- res += s
- }
-
- // TXT record must have "grpc_config=" attribute in order to be used as
- // service config.
- if !strings.HasPrefix(res, txtAttribute) {
- logger.Warningf("dns: TXT record %v missing %v attribute", res, txtAttribute)
- // This is not an error; it is the equivalent of not having a service
- // config.
- return nil
- }
- sc := canaryingSC(strings.TrimPrefix(res, txtAttribute))
- return d.cc.ParseServiceConfig(sc)
-}
-
-func (d *dnsResolver) lookupHost(ctx context.Context) ([]resolver.Address, error) {
- addrs, err := d.resolver.LookupHost(ctx, d.host)
- if err != nil {
- err = handleDNSError(err, "A")
- return nil, err
- }
- newAddrs := make([]resolver.Address, 0, len(addrs))
- for _, a := range addrs {
- ip, err := formatIP(a)
- if err != nil {
- return nil, fmt.Errorf("dns: error parsing A record IP address %v: %v", a, err)
- }
- addr := ip + ":" + d.port
- newAddrs = append(newAddrs, resolver.Address{Addr: addr})
- }
- return newAddrs, nil
-}
-
-func (d *dnsResolver) lookup() (*resolver.State, error) {
- ctx, cancel := context.WithTimeout(d.ctx, ResolvingTimeout)
- defer cancel()
- srv, srvErr := d.lookupSRV(ctx)
- addrs, hostErr := d.lookupHost(ctx)
- if hostErr != nil && (srvErr != nil || len(srv) == 0) {
- return nil, hostErr
- }
-
- state := resolver.State{Addresses: addrs}
- if len(srv) > 0 {
- state = grpclbstate.Set(state, &grpclbstate.State{BalancerAddresses: srv})
- }
- if !d.disableServiceConfig {
- state.ServiceConfig = d.lookupTXT(ctx)
- }
- return &state, nil
-}
-
-// formatIP returns an error if addr is not a valid textual representation of
-// an IP address. If addr is an IPv4 address, return the addr and error = nil.
-// If addr is an IPv6 address, return the addr enclosed in square brackets and
-// error = nil.
-func formatIP(addr string) (string, error) {
- ip, err := netip.ParseAddr(addr)
- if err != nil {
- return "", err
- }
- if ip.Is4() {
- return addr, nil
- }
- return "[" + addr + "]", nil
-}
-
-// parseTarget takes the user input target string and default port, returns
-// formatted host and port info. If target doesn't specify a port, set the port
-// to be the defaultPort. If target is in IPv6 format and host-name is enclosed
-// in square brackets, brackets are stripped when setting the host.
-// examples:
-// target: "www.google.com" defaultPort: "443" returns host: "www.google.com", port: "443"
-// target: "ipv4-host:80" defaultPort: "443" returns host: "ipv4-host", port: "80"
-// target: "[ipv6-host]" defaultPort: "443" returns host: "ipv6-host", port: "443"
-// target: ":80" defaultPort: "443" returns host: "localhost", port: "80"
-func parseTarget(target, defaultPort string) (host, port string, err error) {
- if target == "" {
- return "", "", internal.ErrMissingAddr
- }
- if _, err := netip.ParseAddr(target); err == nil {
- // target is an IPv4 or IPv6(without brackets) address
- return target, defaultPort, nil
- }
- if host, port, err = net.SplitHostPort(target); err == nil {
- if port == "" {
- // If the port field is empty (target ends with colon), e.g. "[::1]:",
- // this is an error.
- return "", "", internal.ErrEndsWithColon
- }
- // target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port
- if host == "" {
- // Keep consistent with net.Dial(): If the host is empty, as in ":80",
- // the local system is assumed.
- host = "localhost"
- }
- return host, port, nil
- }
- if host, port, err = net.SplitHostPort(target + ":" + defaultPort); err == nil {
- // target doesn't have port
- return host, port, nil
- }
- return "", "", fmt.Errorf("invalid target address %v, error info: %v", target, err)
-}
-
-type rawChoice struct {
- ClientLanguage *[]string `json:"clientLanguage,omitempty"`
- Percentage *int `json:"percentage,omitempty"`
- ClientHostName *[]string `json:"clientHostName,omitempty"`
- ServiceConfig *json.RawMessage `json:"serviceConfig,omitempty"`
-}
-
-func containsString(a *[]string, b string) bool {
- if a == nil {
- return true
- }
- for _, c := range *a {
- if c == b {
- return true
- }
- }
- return false
-}
-
-func chosenByPercentage(a *int) bool {
- if a == nil {
- return true
- }
- return rand.IntN(100)+1 <= *a
-}
-
-func canaryingSC(js string) string {
- if js == "" {
- return ""
- }
- var rcs []rawChoice
- err := json.Unmarshal([]byte(js), &rcs)
- if err != nil {
- logger.Warningf("dns: error parsing service config json: %v", err)
- return ""
- }
- cliHostname, err := os.Hostname()
- if err != nil {
- logger.Warningf("dns: error getting client hostname: %v", err)
- return ""
- }
- var sc string
- for _, c := range rcs {
- if !containsString(c.ClientLanguage, golang) ||
- !chosenByPercentage(c.Percentage) ||
- !containsString(c.ClientHostName, cliHostname) ||
- c.ServiceConfig == nil {
- continue
- }
- sc = string(*c.ServiceConfig)
- break
- }
- return sc
-}
diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go b/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go
deleted file mode 100644
index c0eae4f5f..000000000
--- a/vendor/google.golang.org/grpc/internal/resolver/dns/internal/internal.go
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package internal contains functionality internal to the dns resolver package.
-package internal
-
-import (
- "context"
- "errors"
- "net"
- "time"
-)
-
-// NetResolver groups the methods on net.Resolver that are used by the DNS
-// resolver implementation. This allows the default net.Resolver instance to be
-// overridden from tests.
-type NetResolver interface {
- LookupHost(ctx context.Context, host string) (addrs []string, err error)
- LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*net.SRV, err error)
- LookupTXT(ctx context.Context, name string) (txts []string, err error)
-}
-
-var (
- // ErrMissingAddr is the error returned when building a DNS resolver when
- // the provided target name is empty.
- ErrMissingAddr = errors.New("dns resolver: missing address")
-
- // ErrEndsWithColon is the error returned when building a DNS resolver when
- // the provided target name ends with a colon that is supposed to be the
- // separator between host and port. E.g. "::" is a valid address as it is
- // an IPv6 address (host only) and "[::]:" is invalid as it ends with a
- // colon as the host and port separator
- ErrEndsWithColon = errors.New("dns resolver: missing port after port-separator colon")
-)
-
-// The following vars are overridden from tests.
-var (
- // TimeAfterFunc is used by the DNS resolver to wait for the given duration
- // to elapse. In non-test code, this is implemented by time.After. In test
- // code, this can be used to control the amount of time the resolver is
- // blocked waiting for the duration to elapse.
- TimeAfterFunc func(time.Duration) <-chan time.Time
-
- // TimeNowFunc is used by the DNS resolver to get the current time.
- // In non-test code, this is implemented by time.Now. In test code,
- // this can be used to control the current time for the resolver.
- TimeNowFunc func() time.Time
-
- // TimeUntilFunc is used by the DNS resolver to calculate the remaining
- // wait time for re-resolution. In non-test code, this is implemented by
- // time.Until. In test code, this can be used to control the remaining
- // time for resolver to wait for re-resolution.
- TimeUntilFunc func(time.Time) time.Duration
-
- // NewNetResolver returns the net.Resolver instance for the given target.
- NewNetResolver func(string) (NetResolver, error)
-
- // AddressDialer is the dialer used to dial the DNS server. It accepts the
- // Host portion of the URL corresponding to the user's dial target and
- // returns a dial function.
- AddressDialer func(address string) func(context.Context, string, string) (net.Conn, error)
-)
diff --git a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go b/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go
deleted file mode 100644
index b901c7bac..000000000
--- a/vendor/google.golang.org/grpc/internal/resolver/passthrough/passthrough.go
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package passthrough implements a pass-through resolver. It sends the target
-// name without scheme back to gRPC as resolved address.
-package passthrough
-
-import (
- "errors"
-
- "google.golang.org/grpc/resolver"
-)
-
-const scheme = "passthrough"
-
-type passthroughBuilder struct{}
-
-func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
- if target.Endpoint() == "" && opts.Dialer == nil {
- return nil, errors.New("passthrough: received empty target in Build()")
- }
- r := &passthroughResolver{
- target: target,
- cc: cc,
- }
- r.start()
- return r, nil
-}
-
-func (*passthroughBuilder) Scheme() string {
- return scheme
-}
-
-type passthroughResolver struct {
- target resolver.Target
- cc resolver.ClientConn
-}
-
-func (r *passthroughResolver) start() {
- r.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint()}}})
-}
-
-func (*passthroughResolver) ResolveNow(resolver.ResolveNowOptions) {}
-
-func (*passthroughResolver) Close() {}
-
-func init() {
- resolver.Register(&passthroughBuilder{})
-}
diff --git a/vendor/google.golang.org/grpc/internal/resolver/unix/unix.go b/vendor/google.golang.org/grpc/internal/resolver/unix/unix.go
deleted file mode 100644
index 27cd81af9..000000000
--- a/vendor/google.golang.org/grpc/internal/resolver/unix/unix.go
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package unix implements a resolver for unix targets.
-package unix
-
-import (
- "fmt"
-
- "google.golang.org/grpc/internal/transport/networktype"
- "google.golang.org/grpc/resolver"
-)
-
-const unixScheme = "unix"
-const unixAbstractScheme = "unix-abstract"
-
-type builder struct {
- scheme string
-}
-
-func (b *builder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (resolver.Resolver, error) {
- if target.URL.Host != "" {
- return nil, fmt.Errorf("invalid (non-empty) authority: %v", target.URL.Host)
- }
-
- // gRPC was parsing the dial target manually before PR #4817, and we
- // switched to using url.Parse() in that PR. To avoid breaking existing
- // resolver implementations we ended up stripping the leading "/" from the
- // endpoint. This obviously does not work for the "unix" scheme. Hence we
- // end up using the parsed URL instead.
- endpoint := target.URL.Path
- if endpoint == "" {
- endpoint = target.URL.Opaque
- }
- addr := resolver.Address{Addr: endpoint}
- if b.scheme == unixAbstractScheme {
- // We can not prepend \0 as c++ gRPC does, as in Golang '@' is used to signify we do
- // not want trailing \0 in address.
- addr.Addr = "@" + addr.Addr
- }
- cc.UpdateState(resolver.State{Addresses: []resolver.Address{networktype.Set(addr, "unix")}})
- return &nopResolver{}, nil
-}
-
-func (b *builder) Scheme() string {
- return b.scheme
-}
-
-func (b *builder) OverrideAuthority(resolver.Target) string {
- return "localhost"
-}
-
-type nopResolver struct {
-}
-
-func (*nopResolver) ResolveNow(resolver.ResolveNowOptions) {}
-
-func (*nopResolver) Close() {}
-
-func init() {
- resolver.Register(&builder{scheme: unixScheme})
- resolver.Register(&builder{scheme: unixAbstractScheme})
-}
diff --git a/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go b/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go
deleted file mode 100644
index 11d82afcc..000000000
--- a/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package serviceconfig
-
-import (
- "encoding/json"
- "fmt"
- "math"
- "strconv"
- "strings"
- "time"
-)
-
-// Duration defines JSON marshal and unmarshal methods to conform to the
-// protobuf JSON spec defined [here].
-//
-// [here]: https://protobuf.dev/reference/protobuf/google.protobuf/#duration
-type Duration time.Duration
-
-func (d Duration) String() string {
- return fmt.Sprint(time.Duration(d))
-}
-
-// MarshalJSON converts from d to a JSON string output.
-func (d Duration) MarshalJSON() ([]byte, error) {
- ns := time.Duration(d).Nanoseconds()
- sec := ns / int64(time.Second)
- ns = ns % int64(time.Second)
-
- var sign string
- if sec < 0 || ns < 0 {
- sign, sec, ns = "-", -1*sec, -1*ns
- }
-
- // Generated output always contains 0, 3, 6, or 9 fractional digits,
- // depending on required precision.
- str := fmt.Sprintf("%s%d.%09d", sign, sec, ns)
- str = strings.TrimSuffix(str, "000")
- str = strings.TrimSuffix(str, "000")
- str = strings.TrimSuffix(str, ".000")
- return []byte(fmt.Sprintf("\"%ss\"", str)), nil
-}
-
-// UnmarshalJSON unmarshals b as a duration JSON string into d.
-func (d *Duration) UnmarshalJSON(b []byte) error {
- var s string
- if err := json.Unmarshal(b, &s); err != nil {
- return err
- }
- if !strings.HasSuffix(s, "s") {
- return fmt.Errorf("malformed duration %q: missing seconds unit", s)
- }
- neg := false
- if s[0] == '-' {
- neg = true
- s = s[1:]
- }
- ss := strings.SplitN(s[:len(s)-1], ".", 3)
- if len(ss) > 2 {
- return fmt.Errorf("malformed duration %q: too many decimals", s)
- }
- // hasDigits is set if either the whole or fractional part of the number is
- // present, since both are optional but one is required.
- hasDigits := false
- var sec, ns int64
- if len(ss[0]) > 0 {
- var err error
- if sec, err = strconv.ParseInt(ss[0], 10, 64); err != nil {
- return fmt.Errorf("malformed duration %q: %v", s, err)
- }
- // Maximum seconds value per the durationpb spec.
- const maxProtoSeconds = 315_576_000_000
- if sec > maxProtoSeconds {
- return fmt.Errorf("out of range: %q", s)
- }
- hasDigits = true
- }
- if len(ss) == 2 && len(ss[1]) > 0 {
- if len(ss[1]) > 9 {
- return fmt.Errorf("malformed duration %q: too many digits after decimal", s)
- }
- var err error
- if ns, err = strconv.ParseInt(ss[1], 10, 64); err != nil {
- return fmt.Errorf("malformed duration %q: %v", s, err)
- }
- for i := 9; i > len(ss[1]); i-- {
- ns *= 10
- }
- hasDigits = true
- }
- if !hasDigits {
- return fmt.Errorf("malformed duration %q: contains no numbers", s)
- }
-
- if neg {
- sec *= -1
- ns *= -1
- }
-
- // Maximum/minimum seconds/nanoseconds representable by Go's time.Duration.
- const maxSeconds = math.MaxInt64 / int64(time.Second)
- const maxNanosAtMaxSeconds = math.MaxInt64 % int64(time.Second)
- const minSeconds = math.MinInt64 / int64(time.Second)
- const minNanosAtMinSeconds = math.MinInt64 % int64(time.Second)
-
- if sec > maxSeconds || (sec == maxSeconds && ns >= maxNanosAtMaxSeconds) {
- *d = Duration(math.MaxInt64)
- } else if sec < minSeconds || (sec == minSeconds && ns <= minNanosAtMinSeconds) {
- *d = Duration(math.MinInt64)
- } else {
- *d = Duration(sec*int64(time.Second) + ns)
- }
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go b/vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go
deleted file mode 100644
index 51e733e49..000000000
--- a/vendor/google.golang.org/grpc/internal/serviceconfig/serviceconfig.go
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package serviceconfig contains utility functions to parse service config.
-package serviceconfig
-
-import (
- "encoding/json"
- "fmt"
- "time"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/grpclog"
- externalserviceconfig "google.golang.org/grpc/serviceconfig"
-)
-
-var logger = grpclog.Component("core")
-
-// BalancerConfig wraps the name and config associated with one load balancing
-// policy. It corresponds to a single entry of the loadBalancingConfig field
-// from ServiceConfig.
-//
-// It implements the json.Unmarshaler interface.
-//
-// https://github.com/grpc/grpc-proto/blob/54713b1e8bc6ed2d4f25fb4dff527842150b91b2/grpc/service_config/service_config.proto#L247
-type BalancerConfig struct {
- Name string
- Config externalserviceconfig.LoadBalancingConfig
-}
-
-type intermediateBalancerConfig []map[string]json.RawMessage
-
-// MarshalJSON implements the json.Marshaler interface.
-//
-// It marshals the balancer and config into a length-1 slice
-// ([]map[string]config).
-func (bc *BalancerConfig) MarshalJSON() ([]byte, error) {
- if bc.Config == nil {
- // If config is nil, return empty config `{}`.
- return []byte(fmt.Sprintf(`[{%q: %v}]`, bc.Name, "{}")), nil
- }
- c, err := json.Marshal(bc.Config)
- if err != nil {
- return nil, err
- }
- return []byte(fmt.Sprintf(`[{%q: %s}]`, bc.Name, c)), nil
-}
-
-// UnmarshalJSON implements the json.Unmarshaler interface.
-//
-// ServiceConfig contains a list of loadBalancingConfigs, each with a name and
-// config. This method iterates through that list in order, and stops at the
-// first policy that is supported.
-// - If the config for the first supported policy is invalid, the whole service
-// config is invalid.
-// - If the list doesn't contain any supported policy, the whole service config
-// is invalid.
-func (bc *BalancerConfig) UnmarshalJSON(b []byte) error {
- var ir intermediateBalancerConfig
- err := json.Unmarshal(b, &ir)
- if err != nil {
- return err
- }
-
- var names []string
- for i, lbcfg := range ir {
- if len(lbcfg) != 1 {
- return fmt.Errorf("invalid loadBalancingConfig: entry %v does not contain exactly 1 policy/config pair: %q", i, lbcfg)
- }
-
- var (
- name string
- jsonCfg json.RawMessage
- )
- // Get the key:value pair from the map. We have already made sure that
- // the map contains a single entry.
- for name, jsonCfg = range lbcfg {
- }
-
- names = append(names, name)
- builder := balancer.Get(name)
- if builder == nil {
- // If the balancer is not registered, move on to the next config.
- // This is not an error.
- continue
- }
- bc.Name = name
-
- parser, ok := builder.(balancer.ConfigParser)
- if !ok {
- if string(jsonCfg) != "{}" {
- logger.Warningf("non-empty balancer configuration %q, but balancer does not implement ParseConfig", string(jsonCfg))
- }
- // Stop at this, though the builder doesn't support parsing config.
- return nil
- }
-
- cfg, err := parser.ParseConfig(jsonCfg)
- if err != nil {
- return fmt.Errorf("error parsing loadBalancingConfig for policy %q: %v", name, err)
- }
- bc.Config = cfg
- return nil
- }
- // This is reached when the for loop iterates over all entries, but didn't
- // return. This means we had a loadBalancingConfig slice but did not
- // encounter a registered policy. The config is considered invalid in this
- // case.
- return fmt.Errorf("invalid loadBalancingConfig: no supported policies found in %v", names)
-}
-
-// MethodConfig defines the configuration recommended by the service providers for a
-// particular method.
-type MethodConfig struct {
- // WaitForReady indicates whether RPCs sent to this method should wait until
- // the connection is ready by default (!failfast). The value specified via the
- // gRPC client API will override the value set here.
- WaitForReady *bool
- // Timeout is the default timeout for RPCs sent to this method. The actual
- // deadline used will be the minimum of the value specified here and the value
- // set by the application via the gRPC client API. If either one is not set,
- // then the other will be used. If neither is set, then the RPC has no deadline.
- Timeout *time.Duration
- // MaxReqSize is the maximum allowed payload size for an individual request in a
- // stream (client->server) in bytes. The size which is measured is the serialized
- // payload after per-message compression (but before stream compression) in bytes.
- // The actual value used is the minimum of the value specified here and the value set
- // by the application via the gRPC client API. If either one is not set, then the other
- // will be used. If neither is set, then the built-in default is used.
- MaxReqSize *int
- // MaxRespSize is the maximum allowed payload size for an individual response in a
- // stream (server->client) in bytes.
- MaxRespSize *int
- // RetryPolicy configures retry options for the method.
- RetryPolicy *RetryPolicy
-}
-
-// RetryPolicy defines the go-native version of the retry policy defined by the
-// service config here:
-// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#integration-with-service-config
-type RetryPolicy struct {
- // MaxAttempts is the maximum number of attempts, including the original RPC.
- //
- // This field is required and must be two or greater.
- MaxAttempts int
-
- // Exponential backoff parameters. The initial retry attempt will occur at
- // random(0, initialBackoff). In general, the nth attempt will occur at
- // random(0,
- // min(initialBackoff*backoffMultiplier**(n-1), maxBackoff)).
- //
- // These fields are required and must be greater than zero.
- InitialBackoff time.Duration
- MaxBackoff time.Duration
- BackoffMultiplier float64
-
- // The set of status codes which may be retried.
- //
- // Status codes are specified as strings, e.g., "UNAVAILABLE".
- //
- // This field is required and must be non-empty.
- // Note: a set is used to store this for easy lookup.
- RetryableStatusCodes map[codes.Code]bool
-}
diff --git a/vendor/google.golang.org/grpc/internal/stats/labels.go b/vendor/google.golang.org/grpc/internal/stats/labels.go
deleted file mode 100644
index fd33af51a..000000000
--- a/vendor/google.golang.org/grpc/internal/stats/labels.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package stats provides internal stats related functionality.
-package stats
-
-import "context"
-
-// Labels are the labels for metrics.
-type Labels struct {
- // TelemetryLabels are the telemetry labels to record.
- TelemetryLabels map[string]string
-}
-
-type labelsKey struct{}
-
-// GetLabels returns the Labels stored in the context, or nil if there is one.
-func GetLabels(ctx context.Context) *Labels {
- labels, _ := ctx.Value(labelsKey{}).(*Labels)
- return labels
-}
-
-// SetLabels sets the Labels in the context.
-func SetLabels(ctx context.Context, labels *Labels) context.Context {
- // could also append
- return context.WithValue(ctx, labelsKey{}, labels)
-}
diff --git a/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go b/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go
deleted file mode 100644
index 79044657b..000000000
--- a/vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package stats
-
-import (
- "fmt"
-
- estats "google.golang.org/grpc/experimental/stats"
- "google.golang.org/grpc/stats"
-)
-
-// MetricsRecorderList forwards Record calls to all of its metricsRecorders.
-//
-// It eats any record calls where the label values provided do not match the
-// number of label keys.
-type MetricsRecorderList struct {
- // metricsRecorders are the metrics recorders this list will forward to.
- metricsRecorders []estats.MetricsRecorder
-}
-
-// NewMetricsRecorderList creates a new metric recorder list with all the stats
-// handlers provided which implement the MetricsRecorder interface.
-// If no stats handlers provided implement the MetricsRecorder interface,
-// the MetricsRecorder list returned is a no-op.
-func NewMetricsRecorderList(shs []stats.Handler) *MetricsRecorderList {
- var mrs []estats.MetricsRecorder
- for _, sh := range shs {
- if mr, ok := sh.(estats.MetricsRecorder); ok {
- mrs = append(mrs, mr)
- }
- }
- return &MetricsRecorderList{
- metricsRecorders: mrs,
- }
-}
-
-func verifyLabels(desc *estats.MetricDescriptor, labelsRecv ...string) {
- if got, want := len(labelsRecv), len(desc.Labels)+len(desc.OptionalLabels); got != want {
- panic(fmt.Sprintf("Received %d labels in call to record metric %q, but expected %d.", got, desc.Name, want))
- }
-}
-
-// RecordInt64Count records the measurement alongside labels on the int
-// count associated with the provided handle.
-func (l *MetricsRecorderList) RecordInt64Count(handle *estats.Int64CountHandle, incr int64, labels ...string) {
- verifyLabels(handle.Descriptor(), labels...)
-
- for _, metricRecorder := range l.metricsRecorders {
- metricRecorder.RecordInt64Count(handle, incr, labels...)
- }
-}
-
-// RecordFloat64Count records the measurement alongside labels on the float
-// count associated with the provided handle.
-func (l *MetricsRecorderList) RecordFloat64Count(handle *estats.Float64CountHandle, incr float64, labels ...string) {
- verifyLabels(handle.Descriptor(), labels...)
-
- for _, metricRecorder := range l.metricsRecorders {
- metricRecorder.RecordFloat64Count(handle, incr, labels...)
- }
-}
-
-// RecordInt64Histo records the measurement alongside labels on the int
-// histo associated with the provided handle.
-func (l *MetricsRecorderList) RecordInt64Histo(handle *estats.Int64HistoHandle, incr int64, labels ...string) {
- verifyLabels(handle.Descriptor(), labels...)
-
- for _, metricRecorder := range l.metricsRecorders {
- metricRecorder.RecordInt64Histo(handle, incr, labels...)
- }
-}
-
-// RecordFloat64Histo records the measurement alongside labels on the float
-// histo associated with the provided handle.
-func (l *MetricsRecorderList) RecordFloat64Histo(handle *estats.Float64HistoHandle, incr float64, labels ...string) {
- verifyLabels(handle.Descriptor(), labels...)
-
- for _, metricRecorder := range l.metricsRecorders {
- metricRecorder.RecordFloat64Histo(handle, incr, labels...)
- }
-}
-
-// RecordInt64Gauge records the measurement alongside labels on the int
-// gauge associated with the provided handle.
-func (l *MetricsRecorderList) RecordInt64Gauge(handle *estats.Int64GaugeHandle, incr int64, labels ...string) {
- verifyLabels(handle.Descriptor(), labels...)
-
- for _, metricRecorder := range l.metricsRecorders {
- metricRecorder.RecordInt64Gauge(handle, incr, labels...)
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/status/status.go b/vendor/google.golang.org/grpc/internal/status/status.go
deleted file mode 100644
index 1186f1e9a..000000000
--- a/vendor/google.golang.org/grpc/internal/status/status.go
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package status implements errors returned by gRPC. These errors are
-// serialized and transmitted on the wire between server and client, and allow
-// for additional data to be transmitted via the Details field in the status
-// proto. gRPC service handlers should return an error created by this
-// package, and gRPC clients should expect a corresponding error to be
-// returned from the RPC call.
-//
-// This package upholds the invariants that a non-nil error may not
-// contain an OK code, and an OK code must result in a nil error.
-package status
-
-import (
- "errors"
- "fmt"
-
- spb "google.golang.org/genproto/googleapis/rpc/status"
- "google.golang.org/grpc/codes"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/protoadapt"
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// Status represents an RPC status code, message, and details. It is immutable
-// and should be created with New, Newf, or FromProto.
-type Status struct {
- s *spb.Status
-}
-
-// NewWithProto returns a new status including details from statusProto. This
-// is meant to be used by the gRPC library only.
-func NewWithProto(code codes.Code, message string, statusProto []string) *Status {
- if len(statusProto) != 1 {
- // No grpc-status-details bin header, or multiple; just ignore.
- return &Status{s: &spb.Status{Code: int32(code), Message: message}}
- }
- st := &spb.Status{}
- if err := proto.Unmarshal([]byte(statusProto[0]), st); err != nil {
- // Probably not a google.rpc.Status proto; do not provide details.
- return &Status{s: &spb.Status{Code: int32(code), Message: message}}
- }
- if st.Code == int32(code) {
- // The codes match between the grpc-status header and the
- // grpc-status-details-bin header; use the full details proto.
- return &Status{s: st}
- }
- return &Status{
- s: &spb.Status{
- Code: int32(codes.Internal),
- Message: fmt.Sprintf(
- "grpc-status-details-bin mismatch: grpc-status=%v, grpc-message=%q, grpc-status-details-bin=%+v",
- code, message, st,
- ),
- },
- }
-}
-
-// New returns a Status representing c and msg.
-func New(c codes.Code, msg string) *Status {
- return &Status{s: &spb.Status{Code: int32(c), Message: msg}}
-}
-
-// Newf returns New(c, fmt.Sprintf(format, a...)).
-func Newf(c codes.Code, format string, a ...any) *Status {
- return New(c, fmt.Sprintf(format, a...))
-}
-
-// FromProto returns a Status representing s.
-func FromProto(s *spb.Status) *Status {
- return &Status{s: proto.Clone(s).(*spb.Status)}
-}
-
-// Err returns an error representing c and msg. If c is OK, returns nil.
-func Err(c codes.Code, msg string) error {
- return New(c, msg).Err()
-}
-
-// Errorf returns Error(c, fmt.Sprintf(format, a...)).
-func Errorf(c codes.Code, format string, a ...any) error {
- return Err(c, fmt.Sprintf(format, a...))
-}
-
-// Code returns the status code contained in s.
-func (s *Status) Code() codes.Code {
- if s == nil || s.s == nil {
- return codes.OK
- }
- return codes.Code(s.s.Code)
-}
-
-// Message returns the message contained in s.
-func (s *Status) Message() string {
- if s == nil || s.s == nil {
- return ""
- }
- return s.s.Message
-}
-
-// Proto returns s's status as an spb.Status proto message.
-func (s *Status) Proto() *spb.Status {
- if s == nil {
- return nil
- }
- return proto.Clone(s.s).(*spb.Status)
-}
-
-// Err returns an immutable error representing s; returns nil if s.Code() is OK.
-func (s *Status) Err() error {
- if s.Code() == codes.OK {
- return nil
- }
- return &Error{s: s}
-}
-
-// WithDetails returns a new status with the provided details messages appended to the status.
-// If any errors are encountered, it returns nil and the first error encountered.
-func (s *Status) WithDetails(details ...protoadapt.MessageV1) (*Status, error) {
- if s.Code() == codes.OK {
- return nil, errors.New("no error details for status with code OK")
- }
- // s.Code() != OK implies that s.Proto() != nil.
- p := s.Proto()
- for _, detail := range details {
- m, err := anypb.New(protoadapt.MessageV2Of(detail))
- if err != nil {
- return nil, err
- }
- p.Details = append(p.Details, m)
- }
- return &Status{s: p}, nil
-}
-
-// Details returns a slice of details messages attached to the status.
-// If a detail cannot be decoded, the error is returned in place of the detail.
-// If the detail can be decoded, the proto message returned is of the same
-// type that was given to WithDetails().
-func (s *Status) Details() []any {
- if s == nil || s.s == nil {
- return nil
- }
- details := make([]any, 0, len(s.s.Details))
- for _, any := range s.s.Details {
- detail, err := any.UnmarshalNew()
- if err != nil {
- details = append(details, err)
- continue
- }
- // The call to MessageV1Of is required to unwrap the proto message if
- // it implemented only the MessageV1 API. The proto message would have
- // been wrapped in a V2 wrapper in Status.WithDetails. V2 messages are
- // added to a global registry used by any.UnmarshalNew().
- // MessageV1Of has the following behaviour:
- // 1. If the given message is a wrapped MessageV1, it returns the
- // unwrapped value.
- // 2. If the given message already implements MessageV1, it returns it
- // as is.
- // 3. Else, it wraps the MessageV2 in a MessageV1 wrapper.
- //
- // Since the Status.WithDetails() API only accepts MessageV1, calling
- // MessageV1Of ensures we return the same type that was given to
- // WithDetails:
- // * If the give type implemented only MessageV1, the unwrapping from
- // point 1 above will restore the type.
- // * If the given type implemented both MessageV1 and MessageV2, point 2
- // above will ensure no wrapping is performed.
- // * If the given type implemented only MessageV2 and was wrapped using
- // MessageV1Of before passing to WithDetails(), it would be unwrapped
- // in WithDetails by calling MessageV2Of(). Point 3 above will ensure
- // that the type is wrapped in a MessageV1 wrapper again before
- // returning. Note that protoc-gen-go doesn't generate code which
- // implements ONLY MessageV2 at the time of writing.
- //
- // NOTE: Status details can also be added using the FromProto method.
- // This could theoretically allow passing a Detail message that only
- // implements the V2 API. In such a case the message will be wrapped in
- // a MessageV1 wrapper when fetched using Details().
- // Since protoc-gen-go generates only code that implements both V1 and
- // V2 APIs for backward compatibility, this is not a concern.
- details = append(details, protoadapt.MessageV1Of(detail))
- }
- return details
-}
-
-func (s *Status) String() string {
- return fmt.Sprintf("rpc error: code = %s desc = %s", s.Code(), s.Message())
-}
-
-// Error wraps a pointer of a status proto. It implements error and Status,
-// and a nil *Error should never be returned by this package.
-type Error struct {
- s *Status
-}
-
-func (e *Error) Error() string {
- return e.s.String()
-}
-
-// GRPCStatus returns the Status represented by se.
-func (e *Error) GRPCStatus() *Status {
- return e.s
-}
-
-// Is implements future error.Is functionality.
-// A Error is equivalent if the code and message are identical.
-func (e *Error) Is(target error) bool {
- tse, ok := target.(*Error)
- if !ok {
- return false
- }
- return proto.Equal(e.s.s, tse.s.s)
-}
-
-// IsRestrictedControlPlaneCode returns whether the status includes a code
-// restricted for control plane usage as defined by gRFC A54.
-func IsRestrictedControlPlaneCode(s *Status) bool {
- switch s.Code() {
- case codes.InvalidArgument, codes.NotFound, codes.AlreadyExists, codes.FailedPrecondition, codes.Aborted, codes.OutOfRange, codes.DataLoss:
- return true
- }
- return false
-}
diff --git a/vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go b/vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go
deleted file mode 100644
index b3a72276d..000000000
--- a/vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package syscall provides functionalities that grpc uses to get low-level operating system
-// stats/info.
-package syscall
-
-import (
- "fmt"
- "net"
- "syscall"
- "time"
-
- "golang.org/x/sys/unix"
- "google.golang.org/grpc/grpclog"
-)
-
-var logger = grpclog.Component("core")
-
-// GetCPUTime returns the how much CPU time has passed since the start of this process.
-func GetCPUTime() int64 {
- var ts unix.Timespec
- if err := unix.ClockGettime(unix.CLOCK_PROCESS_CPUTIME_ID, &ts); err != nil {
- logger.Fatal(err)
- }
- return ts.Nano()
-}
-
-// Rusage is an alias for syscall.Rusage under linux environment.
-type Rusage = syscall.Rusage
-
-// GetRusage returns the resource usage of current process.
-func GetRusage() *Rusage {
- rusage := new(Rusage)
- syscall.Getrusage(syscall.RUSAGE_SELF, rusage)
- return rusage
-}
-
-// CPUTimeDiff returns the differences of user CPU time and system CPU time used
-// between two Rusage structs.
-func CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) {
- var (
- utimeDiffs = latest.Utime.Sec - first.Utime.Sec
- utimeDiffus = latest.Utime.Usec - first.Utime.Usec
- stimeDiffs = latest.Stime.Sec - first.Stime.Sec
- stimeDiffus = latest.Stime.Usec - first.Stime.Usec
- )
-
- uTimeElapsed := float64(utimeDiffs) + float64(utimeDiffus)*1.0e-6
- sTimeElapsed := float64(stimeDiffs) + float64(stimeDiffus)*1.0e-6
-
- return uTimeElapsed, sTimeElapsed
-}
-
-// SetTCPUserTimeout sets the TCP user timeout on a connection's socket
-func SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error {
- tcpconn, ok := conn.(*net.TCPConn)
- if !ok {
- // not a TCP connection. exit early
- return nil
- }
- rawConn, err := tcpconn.SyscallConn()
- if err != nil {
- return fmt.Errorf("error getting raw connection: %v", err)
- }
- err = rawConn.Control(func(fd uintptr) {
- err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT, int(timeout/time.Millisecond))
- })
- if err != nil {
- return fmt.Errorf("error setting option on socket: %v", err)
- }
-
- return nil
-}
-
-// GetTCPUserTimeout gets the TCP user timeout on a connection's socket
-func GetTCPUserTimeout(conn net.Conn) (opt int, err error) {
- tcpconn, ok := conn.(*net.TCPConn)
- if !ok {
- err = fmt.Errorf("conn is not *net.TCPConn. got %T", conn)
- return
- }
- rawConn, err := tcpconn.SyscallConn()
- if err != nil {
- err = fmt.Errorf("error getting raw connection: %v", err)
- return
- }
- err = rawConn.Control(func(fd uintptr) {
- opt, err = syscall.GetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT)
- })
- if err != nil {
- err = fmt.Errorf("error getting option on socket: %v", err)
- return
- }
-
- return
-}
diff --git a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go b/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go
deleted file mode 100644
index 54c24c2ff..000000000
--- a/vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go
+++ /dev/null
@@ -1,77 +0,0 @@
-//go:build !linux
-// +build !linux
-
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package syscall provides functionalities that grpc uses to get low-level
-// operating system stats/info.
-package syscall
-
-import (
- "net"
- "sync"
- "time"
-
- "google.golang.org/grpc/grpclog"
-)
-
-var once sync.Once
-var logger = grpclog.Component("core")
-
-func log() {
- once.Do(func() {
- logger.Info("CPU time info is unavailable on non-linux environments.")
- })
-}
-
-// GetCPUTime returns the how much CPU time has passed since the start of this
-// process. It always returns 0 under non-linux environments.
-func GetCPUTime() int64 {
- log()
- return 0
-}
-
-// Rusage is an empty struct under non-linux environments.
-type Rusage struct{}
-
-// GetRusage is a no-op function under non-linux environments.
-func GetRusage() *Rusage {
- log()
- return nil
-}
-
-// CPUTimeDiff returns the differences of user CPU time and system CPU time used
-// between two Rusage structs. It a no-op function for non-linux environments.
-func CPUTimeDiff(*Rusage, *Rusage) (float64, float64) {
- log()
- return 0, 0
-}
-
-// SetTCPUserTimeout is a no-op function under non-linux environments.
-func SetTCPUserTimeout(net.Conn, time.Duration) error {
- log()
- return nil
-}
-
-// GetTCPUserTimeout is a no-op function under non-linux environments.
-// A negative return value indicates the operation is not supported
-func GetTCPUserTimeout(net.Conn) (int, error) {
- log()
- return -1, nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/tcp_keepalive_others.go b/vendor/google.golang.org/grpc/internal/tcp_keepalive_others.go
deleted file mode 100644
index 4f347edd4..000000000
--- a/vendor/google.golang.org/grpc/internal/tcp_keepalive_others.go
+++ /dev/null
@@ -1,29 +0,0 @@
-//go:build !unix && !windows
-
-/*
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package internal
-
-import (
- "net"
-)
-
-// NetDialerWithTCPKeepalive returns a vanilla net.Dialer on non-unix platforms.
-func NetDialerWithTCPKeepalive() *net.Dialer {
- return &net.Dialer{}
-}
diff --git a/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go b/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go
deleted file mode 100644
index 7e7aaa546..000000000
--- a/vendor/google.golang.org/grpc/internal/tcp_keepalive_unix.go
+++ /dev/null
@@ -1,54 +0,0 @@
-//go:build unix
-
-/*
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package internal
-
-import (
- "net"
- "syscall"
- "time"
-
- "golang.org/x/sys/unix"
-)
-
-// NetDialerWithTCPKeepalive returns a net.Dialer that enables TCP keepalives on
-// the underlying connection with OS default values for keepalive parameters.
-//
-// TODO: Once https://github.com/golang/go/issues/62254 lands, and the
-// appropriate Go version becomes less than our least supported Go version, we
-// should look into using the new API to make things more straightforward.
-func NetDialerWithTCPKeepalive() *net.Dialer {
- return &net.Dialer{
- // Setting a negative value here prevents the Go stdlib from overriding
- // the values of TCP keepalive time and interval. It also prevents the
- // Go stdlib from enabling TCP keepalives by default.
- KeepAlive: time.Duration(-1),
- // This method is called after the underlying network socket is created,
- // but before dialing the socket (or calling its connect() method). The
- // combination of unconditionally enabling TCP keepalives here, and
- // disabling the overriding of TCP keepalive parameters by setting the
- // KeepAlive field to a negative value above, results in OS defaults for
- // the TCP keepalive interval and time parameters.
- Control: func(_, _ string, c syscall.RawConn) error {
- return c.Control(func(fd uintptr) {
- unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_KEEPALIVE, 1)
- })
- },
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go b/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go
deleted file mode 100644
index d5c1085ee..000000000
--- a/vendor/google.golang.org/grpc/internal/tcp_keepalive_windows.go
+++ /dev/null
@@ -1,54 +0,0 @@
-//go:build windows
-
-/*
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package internal
-
-import (
- "net"
- "syscall"
- "time"
-
- "golang.org/x/sys/windows"
-)
-
-// NetDialerWithTCPKeepalive returns a net.Dialer that enables TCP keepalives on
-// the underlying connection with OS default values for keepalive parameters.
-//
-// TODO: Once https://github.com/golang/go/issues/62254 lands, and the
-// appropriate Go version becomes less than our least supported Go version, we
-// should look into using the new API to make things more straightforward.
-func NetDialerWithTCPKeepalive() *net.Dialer {
- return &net.Dialer{
- // Setting a negative value here prevents the Go stdlib from overriding
- // the values of TCP keepalive time and interval. It also prevents the
- // Go stdlib from enabling TCP keepalives by default.
- KeepAlive: time.Duration(-1),
- // This method is called after the underlying network socket is created,
- // but before dialing the socket (or calling its connect() method). The
- // combination of unconditionally enabling TCP keepalives here, and
- // disabling the overriding of TCP keepalive parameters by setting the
- // KeepAlive field to a negative value above, results in OS defaults for
- // the TCP keepalive interval and time parameters.
- Control: func(_, _ string, c syscall.RawConn) error {
- return c.Control(func(fd uintptr) {
- windows.SetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_KEEPALIVE, 1)
- })
- },
- }
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go b/vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go
deleted file mode 100644
index 070680edb..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "sync"
- "time"
-)
-
-const (
- // bdpLimit is the maximum value the flow control windows will be increased
- // to. TCP typically limits this to 4MB, but some systems go up to 16MB.
- // Since this is only a limit, it is safe to make it optimistic.
- bdpLimit = (1 << 20) * 16
- // alpha is a constant factor used to keep a moving average
- // of RTTs.
- alpha = 0.9
- // If the current bdp sample is greater than or equal to
- // our beta * our estimated bdp and the current bandwidth
- // sample is the maximum bandwidth observed so far, we
- // increase our bbp estimate by a factor of gamma.
- beta = 0.66
- // To put our bdp to be smaller than or equal to twice the real BDP,
- // we should multiply our current sample with 4/3, however to round things out
- // we use 2 as the multiplication factor.
- gamma = 2
-)
-
-// Adding arbitrary data to ping so that its ack can be identified.
-// Easter-egg: what does the ping message say?
-var bdpPing = &ping{data: [8]byte{2, 4, 16, 16, 9, 14, 7, 7}}
-
-type bdpEstimator struct {
- // sentAt is the time when the ping was sent.
- sentAt time.Time
-
- mu sync.Mutex
- // bdp is the current bdp estimate.
- bdp uint32
- // sample is the number of bytes received in one measurement cycle.
- sample uint32
- // bwMax is the maximum bandwidth noted so far (bytes/sec).
- bwMax float64
- // bool to keep track of the beginning of a new measurement cycle.
- isSent bool
- // Callback to update the window sizes.
- updateFlowControl func(n uint32)
- // sampleCount is the number of samples taken so far.
- sampleCount uint64
- // round trip time (seconds)
- rtt float64
-}
-
-// timesnap registers the time bdp ping was sent out so that
-// network rtt can be calculated when its ack is received.
-// It is called (by controller) when the bdpPing is
-// being written on the wire.
-func (b *bdpEstimator) timesnap(d [8]byte) {
- if bdpPing.data != d {
- return
- }
- b.sentAt = time.Now()
-}
-
-// add adds bytes to the current sample for calculating bdp.
-// It returns true only if a ping must be sent. This can be used
-// by the caller (handleData) to make decision about batching
-// a window update with it.
-func (b *bdpEstimator) add(n uint32) bool {
- b.mu.Lock()
- defer b.mu.Unlock()
- if b.bdp == bdpLimit {
- return false
- }
- if !b.isSent {
- b.isSent = true
- b.sample = n
- b.sentAt = time.Time{}
- b.sampleCount++
- return true
- }
- b.sample += n
- return false
-}
-
-// calculate is called when an ack for a bdp ping is received.
-// Here we calculate the current bdp and bandwidth sample and
-// decide if the flow control windows should go up.
-func (b *bdpEstimator) calculate(d [8]byte) {
- // Check if the ping acked for was the bdp ping.
- if bdpPing.data != d {
- return
- }
- b.mu.Lock()
- rttSample := time.Since(b.sentAt).Seconds()
- if b.sampleCount < 10 {
- // Bootstrap rtt with an average of first 10 rtt samples.
- b.rtt += (rttSample - b.rtt) / float64(b.sampleCount)
- } else {
- // Heed to the recent past more.
- b.rtt += (rttSample - b.rtt) * float64(alpha)
- }
- b.isSent = false
- // The number of bytes accumulated so far in the sample is smaller
- // than or equal to 1.5 times the real BDP on a saturated connection.
- bwCurrent := float64(b.sample) / (b.rtt * float64(1.5))
- if bwCurrent > b.bwMax {
- b.bwMax = bwCurrent
- }
- // If the current sample (which is smaller than or equal to the 1.5 times the real BDP) is
- // greater than or equal to 2/3rd our perceived bdp AND this is the maximum bandwidth seen so far, we
- // should update our perception of the network BDP.
- if float64(b.sample) >= beta*float64(b.bdp) && bwCurrent == b.bwMax && b.bdp != bdpLimit {
- sampleFloat := float64(b.sample)
- b.bdp = uint32(gamma * sampleFloat)
- if b.bdp > bdpLimit {
- b.bdp = bdpLimit
- }
- bdp := b.bdp
- b.mu.Unlock()
- b.updateFlowControl(bdp)
- return
- }
- b.mu.Unlock()
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/client_stream.go b/vendor/google.golang.org/grpc/internal/transport/client_stream.go
deleted file mode 100644
index 8ed347c54..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/client_stream.go
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "sync/atomic"
-
- "golang.org/x/net/http2"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/status"
-)
-
-// ClientStream implements streaming functionality for a gRPC client.
-type ClientStream struct {
- *Stream // Embed for common stream functionality.
-
- ct *http2Client
- done chan struct{} // closed at the end of stream to unblock writers.
- doneFunc func() // invoked at the end of stream.
-
- headerChan chan struct{} // closed to indicate the end of header metadata.
- headerChanClosed uint32 // set when headerChan is closed. Used to avoid closing headerChan multiple times.
- // headerValid indicates whether a valid header was received. Only
- // meaningful after headerChan is closed (always call waitOnHeader() before
- // reading its value).
- headerValid bool
- header metadata.MD // the received header metadata
- noHeaders bool // set if the client never received headers (set only after the stream is done).
-
- bytesReceived atomic.Bool // indicates whether any bytes have been received on this stream
- unprocessed atomic.Bool // set if the server sends a refused stream or GOAWAY including this stream
-
- status *status.Status // the status error received from the server
-}
-
-// Read reads an n byte message from the input stream.
-func (s *ClientStream) Read(n int) (mem.BufferSlice, error) {
- b, err := s.Stream.read(n)
- if err == nil {
- s.ct.incrMsgRecv()
- }
- return b, err
-}
-
-// Close closes the stream and popagates err to any readers.
-func (s *ClientStream) Close(err error) {
- var (
- rst bool
- rstCode http2.ErrCode
- )
- if err != nil {
- rst = true
- rstCode = http2.ErrCodeCancel
- }
- s.ct.closeStream(s, err, rst, rstCode, status.Convert(err), nil, false)
-}
-
-// Write writes the hdr and data bytes to the output stream.
-func (s *ClientStream) Write(hdr []byte, data mem.BufferSlice, opts *WriteOptions) error {
- return s.ct.write(s, hdr, data, opts)
-}
-
-// BytesReceived indicates whether any bytes have been received on this stream.
-func (s *ClientStream) BytesReceived() bool {
- return s.bytesReceived.Load()
-}
-
-// Unprocessed indicates whether the server did not process this stream --
-// i.e. it sent a refused stream or GOAWAY including this stream ID.
-func (s *ClientStream) Unprocessed() bool {
- return s.unprocessed.Load()
-}
-
-func (s *ClientStream) waitOnHeader() {
- select {
- case <-s.ctx.Done():
- // Close the stream to prevent headers/trailers from changing after
- // this function returns.
- s.Close(ContextErr(s.ctx.Err()))
- // headerChan could possibly not be closed yet if closeStream raced
- // with operateHeaders; wait until it is closed explicitly here.
- <-s.headerChan
- case <-s.headerChan:
- }
-}
-
-// RecvCompress returns the compression algorithm applied to the inbound
-// message. It is empty string if there is no compression applied.
-func (s *ClientStream) RecvCompress() string {
- s.waitOnHeader()
- return s.recvCompress
-}
-
-// Done returns a channel which is closed when it receives the final status
-// from the server.
-func (s *ClientStream) Done() <-chan struct{} {
- return s.done
-}
-
-// Header returns the header metadata of the stream. Acquires the key-value
-// pairs of header metadata once it is available. It blocks until i) the
-// metadata is ready or ii) there is no header metadata or iii) the stream is
-// canceled/expired.
-func (s *ClientStream) Header() (metadata.MD, error) {
- s.waitOnHeader()
-
- if !s.headerValid || s.noHeaders {
- return nil, s.status.Err()
- }
-
- return s.header.Copy(), nil
-}
-
-// TrailersOnly blocks until a header or trailers-only frame is received and
-// then returns true if the stream was trailers-only. If the stream ends
-// before headers are received, returns true, nil.
-func (s *ClientStream) TrailersOnly() bool {
- s.waitOnHeader()
- return s.noHeaders
-}
-
-// Status returns the status received from the server.
-// Status can be read safely only after the stream has ended,
-// that is, after Done() is closed.
-func (s *ClientStream) Status() *status.Status {
- return s.status
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go
deleted file mode 100644
index ef72fbb3a..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go
+++ /dev/null
@@ -1,1035 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "runtime"
- "strconv"
- "sync"
- "sync/atomic"
-
- "golang.org/x/net/http2"
- "golang.org/x/net/http2/hpack"
- "google.golang.org/grpc/internal/grpclog"
- "google.golang.org/grpc/internal/grpcutil"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/status"
-)
-
-var updateHeaderTblSize = func(e *hpack.Encoder, v uint32) {
- e.SetMaxDynamicTableSizeLimit(v)
-}
-
-type itemNode struct {
- it any
- next *itemNode
-}
-
-type itemList struct {
- head *itemNode
- tail *itemNode
-}
-
-func (il *itemList) enqueue(i any) {
- n := &itemNode{it: i}
- if il.tail == nil {
- il.head, il.tail = n, n
- return
- }
- il.tail.next = n
- il.tail = n
-}
-
-// peek returns the first item in the list without removing it from the
-// list.
-func (il *itemList) peek() any {
- return il.head.it
-}
-
-func (il *itemList) dequeue() any {
- if il.head == nil {
- return nil
- }
- i := il.head.it
- il.head = il.head.next
- if il.head == nil {
- il.tail = nil
- }
- return i
-}
-
-func (il *itemList) dequeueAll() *itemNode {
- h := il.head
- il.head, il.tail = nil, nil
- return h
-}
-
-func (il *itemList) isEmpty() bool {
- return il.head == nil
-}
-
-// The following defines various control items which could flow through
-// the control buffer of transport. They represent different aspects of
-// control tasks, e.g., flow control, settings, streaming resetting, etc.
-
-// maxQueuedTransportResponseFrames is the most queued "transport response"
-// frames we will buffer before preventing new reads from occurring on the
-// transport. These are control frames sent in response to client requests,
-// such as RST_STREAM due to bad headers or settings acks.
-const maxQueuedTransportResponseFrames = 50
-
-type cbItem interface {
- isTransportResponseFrame() bool
-}
-
-// registerStream is used to register an incoming stream with loopy writer.
-type registerStream struct {
- streamID uint32
- wq *writeQuota
-}
-
-func (*registerStream) isTransportResponseFrame() bool { return false }
-
-// headerFrame is also used to register stream on the client-side.
-type headerFrame struct {
- streamID uint32
- hf []hpack.HeaderField
- endStream bool // Valid on server side.
- initStream func(uint32) error // Used only on the client side.
- onWrite func()
- wq *writeQuota // write quota for the stream created.
- cleanup *cleanupStream // Valid on the server side.
- onOrphaned func(error) // Valid on client-side
-}
-
-func (h *headerFrame) isTransportResponseFrame() bool {
- return h.cleanup != nil && h.cleanup.rst // Results in a RST_STREAM
-}
-
-type cleanupStream struct {
- streamID uint32
- rst bool
- rstCode http2.ErrCode
- onWrite func()
-}
-
-func (c *cleanupStream) isTransportResponseFrame() bool { return c.rst } // Results in a RST_STREAM
-
-type earlyAbortStream struct {
- httpStatus uint32
- streamID uint32
- contentSubtype string
- status *status.Status
- rst bool
-}
-
-func (*earlyAbortStream) isTransportResponseFrame() bool { return false }
-
-type dataFrame struct {
- streamID uint32
- endStream bool
- h []byte
- reader mem.Reader
- // onEachWrite is called every time
- // a part of data is written out.
- onEachWrite func()
-}
-
-func (*dataFrame) isTransportResponseFrame() bool { return false }
-
-type incomingWindowUpdate struct {
- streamID uint32
- increment uint32
-}
-
-func (*incomingWindowUpdate) isTransportResponseFrame() bool { return false }
-
-type outgoingWindowUpdate struct {
- streamID uint32
- increment uint32
-}
-
-func (*outgoingWindowUpdate) isTransportResponseFrame() bool {
- return false // window updates are throttled by thresholds
-}
-
-type incomingSettings struct {
- ss []http2.Setting
-}
-
-func (*incomingSettings) isTransportResponseFrame() bool { return true } // Results in a settings ACK
-
-type outgoingSettings struct {
- ss []http2.Setting
-}
-
-func (*outgoingSettings) isTransportResponseFrame() bool { return false }
-
-type incomingGoAway struct {
-}
-
-func (*incomingGoAway) isTransportResponseFrame() bool { return false }
-
-type goAway struct {
- code http2.ErrCode
- debugData []byte
- headsUp bool
- closeConn error // if set, loopyWriter will exit with this error
-}
-
-func (*goAway) isTransportResponseFrame() bool { return false }
-
-type ping struct {
- ack bool
- data [8]byte
-}
-
-func (*ping) isTransportResponseFrame() bool { return true }
-
-type outFlowControlSizeRequest struct {
- resp chan uint32
-}
-
-func (*outFlowControlSizeRequest) isTransportResponseFrame() bool { return false }
-
-// closeConnection is an instruction to tell the loopy writer to flush the
-// framer and exit, which will cause the transport's connection to be closed
-// (by the client or server). The transport itself will close after the reader
-// encounters the EOF caused by the connection closure.
-type closeConnection struct{}
-
-func (closeConnection) isTransportResponseFrame() bool { return false }
-
-type outStreamState int
-
-const (
- active outStreamState = iota
- empty
- waitingOnStreamQuota
-)
-
-type outStream struct {
- id uint32
- state outStreamState
- itl *itemList
- bytesOutStanding int
- wq *writeQuota
-
- next *outStream
- prev *outStream
-}
-
-func (s *outStream) deleteSelf() {
- if s.prev != nil {
- s.prev.next = s.next
- }
- if s.next != nil {
- s.next.prev = s.prev
- }
- s.next, s.prev = nil, nil
-}
-
-type outStreamList struct {
- // Following are sentinel objects that mark the
- // beginning and end of the list. They do not
- // contain any item lists. All valid objects are
- // inserted in between them.
- // This is needed so that an outStream object can
- // deleteSelf() in O(1) time without knowing which
- // list it belongs to.
- head *outStream
- tail *outStream
-}
-
-func newOutStreamList() *outStreamList {
- head, tail := new(outStream), new(outStream)
- head.next = tail
- tail.prev = head
- return &outStreamList{
- head: head,
- tail: tail,
- }
-}
-
-func (l *outStreamList) enqueue(s *outStream) {
- e := l.tail.prev
- e.next = s
- s.prev = e
- s.next = l.tail
- l.tail.prev = s
-}
-
-// remove from the beginning of the list.
-func (l *outStreamList) dequeue() *outStream {
- b := l.head.next
- if b == l.tail {
- return nil
- }
- b.deleteSelf()
- return b
-}
-
-// controlBuffer is a way to pass information to loopy.
-//
-// Information is passed as specific struct types called control frames. A
-// control frame not only represents data, messages or headers to be sent out
-// but can also be used to instruct loopy to update its internal state. It
-// shouldn't be confused with an HTTP2 frame, although some of the control
-// frames like dataFrame and headerFrame do go out on wire as HTTP2 frames.
-type controlBuffer struct {
- wakeupCh chan struct{} // Unblocks readers waiting for something to read.
- done <-chan struct{} // Closed when the transport is done.
-
- // Mutex guards all the fields below, except trfChan which can be read
- // atomically without holding mu.
- mu sync.Mutex
- consumerWaiting bool // True when readers are blocked waiting for new data.
- closed bool // True when the controlbuf is finished.
- list *itemList // List of queued control frames.
-
- // transportResponseFrames counts the number of queued items that represent
- // the response of an action initiated by the peer. trfChan is created
- // when transportResponseFrames >= maxQueuedTransportResponseFrames and is
- // closed and nilled when transportResponseFrames drops below the
- // threshold. Both fields are protected by mu.
- transportResponseFrames int
- trfChan atomic.Pointer[chan struct{}]
-}
-
-func newControlBuffer(done <-chan struct{}) *controlBuffer {
- return &controlBuffer{
- wakeupCh: make(chan struct{}, 1),
- list: &itemList{},
- done: done,
- }
-}
-
-// throttle blocks if there are too many frames in the control buf that
-// represent the response of an action initiated by the peer, like
-// incomingSettings cleanupStreams etc.
-func (c *controlBuffer) throttle() {
- if ch := c.trfChan.Load(); ch != nil {
- select {
- case <-(*ch):
- case <-c.done:
- }
- }
-}
-
-// put adds an item to the controlbuf.
-func (c *controlBuffer) put(it cbItem) error {
- _, err := c.executeAndPut(nil, it)
- return err
-}
-
-// executeAndPut runs f, and if the return value is true, adds the given item to
-// the controlbuf. The item could be nil, in which case, this method simply
-// executes f and does not add the item to the controlbuf.
-//
-// The first return value indicates whether the item was successfully added to
-// the control buffer. A non-nil error, specifically ErrConnClosing, is returned
-// if the control buffer is already closed.
-func (c *controlBuffer) executeAndPut(f func() bool, it cbItem) (bool, error) {
- c.mu.Lock()
- defer c.mu.Unlock()
-
- if c.closed {
- return false, ErrConnClosing
- }
- if f != nil {
- if !f() { // f wasn't successful
- return false, nil
- }
- }
- if it == nil {
- return true, nil
- }
-
- var wakeUp bool
- if c.consumerWaiting {
- wakeUp = true
- c.consumerWaiting = false
- }
- c.list.enqueue(it)
- if it.isTransportResponseFrame() {
- c.transportResponseFrames++
- if c.transportResponseFrames == maxQueuedTransportResponseFrames {
- // We are adding the frame that puts us over the threshold; create
- // a throttling channel.
- ch := make(chan struct{})
- c.trfChan.Store(&ch)
- }
- }
- if wakeUp {
- select {
- case c.wakeupCh <- struct{}{}:
- default:
- }
- }
- return true, nil
-}
-
-// get returns the next control frame from the control buffer. If block is true
-// **and** there are no control frames in the control buffer, the call blocks
-// until one of the conditions is met: there is a frame to return or the
-// transport is closed.
-func (c *controlBuffer) get(block bool) (any, error) {
- for {
- c.mu.Lock()
- frame, err := c.getOnceLocked()
- if frame != nil || err != nil || !block {
- // If we read a frame or an error, we can return to the caller. The
- // call to getOnceLocked() returns a nil frame and a nil error if
- // there is nothing to read, and in that case, if the caller asked
- // us not to block, we can return now as well.
- c.mu.Unlock()
- return frame, err
- }
- c.consumerWaiting = true
- c.mu.Unlock()
-
- // Release the lock above and wait to be woken up.
- select {
- case <-c.wakeupCh:
- case <-c.done:
- return nil, errors.New("transport closed by client")
- }
- }
-}
-
-// Callers must not use this method, but should instead use get().
-//
-// Caller must hold c.mu.
-func (c *controlBuffer) getOnceLocked() (any, error) {
- if c.closed {
- return false, ErrConnClosing
- }
- if c.list.isEmpty() {
- return nil, nil
- }
- h := c.list.dequeue().(cbItem)
- if h.isTransportResponseFrame() {
- if c.transportResponseFrames == maxQueuedTransportResponseFrames {
- // We are removing the frame that put us over the
- // threshold; close and clear the throttling channel.
- ch := c.trfChan.Swap(nil)
- close(*ch)
- }
- c.transportResponseFrames--
- }
- return h, nil
-}
-
-// finish closes the control buffer, cleaning up any streams that have queued
-// header frames. Once this method returns, no more frames can be added to the
-// control buffer, and attempts to do so will return ErrConnClosing.
-func (c *controlBuffer) finish() {
- c.mu.Lock()
- defer c.mu.Unlock()
-
- if c.closed {
- return
- }
- c.closed = true
- // There may be headers for streams in the control buffer.
- // These streams need to be cleaned out since the transport
- // is still not aware of these yet.
- for head := c.list.dequeueAll(); head != nil; head = head.next {
- switch v := head.it.(type) {
- case *headerFrame:
- if v.onOrphaned != nil { // It will be nil on the server-side.
- v.onOrphaned(ErrConnClosing)
- }
- case *dataFrame:
- _ = v.reader.Close()
- }
- }
-
- // In case throttle() is currently in flight, it needs to be unblocked.
- // Otherwise, the transport may not close, since the transport is closed by
- // the reader encountering the connection error.
- ch := c.trfChan.Swap(nil)
- if ch != nil {
- close(*ch)
- }
-}
-
-type side int
-
-const (
- clientSide side = iota
- serverSide
-)
-
-// Loopy receives frames from the control buffer.
-// Each frame is handled individually; most of the work done by loopy goes
-// into handling data frames. Loopy maintains a queue of active streams, and each
-// stream maintains a queue of data frames; as loopy receives data frames
-// it gets added to the queue of the relevant stream.
-// Loopy goes over this list of active streams by processing one node every iteration,
-// thereby closely resembling a round-robin scheduling over all streams. While
-// processing a stream, loopy writes out data bytes from this stream capped by the min
-// of http2MaxFrameLen, connection-level flow control and stream-level flow control.
-type loopyWriter struct {
- side side
- cbuf *controlBuffer
- sendQuota uint32
- oiws uint32 // outbound initial window size.
- // estdStreams is map of all established streams that are not cleaned-up yet.
- // On client-side, this is all streams whose headers were sent out.
- // On server-side, this is all streams whose headers were received.
- estdStreams map[uint32]*outStream // Established streams.
- // activeStreams is a linked-list of all streams that have data to send and some
- // stream-level flow control quota.
- // Each of these streams internally have a list of data items(and perhaps trailers
- // on the server-side) to be sent out.
- activeStreams *outStreamList
- framer *framer
- hBuf *bytes.Buffer // The buffer for HPACK encoding.
- hEnc *hpack.Encoder // HPACK encoder.
- bdpEst *bdpEstimator
- draining bool
- conn net.Conn
- logger *grpclog.PrefixLogger
- bufferPool mem.BufferPool
-
- // Side-specific handlers
- ssGoAwayHandler func(*goAway) (bool, error)
-}
-
-func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger, goAwayHandler func(*goAway) (bool, error), bufferPool mem.BufferPool) *loopyWriter {
- var buf bytes.Buffer
- l := &loopyWriter{
- side: s,
- cbuf: cbuf,
- sendQuota: defaultWindowSize,
- oiws: defaultWindowSize,
- estdStreams: make(map[uint32]*outStream),
- activeStreams: newOutStreamList(),
- framer: fr,
- hBuf: &buf,
- hEnc: hpack.NewEncoder(&buf),
- bdpEst: bdpEst,
- conn: conn,
- logger: logger,
- ssGoAwayHandler: goAwayHandler,
- bufferPool: bufferPool,
- }
- return l
-}
-
-const minBatchSize = 1000
-
-// run should be run in a separate goroutine.
-// It reads control frames from controlBuf and processes them by:
-// 1. Updating loopy's internal state, or/and
-// 2. Writing out HTTP2 frames on the wire.
-//
-// Loopy keeps all active streams with data to send in a linked-list.
-// All streams in the activeStreams linked-list must have both:
-// 1. Data to send, and
-// 2. Stream level flow control quota available.
-//
-// In each iteration of run loop, other than processing the incoming control
-// frame, loopy calls processData, which processes one node from the
-// activeStreams linked-list. This results in writing of HTTP2 frames into an
-// underlying write buffer. When there's no more control frames to read from
-// controlBuf, loopy flushes the write buffer. As an optimization, to increase
-// the batch size for each flush, loopy yields the processor, once if the batch
-// size is too low to give stream goroutines a chance to fill it up.
-//
-// Upon exiting, if the error causing the exit is not an I/O error, run()
-// flushes the underlying connection. The connection is always left open to
-// allow different closing behavior on the client and server.
-func (l *loopyWriter) run() (err error) {
- defer func() {
- if l.logger.V(logLevel) {
- l.logger.Infof("loopyWriter exiting with error: %v", err)
- }
- if !isIOError(err) {
- l.framer.writer.Flush()
- }
- l.cbuf.finish()
- }()
- for {
- it, err := l.cbuf.get(true)
- if err != nil {
- return err
- }
- if err = l.handle(it); err != nil {
- return err
- }
- if _, err = l.processData(); err != nil {
- return err
- }
- gosched := true
- hasdata:
- for {
- it, err := l.cbuf.get(false)
- if err != nil {
- return err
- }
- if it != nil {
- if err = l.handle(it); err != nil {
- return err
- }
- if _, err = l.processData(); err != nil {
- return err
- }
- continue hasdata
- }
- isEmpty, err := l.processData()
- if err != nil {
- return err
- }
- if !isEmpty {
- continue hasdata
- }
- if gosched {
- gosched = false
- if l.framer.writer.offset < minBatchSize {
- runtime.Gosched()
- continue hasdata
- }
- }
- l.framer.writer.Flush()
- break hasdata
- }
- }
-}
-
-func (l *loopyWriter) outgoingWindowUpdateHandler(w *outgoingWindowUpdate) error {
- return l.framer.fr.WriteWindowUpdate(w.streamID, w.increment)
-}
-
-func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) {
- // Otherwise update the quota.
- if w.streamID == 0 {
- l.sendQuota += w.increment
- return
- }
- // Find the stream and update it.
- if str, ok := l.estdStreams[w.streamID]; ok {
- str.bytesOutStanding -= int(w.increment)
- if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota > 0 && str.state == waitingOnStreamQuota {
- str.state = active
- l.activeStreams.enqueue(str)
- return
- }
- }
-}
-
-func (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error {
- return l.framer.fr.WriteSettings(s.ss...)
-}
-
-func (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error {
- l.applySettings(s.ss)
- return l.framer.fr.WriteSettingsAck()
-}
-
-func (l *loopyWriter) registerStreamHandler(h *registerStream) {
- str := &outStream{
- id: h.streamID,
- state: empty,
- itl: &itemList{},
- wq: h.wq,
- }
- l.estdStreams[h.streamID] = str
-}
-
-func (l *loopyWriter) headerHandler(h *headerFrame) error {
- if l.side == serverSide {
- str, ok := l.estdStreams[h.streamID]
- if !ok {
- if l.logger.V(logLevel) {
- l.logger.Infof("Unrecognized streamID %d in loopyWriter", h.streamID)
- }
- return nil
- }
- // Case 1.A: Server is responding back with headers.
- if !h.endStream {
- return l.writeHeader(h.streamID, h.endStream, h.hf, h.onWrite)
- }
- // else: Case 1.B: Server wants to close stream.
-
- if str.state != empty { // either active or waiting on stream quota.
- // add it str's list of items.
- str.itl.enqueue(h)
- return nil
- }
- if err := l.writeHeader(h.streamID, h.endStream, h.hf, h.onWrite); err != nil {
- return err
- }
- return l.cleanupStreamHandler(h.cleanup)
- }
- // Case 2: Client wants to originate stream.
- str := &outStream{
- id: h.streamID,
- state: empty,
- itl: &itemList{},
- wq: h.wq,
- }
- return l.originateStream(str, h)
-}
-
-func (l *loopyWriter) originateStream(str *outStream, hdr *headerFrame) error {
- // l.draining is set when handling GoAway. In which case, we want to avoid
- // creating new streams.
- if l.draining {
- // TODO: provide a better error with the reason we are in draining.
- hdr.onOrphaned(errStreamDrain)
- return nil
- }
- if err := hdr.initStream(str.id); err != nil {
- return err
- }
- if err := l.writeHeader(str.id, hdr.endStream, hdr.hf, hdr.onWrite); err != nil {
- return err
- }
- l.estdStreams[str.id] = str
- return nil
-}
-
-func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.HeaderField, onWrite func()) error {
- if onWrite != nil {
- onWrite()
- }
- l.hBuf.Reset()
- for _, f := range hf {
- if err := l.hEnc.WriteField(f); err != nil {
- if l.logger.V(logLevel) {
- l.logger.Warningf("Encountered error while encoding headers: %v", err)
- }
- }
- }
- var (
- err error
- endHeaders, first bool
- )
- first = true
- for !endHeaders {
- size := l.hBuf.Len()
- if size > http2MaxFrameLen {
- size = http2MaxFrameLen
- } else {
- endHeaders = true
- }
- if first {
- first = false
- err = l.framer.fr.WriteHeaders(http2.HeadersFrameParam{
- StreamID: streamID,
- BlockFragment: l.hBuf.Next(size),
- EndStream: endStream,
- EndHeaders: endHeaders,
- })
- } else {
- err = l.framer.fr.WriteContinuation(
- streamID,
- endHeaders,
- l.hBuf.Next(size),
- )
- }
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-func (l *loopyWriter) preprocessData(df *dataFrame) {
- str, ok := l.estdStreams[df.streamID]
- if !ok {
- return
- }
- // If we got data for a stream it means that
- // stream was originated and the headers were sent out.
- str.itl.enqueue(df)
- if str.state == empty {
- str.state = active
- l.activeStreams.enqueue(str)
- }
-}
-
-func (l *loopyWriter) pingHandler(p *ping) error {
- if !p.ack {
- l.bdpEst.timesnap(p.data)
- }
- return l.framer.fr.WritePing(p.ack, p.data)
-
-}
-
-func (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) {
- o.resp <- l.sendQuota
-}
-
-func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error {
- c.onWrite()
- if str, ok := l.estdStreams[c.streamID]; ok {
- // On the server side it could be a trailers-only response or
- // a RST_STREAM before stream initialization thus the stream might
- // not be established yet.
- delete(l.estdStreams, c.streamID)
- str.deleteSelf()
- for head := str.itl.dequeueAll(); head != nil; head = head.next {
- if df, ok := head.it.(*dataFrame); ok {
- _ = df.reader.Close()
- }
- }
- }
- if c.rst { // If RST_STREAM needs to be sent.
- if err := l.framer.fr.WriteRSTStream(c.streamID, c.rstCode); err != nil {
- return err
- }
- }
- if l.draining && len(l.estdStreams) == 0 {
- // Flush and close the connection; we are done with it.
- return errors.New("finished processing active streams while in draining mode")
- }
- return nil
-}
-
-func (l *loopyWriter) earlyAbortStreamHandler(eas *earlyAbortStream) error {
- if l.side == clientSide {
- return errors.New("earlyAbortStream not handled on client")
- }
- // In case the caller forgets to set the http status, default to 200.
- if eas.httpStatus == 0 {
- eas.httpStatus = 200
- }
- headerFields := []hpack.HeaderField{
- {Name: ":status", Value: strconv.Itoa(int(eas.httpStatus))},
- {Name: "content-type", Value: grpcutil.ContentType(eas.contentSubtype)},
- {Name: "grpc-status", Value: strconv.Itoa(int(eas.status.Code()))},
- {Name: "grpc-message", Value: encodeGrpcMessage(eas.status.Message())},
- }
-
- if err := l.writeHeader(eas.streamID, true, headerFields, nil); err != nil {
- return err
- }
- if eas.rst {
- if err := l.framer.fr.WriteRSTStream(eas.streamID, http2.ErrCodeNo); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (l *loopyWriter) incomingGoAwayHandler(*incomingGoAway) error {
- if l.side == clientSide {
- l.draining = true
- if len(l.estdStreams) == 0 {
- // Flush and close the connection; we are done with it.
- return errors.New("received GOAWAY with no active streams")
- }
- }
- return nil
-}
-
-func (l *loopyWriter) goAwayHandler(g *goAway) error {
- // Handling of outgoing GoAway is very specific to side.
- if l.ssGoAwayHandler != nil {
- draining, err := l.ssGoAwayHandler(g)
- if err != nil {
- return err
- }
- l.draining = draining
- }
- return nil
-}
-
-func (l *loopyWriter) handle(i any) error {
- switch i := i.(type) {
- case *incomingWindowUpdate:
- l.incomingWindowUpdateHandler(i)
- case *outgoingWindowUpdate:
- return l.outgoingWindowUpdateHandler(i)
- case *incomingSettings:
- return l.incomingSettingsHandler(i)
- case *outgoingSettings:
- return l.outgoingSettingsHandler(i)
- case *headerFrame:
- return l.headerHandler(i)
- case *registerStream:
- l.registerStreamHandler(i)
- case *cleanupStream:
- return l.cleanupStreamHandler(i)
- case *earlyAbortStream:
- return l.earlyAbortStreamHandler(i)
- case *incomingGoAway:
- return l.incomingGoAwayHandler(i)
- case *dataFrame:
- l.preprocessData(i)
- case *ping:
- return l.pingHandler(i)
- case *goAway:
- return l.goAwayHandler(i)
- case *outFlowControlSizeRequest:
- l.outFlowControlSizeRequestHandler(i)
- case closeConnection:
- // Just return a non-I/O error and run() will flush and close the
- // connection.
- return ErrConnClosing
- default:
- return fmt.Errorf("transport: unknown control message type %T", i)
- }
- return nil
-}
-
-func (l *loopyWriter) applySettings(ss []http2.Setting) {
- for _, s := range ss {
- switch s.ID {
- case http2.SettingInitialWindowSize:
- o := l.oiws
- l.oiws = s.Val
- if o < l.oiws {
- // If the new limit is greater make all depleted streams active.
- for _, stream := range l.estdStreams {
- if stream.state == waitingOnStreamQuota {
- stream.state = active
- l.activeStreams.enqueue(stream)
- }
- }
- }
- case http2.SettingHeaderTableSize:
- updateHeaderTblSize(l.hEnc, s.Val)
- }
- }
-}
-
-// processData removes the first stream from active streams, writes out at most 16KB
-// of its data and then puts it at the end of activeStreams if there's still more data
-// to be sent and stream has some stream-level flow control.
-func (l *loopyWriter) processData() (bool, error) {
- if l.sendQuota == 0 {
- return true, nil
- }
- str := l.activeStreams.dequeue() // Remove the first stream.
- if str == nil {
- return true, nil
- }
- dataItem := str.itl.peek().(*dataFrame) // Peek at the first data item this stream.
- // A data item is represented by a dataFrame, since it later translates into
- // multiple HTTP2 data frames.
- // Every dataFrame has two buffers; h that keeps grpc-message header and data
- // that is the actual message. As an optimization to keep wire traffic low, data
- // from data is copied to h to make as big as the maximum possible HTTP2 frame
- // size.
-
- if len(dataItem.h) == 0 && dataItem.reader.Remaining() == 0 { // Empty data frame
- // Client sends out empty data frame with endStream = true
- if err := l.framer.fr.WriteData(dataItem.streamID, dataItem.endStream, nil); err != nil {
- return false, err
- }
- str.itl.dequeue() // remove the empty data item from stream
- _ = dataItem.reader.Close()
- if str.itl.isEmpty() {
- str.state = empty
- } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // the next item is trailers.
- if err := l.writeHeader(trailer.streamID, trailer.endStream, trailer.hf, trailer.onWrite); err != nil {
- return false, err
- }
- if err := l.cleanupStreamHandler(trailer.cleanup); err != nil {
- return false, err
- }
- } else {
- l.activeStreams.enqueue(str)
- }
- return false, nil
- }
-
- // Figure out the maximum size we can send
- maxSize := http2MaxFrameLen
- if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota <= 0 { // stream-level flow control.
- str.state = waitingOnStreamQuota
- return false, nil
- } else if maxSize > strQuota {
- maxSize = strQuota
- }
- if maxSize > int(l.sendQuota) { // connection-level flow control.
- maxSize = int(l.sendQuota)
- }
- // Compute how much of the header and data we can send within quota and max frame length
- hSize := min(maxSize, len(dataItem.h))
- dSize := min(maxSize-hSize, dataItem.reader.Remaining())
- remainingBytes := len(dataItem.h) + dataItem.reader.Remaining() - hSize - dSize
- size := hSize + dSize
-
- var buf *[]byte
-
- if hSize != 0 && dSize == 0 {
- buf = &dataItem.h
- } else {
- // Note: this is only necessary because the http2.Framer does not support
- // partially writing a frame, so the sequence must be materialized into a buffer.
- // TODO: Revisit once https://github.com/golang/go/issues/66655 is addressed.
- pool := l.bufferPool
- if pool == nil {
- // Note that this is only supposed to be nil in tests. Otherwise, stream is
- // always initialized with a BufferPool.
- pool = mem.DefaultBufferPool()
- }
- buf = pool.Get(size)
- defer pool.Put(buf)
-
- copy((*buf)[:hSize], dataItem.h)
- _, _ = dataItem.reader.Read((*buf)[hSize:])
- }
-
- // Now that outgoing flow controls are checked we can replenish str's write quota
- str.wq.replenish(size)
- var endStream bool
- // If this is the last data message on this stream and all of it can be written in this iteration.
- if dataItem.endStream && remainingBytes == 0 {
- endStream = true
- }
- if dataItem.onEachWrite != nil {
- dataItem.onEachWrite()
- }
- if err := l.framer.fr.WriteData(dataItem.streamID, endStream, (*buf)[:size]); err != nil {
- return false, err
- }
- str.bytesOutStanding += size
- l.sendQuota -= uint32(size)
- dataItem.h = dataItem.h[hSize:]
-
- if remainingBytes == 0 { // All the data from that message was written out.
- _ = dataItem.reader.Close()
- str.itl.dequeue()
- }
- if str.itl.isEmpty() {
- str.state = empty
- } else if trailer, ok := str.itl.peek().(*headerFrame); ok { // The next item is trailers.
- if err := l.writeHeader(trailer.streamID, trailer.endStream, trailer.hf, trailer.onWrite); err != nil {
- return false, err
- }
- if err := l.cleanupStreamHandler(trailer.cleanup); err != nil {
- return false, err
- }
- } else if int(l.oiws)-str.bytesOutStanding <= 0 { // Ran out of stream quota.
- str.state = waitingOnStreamQuota
- } else { // Otherwise add it back to the list of active streams.
- l.activeStreams.enqueue(str)
- }
- return false, nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/defaults.go b/vendor/google.golang.org/grpc/internal/transport/defaults.go
deleted file mode 100644
index bc8ee0747..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/defaults.go
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "math"
- "time"
-)
-
-const (
- // The default value of flow control window size in HTTP2 spec.
- defaultWindowSize = 65535
- // The initial window size for flow control.
- initialWindowSize = defaultWindowSize // for an RPC
- infinity = time.Duration(math.MaxInt64)
- defaultClientKeepaliveTime = infinity
- defaultClientKeepaliveTimeout = 20 * time.Second
- defaultMaxStreamsClient = 100
- defaultMaxConnectionIdle = infinity
- defaultMaxConnectionAge = infinity
- defaultMaxConnectionAgeGrace = infinity
- defaultServerKeepaliveTime = 2 * time.Hour
- defaultServerKeepaliveTimeout = 20 * time.Second
- defaultKeepalivePolicyMinTime = 5 * time.Minute
- // max window limit set by HTTP2 Specs.
- maxWindowSize = math.MaxInt32
- // defaultWriteQuota is the default value for number of data
- // bytes that each stream can schedule before some of it being
- // flushed out.
- defaultWriteQuota = 64 * 1024
- defaultClientMaxHeaderListSize = uint32(16 << 20)
- defaultServerMaxHeaderListSize = uint32(16 << 20)
-)
-
-// MaxStreamID is the upper bound for the stream ID before the current
-// transport gracefully closes and new transport is created for subsequent RPCs.
-// This is set to 75% of 2^31-1. Streams are identified with an unsigned 31-bit
-// integer. It's exported so that tests can override it.
-var MaxStreamID = uint32(math.MaxInt32 * 3 / 4)
diff --git a/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go b/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go
deleted file mode 100644
index dfc0f224e..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/flowcontrol.go
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "fmt"
- "math"
- "sync"
- "sync/atomic"
-)
-
-// writeQuota is a soft limit on the amount of data a stream can
-// schedule before some of it is written out.
-type writeQuota struct {
- quota int32
- // get waits on read from when quota goes less than or equal to zero.
- // replenish writes on it when quota goes positive again.
- ch chan struct{}
- // done is triggered in error case.
- done <-chan struct{}
- // replenish is called by loopyWriter to give quota back to.
- // It is implemented as a field so that it can be updated
- // by tests.
- replenish func(n int)
-}
-
-func newWriteQuota(sz int32, done <-chan struct{}) *writeQuota {
- w := &writeQuota{
- quota: sz,
- ch: make(chan struct{}, 1),
- done: done,
- }
- w.replenish = w.realReplenish
- return w
-}
-
-func (w *writeQuota) get(sz int32) error {
- for {
- if atomic.LoadInt32(&w.quota) > 0 {
- atomic.AddInt32(&w.quota, -sz)
- return nil
- }
- select {
- case <-w.ch:
- continue
- case <-w.done:
- return errStreamDone
- }
- }
-}
-
-func (w *writeQuota) realReplenish(n int) {
- sz := int32(n)
- a := atomic.AddInt32(&w.quota, sz)
- b := a - sz
- if b <= 0 && a > 0 {
- select {
- case w.ch <- struct{}{}:
- default:
- }
- }
-}
-
-type trInFlow struct {
- limit uint32
- unacked uint32
- effectiveWindowSize uint32
-}
-
-func (f *trInFlow) newLimit(n uint32) uint32 {
- d := n - f.limit
- f.limit = n
- f.updateEffectiveWindowSize()
- return d
-}
-
-func (f *trInFlow) onData(n uint32) uint32 {
- f.unacked += n
- if f.unacked < f.limit/4 {
- f.updateEffectiveWindowSize()
- return 0
- }
- return f.reset()
-}
-
-func (f *trInFlow) reset() uint32 {
- w := f.unacked
- f.unacked = 0
- f.updateEffectiveWindowSize()
- return w
-}
-
-func (f *trInFlow) updateEffectiveWindowSize() {
- atomic.StoreUint32(&f.effectiveWindowSize, f.limit-f.unacked)
-}
-
-func (f *trInFlow) getSize() uint32 {
- return atomic.LoadUint32(&f.effectiveWindowSize)
-}
-
-// TODO(mmukhi): Simplify this code.
-// inFlow deals with inbound flow control
-type inFlow struct {
- mu sync.Mutex
- // The inbound flow control limit for pending data.
- limit uint32
- // pendingData is the overall data which have been received but not been
- // consumed by applications.
- pendingData uint32
- // The amount of data the application has consumed but grpc has not sent
- // window update for them. Used to reduce window update frequency.
- pendingUpdate uint32
- // delta is the extra window update given by receiver when an application
- // is reading data bigger in size than the inFlow limit.
- delta uint32
-}
-
-// newLimit updates the inflow window to a new value n.
-// It assumes that n is always greater than the old limit.
-func (f *inFlow) newLimit(n uint32) {
- f.mu.Lock()
- f.limit = n
- f.mu.Unlock()
-}
-
-func (f *inFlow) maybeAdjust(n uint32) uint32 {
- if n > uint32(math.MaxInt32) {
- n = uint32(math.MaxInt32)
- }
- f.mu.Lock()
- defer f.mu.Unlock()
- // estSenderQuota is the receiver's view of the maximum number of bytes the sender
- // can send without a window update.
- estSenderQuota := int32(f.limit - (f.pendingData + f.pendingUpdate))
- // estUntransmittedData is the maximum number of bytes the sends might not have put
- // on the wire yet. A value of 0 or less means that we have already received all or
- // more bytes than the application is requesting to read.
- estUntransmittedData := int32(n - f.pendingData) // Casting into int32 since it could be negative.
- // This implies that unless we send a window update, the sender won't be able to send all the bytes
- // for this message. Therefore we must send an update over the limit since there's an active read
- // request from the application.
- if estUntransmittedData > estSenderQuota {
- // Sender's window shouldn't go more than 2^31 - 1 as specified in the HTTP spec.
- if f.limit+n > maxWindowSize {
- f.delta = maxWindowSize - f.limit
- } else {
- // Send a window update for the whole message and not just the difference between
- // estUntransmittedData and estSenderQuota. This will be helpful in case the message
- // is padded; We will fallback on the current available window(at least a 1/4th of the limit).
- f.delta = n
- }
- return f.delta
- }
- return 0
-}
-
-// onData is invoked when some data frame is received. It updates pendingData.
-func (f *inFlow) onData(n uint32) error {
- f.mu.Lock()
- f.pendingData += n
- if f.pendingData+f.pendingUpdate > f.limit+f.delta {
- limit := f.limit
- rcvd := f.pendingData + f.pendingUpdate
- f.mu.Unlock()
- return fmt.Errorf("received %d-bytes data exceeding the limit %d bytes", rcvd, limit)
- }
- f.mu.Unlock()
- return nil
-}
-
-// onRead is invoked when the application reads the data. It returns the window size
-// to be sent to the peer.
-func (f *inFlow) onRead(n uint32) uint32 {
- f.mu.Lock()
- if f.pendingData == 0 {
- f.mu.Unlock()
- return 0
- }
- f.pendingData -= n
- if n > f.delta {
- n -= f.delta
- f.delta = 0
- } else {
- f.delta -= n
- n = 0
- }
- f.pendingUpdate += n
- if f.pendingUpdate >= f.limit/4 {
- wu := f.pendingUpdate
- f.pendingUpdate = 0
- f.mu.Unlock()
- return wu
- }
- f.mu.Unlock()
- return 0
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go
deleted file mode 100644
index d9305a65d..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- *
- * Copyright 2016 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// This file is the implementation of a gRPC server using HTTP/2 which
-// uses the standard Go http2 Server implementation (via the
-// http.Handler interface), rather than speaking low-level HTTP/2
-// frames itself. It is the implementation of *grpc.Server.ServeHTTP.
-
-package transport
-
-import (
- "context"
- "errors"
- "fmt"
- "io"
- "net"
- "net/http"
- "strings"
- "sync"
- "time"
-
- "golang.org/x/net/http2"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/internal/grpclog"
- "google.golang.org/grpc/internal/grpcutil"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
- "google.golang.org/protobuf/proto"
-)
-
-// NewServerHandlerTransport returns a ServerTransport handling gRPC from
-// inside an http.Handler, or writes an HTTP error to w and returns an error.
-// It requires that the http Server supports HTTP/2.
-func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []stats.Handler, bufferPool mem.BufferPool) (ServerTransport, error) {
- if r.Method != http.MethodPost {
- w.Header().Set("Allow", http.MethodPost)
- msg := fmt.Sprintf("invalid gRPC request method %q", r.Method)
- http.Error(w, msg, http.StatusMethodNotAllowed)
- return nil, errors.New(msg)
- }
- contentType := r.Header.Get("Content-Type")
- // TODO: do we assume contentType is lowercase? we did before
- contentSubtype, validContentType := grpcutil.ContentSubtype(contentType)
- if !validContentType {
- msg := fmt.Sprintf("invalid gRPC request content-type %q", contentType)
- http.Error(w, msg, http.StatusUnsupportedMediaType)
- return nil, errors.New(msg)
- }
- if r.ProtoMajor != 2 {
- msg := "gRPC requires HTTP/2"
- http.Error(w, msg, http.StatusHTTPVersionNotSupported)
- return nil, errors.New(msg)
- }
- if _, ok := w.(http.Flusher); !ok {
- msg := "gRPC requires a ResponseWriter supporting http.Flusher"
- http.Error(w, msg, http.StatusInternalServerError)
- return nil, errors.New(msg)
- }
-
- var localAddr net.Addr
- if la := r.Context().Value(http.LocalAddrContextKey); la != nil {
- localAddr, _ = la.(net.Addr)
- }
- var authInfo credentials.AuthInfo
- if r.TLS != nil {
- authInfo = credentials.TLSInfo{State: *r.TLS, CommonAuthInfo: credentials.CommonAuthInfo{SecurityLevel: credentials.PrivacyAndIntegrity}}
- }
- p := peer.Peer{
- Addr: strAddr(r.RemoteAddr),
- LocalAddr: localAddr,
- AuthInfo: authInfo,
- }
- st := &serverHandlerTransport{
- rw: w,
- req: r,
- closedCh: make(chan struct{}),
- writes: make(chan func()),
- peer: p,
- contentType: contentType,
- contentSubtype: contentSubtype,
- stats: stats,
- bufferPool: bufferPool,
- }
- st.logger = prefixLoggerForServerHandlerTransport(st)
-
- if v := r.Header.Get("grpc-timeout"); v != "" {
- to, err := decodeTimeout(v)
- if err != nil {
- msg := fmt.Sprintf("malformed grpc-timeout: %v", err)
- http.Error(w, msg, http.StatusBadRequest)
- return nil, status.Error(codes.Internal, msg)
- }
- st.timeoutSet = true
- st.timeout = to
- }
-
- metakv := []string{"content-type", contentType}
- if r.Host != "" {
- metakv = append(metakv, ":authority", r.Host)
- }
- for k, vv := range r.Header {
- k = strings.ToLower(k)
- if isReservedHeader(k) && !isWhitelistedHeader(k) {
- continue
- }
- for _, v := range vv {
- v, err := decodeMetadataHeader(k, v)
- if err != nil {
- msg := fmt.Sprintf("malformed binary metadata %q in header %q: %v", v, k, err)
- http.Error(w, msg, http.StatusBadRequest)
- return nil, status.Error(codes.Internal, msg)
- }
- metakv = append(metakv, k, v)
- }
- }
- st.headerMD = metadata.Pairs(metakv...)
-
- return st, nil
-}
-
-// serverHandlerTransport is an implementation of ServerTransport
-// which replies to exactly one gRPC request (exactly one HTTP request),
-// using the net/http.Handler interface. This http.Handler is guaranteed
-// at this point to be speaking over HTTP/2, so it's able to speak valid
-// gRPC.
-type serverHandlerTransport struct {
- rw http.ResponseWriter
- req *http.Request
- timeoutSet bool
- timeout time.Duration
-
- headerMD metadata.MD
-
- peer peer.Peer
-
- closeOnce sync.Once
- closedCh chan struct{} // closed on Close
-
- // writes is a channel of code to run serialized in the
- // ServeHTTP (HandleStreams) goroutine. The channel is closed
- // when WriteStatus is called.
- writes chan func()
-
- // block concurrent WriteStatus calls
- // e.g. grpc/(*serverStream).SendMsg/RecvMsg
- writeStatusMu sync.Mutex
-
- // we just mirror the request content-type
- contentType string
- // we store both contentType and contentSubtype so we don't keep recreating them
- // TODO make sure this is consistent across handler_server and http2_server
- contentSubtype string
-
- stats []stats.Handler
- logger *grpclog.PrefixLogger
-
- bufferPool mem.BufferPool
-}
-
-func (ht *serverHandlerTransport) Close(err error) {
- ht.closeOnce.Do(func() {
- if ht.logger.V(logLevel) {
- ht.logger.Infof("Closing: %v", err)
- }
- close(ht.closedCh)
- })
-}
-
-func (ht *serverHandlerTransport) Peer() *peer.Peer {
- return &peer.Peer{
- Addr: ht.peer.Addr,
- LocalAddr: ht.peer.LocalAddr,
- AuthInfo: ht.peer.AuthInfo,
- }
-}
-
-// strAddr is a net.Addr backed by either a TCP "ip:port" string, or
-// the empty string if unknown.
-type strAddr string
-
-func (a strAddr) Network() string {
- if a != "" {
- // Per the documentation on net/http.Request.RemoteAddr, if this is
- // set, it's set to the IP:port of the peer (hence, TCP):
- // https://golang.org/pkg/net/http/#Request
- //
- // If we want to support Unix sockets later, we can
- // add our own grpc-specific convention within the
- // grpc codebase to set RemoteAddr to a different
- // format, or probably better: we can attach it to the
- // context and use that from serverHandlerTransport.RemoteAddr.
- return "tcp"
- }
- return ""
-}
-
-func (a strAddr) String() string { return string(a) }
-
-// do runs fn in the ServeHTTP goroutine.
-func (ht *serverHandlerTransport) do(fn func()) error {
- select {
- case <-ht.closedCh:
- return ErrConnClosing
- case ht.writes <- fn:
- return nil
- }
-}
-
-func (ht *serverHandlerTransport) writeStatus(s *ServerStream, st *status.Status) error {
- ht.writeStatusMu.Lock()
- defer ht.writeStatusMu.Unlock()
-
- headersWritten := s.updateHeaderSent()
- err := ht.do(func() {
- if !headersWritten {
- ht.writePendingHeaders(s)
- }
-
- // And flush, in case no header or body has been sent yet.
- // This forces a separation of headers and trailers if this is the
- // first call (for example, in end2end tests's TestNoService).
- ht.rw.(http.Flusher).Flush()
-
- h := ht.rw.Header()
- h.Set("Grpc-Status", fmt.Sprintf("%d", st.Code()))
- if m := st.Message(); m != "" {
- h.Set("Grpc-Message", encodeGrpcMessage(m))
- }
-
- s.hdrMu.Lock()
- defer s.hdrMu.Unlock()
- if p := st.Proto(); p != nil && len(p.Details) > 0 {
- delete(s.trailer, grpcStatusDetailsBinHeader)
- stBytes, err := proto.Marshal(p)
- if err != nil {
- // TODO: return error instead, when callers are able to handle it.
- panic(err)
- }
-
- h.Set(grpcStatusDetailsBinHeader, encodeBinHeader(stBytes))
- }
-
- if len(s.trailer) > 0 {
- for k, vv := range s.trailer {
- // Clients don't tolerate reading restricted headers after some non restricted ones were sent.
- if isReservedHeader(k) {
- continue
- }
- for _, v := range vv {
- // http2 ResponseWriter mechanism to send undeclared Trailers after
- // the headers have possibly been written.
- h.Add(http2.TrailerPrefix+k, encodeMetadataHeader(k, v))
- }
- }
- }
- })
-
- if err == nil { // transport has not been closed
- // Note: The trailer fields are compressed with hpack after this call returns.
- // No WireLength field is set here.
- for _, sh := range ht.stats {
- sh.HandleRPC(s.Context(), &stats.OutTrailer{
- Trailer: s.trailer.Copy(),
- })
- }
- }
- ht.Close(errors.New("finished writing status"))
- return err
-}
-
-// writePendingHeaders sets common and custom headers on the first
-// write call (Write, WriteHeader, or WriteStatus)
-func (ht *serverHandlerTransport) writePendingHeaders(s *ServerStream) {
- ht.writeCommonHeaders(s)
- ht.writeCustomHeaders(s)
-}
-
-// writeCommonHeaders sets common headers on the first write
-// call (Write, WriteHeader, or WriteStatus).
-func (ht *serverHandlerTransport) writeCommonHeaders(s *ServerStream) {
- h := ht.rw.Header()
- h["Date"] = nil // suppress Date to make tests happy; TODO: restore
- h.Set("Content-Type", ht.contentType)
-
- // Predeclare trailers we'll set later in WriteStatus (after the body).
- // This is a SHOULD in the HTTP RFC, and the way you add (known)
- // Trailers per the net/http.ResponseWriter contract.
- // See https://golang.org/pkg/net/http/#ResponseWriter
- // and https://golang.org/pkg/net/http/#example_ResponseWriter_trailers
- h.Add("Trailer", "Grpc-Status")
- h.Add("Trailer", "Grpc-Message")
- h.Add("Trailer", "Grpc-Status-Details-Bin")
-
- if s.sendCompress != "" {
- h.Set("Grpc-Encoding", s.sendCompress)
- }
-}
-
-// writeCustomHeaders sets custom headers set on the stream via SetHeader
-// on the first write call (Write, WriteHeader, or WriteStatus)
-func (ht *serverHandlerTransport) writeCustomHeaders(s *ServerStream) {
- h := ht.rw.Header()
-
- s.hdrMu.Lock()
- for k, vv := range s.header {
- if isReservedHeader(k) {
- continue
- }
- for _, v := range vv {
- h.Add(k, encodeMetadataHeader(k, v))
- }
- }
-
- s.hdrMu.Unlock()
-}
-
-func (ht *serverHandlerTransport) write(s *ServerStream, hdr []byte, data mem.BufferSlice, _ *WriteOptions) error {
- // Always take a reference because otherwise there is no guarantee the data will
- // be available after this function returns. This is what callers to Write
- // expect.
- data.Ref()
- headersWritten := s.updateHeaderSent()
- err := ht.do(func() {
- defer data.Free()
- if !headersWritten {
- ht.writePendingHeaders(s)
- }
- ht.rw.Write(hdr)
- for _, b := range data {
- _, _ = ht.rw.Write(b.ReadOnlyData())
- }
- ht.rw.(http.Flusher).Flush()
- })
- if err != nil {
- data.Free()
- return err
- }
- return nil
-}
-
-func (ht *serverHandlerTransport) writeHeader(s *ServerStream, md metadata.MD) error {
- if err := s.SetHeader(md); err != nil {
- return err
- }
-
- headersWritten := s.updateHeaderSent()
- err := ht.do(func() {
- if !headersWritten {
- ht.writePendingHeaders(s)
- }
-
- ht.rw.WriteHeader(200)
- ht.rw.(http.Flusher).Flush()
- })
-
- if err == nil {
- for _, sh := range ht.stats {
- // Note: The header fields are compressed with hpack after this call returns.
- // No WireLength field is set here.
- sh.HandleRPC(s.Context(), &stats.OutHeader{
- Header: md.Copy(),
- Compression: s.sendCompress,
- })
- }
- }
- return err
-}
-
-func (ht *serverHandlerTransport) HandleStreams(ctx context.Context, startStream func(*ServerStream)) {
- // With this transport type there will be exactly 1 stream: this HTTP request.
- var cancel context.CancelFunc
- if ht.timeoutSet {
- ctx, cancel = context.WithTimeout(ctx, ht.timeout)
- } else {
- ctx, cancel = context.WithCancel(ctx)
- }
-
- // requestOver is closed when the status has been written via WriteStatus.
- requestOver := make(chan struct{})
- go func() {
- select {
- case <-requestOver:
- case <-ht.closedCh:
- case <-ht.req.Context().Done():
- }
- cancel()
- ht.Close(errors.New("request is done processing"))
- }()
-
- ctx = metadata.NewIncomingContext(ctx, ht.headerMD)
- req := ht.req
- s := &ServerStream{
- Stream: &Stream{
- id: 0, // irrelevant
- ctx: ctx,
- requestRead: func(int) {},
- buf: newRecvBuffer(),
- method: req.URL.Path,
- recvCompress: req.Header.Get("grpc-encoding"),
- contentSubtype: ht.contentSubtype,
- },
- cancel: cancel,
- st: ht,
- headerWireLength: 0, // won't have access to header wire length until golang/go#18997.
- }
- s.trReader = &transportReader{
- reader: &recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: s.buf},
- windowHandler: func(int) {},
- }
-
- // readerDone is closed when the Body.Read-ing goroutine exits.
- readerDone := make(chan struct{})
- go func() {
- defer close(readerDone)
-
- for {
- buf := ht.bufferPool.Get(http2MaxFrameLen)
- n, err := req.Body.Read(*buf)
- if n > 0 {
- *buf = (*buf)[:n]
- s.buf.put(recvMsg{buffer: mem.NewBuffer(buf, ht.bufferPool)})
- } else {
- ht.bufferPool.Put(buf)
- }
- if err != nil {
- s.buf.put(recvMsg{err: mapRecvMsgError(err)})
- return
- }
- }
- }()
-
- // startStream is provided by the *grpc.Server's serveStreams.
- // It starts a goroutine serving s and exits immediately.
- // The goroutine that is started is the one that then calls
- // into ht, calling WriteHeader, Write, WriteStatus, Close, etc.
- startStream(s)
-
- ht.runStream()
- close(requestOver)
-
- // Wait for reading goroutine to finish.
- req.Body.Close()
- <-readerDone
-}
-
-func (ht *serverHandlerTransport) runStream() {
- for {
- select {
- case fn := <-ht.writes:
- fn()
- case <-ht.closedCh:
- return
- }
- }
-}
-
-func (ht *serverHandlerTransport) incrMsgRecv() {}
-
-func (ht *serverHandlerTransport) Drain(string) {
- panic("Drain() is not implemented")
-}
-
-// mapRecvMsgError returns the non-nil err into the appropriate
-// error value as expected by callers of *grpc.parser.recvMsg.
-// In particular, in can only be:
-// - io.EOF
-// - io.ErrUnexpectedEOF
-// - of type transport.ConnectionError
-// - an error from the status package
-func mapRecvMsgError(err error) error {
- if err == io.EOF || err == io.ErrUnexpectedEOF {
- return err
- }
- if se, ok := err.(http2.StreamError); ok {
- if code, ok := http2ErrConvTab[se.Code]; ok {
- return status.Error(code, se.Error())
- }
- }
- if strings.Contains(err.Error(), "body closed by handler") {
- return status.Error(codes.Canceled, err.Error())
- }
- return connectionErrorf(true, err, err.Error())
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go
deleted file mode 100644
index f323ab7f4..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go
+++ /dev/null
@@ -1,1828 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "context"
- "fmt"
- "io"
- "math"
- "net"
- "net/http"
- "path/filepath"
- "strconv"
- "strings"
- "sync"
- "sync/atomic"
- "time"
-
- "golang.org/x/net/http2"
- "golang.org/x/net/http2/hpack"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/internal/channelz"
- icredentials "google.golang.org/grpc/internal/credentials"
- "google.golang.org/grpc/internal/grpclog"
- "google.golang.org/grpc/internal/grpcsync"
- "google.golang.org/grpc/internal/grpcutil"
- imetadata "google.golang.org/grpc/internal/metadata"
- istatus "google.golang.org/grpc/internal/status"
- isyscall "google.golang.org/grpc/internal/syscall"
- "google.golang.org/grpc/internal/transport/networktype"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
-)
-
-// clientConnectionCounter counts the number of connections a client has
-// initiated (equal to the number of http2Clients created). Must be accessed
-// atomically.
-var clientConnectionCounter uint64
-
-var goAwayLoopyWriterTimeout = 5 * time.Second
-
-var metadataFromOutgoingContextRaw = internal.FromOutgoingContextRaw.(func(context.Context) (metadata.MD, [][]string, bool))
-
-// http2Client implements the ClientTransport interface with HTTP2.
-type http2Client struct {
- lastRead int64 // Keep this field 64-bit aligned. Accessed atomically.
- ctx context.Context
- cancel context.CancelFunc
- ctxDone <-chan struct{} // Cache the ctx.Done() chan.
- userAgent string
- // address contains the resolver returned address for this transport.
- // If the `ServerName` field is set, it takes precedence over `CallHdr.Host`
- // passed to `NewStream`, when determining the :authority header.
- address resolver.Address
- md metadata.MD
- conn net.Conn // underlying communication channel
- loopy *loopyWriter
- remoteAddr net.Addr
- localAddr net.Addr
- authInfo credentials.AuthInfo // auth info about the connection
-
- readerDone chan struct{} // sync point to enable testing.
- writerDone chan struct{} // sync point to enable testing.
- // goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor)
- // that the server sent GoAway on this transport.
- goAway chan struct{}
- keepaliveDone chan struct{} // Closed when the keepalive goroutine exits.
- framer *framer
- // controlBuf delivers all the control related tasks (e.g., window
- // updates, reset streams, and various settings) to the controller.
- // Do not access controlBuf with mu held.
- controlBuf *controlBuffer
- fc *trInFlow
- // The scheme used: https if TLS is on, http otherwise.
- scheme string
-
- isSecure bool
-
- perRPCCreds []credentials.PerRPCCredentials
-
- kp keepalive.ClientParameters
- keepaliveEnabled bool
-
- statsHandlers []stats.Handler
-
- initialWindowSize int32
-
- // configured by peer through SETTINGS_MAX_HEADER_LIST_SIZE
- maxSendHeaderListSize *uint32
-
- bdpEst *bdpEstimator
-
- maxConcurrentStreams uint32
- streamQuota int64
- streamsQuotaAvailable chan struct{}
- waitingStreams uint32
- registeredCompressors string
-
- // Do not access controlBuf with mu held.
- mu sync.Mutex // guard the following variables
- nextID uint32
- state transportState
- activeStreams map[uint32]*ClientStream
- // prevGoAway ID records the Last-Stream-ID in the previous GOAway frame.
- prevGoAwayID uint32
- // goAwayReason records the http2.ErrCode and debug data received with the
- // GoAway frame.
- goAwayReason GoAwayReason
- // goAwayDebugMessage contains a detailed human readable string about a
- // GoAway frame, useful for error messages.
- goAwayDebugMessage string
- // A condition variable used to signal when the keepalive goroutine should
- // go dormant. The condition for dormancy is based on the number of active
- // streams and the `PermitWithoutStream` keepalive client parameter. And
- // since the number of active streams is guarded by the above mutex, we use
- // the same for this condition variable as well.
- kpDormancyCond *sync.Cond
- // A boolean to track whether the keepalive goroutine is dormant or not.
- // This is checked before attempting to signal the above condition
- // variable.
- kpDormant bool
-
- channelz *channelz.Socket
-
- onClose func(GoAwayReason)
-
- bufferPool mem.BufferPool
-
- connectionID uint64
- logger *grpclog.PrefixLogger
-}
-
-func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, useProxy bool, grpcUA string) (net.Conn, error) {
- address := addr.Addr
- networkType, ok := networktype.Get(addr)
- if fn != nil {
- // Special handling for unix scheme with custom dialer. Back in the day,
- // we did not have a unix resolver and therefore targets with a unix
- // scheme would end up using the passthrough resolver. So, user's used a
- // custom dialer in this case and expected the original dial target to
- // be passed to the custom dialer. Now, we have a unix resolver. But if
- // a custom dialer is specified, we want to retain the old behavior in
- // terms of the address being passed to the custom dialer.
- if networkType == "unix" && !strings.HasPrefix(address, "\x00") {
- // Supported unix targets are either "unix://absolute-path" or
- // "unix:relative-path".
- if filepath.IsAbs(address) {
- return fn(ctx, "unix://"+address)
- }
- return fn(ctx, "unix:"+address)
- }
- return fn(ctx, address)
- }
- if !ok {
- networkType, address = parseDialTarget(address)
- }
- if networkType == "tcp" && useProxy {
- return proxyDial(ctx, address, grpcUA)
- }
- return internal.NetDialerWithTCPKeepalive().DialContext(ctx, networkType, address)
-}
-
-func isTemporary(err error) bool {
- switch err := err.(type) {
- case interface {
- Temporary() bool
- }:
- return err.Temporary()
- case interface {
- Timeout() bool
- }:
- // Timeouts may be resolved upon retry, and are thus treated as
- // temporary.
- return err.Timeout()
- }
- return true
-}
-
-// NewHTTP2Client constructs a connected ClientTransport to addr based on HTTP2
-// and starts to receive messages on it. Non-nil error returns if construction
-// fails.
-func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts ConnectOptions, onClose func(GoAwayReason)) (_ ClientTransport, err error) {
- scheme := "http"
- ctx, cancel := context.WithCancel(ctx)
- defer func() {
- if err != nil {
- cancel()
- }
- }()
-
- // gRPC, resolver, balancer etc. can specify arbitrary data in the
- // Attributes field of resolver.Address, which is shoved into connectCtx
- // and passed to the dialer and credential handshaker. This makes it possible for
- // address specific arbitrary data to reach custom dialers and credential handshakers.
- connectCtx = icredentials.NewClientHandshakeInfoContext(connectCtx, credentials.ClientHandshakeInfo{Attributes: addr.Attributes})
-
- conn, err := dial(connectCtx, opts.Dialer, addr, opts.UseProxy, opts.UserAgent)
- if err != nil {
- if opts.FailOnNonTempDialError {
- return nil, connectionErrorf(isTemporary(err), err, "transport: error while dialing: %v", err)
- }
- return nil, connectionErrorf(true, err, "transport: Error while dialing: %v", err)
- }
-
- // Any further errors will close the underlying connection
- defer func(conn net.Conn) {
- if err != nil {
- conn.Close()
- }
- }(conn)
-
- // The following defer and goroutine monitor the connectCtx for cancellation
- // and deadline. On context expiration, the connection is hard closed and
- // this function will naturally fail as a result. Otherwise, the defer
- // waits for the goroutine to exit to prevent the context from being
- // monitored (and to prevent the connection from ever being closed) after
- // returning from this function.
- ctxMonitorDone := grpcsync.NewEvent()
- newClientCtx, newClientDone := context.WithCancel(connectCtx)
- defer func() {
- newClientDone() // Awaken the goroutine below if connectCtx hasn't expired.
- <-ctxMonitorDone.Done() // Wait for the goroutine below to exit.
- }()
- go func(conn net.Conn) {
- defer ctxMonitorDone.Fire() // Signal this goroutine has exited.
- <-newClientCtx.Done() // Block until connectCtx expires or the defer above executes.
- if err := connectCtx.Err(); err != nil {
- // connectCtx expired before exiting the function. Hard close the connection.
- if logger.V(logLevel) {
- logger.Infof("Aborting due to connect deadline expiring: %v", err)
- }
- conn.Close()
- }
- }(conn)
-
- kp := opts.KeepaliveParams
- // Validate keepalive parameters.
- if kp.Time == 0 {
- kp.Time = defaultClientKeepaliveTime
- }
- if kp.Timeout == 0 {
- kp.Timeout = defaultClientKeepaliveTimeout
- }
- keepaliveEnabled := false
- if kp.Time != infinity {
- if err = isyscall.SetTCPUserTimeout(conn, kp.Timeout); err != nil {
- return nil, connectionErrorf(false, err, "transport: failed to set TCP_USER_TIMEOUT: %v", err)
- }
- keepaliveEnabled = true
- }
- var (
- isSecure bool
- authInfo credentials.AuthInfo
- )
- transportCreds := opts.TransportCredentials
- perRPCCreds := opts.PerRPCCredentials
-
- if b := opts.CredsBundle; b != nil {
- if t := b.TransportCredentials(); t != nil {
- transportCreds = t
- }
- if t := b.PerRPCCredentials(); t != nil {
- perRPCCreds = append(perRPCCreds, t)
- }
- }
- if transportCreds != nil {
- conn, authInfo, err = transportCreds.ClientHandshake(connectCtx, addr.ServerName, conn)
- if err != nil {
- return nil, connectionErrorf(isTemporary(err), err, "transport: authentication handshake failed: %v", err)
- }
- for _, cd := range perRPCCreds {
- if cd.RequireTransportSecurity() {
- if ci, ok := authInfo.(interface {
- GetCommonAuthInfo() credentials.CommonAuthInfo
- }); ok {
- secLevel := ci.GetCommonAuthInfo().SecurityLevel
- if secLevel != credentials.InvalidSecurityLevel && secLevel < credentials.PrivacyAndIntegrity {
- return nil, connectionErrorf(true, nil, "transport: cannot send secure credentials on an insecure connection")
- }
- }
- }
- }
- isSecure = true
- if transportCreds.Info().SecurityProtocol == "tls" {
- scheme = "https"
- }
- }
- dynamicWindow := true
- icwz := int32(initialWindowSize)
- if opts.InitialConnWindowSize >= defaultWindowSize {
- icwz = opts.InitialConnWindowSize
- dynamicWindow = false
- }
- writeBufSize := opts.WriteBufferSize
- readBufSize := opts.ReadBufferSize
- maxHeaderListSize := defaultClientMaxHeaderListSize
- if opts.MaxHeaderListSize != nil {
- maxHeaderListSize = *opts.MaxHeaderListSize
- }
-
- t := &http2Client{
- ctx: ctx,
- ctxDone: ctx.Done(), // Cache Done chan.
- cancel: cancel,
- userAgent: opts.UserAgent,
- registeredCompressors: grpcutil.RegisteredCompressors(),
- address: addr,
- conn: conn,
- remoteAddr: conn.RemoteAddr(),
- localAddr: conn.LocalAddr(),
- authInfo: authInfo,
- readerDone: make(chan struct{}),
- writerDone: make(chan struct{}),
- goAway: make(chan struct{}),
- keepaliveDone: make(chan struct{}),
- framer: newFramer(conn, writeBufSize, readBufSize, opts.SharedWriteBuffer, maxHeaderListSize),
- fc: &trInFlow{limit: uint32(icwz)},
- scheme: scheme,
- activeStreams: make(map[uint32]*ClientStream),
- isSecure: isSecure,
- perRPCCreds: perRPCCreds,
- kp: kp,
- statsHandlers: opts.StatsHandlers,
- initialWindowSize: initialWindowSize,
- nextID: 1,
- maxConcurrentStreams: defaultMaxStreamsClient,
- streamQuota: defaultMaxStreamsClient,
- streamsQuotaAvailable: make(chan struct{}, 1),
- keepaliveEnabled: keepaliveEnabled,
- bufferPool: opts.BufferPool,
- onClose: onClose,
- }
- var czSecurity credentials.ChannelzSecurityValue
- if au, ok := authInfo.(credentials.ChannelzSecurityInfo); ok {
- czSecurity = au.GetSecurityValue()
- }
- t.channelz = channelz.RegisterSocket(
- &channelz.Socket{
- SocketType: channelz.SocketTypeNormal,
- Parent: opts.ChannelzParent,
- SocketMetrics: channelz.SocketMetrics{},
- EphemeralMetrics: t.socketMetrics,
- LocalAddr: t.localAddr,
- RemoteAddr: t.remoteAddr,
- SocketOptions: channelz.GetSocketOption(t.conn),
- Security: czSecurity,
- })
- t.logger = prefixLoggerForClientTransport(t)
- // Add peer information to the http2client context.
- t.ctx = peer.NewContext(t.ctx, t.getPeer())
-
- if md, ok := addr.Metadata.(*metadata.MD); ok {
- t.md = *md
- } else if md := imetadata.Get(addr); md != nil {
- t.md = md
- }
- t.controlBuf = newControlBuffer(t.ctxDone)
- if opts.InitialWindowSize >= defaultWindowSize {
- t.initialWindowSize = opts.InitialWindowSize
- dynamicWindow = false
- }
- if dynamicWindow {
- t.bdpEst = &bdpEstimator{
- bdp: initialWindowSize,
- updateFlowControl: t.updateFlowControl,
- }
- }
- for _, sh := range t.statsHandlers {
- t.ctx = sh.TagConn(t.ctx, &stats.ConnTagInfo{
- RemoteAddr: t.remoteAddr,
- LocalAddr: t.localAddr,
- })
- connBegin := &stats.ConnBegin{
- Client: true,
- }
- sh.HandleConn(t.ctx, connBegin)
- }
- if t.keepaliveEnabled {
- t.kpDormancyCond = sync.NewCond(&t.mu)
- go t.keepalive()
- }
-
- // Start the reader goroutine for incoming messages. Each transport has a
- // dedicated goroutine which reads HTTP2 frames from the network. Then it
- // dispatches the frame to the corresponding stream entity. When the
- // server preface is received, readerErrCh is closed. If an error occurs
- // first, an error is pushed to the channel. This must be checked before
- // returning from this function.
- readerErrCh := make(chan error, 1)
- go t.reader(readerErrCh)
- defer func() {
- if err != nil {
- // writerDone should be closed since the loopy goroutine
- // wouldn't have started in the case this function returns an error.
- close(t.writerDone)
- t.Close(err)
- }
- }()
-
- // Send connection preface to server.
- n, err := t.conn.Write(clientPreface)
- if err != nil {
- err = connectionErrorf(true, err, "transport: failed to write client preface: %v", err)
- return nil, err
- }
- if n != len(clientPreface) {
- err = connectionErrorf(true, nil, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface))
- return nil, err
- }
- var ss []http2.Setting
-
- if t.initialWindowSize != defaultWindowSize {
- ss = append(ss, http2.Setting{
- ID: http2.SettingInitialWindowSize,
- Val: uint32(t.initialWindowSize),
- })
- }
- if opts.MaxHeaderListSize != nil {
- ss = append(ss, http2.Setting{
- ID: http2.SettingMaxHeaderListSize,
- Val: *opts.MaxHeaderListSize,
- })
- }
- err = t.framer.fr.WriteSettings(ss...)
- if err != nil {
- err = connectionErrorf(true, err, "transport: failed to write initial settings frame: %v", err)
- return nil, err
- }
- // Adjust the connection flow control window if needed.
- if delta := uint32(icwz - defaultWindowSize); delta > 0 {
- if err := t.framer.fr.WriteWindowUpdate(0, delta); err != nil {
- err = connectionErrorf(true, err, "transport: failed to write window update: %v", err)
- return nil, err
- }
- }
-
- t.connectionID = atomic.AddUint64(&clientConnectionCounter, 1)
-
- if err := t.framer.writer.Flush(); err != nil {
- return nil, err
- }
- // Block until the server preface is received successfully or an error occurs.
- if err = <-readerErrCh; err != nil {
- return nil, err
- }
- go func() {
- t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler, t.bufferPool)
- if err := t.loopy.run(); !isIOError(err) {
- // Immediately close the connection, as the loopy writer returns
- // when there are no more active streams and we were draining (the
- // server sent a GOAWAY). For I/O errors, the reader will hit it
- // after draining any remaining incoming data.
- t.conn.Close()
- }
- close(t.writerDone)
- }()
- return t, nil
-}
-
-func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *ClientStream {
- // TODO(zhaoq): Handle uint32 overflow of Stream.id.
- s := &ClientStream{
- Stream: &Stream{
- method: callHdr.Method,
- sendCompress: callHdr.SendCompress,
- buf: newRecvBuffer(),
- contentSubtype: callHdr.ContentSubtype,
- },
- ct: t,
- done: make(chan struct{}),
- headerChan: make(chan struct{}),
- doneFunc: callHdr.DoneFunc,
- }
- s.wq = newWriteQuota(defaultWriteQuota, s.done)
- s.requestRead = func(n int) {
- t.adjustWindow(s, uint32(n))
- }
- // The client side stream context should have exactly the same life cycle with the user provided context.
- // That means, s.ctx should be read-only. And s.ctx is done iff ctx is done.
- // So we use the original context here instead of creating a copy.
- s.ctx = ctx
- s.trReader = &transportReader{
- reader: &recvBufferReader{
- ctx: s.ctx,
- ctxDone: s.ctx.Done(),
- recv: s.buf,
- closeStream: func(err error) {
- s.Close(err)
- },
- },
- windowHandler: func(n int) {
- t.updateWindow(s, uint32(n))
- },
- }
- return s
-}
-
-func (t *http2Client) getPeer() *peer.Peer {
- return &peer.Peer{
- Addr: t.remoteAddr,
- AuthInfo: t.authInfo, // Can be nil
- LocalAddr: t.localAddr,
- }
-}
-
-// OutgoingGoAwayHandler writes a GOAWAY to the connection. Always returns (false, err) as we want the GoAway
-// to be the last frame loopy writes to the transport.
-func (t *http2Client) outgoingGoAwayHandler(g *goAway) (bool, error) {
- t.mu.Lock()
- maxStreamID := t.nextID - 2
- t.mu.Unlock()
- if err := t.framer.fr.WriteGoAway(maxStreamID, http2.ErrCodeNo, g.debugData); err != nil {
- return false, err
- }
- return false, g.closeConn
-}
-
-func (t *http2Client) createHeaderFields(ctx context.Context, callHdr *CallHdr) ([]hpack.HeaderField, error) {
- aud := t.createAudience(callHdr)
- ri := credentials.RequestInfo{
- Method: callHdr.Method,
- AuthInfo: t.authInfo,
- }
- ctxWithRequestInfo := icredentials.NewRequestInfoContext(ctx, ri)
- authData, err := t.getTrAuthData(ctxWithRequestInfo, aud)
- if err != nil {
- return nil, err
- }
- callAuthData, err := t.getCallAuthData(ctxWithRequestInfo, aud, callHdr)
- if err != nil {
- return nil, err
- }
- // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields
- // first and create a slice of that exact size.
- // Make the slice of certain predictable size to reduce allocations made by append.
- hfLen := 7 // :method, :scheme, :path, :authority, content-type, user-agent, te
- hfLen += len(authData) + len(callAuthData)
- headerFields := make([]hpack.HeaderField, 0, hfLen)
- headerFields = append(headerFields, hpack.HeaderField{Name: ":method", Value: "POST"})
- headerFields = append(headerFields, hpack.HeaderField{Name: ":scheme", Value: t.scheme})
- headerFields = append(headerFields, hpack.HeaderField{Name: ":path", Value: callHdr.Method})
- headerFields = append(headerFields, hpack.HeaderField{Name: ":authority", Value: callHdr.Host})
- headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: grpcutil.ContentType(callHdr.ContentSubtype)})
- headerFields = append(headerFields, hpack.HeaderField{Name: "user-agent", Value: t.userAgent})
- headerFields = append(headerFields, hpack.HeaderField{Name: "te", Value: "trailers"})
- if callHdr.PreviousAttempts > 0 {
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-previous-rpc-attempts", Value: strconv.Itoa(callHdr.PreviousAttempts)})
- }
-
- registeredCompressors := t.registeredCompressors
- if callHdr.SendCompress != "" {
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: callHdr.SendCompress})
- // Include the outgoing compressor name when compressor is not registered
- // via encoding.RegisterCompressor. This is possible when client uses
- // WithCompressor dial option.
- if !grpcutil.IsCompressorNameRegistered(callHdr.SendCompress) {
- if registeredCompressors != "" {
- registeredCompressors += ","
- }
- registeredCompressors += callHdr.SendCompress
- }
- }
-
- if registeredCompressors != "" {
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-accept-encoding", Value: registeredCompressors})
- }
- if dl, ok := ctx.Deadline(); ok {
- // Send out timeout regardless its value. The server can detect timeout context by itself.
- // TODO(mmukhi): Perhaps this field should be updated when actually writing out to the wire.
- timeout := time.Until(dl)
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-timeout", Value: grpcutil.EncodeDuration(timeout)})
- }
- for k, v := range authData {
- headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})
- }
- for k, v := range callAuthData {
- headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})
- }
-
- if md, added, ok := metadataFromOutgoingContextRaw(ctx); ok {
- var k string
- for k, vv := range md {
- // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set.
- if isReservedHeader(k) {
- continue
- }
- for _, v := range vv {
- headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})
- }
- }
- for _, vv := range added {
- for i, v := range vv {
- if i%2 == 0 {
- k = strings.ToLower(v)
- continue
- }
- // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set.
- if isReservedHeader(k) {
- continue
- }
- headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})
- }
- }
- }
- for k, vv := range t.md {
- if isReservedHeader(k) {
- continue
- }
- for _, v := range vv {
- headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})
- }
- }
- return headerFields, nil
-}
-
-func (t *http2Client) createAudience(callHdr *CallHdr) string {
- // Create an audience string only if needed.
- if len(t.perRPCCreds) == 0 && callHdr.Creds == nil {
- return ""
- }
- // Construct URI required to get auth request metadata.
- // Omit port if it is the default one.
- host := strings.TrimSuffix(callHdr.Host, ":443")
- pos := strings.LastIndex(callHdr.Method, "/")
- if pos == -1 {
- pos = len(callHdr.Method)
- }
- return "https://" + host + callHdr.Method[:pos]
-}
-
-func (t *http2Client) getTrAuthData(ctx context.Context, audience string) (map[string]string, error) {
- if len(t.perRPCCreds) == 0 {
- return nil, nil
- }
- authData := map[string]string{}
- for _, c := range t.perRPCCreds {
- data, err := c.GetRequestMetadata(ctx, audience)
- if err != nil {
- if st, ok := status.FromError(err); ok {
- // Restrict the code to the list allowed by gRFC A54.
- if istatus.IsRestrictedControlPlaneCode(st) {
- err = status.Errorf(codes.Internal, "transport: received per-RPC creds error with illegal status: %v", err)
- }
- return nil, err
- }
-
- return nil, status.Errorf(codes.Unauthenticated, "transport: per-RPC creds failed due to error: %v", err)
- }
- for k, v := range data {
- // Capital header names are illegal in HTTP/2.
- k = strings.ToLower(k)
- authData[k] = v
- }
- }
- return authData, nil
-}
-
-func (t *http2Client) getCallAuthData(ctx context.Context, audience string, callHdr *CallHdr) (map[string]string, error) {
- var callAuthData map[string]string
- // Check if credentials.PerRPCCredentials were provided via call options.
- // Note: if these credentials are provided both via dial options and call
- // options, then both sets of credentials will be applied.
- if callCreds := callHdr.Creds; callCreds != nil {
- if callCreds.RequireTransportSecurity() {
- ri, _ := credentials.RequestInfoFromContext(ctx)
- if !t.isSecure || credentials.CheckSecurityLevel(ri.AuthInfo, credentials.PrivacyAndIntegrity) != nil {
- return nil, status.Error(codes.Unauthenticated, "transport: cannot send secure credentials on an insecure connection")
- }
- }
- data, err := callCreds.GetRequestMetadata(ctx, audience)
- if err != nil {
- if st, ok := status.FromError(err); ok {
- // Restrict the code to the list allowed by gRFC A54.
- if istatus.IsRestrictedControlPlaneCode(st) {
- err = status.Errorf(codes.Internal, "transport: received per-RPC creds error with illegal status: %v", err)
- }
- return nil, err
- }
- return nil, status.Errorf(codes.Internal, "transport: per-RPC creds failed due to error: %v", err)
- }
- callAuthData = make(map[string]string, len(data))
- for k, v := range data {
- // Capital header names are illegal in HTTP/2
- k = strings.ToLower(k)
- callAuthData[k] = v
- }
- }
- return callAuthData, nil
-}
-
-// NewStreamError wraps an error and reports additional information. Typically
-// NewStream errors result in transparent retry, as they mean nothing went onto
-// the wire. However, there are two notable exceptions:
-//
-// 1. If the stream headers violate the max header list size allowed by the
-// server. It's possible this could succeed on another transport, even if
-// it's unlikely, but do not transparently retry.
-// 2. If the credentials errored when requesting their headers. In this case,
-// it's possible a retry can fix the problem, but indefinitely transparently
-// retrying is not appropriate as it is likely the credentials, if they can
-// eventually succeed, would need I/O to do so.
-type NewStreamError struct {
- Err error
-
- AllowTransparentRetry bool
-}
-
-func (e NewStreamError) Error() string {
- return e.Err.Error()
-}
-
-// NewStream creates a stream and registers it into the transport as "active"
-// streams. All non-nil errors returned will be *NewStreamError.
-func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*ClientStream, error) {
- ctx = peer.NewContext(ctx, t.getPeer())
-
- // ServerName field of the resolver returned address takes precedence over
- // Host field of CallHdr to determine the :authority header. This is because,
- // the ServerName field takes precedence for server authentication during
- // TLS handshake, and the :authority header should match the value used
- // for server authentication.
- if t.address.ServerName != "" {
- newCallHdr := *callHdr
- newCallHdr.Host = t.address.ServerName
- callHdr = &newCallHdr
- }
-
- headerFields, err := t.createHeaderFields(ctx, callHdr)
- if err != nil {
- return nil, &NewStreamError{Err: err, AllowTransparentRetry: false}
- }
- s := t.newStream(ctx, callHdr)
- cleanup := func(err error) {
- if s.swapState(streamDone) == streamDone {
- // If it was already done, return.
- return
- }
- // The stream was unprocessed by the server.
- s.unprocessed.Store(true)
- s.write(recvMsg{err: err})
- close(s.done)
- // If headerChan isn't closed, then close it.
- if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) {
- close(s.headerChan)
- }
- }
- hdr := &headerFrame{
- hf: headerFields,
- endStream: false,
- initStream: func(uint32) error {
- t.mu.Lock()
- // TODO: handle transport closure in loopy instead and remove this
- // initStream is never called when transport is draining.
- if t.state == closing {
- t.mu.Unlock()
- cleanup(ErrConnClosing)
- return ErrConnClosing
- }
- if channelz.IsOn() {
- t.channelz.SocketMetrics.StreamsStarted.Add(1)
- t.channelz.SocketMetrics.LastLocalStreamCreatedTimestamp.Store(time.Now().UnixNano())
- }
- // If the keepalive goroutine has gone dormant, wake it up.
- if t.kpDormant {
- t.kpDormancyCond.Signal()
- }
- t.mu.Unlock()
- return nil
- },
- onOrphaned: cleanup,
- wq: s.wq,
- }
- firstTry := true
- var ch chan struct{}
- transportDrainRequired := false
- checkForStreamQuota := func() bool {
- if t.streamQuota <= 0 { // Can go negative if server decreases it.
- if firstTry {
- t.waitingStreams++
- }
- ch = t.streamsQuotaAvailable
- return false
- }
- if !firstTry {
- t.waitingStreams--
- }
- t.streamQuota--
-
- t.mu.Lock()
- if t.state == draining || t.activeStreams == nil { // Can be niled from Close().
- t.mu.Unlock()
- return false // Don't create a stream if the transport is already closed.
- }
-
- hdr.streamID = t.nextID
- t.nextID += 2
- // Drain client transport if nextID > MaxStreamID which signals gRPC that
- // the connection is closed and a new one must be created for subsequent RPCs.
- transportDrainRequired = t.nextID > MaxStreamID
-
- s.id = hdr.streamID
- s.fc = &inFlow{limit: uint32(t.initialWindowSize)}
- t.activeStreams[s.id] = s
- t.mu.Unlock()
-
- if t.streamQuota > 0 && t.waitingStreams > 0 {
- select {
- case t.streamsQuotaAvailable <- struct{}{}:
- default:
- }
- }
- return true
- }
- var hdrListSizeErr error
- checkForHeaderListSize := func() bool {
- if t.maxSendHeaderListSize == nil {
- return true
- }
- var sz int64
- for _, f := range hdr.hf {
- if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) {
- hdrListSizeErr = status.Errorf(codes.Internal, "header list size to send violates the maximum size (%d bytes) set by server", *t.maxSendHeaderListSize)
- return false
- }
- }
- return true
- }
- for {
- success, err := t.controlBuf.executeAndPut(func() bool {
- return checkForHeaderListSize() && checkForStreamQuota()
- }, hdr)
- if err != nil {
- // Connection closed.
- return nil, &NewStreamError{Err: err, AllowTransparentRetry: true}
- }
- if success {
- break
- }
- if hdrListSizeErr != nil {
- return nil, &NewStreamError{Err: hdrListSizeErr}
- }
- firstTry = false
- select {
- case <-ch:
- case <-ctx.Done():
- return nil, &NewStreamError{Err: ContextErr(ctx.Err())}
- case <-t.goAway:
- return nil, &NewStreamError{Err: errStreamDrain, AllowTransparentRetry: true}
- case <-t.ctx.Done():
- return nil, &NewStreamError{Err: ErrConnClosing, AllowTransparentRetry: true}
- }
- }
- if len(t.statsHandlers) != 0 {
- header, ok := metadata.FromOutgoingContext(ctx)
- if ok {
- header.Set("user-agent", t.userAgent)
- } else {
- header = metadata.Pairs("user-agent", t.userAgent)
- }
- for _, sh := range t.statsHandlers {
- // Note: The header fields are compressed with hpack after this call returns.
- // No WireLength field is set here.
- // Note: Creating a new stats object to prevent pollution.
- outHeader := &stats.OutHeader{
- Client: true,
- FullMethod: callHdr.Method,
- RemoteAddr: t.remoteAddr,
- LocalAddr: t.localAddr,
- Compression: callHdr.SendCompress,
- Header: header,
- }
- sh.HandleRPC(s.ctx, outHeader)
- }
- }
- if transportDrainRequired {
- if t.logger.V(logLevel) {
- t.logger.Infof("Draining transport: t.nextID > MaxStreamID")
- }
- t.GracefulClose()
- }
- return s, nil
-}
-
-func (t *http2Client) closeStream(s *ClientStream, err error, rst bool, rstCode http2.ErrCode, st *status.Status, mdata map[string][]string, eosReceived bool) {
- // Set stream status to done.
- if s.swapState(streamDone) == streamDone {
- // If it was already done, return. If multiple closeStream calls
- // happen simultaneously, wait for the first to finish.
- <-s.done
- return
- }
- // status and trailers can be updated here without any synchronization because the stream goroutine will
- // only read it after it sees an io.EOF error from read or write and we'll write those errors
- // only after updating this.
- s.status = st
- if len(mdata) > 0 {
- s.trailer = mdata
- }
- if err != nil {
- // This will unblock reads eventually.
- s.write(recvMsg{err: err})
- }
- // If headerChan isn't closed, then close it.
- if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) {
- s.noHeaders = true
- close(s.headerChan)
- }
- cleanup := &cleanupStream{
- streamID: s.id,
- onWrite: func() {
- t.mu.Lock()
- if t.activeStreams != nil {
- delete(t.activeStreams, s.id)
- }
- t.mu.Unlock()
- if channelz.IsOn() {
- if eosReceived {
- t.channelz.SocketMetrics.StreamsSucceeded.Add(1)
- } else {
- t.channelz.SocketMetrics.StreamsFailed.Add(1)
- }
- }
- },
- rst: rst,
- rstCode: rstCode,
- }
- addBackStreamQuota := func() bool {
- t.streamQuota++
- if t.streamQuota > 0 && t.waitingStreams > 0 {
- select {
- case t.streamsQuotaAvailable <- struct{}{}:
- default:
- }
- }
- return true
- }
- t.controlBuf.executeAndPut(addBackStreamQuota, cleanup)
- // This will unblock write.
- close(s.done)
- if s.doneFunc != nil {
- s.doneFunc()
- }
-}
-
-// Close kicks off the shutdown process of the transport. This should be called
-// only once on a transport. Once it is called, the transport should not be
-// accessed anymore.
-func (t *http2Client) Close(err error) {
- t.conn.SetWriteDeadline(time.Now().Add(time.Second * 10))
- t.mu.Lock()
- // Make sure we only close once.
- if t.state == closing {
- t.mu.Unlock()
- return
- }
- if t.logger.V(logLevel) {
- t.logger.Infof("Closing: %v", err)
- }
- // Call t.onClose ASAP to prevent the client from attempting to create new
- // streams.
- if t.state != draining {
- t.onClose(GoAwayInvalid)
- }
- t.state = closing
- streams := t.activeStreams
- t.activeStreams = nil
- if t.kpDormant {
- // If the keepalive goroutine is blocked on this condition variable, we
- // should unblock it so that the goroutine eventually exits.
- t.kpDormancyCond.Signal()
- }
- // Append info about previous goaways if there were any, since this may be important
- // for understanding the root cause for this connection to be closed.
- goAwayDebugMessage := t.goAwayDebugMessage
- t.mu.Unlock()
-
- // Per HTTP/2 spec, a GOAWAY frame must be sent before closing the
- // connection. See https://httpwg.org/specs/rfc7540.html#GOAWAY. It
- // also waits for loopyWriter to be closed with a timer to avoid the
- // long blocking in case the connection is blackholed, i.e. TCP is
- // just stuck.
- t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte("client transport shutdown"), closeConn: err})
- timer := time.NewTimer(goAwayLoopyWriterTimeout)
- defer timer.Stop()
- select {
- case <-t.writerDone: // success
- case <-timer.C:
- t.logger.Infof("Failed to write a GOAWAY frame as part of connection close after %s. Giving up and closing the transport.", goAwayLoopyWriterTimeout)
- }
- t.cancel()
- t.conn.Close()
- // Waits for the reader and keepalive goroutines to exit before returning to
- // ensure all resources are cleaned up before Close can return.
- <-t.readerDone
- if t.keepaliveEnabled {
- <-t.keepaliveDone
- }
- channelz.RemoveEntry(t.channelz.ID)
- var st *status.Status
- if len(goAwayDebugMessage) > 0 {
- st = status.Newf(codes.Unavailable, "closing transport due to: %v, received prior goaway: %v", err, goAwayDebugMessage)
- err = st.Err()
- } else {
- st = status.New(codes.Unavailable, err.Error())
- }
-
- // Notify all active streams.
- for _, s := range streams {
- t.closeStream(s, err, false, http2.ErrCodeNo, st, nil, false)
- }
- for _, sh := range t.statsHandlers {
- connEnd := &stats.ConnEnd{
- Client: true,
- }
- sh.HandleConn(t.ctx, connEnd)
- }
-}
-
-// GracefulClose sets the state to draining, which prevents new streams from
-// being created and causes the transport to be closed when the last active
-// stream is closed. If there are no active streams, the transport is closed
-// immediately. This does nothing if the transport is already draining or
-// closing.
-func (t *http2Client) GracefulClose() {
- t.mu.Lock()
- // Make sure we move to draining only from active.
- if t.state == draining || t.state == closing {
- t.mu.Unlock()
- return
- }
- if t.logger.V(logLevel) {
- t.logger.Infof("GracefulClose called")
- }
- t.onClose(GoAwayInvalid)
- t.state = draining
- active := len(t.activeStreams)
- t.mu.Unlock()
- if active == 0 {
- t.Close(connectionErrorf(true, nil, "no active streams left to process while draining"))
- return
- }
- t.controlBuf.put(&incomingGoAway{})
-}
-
-// Write formats the data into HTTP2 data frame(s) and sends it out. The caller
-// should proceed only if Write returns nil.
-func (t *http2Client) write(s *ClientStream, hdr []byte, data mem.BufferSlice, opts *WriteOptions) error {
- reader := data.Reader()
-
- if opts.Last {
- // If it's the last message, update stream state.
- if !s.compareAndSwapState(streamActive, streamWriteDone) {
- _ = reader.Close()
- return errStreamDone
- }
- } else if s.getState() != streamActive {
- _ = reader.Close()
- return errStreamDone
- }
- df := &dataFrame{
- streamID: s.id,
- endStream: opts.Last,
- h: hdr,
- reader: reader,
- }
- if hdr != nil || df.reader.Remaining() != 0 { // If it's not an empty data frame, check quota.
- if err := s.wq.get(int32(len(hdr) + df.reader.Remaining())); err != nil {
- _ = reader.Close()
- return err
- }
- }
- if err := t.controlBuf.put(df); err != nil {
- _ = reader.Close()
- return err
- }
- t.incrMsgSent()
- return nil
-}
-
-func (t *http2Client) getStream(f http2.Frame) *ClientStream {
- t.mu.Lock()
- s := t.activeStreams[f.Header().StreamID]
- t.mu.Unlock()
- return s
-}
-
-// adjustWindow sends out extra window update over the initial window size
-// of stream if the application is requesting data larger in size than
-// the window.
-func (t *http2Client) adjustWindow(s *ClientStream, n uint32) {
- if w := s.fc.maybeAdjust(n); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w})
- }
-}
-
-// updateWindow adjusts the inbound quota for the stream.
-// Window updates will be sent out when the cumulative quota
-// exceeds the corresponding threshold.
-func (t *http2Client) updateWindow(s *ClientStream, n uint32) {
- if w := s.fc.onRead(n); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w})
- }
-}
-
-// updateFlowControl updates the incoming flow control windows
-// for the transport and the stream based on the current bdp
-// estimation.
-func (t *http2Client) updateFlowControl(n uint32) {
- updateIWS := func() bool {
- t.initialWindowSize = int32(n)
- t.mu.Lock()
- for _, s := range t.activeStreams {
- s.fc.newLimit(n)
- }
- t.mu.Unlock()
- return true
- }
- t.controlBuf.executeAndPut(updateIWS, &outgoingWindowUpdate{streamID: 0, increment: t.fc.newLimit(n)})
- t.controlBuf.put(&outgoingSettings{
- ss: []http2.Setting{
- {
- ID: http2.SettingInitialWindowSize,
- Val: n,
- },
- },
- })
-}
-
-func (t *http2Client) handleData(f *http2.DataFrame) {
- size := f.Header().Length
- var sendBDPPing bool
- if t.bdpEst != nil {
- sendBDPPing = t.bdpEst.add(size)
- }
- // Decouple connection's flow control from application's read.
- // An update on connection's flow control should not depend on
- // whether user application has read the data or not. Such a
- // restriction is already imposed on the stream's flow control,
- // and therefore the sender will be blocked anyways.
- // Decoupling the connection flow control will prevent other
- // active(fast) streams from starving in presence of slow or
- // inactive streams.
- //
- if w := t.fc.onData(size); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{
- streamID: 0,
- increment: w,
- })
- }
- if sendBDPPing {
- // Avoid excessive ping detection (e.g. in an L7 proxy)
- // by sending a window update prior to the BDP ping.
-
- if w := t.fc.reset(); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{
- streamID: 0,
- increment: w,
- })
- }
-
- t.controlBuf.put(bdpPing)
- }
- // Select the right stream to dispatch.
- s := t.getStream(f)
- if s == nil {
- return
- }
- if size > 0 {
- if err := s.fc.onData(size); err != nil {
- t.closeStream(s, io.EOF, true, http2.ErrCodeFlowControl, status.New(codes.Internal, err.Error()), nil, false)
- return
- }
- if f.Header().Flags.Has(http2.FlagDataPadded) {
- if w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{s.id, w})
- }
- }
- // TODO(bradfitz, zhaoq): A copy is required here because there is no
- // guarantee f.Data() is consumed before the arrival of next frame.
- // Can this copy be eliminated?
- if len(f.Data()) > 0 {
- pool := t.bufferPool
- if pool == nil {
- // Note that this is only supposed to be nil in tests. Otherwise, stream is
- // always initialized with a BufferPool.
- pool = mem.DefaultBufferPool()
- }
- s.write(recvMsg{buffer: mem.Copy(f.Data(), pool)})
- }
- }
- // The server has closed the stream without sending trailers. Record that
- // the read direction is closed, and set the status appropriately.
- if f.StreamEnded() {
- t.closeStream(s, io.EOF, false, http2.ErrCodeNo, status.New(codes.Internal, "server closed the stream without sending trailers"), nil, true)
- }
-}
-
-func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) {
- s := t.getStream(f)
- if s == nil {
- return
- }
- if f.ErrCode == http2.ErrCodeRefusedStream {
- // The stream was unprocessed by the server.
- s.unprocessed.Store(true)
- }
- statusCode, ok := http2ErrConvTab[f.ErrCode]
- if !ok {
- if t.logger.V(logLevel) {
- t.logger.Infof("Received a RST_STREAM frame with code %q, but found no mapped gRPC status", f.ErrCode)
- }
- statusCode = codes.Unknown
- }
- if statusCode == codes.Canceled {
- if d, ok := s.ctx.Deadline(); ok && !d.After(time.Now()) {
- // Our deadline was already exceeded, and that was likely the cause
- // of this cancellation. Alter the status code accordingly.
- statusCode = codes.DeadlineExceeded
- }
- }
- t.closeStream(s, io.EOF, false, http2.ErrCodeNo, status.Newf(statusCode, "stream terminated by RST_STREAM with error code: %v", f.ErrCode), nil, false)
-}
-
-func (t *http2Client) handleSettings(f *http2.SettingsFrame, isFirst bool) {
- if f.IsAck() {
- return
- }
- var maxStreams *uint32
- var ss []http2.Setting
- var updateFuncs []func()
- f.ForeachSetting(func(s http2.Setting) error {
- switch s.ID {
- case http2.SettingMaxConcurrentStreams:
- maxStreams = new(uint32)
- *maxStreams = s.Val
- case http2.SettingMaxHeaderListSize:
- updateFuncs = append(updateFuncs, func() {
- t.maxSendHeaderListSize = new(uint32)
- *t.maxSendHeaderListSize = s.Val
- })
- default:
- ss = append(ss, s)
- }
- return nil
- })
- if isFirst && maxStreams == nil {
- maxStreams = new(uint32)
- *maxStreams = math.MaxUint32
- }
- sf := &incomingSettings{
- ss: ss,
- }
- if maxStreams != nil {
- updateStreamQuota := func() {
- delta := int64(*maxStreams) - int64(t.maxConcurrentStreams)
- t.maxConcurrentStreams = *maxStreams
- t.streamQuota += delta
- if delta > 0 && t.waitingStreams > 0 {
- close(t.streamsQuotaAvailable) // wake all of them up.
- t.streamsQuotaAvailable = make(chan struct{}, 1)
- }
- }
- updateFuncs = append(updateFuncs, updateStreamQuota)
- }
- t.controlBuf.executeAndPut(func() bool {
- for _, f := range updateFuncs {
- f()
- }
- return true
- }, sf)
-}
-
-func (t *http2Client) handlePing(f *http2.PingFrame) {
- if f.IsAck() {
- // Maybe it's a BDP ping.
- if t.bdpEst != nil {
- t.bdpEst.calculate(f.Data)
- }
- return
- }
- pingAck := &ping{ack: true}
- copy(pingAck.data[:], f.Data[:])
- t.controlBuf.put(pingAck)
-}
-
-func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) error {
- t.mu.Lock()
- if t.state == closing {
- t.mu.Unlock()
- return nil
- }
- if f.ErrCode == http2.ErrCodeEnhanceYourCalm && string(f.DebugData()) == "too_many_pings" {
- // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
- // data equal to ASCII "too_many_pings", it should log the occurrence at a log level that is
- // enabled by default and double the configure KEEPALIVE_TIME used for new connections
- // on that channel.
- logger.Errorf("Client received GoAway with error code ENHANCE_YOUR_CALM and debug data equal to ASCII \"too_many_pings\".")
- }
- id := f.LastStreamID
- if id > 0 && id%2 == 0 {
- t.mu.Unlock()
- return connectionErrorf(true, nil, "received goaway with non-zero even-numbered stream id: %v", id)
- }
- // A client can receive multiple GoAways from the server (see
- // https://github.com/grpc/grpc-go/issues/1387). The idea is that the first
- // GoAway will be sent with an ID of MaxInt32 and the second GoAway will be
- // sent after an RTT delay with the ID of the last stream the server will
- // process.
- //
- // Therefore, when we get the first GoAway we don't necessarily close any
- // streams. While in case of second GoAway we close all streams created after
- // the GoAwayId. This way streams that were in-flight while the GoAway from
- // server was being sent don't get killed.
- select {
- case <-t.goAway: // t.goAway has been closed (i.e.,multiple GoAways).
- // If there are multiple GoAways the first one should always have an ID greater than the following ones.
- if id > t.prevGoAwayID {
- t.mu.Unlock()
- return connectionErrorf(true, nil, "received goaway with stream id: %v, which exceeds stream id of previous goaway: %v", id, t.prevGoAwayID)
- }
- default:
- t.setGoAwayReason(f)
- close(t.goAway)
- defer t.controlBuf.put(&incomingGoAway{}) // Defer as t.mu is currently held.
- // Notify the clientconn about the GOAWAY before we set the state to
- // draining, to allow the client to stop attempting to create streams
- // before disallowing new streams on this connection.
- if t.state != draining {
- t.onClose(t.goAwayReason)
- t.state = draining
- }
- }
- // All streams with IDs greater than the GoAwayId
- // and smaller than the previous GoAway ID should be killed.
- upperLimit := t.prevGoAwayID
- if upperLimit == 0 { // This is the first GoAway Frame.
- upperLimit = math.MaxUint32 // Kill all streams after the GoAway ID.
- }
-
- t.prevGoAwayID = id
- if len(t.activeStreams) == 0 {
- t.mu.Unlock()
- return connectionErrorf(true, nil, "received goaway and there are no active streams")
- }
-
- streamsToClose := make([]*ClientStream, 0)
- for streamID, stream := range t.activeStreams {
- if streamID > id && streamID <= upperLimit {
- // The stream was unprocessed by the server.
- stream.unprocessed.Store(true)
- streamsToClose = append(streamsToClose, stream)
- }
- }
- t.mu.Unlock()
- // Called outside t.mu because closeStream can take controlBuf's mu, which
- // could induce deadlock and is not allowed.
- for _, stream := range streamsToClose {
- t.closeStream(stream, errStreamDrain, false, http2.ErrCodeNo, statusGoAway, nil, false)
- }
- return nil
-}
-
-// setGoAwayReason sets the value of t.goAwayReason based
-// on the GoAway frame received.
-// It expects a lock on transport's mutex to be held by
-// the caller.
-func (t *http2Client) setGoAwayReason(f *http2.GoAwayFrame) {
- t.goAwayReason = GoAwayNoReason
- switch f.ErrCode {
- case http2.ErrCodeEnhanceYourCalm:
- if string(f.DebugData()) == "too_many_pings" {
- t.goAwayReason = GoAwayTooManyPings
- }
- }
- if len(f.DebugData()) == 0 {
- t.goAwayDebugMessage = fmt.Sprintf("code: %s", f.ErrCode)
- } else {
- t.goAwayDebugMessage = fmt.Sprintf("code: %s, debug data: %q", f.ErrCode, string(f.DebugData()))
- }
-}
-
-func (t *http2Client) GetGoAwayReason() (GoAwayReason, string) {
- t.mu.Lock()
- defer t.mu.Unlock()
- return t.goAwayReason, t.goAwayDebugMessage
-}
-
-func (t *http2Client) handleWindowUpdate(f *http2.WindowUpdateFrame) {
- t.controlBuf.put(&incomingWindowUpdate{
- streamID: f.Header().StreamID,
- increment: f.Increment,
- })
-}
-
-// operateHeaders takes action on the decoded headers.
-func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
- s := t.getStream(frame)
- if s == nil {
- return
- }
- endStream := frame.StreamEnded()
- s.bytesReceived.Store(true)
- initialHeader := atomic.LoadUint32(&s.headerChanClosed) == 0
-
- if !initialHeader && !endStream {
- // As specified by gRPC over HTTP2, a HEADERS frame (and associated CONTINUATION frames) can only appear at the start or end of a stream. Therefore, second HEADERS frame must have EOS bit set.
- st := status.New(codes.Internal, "a HEADERS frame cannot appear in the middle of a stream")
- t.closeStream(s, st.Err(), true, http2.ErrCodeProtocol, st, nil, false)
- return
- }
-
- // frame.Truncated is set to true when framer detects that the current header
- // list size hits MaxHeaderListSize limit.
- if frame.Truncated {
- se := status.New(codes.Internal, "peer header list size exceeded limit")
- t.closeStream(s, se.Err(), true, http2.ErrCodeFrameSize, se, nil, endStream)
- return
- }
-
- var (
- // If a gRPC Response-Headers has already been received, then it means
- // that the peer is speaking gRPC and we are in gRPC mode.
- isGRPC = !initialHeader
- mdata = make(map[string][]string)
- contentTypeErr = "malformed header: missing HTTP content-type"
- grpcMessage string
- recvCompress string
- httpStatusCode *int
- httpStatusErr string
- rawStatusCode = codes.Unknown
- // headerError is set if an error is encountered while parsing the headers
- headerError string
- )
-
- if initialHeader {
- httpStatusErr = "malformed header: missing HTTP status"
- }
-
- for _, hf := range frame.Fields {
- switch hf.Name {
- case "content-type":
- if _, validContentType := grpcutil.ContentSubtype(hf.Value); !validContentType {
- contentTypeErr = fmt.Sprintf("transport: received unexpected content-type %q", hf.Value)
- break
- }
- contentTypeErr = ""
- mdata[hf.Name] = append(mdata[hf.Name], hf.Value)
- isGRPC = true
- case "grpc-encoding":
- recvCompress = hf.Value
- case "grpc-status":
- code, err := strconv.ParseInt(hf.Value, 10, 32)
- if err != nil {
- se := status.New(codes.Internal, fmt.Sprintf("transport: malformed grpc-status: %v", err))
- t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
- return
- }
- rawStatusCode = codes.Code(uint32(code))
- case "grpc-message":
- grpcMessage = decodeGrpcMessage(hf.Value)
- case ":status":
- if hf.Value == "200" {
- httpStatusErr = ""
- statusCode := 200
- httpStatusCode = &statusCode
- break
- }
-
- c, err := strconv.ParseInt(hf.Value, 10, 32)
- if err != nil {
- se := status.New(codes.Internal, fmt.Sprintf("transport: malformed http-status: %v", err))
- t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
- return
- }
- statusCode := int(c)
- httpStatusCode = &statusCode
-
- httpStatusErr = fmt.Sprintf(
- "unexpected HTTP status code received from server: %d (%s)",
- statusCode,
- http.StatusText(statusCode),
- )
- default:
- if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) {
- break
- }
- v, err := decodeMetadataHeader(hf.Name, hf.Value)
- if err != nil {
- headerError = fmt.Sprintf("transport: malformed %s: %v", hf.Name, err)
- logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err)
- break
- }
- mdata[hf.Name] = append(mdata[hf.Name], v)
- }
- }
-
- if !isGRPC || httpStatusErr != "" {
- var code = codes.Internal // when header does not include HTTP status, return INTERNAL
-
- if httpStatusCode != nil {
- var ok bool
- code, ok = HTTPStatusConvTab[*httpStatusCode]
- if !ok {
- code = codes.Unknown
- }
- }
- var errs []string
- if httpStatusErr != "" {
- errs = append(errs, httpStatusErr)
- }
- if contentTypeErr != "" {
- errs = append(errs, contentTypeErr)
- }
- // Verify the HTTP response is a 200.
- se := status.New(code, strings.Join(errs, "; "))
- t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
- return
- }
-
- if headerError != "" {
- se := status.New(codes.Internal, headerError)
- t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
- return
- }
-
- // For headers, set them in s.header and close headerChan. For trailers or
- // trailers-only, closeStream will set the trailers and close headerChan as
- // needed.
- if !endStream {
- // If headerChan hasn't been closed yet (expected, given we checked it
- // above, but something else could have potentially closed the whole
- // stream).
- if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) {
- s.headerValid = true
- // These values can be set without any synchronization because
- // stream goroutine will read it only after seeing a closed
- // headerChan which we'll close after setting this.
- s.recvCompress = recvCompress
- if len(mdata) > 0 {
- s.header = mdata
- }
- close(s.headerChan)
- }
- }
-
- for _, sh := range t.statsHandlers {
- if !endStream {
- inHeader := &stats.InHeader{
- Client: true,
- WireLength: int(frame.Header().Length),
- Header: metadata.MD(mdata).Copy(),
- Compression: s.recvCompress,
- }
- sh.HandleRPC(s.ctx, inHeader)
- } else {
- inTrailer := &stats.InTrailer{
- Client: true,
- WireLength: int(frame.Header().Length),
- Trailer: metadata.MD(mdata).Copy(),
- }
- sh.HandleRPC(s.ctx, inTrailer)
- }
- }
-
- if !endStream {
- return
- }
-
- status := istatus.NewWithProto(rawStatusCode, grpcMessage, mdata[grpcStatusDetailsBinHeader])
-
- // If client received END_STREAM from server while stream was still active,
- // send RST_STREAM.
- rstStream := s.getState() == streamActive
- t.closeStream(s, io.EOF, rstStream, http2.ErrCodeNo, status, mdata, true)
-}
-
-// readServerPreface reads and handles the initial settings frame from the
-// server.
-func (t *http2Client) readServerPreface() error {
- frame, err := t.framer.fr.ReadFrame()
- if err != nil {
- return connectionErrorf(true, err, "error reading server preface: %v", err)
- }
- sf, ok := frame.(*http2.SettingsFrame)
- if !ok {
- return connectionErrorf(true, nil, "initial http2 frame from server is not a settings frame: %T", frame)
- }
- t.handleSettings(sf, true)
- return nil
-}
-
-// reader verifies the server preface and reads all subsequent data from
-// network connection. If the server preface is not read successfully, an
-// error is pushed to errCh; otherwise errCh is closed with no error.
-func (t *http2Client) reader(errCh chan<- error) {
- var errClose error
- defer func() {
- close(t.readerDone)
- if errClose != nil {
- t.Close(errClose)
- }
- }()
-
- if err := t.readServerPreface(); err != nil {
- errCh <- err
- return
- }
- close(errCh)
- if t.keepaliveEnabled {
- atomic.StoreInt64(&t.lastRead, time.Now().UnixNano())
- }
-
- // loop to keep reading incoming messages on this transport.
- for {
- t.controlBuf.throttle()
- frame, err := t.framer.fr.ReadFrame()
- if t.keepaliveEnabled {
- atomic.StoreInt64(&t.lastRead, time.Now().UnixNano())
- }
- if err != nil {
- // Abort an active stream if the http2.Framer returns a
- // http2.StreamError. This can happen only if the server's response
- // is malformed http2.
- if se, ok := err.(http2.StreamError); ok {
- t.mu.Lock()
- s := t.activeStreams[se.StreamID]
- t.mu.Unlock()
- if s != nil {
- // use error detail to provide better err message
- code := http2ErrConvTab[se.Code]
- errorDetail := t.framer.fr.ErrorDetail()
- var msg string
- if errorDetail != nil {
- msg = errorDetail.Error()
- } else {
- msg = "received invalid frame"
- }
- t.closeStream(s, status.Error(code, msg), true, http2.ErrCodeProtocol, status.New(code, msg), nil, false)
- }
- continue
- }
- // Transport error.
- errClose = connectionErrorf(true, err, "error reading from server: %v", err)
- return
- }
- switch frame := frame.(type) {
- case *http2.MetaHeadersFrame:
- t.operateHeaders(frame)
- case *http2.DataFrame:
- t.handleData(frame)
- case *http2.RSTStreamFrame:
- t.handleRSTStream(frame)
- case *http2.SettingsFrame:
- t.handleSettings(frame, false)
- case *http2.PingFrame:
- t.handlePing(frame)
- case *http2.GoAwayFrame:
- errClose = t.handleGoAway(frame)
- case *http2.WindowUpdateFrame:
- t.handleWindowUpdate(frame)
- default:
- if logger.V(logLevel) {
- logger.Errorf("transport: http2Client.reader got unhandled frame type %v.", frame)
- }
- }
- }
-}
-
-// keepalive running in a separate goroutine makes sure the connection is alive by sending pings.
-func (t *http2Client) keepalive() {
- var err error
- defer func() {
- close(t.keepaliveDone)
- if err != nil {
- t.Close(err)
- }
- }()
- p := &ping{data: [8]byte{}}
- // True iff a ping has been sent, and no data has been received since then.
- outstandingPing := false
- // Amount of time remaining before which we should receive an ACK for the
- // last sent ping.
- timeoutLeft := time.Duration(0)
- // Records the last value of t.lastRead before we go block on the timer.
- // This is required to check for read activity since then.
- prevNano := time.Now().UnixNano()
- timer := time.NewTimer(t.kp.Time)
- for {
- select {
- case <-timer.C:
- lastRead := atomic.LoadInt64(&t.lastRead)
- if lastRead > prevNano {
- // There has been read activity since the last time we were here.
- outstandingPing = false
- // Next timer should fire at kp.Time seconds from lastRead time.
- timer.Reset(time.Duration(lastRead) + t.kp.Time - time.Duration(time.Now().UnixNano()))
- prevNano = lastRead
- continue
- }
- if outstandingPing && timeoutLeft <= 0 {
- err = connectionErrorf(true, nil, "keepalive ping failed to receive ACK within timeout")
- return
- }
- t.mu.Lock()
- if t.state == closing {
- // If the transport is closing, we should exit from the
- // keepalive goroutine here. If not, we could have a race
- // between the call to Signal() from Close() and the call to
- // Wait() here, whereby the keepalive goroutine ends up
- // blocking on the condition variable which will never be
- // signalled again.
- t.mu.Unlock()
- return
- }
- if len(t.activeStreams) < 1 && !t.kp.PermitWithoutStream {
- // If a ping was sent out previously (because there were active
- // streams at that point) which wasn't acked and its timeout
- // hadn't fired, but we got here and are about to go dormant,
- // we should make sure that we unconditionally send a ping once
- // we awaken.
- outstandingPing = false
- t.kpDormant = true
- t.kpDormancyCond.Wait()
- }
- t.kpDormant = false
- t.mu.Unlock()
-
- // We get here either because we were dormant and a new stream was
- // created which unblocked the Wait() call, or because the
- // keepalive timer expired. In both cases, we need to send a ping.
- if !outstandingPing {
- if channelz.IsOn() {
- t.channelz.SocketMetrics.KeepAlivesSent.Add(1)
- }
- t.controlBuf.put(p)
- timeoutLeft = t.kp.Timeout
- outstandingPing = true
- }
- // The amount of time to sleep here is the minimum of kp.Time and
- // timeoutLeft. This will ensure that we wait only for kp.Time
- // before sending out the next ping (for cases where the ping is
- // acked).
- sleepDuration := min(t.kp.Time, timeoutLeft)
- timeoutLeft -= sleepDuration
- timer.Reset(sleepDuration)
- case <-t.ctx.Done():
- if !timer.Stop() {
- <-timer.C
- }
- return
- }
- }
-}
-
-func (t *http2Client) Error() <-chan struct{} {
- return t.ctx.Done()
-}
-
-func (t *http2Client) GoAway() <-chan struct{} {
- return t.goAway
-}
-
-func (t *http2Client) socketMetrics() *channelz.EphemeralSocketMetrics {
- return &channelz.EphemeralSocketMetrics{
- LocalFlowControlWindow: int64(t.fc.getSize()),
- RemoteFlowControlWindow: t.getOutFlowWindow(),
- }
-}
-
-func (t *http2Client) RemoteAddr() net.Addr { return t.remoteAddr }
-
-func (t *http2Client) incrMsgSent() {
- if channelz.IsOn() {
- t.channelz.SocketMetrics.MessagesSent.Add(1)
- t.channelz.SocketMetrics.LastMessageSentTimestamp.Store(time.Now().UnixNano())
- }
-}
-
-func (t *http2Client) incrMsgRecv() {
- if channelz.IsOn() {
- t.channelz.SocketMetrics.MessagesReceived.Add(1)
- t.channelz.SocketMetrics.LastMessageReceivedTimestamp.Store(time.Now().UnixNano())
- }
-}
-
-func (t *http2Client) getOutFlowWindow() int64 {
- resp := make(chan uint32, 1)
- timer := time.NewTimer(time.Second)
- defer timer.Stop()
- t.controlBuf.put(&outFlowControlSizeRequest{resp})
- select {
- case sz := <-resp:
- return int64(sz)
- case <-t.ctxDone:
- return -1
- case <-timer.C:
- return -2
- }
-}
-
-func (t *http2Client) stateForTesting() transportState {
- t.mu.Lock()
- defer t.mu.Unlock()
- return t.state
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go
deleted file mode 100644
index 0055fddd7..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go
+++ /dev/null
@@ -1,1476 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "bytes"
- "context"
- "errors"
- "fmt"
- "io"
- "math"
- rand "math/rand/v2"
- "net"
- "net/http"
- "strconv"
- "sync"
- "sync/atomic"
- "time"
-
- "golang.org/x/net/http2"
- "golang.org/x/net/http2/hpack"
- "google.golang.org/grpc/internal/grpclog"
- "google.golang.org/grpc/internal/grpcutil"
- "google.golang.org/grpc/internal/pretty"
- "google.golang.org/grpc/internal/syscall"
- "google.golang.org/grpc/mem"
- "google.golang.org/protobuf/proto"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/internal/grpcsync"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
- "google.golang.org/grpc/tap"
-)
-
-var (
- // ErrIllegalHeaderWrite indicates that setting header is illegal because of
- // the stream's state.
- ErrIllegalHeaderWrite = status.Error(codes.Internal, "transport: SendHeader called multiple times")
- // ErrHeaderListSizeLimitViolation indicates that the header list size is larger
- // than the limit set by peer.
- ErrHeaderListSizeLimitViolation = status.Error(codes.Internal, "transport: trying to send header list size larger than the limit set by peer")
-)
-
-// serverConnectionCounter counts the number of connections a server has seen
-// (equal to the number of http2Servers created). Must be accessed atomically.
-var serverConnectionCounter uint64
-
-// http2Server implements the ServerTransport interface with HTTP2.
-type http2Server struct {
- lastRead int64 // Keep this field 64-bit aligned. Accessed atomically.
- done chan struct{}
- conn net.Conn
- loopy *loopyWriter
- readerDone chan struct{} // sync point to enable testing.
- loopyWriterDone chan struct{}
- peer peer.Peer
- inTapHandle tap.ServerInHandle
- framer *framer
- // The max number of concurrent streams.
- maxStreams uint32
- // controlBuf delivers all the control related tasks (e.g., window
- // updates, reset streams, and various settings) to the controller.
- controlBuf *controlBuffer
- fc *trInFlow
- stats []stats.Handler
- // Keepalive and max-age parameters for the server.
- kp keepalive.ServerParameters
- // Keepalive enforcement policy.
- kep keepalive.EnforcementPolicy
- // The time instance last ping was received.
- lastPingAt time.Time
- // Number of times the client has violated keepalive ping policy so far.
- pingStrikes uint8
- // Flag to signify that number of ping strikes should be reset to 0.
- // This is set whenever data or header frames are sent.
- // 1 means yes.
- resetPingStrikes uint32 // Accessed atomically.
- initialWindowSize int32
- bdpEst *bdpEstimator
- maxSendHeaderListSize *uint32
-
- mu sync.Mutex // guard the following
-
- // drainEvent is initialized when Drain() is called the first time. After
- // which the server writes out the first GoAway(with ID 2^31-1) frame. Then
- // an independent goroutine will be launched to later send the second
- // GoAway. During this time we don't want to write another first GoAway(with
- // ID 2^31 -1) frame. Thus call to Drain() will be a no-op if drainEvent is
- // already initialized since draining is already underway.
- drainEvent *grpcsync.Event
- state transportState
- activeStreams map[uint32]*ServerStream
- // idle is the time instant when the connection went idle.
- // This is either the beginning of the connection or when the number of
- // RPCs go down to 0.
- // When the connection is busy, this value is set to 0.
- idle time.Time
-
- // Fields below are for channelz metric collection.
- channelz *channelz.Socket
- bufferPool mem.BufferPool
-
- connectionID uint64
-
- // maxStreamMu guards the maximum stream ID
- // This lock may not be taken if mu is already held.
- maxStreamMu sync.Mutex
- maxStreamID uint32 // max stream ID ever seen
-
- logger *grpclog.PrefixLogger
-}
-
-// NewServerTransport creates a http2 transport with conn and configuration
-// options from config.
-//
-// It returns a non-nil transport and a nil error on success. On failure, it
-// returns a nil transport and a non-nil error. For a special case where the
-// underlying conn gets closed before the client preface could be read, it
-// returns a nil transport and a nil error.
-func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, err error) {
- var authInfo credentials.AuthInfo
- rawConn := conn
- if config.Credentials != nil {
- var err error
- conn, authInfo, err = config.Credentials.ServerHandshake(rawConn)
- if err != nil {
- // ErrConnDispatched means that the connection was dispatched away
- // from gRPC; those connections should be left open. io.EOF means
- // the connection was closed before handshaking completed, which can
- // happen naturally from probers. Return these errors directly.
- if err == credentials.ErrConnDispatched || err == io.EOF {
- return nil, err
- }
- return nil, connectionErrorf(false, err, "ServerHandshake(%q) failed: %v", rawConn.RemoteAddr(), err)
- }
- }
- writeBufSize := config.WriteBufferSize
- readBufSize := config.ReadBufferSize
- maxHeaderListSize := defaultServerMaxHeaderListSize
- if config.MaxHeaderListSize != nil {
- maxHeaderListSize = *config.MaxHeaderListSize
- }
- framer := newFramer(conn, writeBufSize, readBufSize, config.SharedWriteBuffer, maxHeaderListSize)
- // Send initial settings as connection preface to client.
- isettings := []http2.Setting{{
- ID: http2.SettingMaxFrameSize,
- Val: http2MaxFrameLen,
- }}
- if config.MaxStreams != math.MaxUint32 {
- isettings = append(isettings, http2.Setting{
- ID: http2.SettingMaxConcurrentStreams,
- Val: config.MaxStreams,
- })
- }
- dynamicWindow := true
- iwz := int32(initialWindowSize)
- if config.InitialWindowSize >= defaultWindowSize {
- iwz = config.InitialWindowSize
- dynamicWindow = false
- }
- icwz := int32(initialWindowSize)
- if config.InitialConnWindowSize >= defaultWindowSize {
- icwz = config.InitialConnWindowSize
- dynamicWindow = false
- }
- if iwz != defaultWindowSize {
- isettings = append(isettings, http2.Setting{
- ID: http2.SettingInitialWindowSize,
- Val: uint32(iwz)})
- }
- if config.MaxHeaderListSize != nil {
- isettings = append(isettings, http2.Setting{
- ID: http2.SettingMaxHeaderListSize,
- Val: *config.MaxHeaderListSize,
- })
- }
- if config.HeaderTableSize != nil {
- isettings = append(isettings, http2.Setting{
- ID: http2.SettingHeaderTableSize,
- Val: *config.HeaderTableSize,
- })
- }
- if err := framer.fr.WriteSettings(isettings...); err != nil {
- return nil, connectionErrorf(false, err, "transport: %v", err)
- }
- // Adjust the connection flow control window if needed.
- if delta := uint32(icwz - defaultWindowSize); delta > 0 {
- if err := framer.fr.WriteWindowUpdate(0, delta); err != nil {
- return nil, connectionErrorf(false, err, "transport: %v", err)
- }
- }
- kp := config.KeepaliveParams
- if kp.MaxConnectionIdle == 0 {
- kp.MaxConnectionIdle = defaultMaxConnectionIdle
- }
- if kp.MaxConnectionAge == 0 {
- kp.MaxConnectionAge = defaultMaxConnectionAge
- }
- // Add a jitter to MaxConnectionAge.
- kp.MaxConnectionAge += getJitter(kp.MaxConnectionAge)
- if kp.MaxConnectionAgeGrace == 0 {
- kp.MaxConnectionAgeGrace = defaultMaxConnectionAgeGrace
- }
- if kp.Time == 0 {
- kp.Time = defaultServerKeepaliveTime
- }
- if kp.Timeout == 0 {
- kp.Timeout = defaultServerKeepaliveTimeout
- }
- if kp.Time != infinity {
- if err = syscall.SetTCPUserTimeout(rawConn, kp.Timeout); err != nil {
- return nil, connectionErrorf(false, err, "transport: failed to set TCP_USER_TIMEOUT: %v", err)
- }
- }
- kep := config.KeepalivePolicy
- if kep.MinTime == 0 {
- kep.MinTime = defaultKeepalivePolicyMinTime
- }
-
- done := make(chan struct{})
- peer := peer.Peer{
- Addr: conn.RemoteAddr(),
- LocalAddr: conn.LocalAddr(),
- AuthInfo: authInfo,
- }
- t := &http2Server{
- done: done,
- conn: conn,
- peer: peer,
- framer: framer,
- readerDone: make(chan struct{}),
- loopyWriterDone: make(chan struct{}),
- maxStreams: config.MaxStreams,
- inTapHandle: config.InTapHandle,
- fc: &trInFlow{limit: uint32(icwz)},
- state: reachable,
- activeStreams: make(map[uint32]*ServerStream),
- stats: config.StatsHandlers,
- kp: kp,
- idle: time.Now(),
- kep: kep,
- initialWindowSize: iwz,
- bufferPool: config.BufferPool,
- }
- var czSecurity credentials.ChannelzSecurityValue
- if au, ok := authInfo.(credentials.ChannelzSecurityInfo); ok {
- czSecurity = au.GetSecurityValue()
- }
- t.channelz = channelz.RegisterSocket(
- &channelz.Socket{
- SocketType: channelz.SocketTypeNormal,
- Parent: config.ChannelzParent,
- SocketMetrics: channelz.SocketMetrics{},
- EphemeralMetrics: t.socketMetrics,
- LocalAddr: t.peer.LocalAddr,
- RemoteAddr: t.peer.Addr,
- SocketOptions: channelz.GetSocketOption(t.conn),
- Security: czSecurity,
- },
- )
- t.logger = prefixLoggerForServerTransport(t)
-
- t.controlBuf = newControlBuffer(t.done)
- if dynamicWindow {
- t.bdpEst = &bdpEstimator{
- bdp: initialWindowSize,
- updateFlowControl: t.updateFlowControl,
- }
- }
-
- t.connectionID = atomic.AddUint64(&serverConnectionCounter, 1)
- t.framer.writer.Flush()
-
- defer func() {
- if err != nil {
- t.Close(err)
- }
- }()
-
- // Check the validity of client preface.
- preface := make([]byte, len(clientPreface))
- if _, err := io.ReadFull(t.conn, preface); err != nil {
- // In deployments where a gRPC server runs behind a cloud load balancer
- // which performs regular TCP level health checks, the connection is
- // closed immediately by the latter. Returning io.EOF here allows the
- // grpc server implementation to recognize this scenario and suppress
- // logging to reduce spam.
- if err == io.EOF {
- return nil, io.EOF
- }
- return nil, connectionErrorf(false, err, "transport: http2Server.HandleStreams failed to receive the preface from client: %v", err)
- }
- if !bytes.Equal(preface, clientPreface) {
- return nil, connectionErrorf(false, nil, "transport: http2Server.HandleStreams received bogus greeting from client: %q", preface)
- }
-
- frame, err := t.framer.fr.ReadFrame()
- if err == io.EOF || err == io.ErrUnexpectedEOF {
- return nil, err
- }
- if err != nil {
- return nil, connectionErrorf(false, err, "transport: http2Server.HandleStreams failed to read initial settings frame: %v", err)
- }
- atomic.StoreInt64(&t.lastRead, time.Now().UnixNano())
- sf, ok := frame.(*http2.SettingsFrame)
- if !ok {
- return nil, connectionErrorf(false, nil, "transport: http2Server.HandleStreams saw invalid preface type %T from client", frame)
- }
- t.handleSettings(sf)
-
- go func() {
- t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler, t.bufferPool)
- err := t.loopy.run()
- close(t.loopyWriterDone)
- if !isIOError(err) {
- // Close the connection if a non-I/O error occurs (for I/O errors
- // the reader will also encounter the error and close). Wait 1
- // second before closing the connection, or when the reader is done
- // (i.e. the client already closed the connection or a connection
- // error occurred). This avoids the potential problem where there
- // is unread data on the receive side of the connection, which, if
- // closed, would lead to a TCP RST instead of FIN, and the client
- // encountering errors. For more info:
- // https://github.com/grpc/grpc-go/issues/5358
- timer := time.NewTimer(time.Second)
- defer timer.Stop()
- select {
- case <-t.readerDone:
- case <-timer.C:
- }
- t.conn.Close()
- }
- }()
- go t.keepalive()
- return t, nil
-}
-
-// operateHeaders takes action on the decoded headers. Returns an error if fatal
-// error encountered and transport needs to close, otherwise returns nil.
-func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeadersFrame, handle func(*ServerStream)) error {
- // Acquire max stream ID lock for entire duration
- t.maxStreamMu.Lock()
- defer t.maxStreamMu.Unlock()
-
- streamID := frame.Header().StreamID
-
- // frame.Truncated is set to true when framer detects that the current header
- // list size hits MaxHeaderListSize limit.
- if frame.Truncated {
- t.controlBuf.put(&cleanupStream{
- streamID: streamID,
- rst: true,
- rstCode: http2.ErrCodeFrameSize,
- onWrite: func() {},
- })
- return nil
- }
-
- if streamID%2 != 1 || streamID <= t.maxStreamID {
- // illegal gRPC stream id.
- return fmt.Errorf("received an illegal stream id: %v. headers frame: %+v", streamID, frame)
- }
- t.maxStreamID = streamID
-
- buf := newRecvBuffer()
- s := &ServerStream{
- Stream: &Stream{
- id: streamID,
- buf: buf,
- fc: &inFlow{limit: uint32(t.initialWindowSize)},
- },
- st: t,
- headerWireLength: int(frame.Header().Length),
- }
- var (
- // if false, content-type was missing or invalid
- isGRPC = false
- contentType = ""
- mdata = make(metadata.MD, len(frame.Fields))
- httpMethod string
- // these are set if an error is encountered while parsing the headers
- protocolError bool
- headerError *status.Status
-
- timeoutSet bool
- timeout time.Duration
- )
-
- for _, hf := range frame.Fields {
- switch hf.Name {
- case "content-type":
- contentSubtype, validContentType := grpcutil.ContentSubtype(hf.Value)
- if !validContentType {
- contentType = hf.Value
- break
- }
- mdata[hf.Name] = append(mdata[hf.Name], hf.Value)
- s.contentSubtype = contentSubtype
- isGRPC = true
-
- case "grpc-accept-encoding":
- mdata[hf.Name] = append(mdata[hf.Name], hf.Value)
- if hf.Value == "" {
- continue
- }
- compressors := hf.Value
- if s.clientAdvertisedCompressors != "" {
- compressors = s.clientAdvertisedCompressors + "," + compressors
- }
- s.clientAdvertisedCompressors = compressors
- case "grpc-encoding":
- s.recvCompress = hf.Value
- case ":method":
- httpMethod = hf.Value
- case ":path":
- s.method = hf.Value
- case "grpc-timeout":
- timeoutSet = true
- var err error
- if timeout, err = decodeTimeout(hf.Value); err != nil {
- headerError = status.Newf(codes.Internal, "malformed grpc-timeout: %v", err)
- }
- // "Transports must consider requests containing the Connection header
- // as malformed." - A41
- case "connection":
- if t.logger.V(logLevel) {
- t.logger.Infof("Received a HEADERS frame with a :connection header which makes the request malformed, as per the HTTP/2 spec")
- }
- protocolError = true
- default:
- if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) {
- break
- }
- v, err := decodeMetadataHeader(hf.Name, hf.Value)
- if err != nil {
- headerError = status.Newf(codes.Internal, "malformed binary metadata %q in header %q: %v", hf.Value, hf.Name, err)
- t.logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err)
- break
- }
- mdata[hf.Name] = append(mdata[hf.Name], v)
- }
- }
-
- // "If multiple Host headers or multiple :authority headers are present, the
- // request must be rejected with an HTTP status code 400 as required by Host
- // validation in RFC 7230 §5.4, gRPC status code INTERNAL, or RST_STREAM
- // with HTTP/2 error code PROTOCOL_ERROR." - A41. Since this is a HTTP/2
- // error, this takes precedence over a client not speaking gRPC.
- if len(mdata[":authority"]) > 1 || len(mdata["host"]) > 1 {
- errMsg := fmt.Sprintf("num values of :authority: %v, num values of host: %v, both must only have 1 value as per HTTP/2 spec", len(mdata[":authority"]), len(mdata["host"]))
- if t.logger.V(logLevel) {
- t.logger.Infof("Aborting the stream early: %v", errMsg)
- }
- t.controlBuf.put(&earlyAbortStream{
- httpStatus: http.StatusBadRequest,
- streamID: streamID,
- contentSubtype: s.contentSubtype,
- status: status.New(codes.Internal, errMsg),
- rst: !frame.StreamEnded(),
- })
- return nil
- }
-
- if protocolError {
- t.controlBuf.put(&cleanupStream{
- streamID: streamID,
- rst: true,
- rstCode: http2.ErrCodeProtocol,
- onWrite: func() {},
- })
- return nil
- }
- if !isGRPC {
- t.controlBuf.put(&earlyAbortStream{
- httpStatus: http.StatusUnsupportedMediaType,
- streamID: streamID,
- contentSubtype: s.contentSubtype,
- status: status.Newf(codes.InvalidArgument, "invalid gRPC request content-type %q", contentType),
- rst: !frame.StreamEnded(),
- })
- return nil
- }
- if headerError != nil {
- t.controlBuf.put(&earlyAbortStream{
- httpStatus: http.StatusBadRequest,
- streamID: streamID,
- contentSubtype: s.contentSubtype,
- status: headerError,
- rst: !frame.StreamEnded(),
- })
- return nil
- }
-
- // "If :authority is missing, Host must be renamed to :authority." - A41
- if len(mdata[":authority"]) == 0 {
- // No-op if host isn't present, no eventual :authority header is a valid
- // RPC.
- if host, ok := mdata["host"]; ok {
- mdata[":authority"] = host
- delete(mdata, "host")
- }
- } else {
- // "If :authority is present, Host must be discarded" - A41
- delete(mdata, "host")
- }
-
- if frame.StreamEnded() {
- // s is just created by the caller. No lock needed.
- s.state = streamReadDone
- }
- if timeoutSet {
- s.ctx, s.cancel = context.WithTimeout(ctx, timeout)
- } else {
- s.ctx, s.cancel = context.WithCancel(ctx)
- }
-
- // Attach the received metadata to the context.
- if len(mdata) > 0 {
- s.ctx = metadata.NewIncomingContext(s.ctx, mdata)
- }
- t.mu.Lock()
- if t.state != reachable {
- t.mu.Unlock()
- s.cancel()
- return nil
- }
- if uint32(len(t.activeStreams)) >= t.maxStreams {
- t.mu.Unlock()
- t.controlBuf.put(&cleanupStream{
- streamID: streamID,
- rst: true,
- rstCode: http2.ErrCodeRefusedStream,
- onWrite: func() {},
- })
- s.cancel()
- return nil
- }
- if httpMethod != http.MethodPost {
- t.mu.Unlock()
- errMsg := fmt.Sprintf("Received a HEADERS frame with :method %q which should be POST", httpMethod)
- if t.logger.V(logLevel) {
- t.logger.Infof("Aborting the stream early: %v", errMsg)
- }
- t.controlBuf.put(&earlyAbortStream{
- httpStatus: 405,
- streamID: streamID,
- contentSubtype: s.contentSubtype,
- status: status.New(codes.Internal, errMsg),
- rst: !frame.StreamEnded(),
- })
- s.cancel()
- return nil
- }
- if t.inTapHandle != nil {
- var err error
- if s.ctx, err = t.inTapHandle(s.ctx, &tap.Info{FullMethodName: s.method, Header: mdata}); err != nil {
- t.mu.Unlock()
- if t.logger.V(logLevel) {
- t.logger.Infof("Aborting the stream early due to InTapHandle failure: %v", err)
- }
- stat, ok := status.FromError(err)
- if !ok {
- stat = status.New(codes.PermissionDenied, err.Error())
- }
- t.controlBuf.put(&earlyAbortStream{
- httpStatus: 200,
- streamID: s.id,
- contentSubtype: s.contentSubtype,
- status: stat,
- rst: !frame.StreamEnded(),
- })
- return nil
- }
- }
- t.activeStreams[streamID] = s
- if len(t.activeStreams) == 1 {
- t.idle = time.Time{}
- }
- t.mu.Unlock()
- if channelz.IsOn() {
- t.channelz.SocketMetrics.StreamsStarted.Add(1)
- t.channelz.SocketMetrics.LastRemoteStreamCreatedTimestamp.Store(time.Now().UnixNano())
- }
- s.requestRead = func(n int) {
- t.adjustWindow(s, uint32(n))
- }
- s.ctxDone = s.ctx.Done()
- s.wq = newWriteQuota(defaultWriteQuota, s.ctxDone)
- s.trReader = &transportReader{
- reader: &recvBufferReader{
- ctx: s.ctx,
- ctxDone: s.ctxDone,
- recv: s.buf,
- },
- windowHandler: func(n int) {
- t.updateWindow(s, uint32(n))
- },
- }
- // Register the stream with loopy.
- t.controlBuf.put(&registerStream{
- streamID: s.id,
- wq: s.wq,
- })
- handle(s)
- return nil
-}
-
-// HandleStreams receives incoming streams using the given handler. This is
-// typically run in a separate goroutine.
-// traceCtx attaches trace to ctx and returns the new context.
-func (t *http2Server) HandleStreams(ctx context.Context, handle func(*ServerStream)) {
- defer func() {
- close(t.readerDone)
- <-t.loopyWriterDone
- }()
- for {
- t.controlBuf.throttle()
- frame, err := t.framer.fr.ReadFrame()
- atomic.StoreInt64(&t.lastRead, time.Now().UnixNano())
- if err != nil {
- if se, ok := err.(http2.StreamError); ok {
- if t.logger.V(logLevel) {
- t.logger.Warningf("Encountered http2.StreamError: %v", se)
- }
- t.mu.Lock()
- s := t.activeStreams[se.StreamID]
- t.mu.Unlock()
- if s != nil {
- t.closeStream(s, true, se.Code, false)
- } else {
- t.controlBuf.put(&cleanupStream{
- streamID: se.StreamID,
- rst: true,
- rstCode: se.Code,
- onWrite: func() {},
- })
- }
- continue
- }
- t.Close(err)
- return
- }
- switch frame := frame.(type) {
- case *http2.MetaHeadersFrame:
- if err := t.operateHeaders(ctx, frame, handle); err != nil {
- // Any error processing client headers, e.g. invalid stream ID,
- // is considered a protocol violation.
- t.controlBuf.put(&goAway{
- code: http2.ErrCodeProtocol,
- debugData: []byte(err.Error()),
- closeConn: err,
- })
- continue
- }
- case *http2.DataFrame:
- t.handleData(frame)
- case *http2.RSTStreamFrame:
- t.handleRSTStream(frame)
- case *http2.SettingsFrame:
- t.handleSettings(frame)
- case *http2.PingFrame:
- t.handlePing(frame)
- case *http2.WindowUpdateFrame:
- t.handleWindowUpdate(frame)
- case *http2.GoAwayFrame:
- // TODO: Handle GoAway from the client appropriately.
- default:
- if t.logger.V(logLevel) {
- t.logger.Infof("Received unsupported frame type %T", frame)
- }
- }
- }
-}
-
-func (t *http2Server) getStream(f http2.Frame) (*ServerStream, bool) {
- t.mu.Lock()
- defer t.mu.Unlock()
- if t.activeStreams == nil {
- // The transport is closing.
- return nil, false
- }
- s, ok := t.activeStreams[f.Header().StreamID]
- if !ok {
- // The stream is already done.
- return nil, false
- }
- return s, true
-}
-
-// adjustWindow sends out extra window update over the initial window size
-// of stream if the application is requesting data larger in size than
-// the window.
-func (t *http2Server) adjustWindow(s *ServerStream, n uint32) {
- if w := s.fc.maybeAdjust(n); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w})
- }
-
-}
-
-// updateWindow adjusts the inbound quota for the stream and the transport.
-// Window updates will deliver to the controller for sending when
-// the cumulative quota exceeds the corresponding threshold.
-func (t *http2Server) updateWindow(s *ServerStream, n uint32) {
- if w := s.fc.onRead(n); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{streamID: s.id,
- increment: w,
- })
- }
-}
-
-// updateFlowControl updates the incoming flow control windows
-// for the transport and the stream based on the current bdp
-// estimation.
-func (t *http2Server) updateFlowControl(n uint32) {
- t.mu.Lock()
- for _, s := range t.activeStreams {
- s.fc.newLimit(n)
- }
- t.initialWindowSize = int32(n)
- t.mu.Unlock()
- t.controlBuf.put(&outgoingWindowUpdate{
- streamID: 0,
- increment: t.fc.newLimit(n),
- })
- t.controlBuf.put(&outgoingSettings{
- ss: []http2.Setting{
- {
- ID: http2.SettingInitialWindowSize,
- Val: n,
- },
- },
- })
-
-}
-
-func (t *http2Server) handleData(f *http2.DataFrame) {
- size := f.Header().Length
- var sendBDPPing bool
- if t.bdpEst != nil {
- sendBDPPing = t.bdpEst.add(size)
- }
- // Decouple connection's flow control from application's read.
- // An update on connection's flow control should not depend on
- // whether user application has read the data or not. Such a
- // restriction is already imposed on the stream's flow control,
- // and therefore the sender will be blocked anyways.
- // Decoupling the connection flow control will prevent other
- // active(fast) streams from starving in presence of slow or
- // inactive streams.
- if w := t.fc.onData(size); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{
- streamID: 0,
- increment: w,
- })
- }
- if sendBDPPing {
- // Avoid excessive ping detection (e.g. in an L7 proxy)
- // by sending a window update prior to the BDP ping.
- if w := t.fc.reset(); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{
- streamID: 0,
- increment: w,
- })
- }
- t.controlBuf.put(bdpPing)
- }
- // Select the right stream to dispatch.
- s, ok := t.getStream(f)
- if !ok {
- return
- }
- if s.getState() == streamReadDone {
- t.closeStream(s, true, http2.ErrCodeStreamClosed, false)
- return
- }
- if size > 0 {
- if err := s.fc.onData(size); err != nil {
- t.closeStream(s, true, http2.ErrCodeFlowControl, false)
- return
- }
- if f.Header().Flags.Has(http2.FlagDataPadded) {
- if w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 {
- t.controlBuf.put(&outgoingWindowUpdate{s.id, w})
- }
- }
- // TODO(bradfitz, zhaoq): A copy is required here because there is no
- // guarantee f.Data() is consumed before the arrival of next frame.
- // Can this copy be eliminated?
- if len(f.Data()) > 0 {
- pool := t.bufferPool
- if pool == nil {
- // Note that this is only supposed to be nil in tests. Otherwise, stream is
- // always initialized with a BufferPool.
- pool = mem.DefaultBufferPool()
- }
- s.write(recvMsg{buffer: mem.Copy(f.Data(), pool)})
- }
- }
- if f.StreamEnded() {
- // Received the end of stream from the client.
- s.compareAndSwapState(streamActive, streamReadDone)
- s.write(recvMsg{err: io.EOF})
- }
-}
-
-func (t *http2Server) handleRSTStream(f *http2.RSTStreamFrame) {
- // If the stream is not deleted from the transport's active streams map, then do a regular close stream.
- if s, ok := t.getStream(f); ok {
- t.closeStream(s, false, 0, false)
- return
- }
- // If the stream is already deleted from the active streams map, then put a cleanupStream item into controlbuf to delete the stream from loopy writer's established streams map.
- t.controlBuf.put(&cleanupStream{
- streamID: f.Header().StreamID,
- rst: false,
- rstCode: 0,
- onWrite: func() {},
- })
-}
-
-func (t *http2Server) handleSettings(f *http2.SettingsFrame) {
- if f.IsAck() {
- return
- }
- var ss []http2.Setting
- var updateFuncs []func()
- f.ForeachSetting(func(s http2.Setting) error {
- switch s.ID {
- case http2.SettingMaxHeaderListSize:
- updateFuncs = append(updateFuncs, func() {
- t.maxSendHeaderListSize = new(uint32)
- *t.maxSendHeaderListSize = s.Val
- })
- default:
- ss = append(ss, s)
- }
- return nil
- })
- t.controlBuf.executeAndPut(func() bool {
- for _, f := range updateFuncs {
- f()
- }
- return true
- }, &incomingSettings{
- ss: ss,
- })
-}
-
-const (
- maxPingStrikes = 2
- defaultPingTimeout = 2 * time.Hour
-)
-
-func (t *http2Server) handlePing(f *http2.PingFrame) {
- if f.IsAck() {
- if f.Data == goAwayPing.data && t.drainEvent != nil {
- t.drainEvent.Fire()
- return
- }
- // Maybe it's a BDP ping.
- if t.bdpEst != nil {
- t.bdpEst.calculate(f.Data)
- }
- return
- }
- pingAck := &ping{ack: true}
- copy(pingAck.data[:], f.Data[:])
- t.controlBuf.put(pingAck)
-
- now := time.Now()
- defer func() {
- t.lastPingAt = now
- }()
- // A reset ping strikes means that we don't need to check for policy
- // violation for this ping and the pingStrikes counter should be set
- // to 0.
- if atomic.CompareAndSwapUint32(&t.resetPingStrikes, 1, 0) {
- t.pingStrikes = 0
- return
- }
- t.mu.Lock()
- ns := len(t.activeStreams)
- t.mu.Unlock()
- if ns < 1 && !t.kep.PermitWithoutStream {
- // Keepalive shouldn't be active thus, this new ping should
- // have come after at least defaultPingTimeout.
- if t.lastPingAt.Add(defaultPingTimeout).After(now) {
- t.pingStrikes++
- }
- } else {
- // Check if keepalive policy is respected.
- if t.lastPingAt.Add(t.kep.MinTime).After(now) {
- t.pingStrikes++
- }
- }
-
- if t.pingStrikes > maxPingStrikes {
- // Send goaway and close the connection.
- t.controlBuf.put(&goAway{code: http2.ErrCodeEnhanceYourCalm, debugData: []byte("too_many_pings"), closeConn: errors.New("got too many pings from the client")})
- }
-}
-
-func (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) {
- t.controlBuf.put(&incomingWindowUpdate{
- streamID: f.Header().StreamID,
- increment: f.Increment,
- })
-}
-
-func appendHeaderFieldsFromMD(headerFields []hpack.HeaderField, md metadata.MD) []hpack.HeaderField {
- for k, vv := range md {
- if isReservedHeader(k) {
- // Clients don't tolerate reading restricted headers after some non restricted ones were sent.
- continue
- }
- for _, v := range vv {
- headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})
- }
- }
- return headerFields
-}
-
-func (t *http2Server) checkForHeaderListSize(it any) bool {
- if t.maxSendHeaderListSize == nil {
- return true
- }
- hdrFrame := it.(*headerFrame)
- var sz int64
- for _, f := range hdrFrame.hf {
- if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) {
- if t.logger.V(logLevel) {
- t.logger.Infof("Header list size to send violates the maximum size (%d bytes) set by client", *t.maxSendHeaderListSize)
- }
- return false
- }
- }
- return true
-}
-
-func (t *http2Server) streamContextErr(s *ServerStream) error {
- select {
- case <-t.done:
- return ErrConnClosing
- default:
- }
- return ContextErr(s.ctx.Err())
-}
-
-// WriteHeader sends the header metadata md back to the client.
-func (t *http2Server) writeHeader(s *ServerStream, md metadata.MD) error {
- s.hdrMu.Lock()
- defer s.hdrMu.Unlock()
- if s.getState() == streamDone {
- return t.streamContextErr(s)
- }
-
- if s.updateHeaderSent() {
- return ErrIllegalHeaderWrite
- }
-
- if md.Len() > 0 {
- if s.header.Len() > 0 {
- s.header = metadata.Join(s.header, md)
- } else {
- s.header = md
- }
- }
- if err := t.writeHeaderLocked(s); err != nil {
- switch e := err.(type) {
- case ConnectionError:
- return status.Error(codes.Unavailable, e.Desc)
- default:
- return status.Convert(err).Err()
- }
- }
- return nil
-}
-
-func (t *http2Server) setResetPingStrikes() {
- atomic.StoreUint32(&t.resetPingStrikes, 1)
-}
-
-func (t *http2Server) writeHeaderLocked(s *ServerStream) error {
- // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields
- // first and create a slice of that exact size.
- headerFields := make([]hpack.HeaderField, 0, 2) // at least :status, content-type will be there if none else.
- headerFields = append(headerFields, hpack.HeaderField{Name: ":status", Value: "200"})
- headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: grpcutil.ContentType(s.contentSubtype)})
- if s.sendCompress != "" {
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress})
- }
- headerFields = appendHeaderFieldsFromMD(headerFields, s.header)
- hf := &headerFrame{
- streamID: s.id,
- hf: headerFields,
- endStream: false,
- onWrite: t.setResetPingStrikes,
- }
- success, err := t.controlBuf.executeAndPut(func() bool { return t.checkForHeaderListSize(hf) }, hf)
- if !success {
- if err != nil {
- return err
- }
- t.closeStream(s, true, http2.ErrCodeInternal, false)
- return ErrHeaderListSizeLimitViolation
- }
- for _, sh := range t.stats {
- // Note: Headers are compressed with hpack after this call returns.
- // No WireLength field is set here.
- outHeader := &stats.OutHeader{
- Header: s.header.Copy(),
- Compression: s.sendCompress,
- }
- sh.HandleRPC(s.Context(), outHeader)
- }
- return nil
-}
-
-// WriteStatus sends stream status to the client and terminates the stream.
-// There is no further I/O operations being able to perform on this stream.
-// TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early
-// OK is adopted.
-func (t *http2Server) writeStatus(s *ServerStream, st *status.Status) error {
- s.hdrMu.Lock()
- defer s.hdrMu.Unlock()
-
- if s.getState() == streamDone {
- return nil
- }
-
- // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields
- // first and create a slice of that exact size.
- headerFields := make([]hpack.HeaderField, 0, 2) // grpc-status and grpc-message will be there if none else.
- if !s.updateHeaderSent() { // No headers have been sent.
- if len(s.header) > 0 { // Send a separate header frame.
- if err := t.writeHeaderLocked(s); err != nil {
- return err
- }
- } else { // Send a trailer only response.
- headerFields = append(headerFields, hpack.HeaderField{Name: ":status", Value: "200"})
- headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: grpcutil.ContentType(s.contentSubtype)})
- }
- }
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status", Value: strconv.Itoa(int(st.Code()))})
- headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())})
-
- if p := st.Proto(); p != nil && len(p.Details) > 0 {
- // Do not use the user's grpc-status-details-bin (if present) if we are
- // even attempting to set our own.
- delete(s.trailer, grpcStatusDetailsBinHeader)
- stBytes, err := proto.Marshal(p)
- if err != nil {
- // TODO: return error instead, when callers are able to handle it.
- t.logger.Errorf("Failed to marshal rpc status: %s, error: %v", pretty.ToJSON(p), err)
- } else {
- headerFields = append(headerFields, hpack.HeaderField{Name: grpcStatusDetailsBinHeader, Value: encodeBinHeader(stBytes)})
- }
- }
-
- // Attach the trailer metadata.
- headerFields = appendHeaderFieldsFromMD(headerFields, s.trailer)
- trailingHeader := &headerFrame{
- streamID: s.id,
- hf: headerFields,
- endStream: true,
- onWrite: t.setResetPingStrikes,
- }
-
- success, err := t.controlBuf.executeAndPut(func() bool {
- return t.checkForHeaderListSize(trailingHeader)
- }, nil)
- if !success {
- if err != nil {
- return err
- }
- t.closeStream(s, true, http2.ErrCodeInternal, false)
- return ErrHeaderListSizeLimitViolation
- }
- // Send a RST_STREAM after the trailers if the client has not already half-closed.
- rst := s.getState() == streamActive
- t.finishStream(s, rst, http2.ErrCodeNo, trailingHeader, true)
- for _, sh := range t.stats {
- // Note: The trailer fields are compressed with hpack after this call returns.
- // No WireLength field is set here.
- sh.HandleRPC(s.Context(), &stats.OutTrailer{
- Trailer: s.trailer.Copy(),
- })
- }
- return nil
-}
-
-// Write converts the data into HTTP2 data frame and sends it out. Non-nil error
-// is returns if it fails (e.g., framing error, transport error).
-func (t *http2Server) write(s *ServerStream, hdr []byte, data mem.BufferSlice, _ *WriteOptions) error {
- reader := data.Reader()
-
- if !s.isHeaderSent() { // Headers haven't been written yet.
- if err := t.writeHeader(s, nil); err != nil {
- _ = reader.Close()
- return err
- }
- } else {
- // Writing headers checks for this condition.
- if s.getState() == streamDone {
- _ = reader.Close()
- return t.streamContextErr(s)
- }
- }
-
- df := &dataFrame{
- streamID: s.id,
- h: hdr,
- reader: reader,
- onEachWrite: t.setResetPingStrikes,
- }
- if err := s.wq.get(int32(len(hdr) + df.reader.Remaining())); err != nil {
- _ = reader.Close()
- return t.streamContextErr(s)
- }
- if err := t.controlBuf.put(df); err != nil {
- _ = reader.Close()
- return err
- }
- t.incrMsgSent()
- return nil
-}
-
-// keepalive running in a separate goroutine does the following:
-// 1. Gracefully closes an idle connection after a duration of keepalive.MaxConnectionIdle.
-// 2. Gracefully closes any connection after a duration of keepalive.MaxConnectionAge.
-// 3. Forcibly closes a connection after an additive period of keepalive.MaxConnectionAgeGrace over keepalive.MaxConnectionAge.
-// 4. Makes sure a connection is alive by sending pings with a frequency of keepalive.Time and closes a non-responsive connection
-// after an additional duration of keepalive.Timeout.
-func (t *http2Server) keepalive() {
- p := &ping{}
- // True iff a ping has been sent, and no data has been received since then.
- outstandingPing := false
- // Amount of time remaining before which we should receive an ACK for the
- // last sent ping.
- kpTimeoutLeft := time.Duration(0)
- // Records the last value of t.lastRead before we go block on the timer.
- // This is required to check for read activity since then.
- prevNano := time.Now().UnixNano()
- // Initialize the different timers to their default values.
- idleTimer := time.NewTimer(t.kp.MaxConnectionIdle)
- ageTimer := time.NewTimer(t.kp.MaxConnectionAge)
- kpTimer := time.NewTimer(t.kp.Time)
- defer func() {
- // We need to drain the underlying channel in these timers after a call
- // to Stop(), only if we are interested in resetting them. Clearly we
- // are not interested in resetting them here.
- idleTimer.Stop()
- ageTimer.Stop()
- kpTimer.Stop()
- }()
-
- for {
- select {
- case <-idleTimer.C:
- t.mu.Lock()
- idle := t.idle
- if idle.IsZero() { // The connection is non-idle.
- t.mu.Unlock()
- idleTimer.Reset(t.kp.MaxConnectionIdle)
- continue
- }
- val := t.kp.MaxConnectionIdle - time.Since(idle)
- t.mu.Unlock()
- if val <= 0 {
- // The connection has been idle for a duration of keepalive.MaxConnectionIdle or more.
- // Gracefully close the connection.
- t.Drain("max_idle")
- return
- }
- idleTimer.Reset(val)
- case <-ageTimer.C:
- t.Drain("max_age")
- ageTimer.Reset(t.kp.MaxConnectionAgeGrace)
- select {
- case <-ageTimer.C:
- // Close the connection after grace period.
- if t.logger.V(logLevel) {
- t.logger.Infof("Closing server transport due to maximum connection age")
- }
- t.controlBuf.put(closeConnection{})
- case <-t.done:
- }
- return
- case <-kpTimer.C:
- lastRead := atomic.LoadInt64(&t.lastRead)
- if lastRead > prevNano {
- // There has been read activity since the last time we were
- // here. Setup the timer to fire at kp.Time seconds from
- // lastRead time and continue.
- outstandingPing = false
- kpTimer.Reset(time.Duration(lastRead) + t.kp.Time - time.Duration(time.Now().UnixNano()))
- prevNano = lastRead
- continue
- }
- if outstandingPing && kpTimeoutLeft <= 0 {
- t.Close(fmt.Errorf("keepalive ping not acked within timeout %s", t.kp.Timeout))
- return
- }
- if !outstandingPing {
- if channelz.IsOn() {
- t.channelz.SocketMetrics.KeepAlivesSent.Add(1)
- }
- t.controlBuf.put(p)
- kpTimeoutLeft = t.kp.Timeout
- outstandingPing = true
- }
- // The amount of time to sleep here is the minimum of kp.Time and
- // timeoutLeft. This will ensure that we wait only for kp.Time
- // before sending out the next ping (for cases where the ping is
- // acked).
- sleepDuration := min(t.kp.Time, kpTimeoutLeft)
- kpTimeoutLeft -= sleepDuration
- kpTimer.Reset(sleepDuration)
- case <-t.done:
- return
- }
- }
-}
-
-// Close starts shutting down the http2Server transport.
-// TODO(zhaoq): Now the destruction is not blocked on any pending streams. This
-// could cause some resource issue. Revisit this later.
-func (t *http2Server) Close(err error) {
- t.mu.Lock()
- if t.state == closing {
- t.mu.Unlock()
- return
- }
- if t.logger.V(logLevel) {
- t.logger.Infof("Closing: %v", err)
- }
- t.state = closing
- streams := t.activeStreams
- t.activeStreams = nil
- t.mu.Unlock()
- t.controlBuf.finish()
- close(t.done)
- if err := t.conn.Close(); err != nil && t.logger.V(logLevel) {
- t.logger.Infof("Error closing underlying net.Conn during Close: %v", err)
- }
- channelz.RemoveEntry(t.channelz.ID)
- // Cancel all active streams.
- for _, s := range streams {
- s.cancel()
- }
-}
-
-// deleteStream deletes the stream s from transport's active streams.
-func (t *http2Server) deleteStream(s *ServerStream, eosReceived bool) {
-
- t.mu.Lock()
- if _, ok := t.activeStreams[s.id]; ok {
- delete(t.activeStreams, s.id)
- if len(t.activeStreams) == 0 {
- t.idle = time.Now()
- }
- }
- t.mu.Unlock()
-
- if channelz.IsOn() {
- if eosReceived {
- t.channelz.SocketMetrics.StreamsSucceeded.Add(1)
- } else {
- t.channelz.SocketMetrics.StreamsFailed.Add(1)
- }
- }
-}
-
-// finishStream closes the stream and puts the trailing headerFrame into controlbuf.
-func (t *http2Server) finishStream(s *ServerStream, rst bool, rstCode http2.ErrCode, hdr *headerFrame, eosReceived bool) {
- // In case stream sending and receiving are invoked in separate
- // goroutines (e.g., bi-directional streaming), cancel needs to be
- // called to interrupt the potential blocking on other goroutines.
- s.cancel()
-
- oldState := s.swapState(streamDone)
- if oldState == streamDone {
- // If the stream was already done, return.
- return
- }
-
- hdr.cleanup = &cleanupStream{
- streamID: s.id,
- rst: rst,
- rstCode: rstCode,
- onWrite: func() {
- t.deleteStream(s, eosReceived)
- },
- }
- t.controlBuf.put(hdr)
-}
-
-// closeStream clears the footprint of a stream when the stream is not needed any more.
-func (t *http2Server) closeStream(s *ServerStream, rst bool, rstCode http2.ErrCode, eosReceived bool) {
- // In case stream sending and receiving are invoked in separate
- // goroutines (e.g., bi-directional streaming), cancel needs to be
- // called to interrupt the potential blocking on other goroutines.
- s.cancel()
-
- s.swapState(streamDone)
- t.deleteStream(s, eosReceived)
-
- t.controlBuf.put(&cleanupStream{
- streamID: s.id,
- rst: rst,
- rstCode: rstCode,
- onWrite: func() {},
- })
-}
-
-func (t *http2Server) Drain(debugData string) {
- t.mu.Lock()
- defer t.mu.Unlock()
- if t.drainEvent != nil {
- return
- }
- t.drainEvent = grpcsync.NewEvent()
- t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte(debugData), headsUp: true})
-}
-
-var goAwayPing = &ping{data: [8]byte{1, 6, 1, 8, 0, 3, 3, 9}}
-
-// Handles outgoing GoAway and returns true if loopy needs to put itself
-// in draining mode.
-func (t *http2Server) outgoingGoAwayHandler(g *goAway) (bool, error) {
- t.maxStreamMu.Lock()
- t.mu.Lock()
- if t.state == closing { // TODO(mmukhi): This seems unnecessary.
- t.mu.Unlock()
- t.maxStreamMu.Unlock()
- // The transport is closing.
- return false, ErrConnClosing
- }
- if !g.headsUp {
- // Stop accepting more streams now.
- t.state = draining
- sid := t.maxStreamID
- retErr := g.closeConn
- if len(t.activeStreams) == 0 {
- retErr = errors.New("second GOAWAY written and no active streams left to process")
- }
- t.mu.Unlock()
- t.maxStreamMu.Unlock()
- if err := t.framer.fr.WriteGoAway(sid, g.code, g.debugData); err != nil {
- return false, err
- }
- t.framer.writer.Flush()
- if retErr != nil {
- return false, retErr
- }
- return true, nil
- }
- t.mu.Unlock()
- t.maxStreamMu.Unlock()
- // For a graceful close, send out a GoAway with stream ID of MaxUInt32,
- // Follow that with a ping and wait for the ack to come back or a timer
- // to expire. During this time accept new streams since they might have
- // originated before the GoAway reaches the client.
- // After getting the ack or timer expiration send out another GoAway this
- // time with an ID of the max stream server intends to process.
- if err := t.framer.fr.WriteGoAway(math.MaxUint32, http2.ErrCodeNo, g.debugData); err != nil {
- return false, err
- }
- if err := t.framer.fr.WritePing(false, goAwayPing.data); err != nil {
- return false, err
- }
- go func() {
- timer := time.NewTimer(5 * time.Second)
- defer timer.Stop()
- select {
- case <-t.drainEvent.Done():
- case <-timer.C:
- case <-t.done:
- return
- }
- t.controlBuf.put(&goAway{code: g.code, debugData: g.debugData})
- }()
- return false, nil
-}
-
-func (t *http2Server) socketMetrics() *channelz.EphemeralSocketMetrics {
- return &channelz.EphemeralSocketMetrics{
- LocalFlowControlWindow: int64(t.fc.getSize()),
- RemoteFlowControlWindow: t.getOutFlowWindow(),
- }
-}
-
-func (t *http2Server) incrMsgSent() {
- if channelz.IsOn() {
- t.channelz.SocketMetrics.MessagesSent.Add(1)
- t.channelz.SocketMetrics.LastMessageSentTimestamp.Add(1)
- }
-}
-
-func (t *http2Server) incrMsgRecv() {
- if channelz.IsOn() {
- t.channelz.SocketMetrics.MessagesReceived.Add(1)
- t.channelz.SocketMetrics.LastMessageReceivedTimestamp.Add(1)
- }
-}
-
-func (t *http2Server) getOutFlowWindow() int64 {
- resp := make(chan uint32, 1)
- timer := time.NewTimer(time.Second)
- defer timer.Stop()
- t.controlBuf.put(&outFlowControlSizeRequest{resp})
- select {
- case sz := <-resp:
- return int64(sz)
- case <-t.done:
- return -1
- case <-timer.C:
- return -2
- }
-}
-
-// Peer returns the peer of the transport.
-func (t *http2Server) Peer() *peer.Peer {
- return &peer.Peer{
- Addr: t.peer.Addr,
- LocalAddr: t.peer.LocalAddr,
- AuthInfo: t.peer.AuthInfo, // Can be nil
- }
-}
-
-func getJitter(v time.Duration) time.Duration {
- if v == infinity {
- return 0
- }
- // Generate a jitter between +/- 10% of the value.
- r := int64(v / 10)
- j := rand.Int64N(2*r) - r
- return time.Duration(j)
-}
-
-type connectionKey struct{}
-
-// GetConnection gets the connection from the context.
-func GetConnection(ctx context.Context) net.Conn {
- conn, _ := ctx.Value(connectionKey{}).(net.Conn)
- return conn
-}
-
-// SetConnection adds the connection to the context to be able to get
-// information about the destination ip and port for an incoming RPC. This also
-// allows any unary or streaming interceptors to see the connection.
-func SetConnection(ctx context.Context, conn net.Conn) context.Context {
- return context.WithValue(ctx, connectionKey{}, conn)
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go
deleted file mode 100644
index 3613d7b64..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/http_util.go
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "bufio"
- "encoding/base64"
- "errors"
- "fmt"
- "io"
- "math"
- "net"
- "net/http"
- "net/url"
- "strconv"
- "strings"
- "sync"
- "time"
- "unicode/utf8"
-
- "golang.org/x/net/http2"
- "golang.org/x/net/http2/hpack"
- "google.golang.org/grpc/codes"
-)
-
-const (
- // http2MaxFrameLen specifies the max length of a HTTP2 frame.
- http2MaxFrameLen = 16384 // 16KB frame
- // https://httpwg.org/specs/rfc7540.html#SettingValues
- http2InitHeaderTableSize = 4096
-)
-
-var (
- clientPreface = []byte(http2.ClientPreface)
- http2ErrConvTab = map[http2.ErrCode]codes.Code{
- http2.ErrCodeNo: codes.Internal,
- http2.ErrCodeProtocol: codes.Internal,
- http2.ErrCodeInternal: codes.Internal,
- http2.ErrCodeFlowControl: codes.ResourceExhausted,
- http2.ErrCodeSettingsTimeout: codes.Internal,
- http2.ErrCodeStreamClosed: codes.Internal,
- http2.ErrCodeFrameSize: codes.Internal,
- http2.ErrCodeRefusedStream: codes.Unavailable,
- http2.ErrCodeCancel: codes.Canceled,
- http2.ErrCodeCompression: codes.Internal,
- http2.ErrCodeConnect: codes.Internal,
- http2.ErrCodeEnhanceYourCalm: codes.ResourceExhausted,
- http2.ErrCodeInadequateSecurity: codes.PermissionDenied,
- http2.ErrCodeHTTP11Required: codes.Internal,
- }
- // HTTPStatusConvTab is the HTTP status code to gRPC error code conversion table.
- HTTPStatusConvTab = map[int]codes.Code{
- // 400 Bad Request - INTERNAL.
- http.StatusBadRequest: codes.Internal,
- // 401 Unauthorized - UNAUTHENTICATED.
- http.StatusUnauthorized: codes.Unauthenticated,
- // 403 Forbidden - PERMISSION_DENIED.
- http.StatusForbidden: codes.PermissionDenied,
- // 404 Not Found - UNIMPLEMENTED.
- http.StatusNotFound: codes.Unimplemented,
- // 429 Too Many Requests - UNAVAILABLE.
- http.StatusTooManyRequests: codes.Unavailable,
- // 502 Bad Gateway - UNAVAILABLE.
- http.StatusBadGateway: codes.Unavailable,
- // 503 Service Unavailable - UNAVAILABLE.
- http.StatusServiceUnavailable: codes.Unavailable,
- // 504 Gateway timeout - UNAVAILABLE.
- http.StatusGatewayTimeout: codes.Unavailable,
- }
-)
-
-var grpcStatusDetailsBinHeader = "grpc-status-details-bin"
-
-// isReservedHeader checks whether hdr belongs to HTTP2 headers
-// reserved by gRPC protocol. Any other headers are classified as the
-// user-specified metadata.
-func isReservedHeader(hdr string) bool {
- if hdr != "" && hdr[0] == ':' {
- return true
- }
- switch hdr {
- case "content-type",
- "user-agent",
- "grpc-message-type",
- "grpc-encoding",
- "grpc-message",
- "grpc-status",
- "grpc-timeout",
- // Intentionally exclude grpc-previous-rpc-attempts and
- // grpc-retry-pushback-ms, which are "reserved", but their API
- // intentionally works via metadata.
- "te":
- return true
- default:
- return false
- }
-}
-
-// isWhitelistedHeader checks whether hdr should be propagated into metadata
-// visible to users, even though it is classified as "reserved", above.
-func isWhitelistedHeader(hdr string) bool {
- switch hdr {
- case ":authority", "user-agent":
- return true
- default:
- return false
- }
-}
-
-const binHdrSuffix = "-bin"
-
-func encodeBinHeader(v []byte) string {
- return base64.RawStdEncoding.EncodeToString(v)
-}
-
-func decodeBinHeader(v string) ([]byte, error) {
- if len(v)%4 == 0 {
- // Input was padded, or padding was not necessary.
- return base64.StdEncoding.DecodeString(v)
- }
- return base64.RawStdEncoding.DecodeString(v)
-}
-
-func encodeMetadataHeader(k, v string) string {
- if strings.HasSuffix(k, binHdrSuffix) {
- return encodeBinHeader(([]byte)(v))
- }
- return v
-}
-
-func decodeMetadataHeader(k, v string) (string, error) {
- if strings.HasSuffix(k, binHdrSuffix) {
- b, err := decodeBinHeader(v)
- return string(b), err
- }
- return v, nil
-}
-
-type timeoutUnit uint8
-
-const (
- hour timeoutUnit = 'H'
- minute timeoutUnit = 'M'
- second timeoutUnit = 'S'
- millisecond timeoutUnit = 'm'
- microsecond timeoutUnit = 'u'
- nanosecond timeoutUnit = 'n'
-)
-
-func timeoutUnitToDuration(u timeoutUnit) (d time.Duration, ok bool) {
- switch u {
- case hour:
- return time.Hour, true
- case minute:
- return time.Minute, true
- case second:
- return time.Second, true
- case millisecond:
- return time.Millisecond, true
- case microsecond:
- return time.Microsecond, true
- case nanosecond:
- return time.Nanosecond, true
- default:
- }
- return
-}
-
-func decodeTimeout(s string) (time.Duration, error) {
- size := len(s)
- if size < 2 {
- return 0, fmt.Errorf("transport: timeout string is too short: %q", s)
- }
- if size > 9 {
- // Spec allows for 8 digits plus the unit.
- return 0, fmt.Errorf("transport: timeout string is too long: %q", s)
- }
- unit := timeoutUnit(s[size-1])
- d, ok := timeoutUnitToDuration(unit)
- if !ok {
- return 0, fmt.Errorf("transport: timeout unit is not recognized: %q", s)
- }
- t, err := strconv.ParseInt(s[:size-1], 10, 64)
- if err != nil {
- return 0, err
- }
- const maxHours = math.MaxInt64 / int64(time.Hour)
- if d == time.Hour && t > maxHours {
- // This timeout would overflow math.MaxInt64; clamp it.
- return time.Duration(math.MaxInt64), nil
- }
- return d * time.Duration(t), nil
-}
-
-const (
- spaceByte = ' '
- tildeByte = '~'
- percentByte = '%'
-)
-
-// encodeGrpcMessage is used to encode status code in header field
-// "grpc-message". It does percent encoding and also replaces invalid utf-8
-// characters with Unicode replacement character.
-//
-// It checks to see if each individual byte in msg is an allowable byte, and
-// then either percent encoding or passing it through. When percent encoding,
-// the byte is converted into hexadecimal notation with a '%' prepended.
-func encodeGrpcMessage(msg string) string {
- if msg == "" {
- return ""
- }
- lenMsg := len(msg)
- for i := 0; i < lenMsg; i++ {
- c := msg[i]
- if !(c >= spaceByte && c <= tildeByte && c != percentByte) {
- return encodeGrpcMessageUnchecked(msg)
- }
- }
- return msg
-}
-
-func encodeGrpcMessageUnchecked(msg string) string {
- var sb strings.Builder
- for len(msg) > 0 {
- r, size := utf8.DecodeRuneInString(msg)
- for _, b := range []byte(string(r)) {
- if size > 1 {
- // If size > 1, r is not ascii. Always do percent encoding.
- fmt.Fprintf(&sb, "%%%02X", b)
- continue
- }
-
- // The for loop is necessary even if size == 1. r could be
- // utf8.RuneError.
- //
- // fmt.Sprintf("%%%02X", utf8.RuneError) gives "%FFFD".
- if b >= spaceByte && b <= tildeByte && b != percentByte {
- sb.WriteByte(b)
- } else {
- fmt.Fprintf(&sb, "%%%02X", b)
- }
- }
- msg = msg[size:]
- }
- return sb.String()
-}
-
-// decodeGrpcMessage decodes the msg encoded by encodeGrpcMessage.
-func decodeGrpcMessage(msg string) string {
- if msg == "" {
- return ""
- }
- lenMsg := len(msg)
- for i := 0; i < lenMsg; i++ {
- if msg[i] == percentByte && i+2 < lenMsg {
- return decodeGrpcMessageUnchecked(msg)
- }
- }
- return msg
-}
-
-func decodeGrpcMessageUnchecked(msg string) string {
- var sb strings.Builder
- lenMsg := len(msg)
- for i := 0; i < lenMsg; i++ {
- c := msg[i]
- if c == percentByte && i+2 < lenMsg {
- parsed, err := strconv.ParseUint(msg[i+1:i+3], 16, 8)
- if err != nil {
- sb.WriteByte(c)
- } else {
- sb.WriteByte(byte(parsed))
- i += 2
- }
- } else {
- sb.WriteByte(c)
- }
- }
- return sb.String()
-}
-
-type bufWriter struct {
- pool *sync.Pool
- buf []byte
- offset int
- batchSize int
- conn net.Conn
- err error
-}
-
-func newBufWriter(conn net.Conn, batchSize int, pool *sync.Pool) *bufWriter {
- w := &bufWriter{
- batchSize: batchSize,
- conn: conn,
- pool: pool,
- }
- // this indicates that we should use non shared buf
- if pool == nil {
- w.buf = make([]byte, batchSize)
- }
- return w
-}
-
-func (w *bufWriter) Write(b []byte) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
- if w.batchSize == 0 { // Buffer has been disabled.
- n, err := w.conn.Write(b)
- return n, toIOError(err)
- }
- if w.buf == nil {
- b := w.pool.Get().(*[]byte)
- w.buf = *b
- }
- written := 0
- for len(b) > 0 {
- copied := copy(w.buf[w.offset:], b)
- b = b[copied:]
- written += copied
- w.offset += copied
- if w.offset < w.batchSize {
- continue
- }
- if err := w.flushKeepBuffer(); err != nil {
- return written, err
- }
- }
- return written, nil
-}
-
-func (w *bufWriter) Flush() error {
- err := w.flushKeepBuffer()
- // Only release the buffer if we are in a "shared" mode
- if w.buf != nil && w.pool != nil {
- b := w.buf
- w.pool.Put(&b)
- w.buf = nil
- }
- return err
-}
-
-func (w *bufWriter) flushKeepBuffer() error {
- if w.err != nil {
- return w.err
- }
- if w.offset == 0 {
- return nil
- }
- _, w.err = w.conn.Write(w.buf[:w.offset])
- w.err = toIOError(w.err)
- w.offset = 0
- return w.err
-}
-
-type ioError struct {
- error
-}
-
-func (i ioError) Unwrap() error {
- return i.error
-}
-
-func isIOError(err error) bool {
- return errors.As(err, &ioError{})
-}
-
-func toIOError(err error) error {
- if err == nil {
- return nil
- }
- return ioError{error: err}
-}
-
-type framer struct {
- writer *bufWriter
- fr *http2.Framer
-}
-
-var writeBufferPoolMap = make(map[int]*sync.Pool)
-var writeBufferMutex sync.Mutex
-
-func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32) *framer {
- if writeBufferSize < 0 {
- writeBufferSize = 0
- }
- var r io.Reader = conn
- if readBufferSize > 0 {
- r = bufio.NewReaderSize(r, readBufferSize)
- }
- var pool *sync.Pool
- if sharedWriteBuffer {
- pool = getWriteBufferPool(writeBufferSize)
- }
- w := newBufWriter(conn, writeBufferSize, pool)
- f := &framer{
- writer: w,
- fr: http2.NewFramer(w, r),
- }
- f.fr.SetMaxReadFrameSize(http2MaxFrameLen)
- // Opt-in to Frame reuse API on framer to reduce garbage.
- // Frames aren't safe to read from after a subsequent call to ReadFrame.
- f.fr.SetReuseFrames()
- f.fr.MaxHeaderListSize = maxHeaderListSize
- f.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil)
- return f
-}
-
-func getWriteBufferPool(size int) *sync.Pool {
- writeBufferMutex.Lock()
- defer writeBufferMutex.Unlock()
- pool, ok := writeBufferPoolMap[size]
- if ok {
- return pool
- }
- pool = &sync.Pool{
- New: func() any {
- b := make([]byte, size)
- return &b
- },
- }
- writeBufferPoolMap[size] = pool
- return pool
-}
-
-// parseDialTarget returns the network and address to pass to dialer.
-func parseDialTarget(target string) (string, string) {
- net := "tcp"
- m1 := strings.Index(target, ":")
- m2 := strings.Index(target, ":/")
- // handle unix:addr which will fail with url.Parse
- if m1 >= 0 && m2 < 0 {
- if n := target[0:m1]; n == "unix" {
- return n, target[m1+1:]
- }
- }
- if m2 >= 0 {
- t, err := url.Parse(target)
- if err != nil {
- return net, target
- }
- scheme := t.Scheme
- addr := t.Path
- if scheme == "unix" {
- if addr == "" {
- addr = t.Host
- }
- return scheme, addr
- }
- }
- return net, target
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/logging.go b/vendor/google.golang.org/grpc/internal/transport/logging.go
deleted file mode 100644
index 42ed2b07a..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/logging.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "fmt"
-
- "google.golang.org/grpc/grpclog"
- internalgrpclog "google.golang.org/grpc/internal/grpclog"
-)
-
-var logger = grpclog.Component("transport")
-
-func prefixLoggerForServerTransport(p *http2Server) *internalgrpclog.PrefixLogger {
- return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-transport %p] ", p))
-}
-
-func prefixLoggerForServerHandlerTransport(p *serverHandlerTransport) *internalgrpclog.PrefixLogger {
- return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-handler-transport %p] ", p))
-}
-
-func prefixLoggerForClientTransport(p *http2Client) *internalgrpclog.PrefixLogger {
- return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[client-transport %p] ", p))
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go b/vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go
deleted file mode 100644
index c11b52782..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/networktype/networktype.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package networktype declares the network type to be used in the default
-// dialer. Attribute of a resolver.Address.
-package networktype
-
-import (
- "google.golang.org/grpc/resolver"
-)
-
-// keyType is the key to use for storing State in Attributes.
-type keyType string
-
-const key = keyType("grpc.internal.transport.networktype")
-
-// Set returns a copy of the provided address with attributes containing networkType.
-func Set(address resolver.Address, networkType string) resolver.Address {
- address.Attributes = address.Attributes.WithValue(key, networkType)
- return address
-}
-
-// Get returns the network type in the resolver.Address and true, or "", false
-// if not present.
-func Get(address resolver.Address) (string, bool) {
- v := address.Attributes.Value(key)
- if v == nil {
- return "", false
- }
- return v.(string), true
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/proxy.go b/vendor/google.golang.org/grpc/internal/transport/proxy.go
deleted file mode 100644
index 54b224436..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/proxy.go
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "bufio"
- "context"
- "encoding/base64"
- "fmt"
- "io"
- "net"
- "net/http"
- "net/http/httputil"
- "net/url"
-
- "google.golang.org/grpc/internal"
-)
-
-const proxyAuthHeaderKey = "Proxy-Authorization"
-
-var (
- // The following variable will be overwritten in the tests.
- httpProxyFromEnvironment = http.ProxyFromEnvironment
-)
-
-func mapAddress(address string) (*url.URL, error) {
- req := &http.Request{
- URL: &url.URL{
- Scheme: "https",
- Host: address,
- },
- }
- url, err := httpProxyFromEnvironment(req)
- if err != nil {
- return nil, err
- }
- return url, nil
-}
-
-// To read a response from a net.Conn, http.ReadResponse() takes a bufio.Reader.
-// It's possible that this reader reads more than what's need for the response and stores
-// those bytes in the buffer.
-// bufConn wraps the original net.Conn and the bufio.Reader to make sure we don't lose the
-// bytes in the buffer.
-type bufConn struct {
- net.Conn
- r io.Reader
-}
-
-func (c *bufConn) Read(b []byte) (int, error) {
- return c.r.Read(b)
-}
-
-func basicAuth(username, password string) string {
- auth := username + ":" + password
- return base64.StdEncoding.EncodeToString([]byte(auth))
-}
-
-func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr string, proxyURL *url.URL, grpcUA string) (_ net.Conn, err error) {
- defer func() {
- if err != nil {
- conn.Close()
- }
- }()
-
- req := &http.Request{
- Method: http.MethodConnect,
- URL: &url.URL{Host: backendAddr},
- Header: map[string][]string{"User-Agent": {grpcUA}},
- }
- if t := proxyURL.User; t != nil {
- u := t.Username()
- p, _ := t.Password()
- req.Header.Add(proxyAuthHeaderKey, "Basic "+basicAuth(u, p))
- }
-
- if err := sendHTTPRequest(ctx, req, conn); err != nil {
- return nil, fmt.Errorf("failed to write the HTTP request: %v", err)
- }
-
- r := bufio.NewReader(conn)
- resp, err := http.ReadResponse(r, req)
- if err != nil {
- return nil, fmt.Errorf("reading server HTTP response: %v", err)
- }
- defer resp.Body.Close()
- if resp.StatusCode != http.StatusOK {
- dump, err := httputil.DumpResponse(resp, true)
- if err != nil {
- return nil, fmt.Errorf("failed to do connect handshake, status code: %s", resp.Status)
- }
- return nil, fmt.Errorf("failed to do connect handshake, response: %q", dump)
- }
- // The buffer could contain extra bytes from the target server, so we can't
- // discard it. However, in many cases where the server waits for the client
- // to send the first message (e.g. when TLS is being used), the buffer will
- // be empty, so we can avoid the overhead of reading through this buffer.
- if r.Buffered() != 0 {
- return &bufConn{Conn: conn, r: r}, nil
- }
- return conn, nil
-}
-
-// proxyDial dials, connecting to a proxy first if necessary. Checks if a proxy
-// is necessary, dials, does the HTTP CONNECT handshake, and returns the
-// connection.
-func proxyDial(ctx context.Context, addr string, grpcUA string) (net.Conn, error) {
- newAddr := addr
- proxyURL, err := mapAddress(addr)
- if err != nil {
- return nil, err
- }
- if proxyURL != nil {
- newAddr = proxyURL.Host
- }
-
- conn, err := internal.NetDialerWithTCPKeepalive().DialContext(ctx, "tcp", newAddr)
- if err != nil {
- return nil, err
- }
- if proxyURL == nil {
- // proxy is disabled if proxyURL is nil.
- return conn, err
- }
- return doHTTPConnectHandshake(ctx, conn, addr, proxyURL, grpcUA)
-}
-
-func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error {
- req = req.WithContext(ctx)
- if err := req.Write(conn); err != nil {
- return fmt.Errorf("failed to write the HTTP request: %v", err)
- }
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/server_stream.go b/vendor/google.golang.org/grpc/internal/transport/server_stream.go
deleted file mode 100644
index a22a90151..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/server_stream.go
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package transport
-
-import (
- "context"
- "errors"
- "strings"
- "sync"
- "sync/atomic"
-
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/status"
-)
-
-// ServerStream implements streaming functionality for a gRPC server.
-type ServerStream struct {
- *Stream // Embed for common stream functionality.
-
- st internalServerTransport
- ctxDone <-chan struct{} // closed at the end of stream. Cache of ctx.Done() (for performance)
- cancel context.CancelFunc // invoked at the end of stream to cancel ctx.
-
- // Holds compressor names passed in grpc-accept-encoding metadata from the
- // client.
- clientAdvertisedCompressors string
- headerWireLength int
-
- // hdrMu protects outgoing header and trailer metadata.
- hdrMu sync.Mutex
- header metadata.MD // the outgoing header metadata. Updated by WriteHeader.
- headerSent atomic.Bool // atomically set when the headers are sent out.
-}
-
-// Read reads an n byte message from the input stream.
-func (s *ServerStream) Read(n int) (mem.BufferSlice, error) {
- b, err := s.Stream.read(n)
- if err == nil {
- s.st.incrMsgRecv()
- }
- return b, err
-}
-
-// SendHeader sends the header metadata for the given stream.
-func (s *ServerStream) SendHeader(md metadata.MD) error {
- return s.st.writeHeader(s, md)
-}
-
-// Write writes the hdr and data bytes to the output stream.
-func (s *ServerStream) Write(hdr []byte, data mem.BufferSlice, opts *WriteOptions) error {
- return s.st.write(s, hdr, data, opts)
-}
-
-// WriteStatus sends the status of a stream to the client. WriteStatus is
-// the final call made on a stream and always occurs.
-func (s *ServerStream) WriteStatus(st *status.Status) error {
- return s.st.writeStatus(s, st)
-}
-
-// isHeaderSent indicates whether headers have been sent.
-func (s *ServerStream) isHeaderSent() bool {
- return s.headerSent.Load()
-}
-
-// updateHeaderSent updates headerSent and returns true
-// if it was already set.
-func (s *ServerStream) updateHeaderSent() bool {
- return s.headerSent.Swap(true)
-}
-
-// RecvCompress returns the compression algorithm applied to the inbound
-// message. It is empty string if there is no compression applied.
-func (s *ServerStream) RecvCompress() string {
- return s.recvCompress
-}
-
-// SendCompress returns the send compressor name.
-func (s *ServerStream) SendCompress() string {
- return s.sendCompress
-}
-
-// ContentSubtype returns the content-subtype for a request. For example, a
-// content-subtype of "proto" will result in a content-type of
-// "application/grpc+proto". This will always be lowercase. See
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details.
-func (s *ServerStream) ContentSubtype() string {
- return s.contentSubtype
-}
-
-// SetSendCompress sets the compression algorithm to the stream.
-func (s *ServerStream) SetSendCompress(name string) error {
- if s.isHeaderSent() || s.getState() == streamDone {
- return errors.New("transport: set send compressor called after headers sent or stream done")
- }
-
- s.sendCompress = name
- return nil
-}
-
-// SetContext sets the context of the stream. This will be deleted once the
-// stats handler callouts all move to gRPC layer.
-func (s *ServerStream) SetContext(ctx context.Context) {
- s.ctx = ctx
-}
-
-// ClientAdvertisedCompressors returns the compressor names advertised by the
-// client via grpc-accept-encoding header.
-func (s *ServerStream) ClientAdvertisedCompressors() []string {
- values := strings.Split(s.clientAdvertisedCompressors, ",")
- for i, v := range values {
- values[i] = strings.TrimSpace(v)
- }
- return values
-}
-
-// Header returns the header metadata of the stream. It returns the out header
-// after t.WriteHeader is called. It does not block and must not be called
-// until after WriteHeader.
-func (s *ServerStream) Header() (metadata.MD, error) {
- // Return the header in stream. It will be the out
- // header after t.WriteHeader is called.
- return s.header.Copy(), nil
-}
-
-// HeaderWireLength returns the size of the headers of the stream as received
-// from the wire.
-func (s *ServerStream) HeaderWireLength() int {
- return s.headerWireLength
-}
-
-// SetHeader sets the header metadata. This can be called multiple times.
-// This should not be called in parallel to other data writes.
-func (s *ServerStream) SetHeader(md metadata.MD) error {
- if md.Len() == 0 {
- return nil
- }
- if s.isHeaderSent() || s.getState() == streamDone {
- return ErrIllegalHeaderWrite
- }
- s.hdrMu.Lock()
- s.header = metadata.Join(s.header, md)
- s.hdrMu.Unlock()
- return nil
-}
-
-// SetTrailer sets the trailer metadata which will be sent with the RPC status
-// by the server. This can be called multiple times.
-// This should not be called parallel to other data writes.
-func (s *ServerStream) SetTrailer(md metadata.MD) error {
- if md.Len() == 0 {
- return nil
- }
- if s.getState() == streamDone {
- return ErrIllegalHeaderWrite
- }
- s.hdrMu.Lock()
- s.trailer = metadata.Join(s.trailer, md)
- s.hdrMu.Unlock()
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go
deleted file mode 100644
index 2859b8775..000000000
--- a/vendor/google.golang.org/grpc/internal/transport/transport.go
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package transport defines and implements message oriented communication
-// channel to complete various transactions (e.g., an RPC). It is meant for
-// grpc-internal usage and is not intended to be imported directly by users.
-package transport
-
-import (
- "context"
- "errors"
- "fmt"
- "io"
- "net"
- "sync"
- "sync/atomic"
- "time"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
- "google.golang.org/grpc/tap"
-)
-
-const logLevel = 2
-
-// recvMsg represents the received msg from the transport. All transport
-// protocol specific info has been removed.
-type recvMsg struct {
- buffer mem.Buffer
- // nil: received some data
- // io.EOF: stream is completed. data is nil.
- // other non-nil error: transport failure. data is nil.
- err error
-}
-
-// recvBuffer is an unbounded channel of recvMsg structs.
-//
-// Note: recvBuffer differs from buffer.Unbounded only in the fact that it
-// holds a channel of recvMsg structs instead of objects implementing "item"
-// interface. recvBuffer is written to much more often and using strict recvMsg
-// structs helps avoid allocation in "recvBuffer.put"
-type recvBuffer struct {
- c chan recvMsg
- mu sync.Mutex
- backlog []recvMsg
- err error
-}
-
-func newRecvBuffer() *recvBuffer {
- b := &recvBuffer{
- c: make(chan recvMsg, 1),
- }
- return b
-}
-
-func (b *recvBuffer) put(r recvMsg) {
- b.mu.Lock()
- if b.err != nil {
- // drop the buffer on the floor. Since b.err is not nil, any subsequent reads
- // will always return an error, making this buffer inaccessible.
- r.buffer.Free()
- b.mu.Unlock()
- // An error had occurred earlier, don't accept more
- // data or errors.
- return
- }
- b.err = r.err
- if len(b.backlog) == 0 {
- select {
- case b.c <- r:
- b.mu.Unlock()
- return
- default:
- }
- }
- b.backlog = append(b.backlog, r)
- b.mu.Unlock()
-}
-
-func (b *recvBuffer) load() {
- b.mu.Lock()
- if len(b.backlog) > 0 {
- select {
- case b.c <- b.backlog[0]:
- b.backlog[0] = recvMsg{}
- b.backlog = b.backlog[1:]
- default:
- }
- }
- b.mu.Unlock()
-}
-
-// get returns the channel that receives a recvMsg in the buffer.
-//
-// Upon receipt of a recvMsg, the caller should call load to send another
-// recvMsg onto the channel if there is any.
-func (b *recvBuffer) get() <-chan recvMsg {
- return b.c
-}
-
-// recvBufferReader implements io.Reader interface to read the data from
-// recvBuffer.
-type recvBufferReader struct {
- closeStream func(error) // Closes the client transport stream with the given error and nil trailer metadata.
- ctx context.Context
- ctxDone <-chan struct{} // cache of ctx.Done() (for performance).
- recv *recvBuffer
- last mem.Buffer // Stores the remaining data in the previous calls.
- err error
-}
-
-func (r *recvBufferReader) ReadMessageHeader(header []byte) (n int, err error) {
- if r.err != nil {
- return 0, r.err
- }
- if r.last != nil {
- n, r.last = mem.ReadUnsafe(header, r.last)
- return n, nil
- }
- if r.closeStream != nil {
- n, r.err = r.readMessageHeaderClient(header)
- } else {
- n, r.err = r.readMessageHeader(header)
- }
- return n, r.err
-}
-
-// Read reads the next n bytes from last. If last is drained, it tries to read
-// additional data from recv. It blocks if there no additional data available in
-// recv. If Read returns any non-nil error, it will continue to return that
-// error.
-func (r *recvBufferReader) Read(n int) (buf mem.Buffer, err error) {
- if r.err != nil {
- return nil, r.err
- }
- if r.last != nil {
- buf = r.last
- if r.last.Len() > n {
- buf, r.last = mem.SplitUnsafe(buf, n)
- } else {
- r.last = nil
- }
- return buf, nil
- }
- if r.closeStream != nil {
- buf, r.err = r.readClient(n)
- } else {
- buf, r.err = r.read(n)
- }
- return buf, r.err
-}
-
-func (r *recvBufferReader) readMessageHeader(header []byte) (n int, err error) {
- select {
- case <-r.ctxDone:
- return 0, ContextErr(r.ctx.Err())
- case m := <-r.recv.get():
- return r.readMessageHeaderAdditional(m, header)
- }
-}
-
-func (r *recvBufferReader) read(n int) (buf mem.Buffer, err error) {
- select {
- case <-r.ctxDone:
- return nil, ContextErr(r.ctx.Err())
- case m := <-r.recv.get():
- return r.readAdditional(m, n)
- }
-}
-
-func (r *recvBufferReader) readMessageHeaderClient(header []byte) (n int, err error) {
- // If the context is canceled, then closes the stream with nil metadata.
- // closeStream writes its error parameter to r.recv as a recvMsg.
- // r.readAdditional acts on that message and returns the necessary error.
- select {
- case <-r.ctxDone:
- // Note that this adds the ctx error to the end of recv buffer, and
- // reads from the head. This will delay the error until recv buffer is
- // empty, thus will delay ctx cancellation in Recv().
- //
- // It's done this way to fix a race between ctx cancel and trailer. The
- // race was, stream.Recv() may return ctx error if ctxDone wins the
- // race, but stream.Trailer() may return a non-nil md because the stream
- // was not marked as done when trailer is received. This closeStream
- // call will mark stream as done, thus fix the race.
- //
- // TODO: delaying ctx error seems like a unnecessary side effect. What
- // we really want is to mark the stream as done, and return ctx error
- // faster.
- r.closeStream(ContextErr(r.ctx.Err()))
- m := <-r.recv.get()
- return r.readMessageHeaderAdditional(m, header)
- case m := <-r.recv.get():
- return r.readMessageHeaderAdditional(m, header)
- }
-}
-
-func (r *recvBufferReader) readClient(n int) (buf mem.Buffer, err error) {
- // If the context is canceled, then closes the stream with nil metadata.
- // closeStream writes its error parameter to r.recv as a recvMsg.
- // r.readAdditional acts on that message and returns the necessary error.
- select {
- case <-r.ctxDone:
- // Note that this adds the ctx error to the end of recv buffer, and
- // reads from the head. This will delay the error until recv buffer is
- // empty, thus will delay ctx cancellation in Recv().
- //
- // It's done this way to fix a race between ctx cancel and trailer. The
- // race was, stream.Recv() may return ctx error if ctxDone wins the
- // race, but stream.Trailer() may return a non-nil md because the stream
- // was not marked as done when trailer is received. This closeStream
- // call will mark stream as done, thus fix the race.
- //
- // TODO: delaying ctx error seems like a unnecessary side effect. What
- // we really want is to mark the stream as done, and return ctx error
- // faster.
- r.closeStream(ContextErr(r.ctx.Err()))
- m := <-r.recv.get()
- return r.readAdditional(m, n)
- case m := <-r.recv.get():
- return r.readAdditional(m, n)
- }
-}
-
-func (r *recvBufferReader) readMessageHeaderAdditional(m recvMsg, header []byte) (n int, err error) {
- r.recv.load()
- if m.err != nil {
- if m.buffer != nil {
- m.buffer.Free()
- }
- return 0, m.err
- }
-
- n, r.last = mem.ReadUnsafe(header, m.buffer)
-
- return n, nil
-}
-
-func (r *recvBufferReader) readAdditional(m recvMsg, n int) (b mem.Buffer, err error) {
- r.recv.load()
- if m.err != nil {
- if m.buffer != nil {
- m.buffer.Free()
- }
- return nil, m.err
- }
-
- if m.buffer.Len() > n {
- m.buffer, r.last = mem.SplitUnsafe(m.buffer, n)
- }
-
- return m.buffer, nil
-}
-
-type streamState uint32
-
-const (
- streamActive streamState = iota
- streamWriteDone // EndStream sent
- streamReadDone // EndStream received
- streamDone // the entire stream is finished.
-)
-
-// Stream represents an RPC in the transport layer.
-type Stream struct {
- id uint32
- ctx context.Context // the associated context of the stream
- method string // the associated RPC method of the stream
- recvCompress string
- sendCompress string
- buf *recvBuffer
- trReader *transportReader
- fc *inFlow
- wq *writeQuota
-
- // Callback to state application's intentions to read data. This
- // is used to adjust flow control, if needed.
- requestRead func(int)
-
- state streamState
-
- // contentSubtype is the content-subtype for requests.
- // this must be lowercase or the behavior is undefined.
- contentSubtype string
-
- trailer metadata.MD // the key-value map of trailer metadata.
-}
-
-func (s *Stream) swapState(st streamState) streamState {
- return streamState(atomic.SwapUint32((*uint32)(&s.state), uint32(st)))
-}
-
-func (s *Stream) compareAndSwapState(oldState, newState streamState) bool {
- return atomic.CompareAndSwapUint32((*uint32)(&s.state), uint32(oldState), uint32(newState))
-}
-
-func (s *Stream) getState() streamState {
- return streamState(atomic.LoadUint32((*uint32)(&s.state)))
-}
-
-// Trailer returns the cached trailer metadata. Note that if it is not called
-// after the entire stream is done, it could return an empty MD.
-// It can be safely read only after stream has ended that is either read
-// or write have returned io.EOF.
-func (s *Stream) Trailer() metadata.MD {
- return s.trailer.Copy()
-}
-
-// Context returns the context of the stream.
-func (s *Stream) Context() context.Context {
- return s.ctx
-}
-
-// Method returns the method for the stream.
-func (s *Stream) Method() string {
- return s.method
-}
-
-func (s *Stream) write(m recvMsg) {
- s.buf.put(m)
-}
-
-// ReadMessageHeader reads data into the provided header slice from the stream.
-// It first checks if there was an error during a previous read operation and
-// returns it if present. It then requests a read operation for the length of
-// the header. It continues to read from the stream until the entire header
-// slice is filled or an error occurs. If an `io.EOF` error is encountered with
-// partially read data, it is converted to `io.ErrUnexpectedEOF` to indicate an
-// unexpected end of the stream. The method returns any error encountered during
-// the read process or nil if the header was successfully read.
-func (s *Stream) ReadMessageHeader(header []byte) (err error) {
- // Don't request a read if there was an error earlier
- if er := s.trReader.er; er != nil {
- return er
- }
- s.requestRead(len(header))
- for len(header) != 0 {
- n, err := s.trReader.ReadMessageHeader(header)
- header = header[n:]
- if len(header) == 0 {
- err = nil
- }
- if err != nil {
- if n > 0 && err == io.EOF {
- err = io.ErrUnexpectedEOF
- }
- return err
- }
- }
- return nil
-}
-
-// Read reads n bytes from the wire for this stream.
-func (s *Stream) read(n int) (data mem.BufferSlice, err error) {
- // Don't request a read if there was an error earlier
- if er := s.trReader.er; er != nil {
- return nil, er
- }
- s.requestRead(n)
- for n != 0 {
- buf, err := s.trReader.Read(n)
- var bufLen int
- if buf != nil {
- bufLen = buf.Len()
- }
- n -= bufLen
- if n == 0 {
- err = nil
- }
- if err != nil {
- if bufLen > 0 && err == io.EOF {
- err = io.ErrUnexpectedEOF
- }
- data.Free()
- return nil, err
- }
- data = append(data, buf)
- }
- return data, nil
-}
-
-// transportReader reads all the data available for this Stream from the transport and
-// passes them into the decoder, which converts them into a gRPC message stream.
-// The error is io.EOF when the stream is done or another non-nil error if
-// the stream broke.
-type transportReader struct {
- reader *recvBufferReader
- // The handler to control the window update procedure for both this
- // particular stream and the associated transport.
- windowHandler func(int)
- er error
-}
-
-func (t *transportReader) ReadMessageHeader(header []byte) (int, error) {
- n, err := t.reader.ReadMessageHeader(header)
- if err != nil {
- t.er = err
- return 0, err
- }
- t.windowHandler(n)
- return n, nil
-}
-
-func (t *transportReader) Read(n int) (mem.Buffer, error) {
- buf, err := t.reader.Read(n)
- if err != nil {
- t.er = err
- return buf, err
- }
- t.windowHandler(buf.Len())
- return buf, nil
-}
-
-// GoString is implemented by Stream so context.String() won't
-// race when printing %#v.
-func (s *Stream) GoString() string {
- return fmt.Sprintf("<stream: %p, %v>", s, s.method)
-}
-
-// state of transport
-type transportState int
-
-const (
- reachable transportState = iota
- closing
- draining
-)
-
-// ServerConfig consists of all the configurations to establish a server transport.
-type ServerConfig struct {
- MaxStreams uint32
- ConnectionTimeout time.Duration
- Credentials credentials.TransportCredentials
- InTapHandle tap.ServerInHandle
- StatsHandlers []stats.Handler
- KeepaliveParams keepalive.ServerParameters
- KeepalivePolicy keepalive.EnforcementPolicy
- InitialWindowSize int32
- InitialConnWindowSize int32
- WriteBufferSize int
- ReadBufferSize int
- SharedWriteBuffer bool
- ChannelzParent *channelz.Server
- MaxHeaderListSize *uint32
- HeaderTableSize *uint32
- BufferPool mem.BufferPool
-}
-
-// ConnectOptions covers all relevant options for communicating with the server.
-type ConnectOptions struct {
- // UserAgent is the application user agent.
- UserAgent string
- // Dialer specifies how to dial a network address.
- Dialer func(context.Context, string) (net.Conn, error)
- // FailOnNonTempDialError specifies if gRPC fails on non-temporary dial errors.
- FailOnNonTempDialError bool
- // PerRPCCredentials stores the PerRPCCredentials required to issue RPCs.
- PerRPCCredentials []credentials.PerRPCCredentials
- // TransportCredentials stores the Authenticator required to setup a client
- // connection. Only one of TransportCredentials and CredsBundle is non-nil.
- TransportCredentials credentials.TransportCredentials
- // CredsBundle is the credentials bundle to be used. Only one of
- // TransportCredentials and CredsBundle is non-nil.
- CredsBundle credentials.Bundle
- // KeepaliveParams stores the keepalive parameters.
- KeepaliveParams keepalive.ClientParameters
- // StatsHandlers stores the handler for stats.
- StatsHandlers []stats.Handler
- // InitialWindowSize sets the initial window size for a stream.
- InitialWindowSize int32
- // InitialConnWindowSize sets the initial window size for a connection.
- InitialConnWindowSize int32
- // WriteBufferSize sets the size of write buffer which in turn determines how much data can be batched before it's written on the wire.
- WriteBufferSize int
- // ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall.
- ReadBufferSize int
- // SharedWriteBuffer indicates whether connections should reuse write buffer
- SharedWriteBuffer bool
- // ChannelzParent sets the addrConn id which initiated the creation of this client transport.
- ChannelzParent *channelz.SubChannel
- // MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received.
- MaxHeaderListSize *uint32
- // UseProxy specifies if a proxy should be used.
- UseProxy bool
- // The mem.BufferPool to use when reading/writing to the wire.
- BufferPool mem.BufferPool
-}
-
-// WriteOptions provides additional hints and information for message
-// transmission.
-type WriteOptions struct {
- // Last indicates whether this write is the last piece for
- // this stream.
- Last bool
-}
-
-// CallHdr carries the information of a particular RPC.
-type CallHdr struct {
- // Host specifies the peer's host.
- Host string
-
- // Method specifies the operation to perform.
- Method string
-
- // SendCompress specifies the compression algorithm applied on
- // outbound message.
- SendCompress string
-
- // Creds specifies credentials.PerRPCCredentials for a call.
- Creds credentials.PerRPCCredentials
-
- // ContentSubtype specifies the content-subtype for a request. For example, a
- // content-subtype of "proto" will result in a content-type of
- // "application/grpc+proto". The value of ContentSubtype must be all
- // lowercase, otherwise the behavior is undefined. See
- // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests
- // for more details.
- ContentSubtype string
-
- PreviousAttempts int // value of grpc-previous-rpc-attempts header to set
-
- DoneFunc func() // called when the stream is finished
-}
-
-// ClientTransport is the common interface for all gRPC client-side transport
-// implementations.
-type ClientTransport interface {
- // Close tears down this transport. Once it returns, the transport
- // should not be accessed any more. The caller must make sure this
- // is called only once.
- Close(err error)
-
- // GracefulClose starts to tear down the transport: the transport will stop
- // accepting new RPCs and NewStream will return error. Once all streams are
- // finished, the transport will close.
- //
- // It does not block.
- GracefulClose()
-
- // NewStream creates a Stream for an RPC.
- NewStream(ctx context.Context, callHdr *CallHdr) (*ClientStream, error)
-
- // Error returns a channel that is closed when some I/O error
- // happens. Typically the caller should have a goroutine to monitor
- // this in order to take action (e.g., close the current transport
- // and create a new one) in error case. It should not return nil
- // once the transport is initiated.
- Error() <-chan struct{}
-
- // GoAway returns a channel that is closed when ClientTransport
- // receives the draining signal from the server (e.g., GOAWAY frame in
- // HTTP/2).
- GoAway() <-chan struct{}
-
- // GetGoAwayReason returns the reason why GoAway frame was received, along
- // with a human readable string with debug info.
- GetGoAwayReason() (GoAwayReason, string)
-
- // RemoteAddr returns the remote network address.
- RemoteAddr() net.Addr
-}
-
-// ServerTransport is the common interface for all gRPC server-side transport
-// implementations.
-//
-// Methods may be called concurrently from multiple goroutines, but
-// Write methods for a given Stream will be called serially.
-type ServerTransport interface {
- // HandleStreams receives incoming streams using the given handler.
- HandleStreams(context.Context, func(*ServerStream))
-
- // Close tears down the transport. Once it is called, the transport
- // should not be accessed any more. All the pending streams and their
- // handlers will be terminated asynchronously.
- Close(err error)
-
- // Peer returns the peer of the server transport.
- Peer() *peer.Peer
-
- // Drain notifies the client this ServerTransport stops accepting new RPCs.
- Drain(debugData string)
-}
-
-type internalServerTransport interface {
- ServerTransport
- writeHeader(s *ServerStream, md metadata.MD) error
- write(s *ServerStream, hdr []byte, data mem.BufferSlice, opts *WriteOptions) error
- writeStatus(s *ServerStream, st *status.Status) error
- incrMsgRecv()
-}
-
-// connectionErrorf creates an ConnectionError with the specified error description.
-func connectionErrorf(temp bool, e error, format string, a ...any) ConnectionError {
- return ConnectionError{
- Desc: fmt.Sprintf(format, a...),
- temp: temp,
- err: e,
- }
-}
-
-// ConnectionError is an error that results in the termination of the
-// entire connection and the retry of all the active streams.
-type ConnectionError struct {
- Desc string
- temp bool
- err error
-}
-
-func (e ConnectionError) Error() string {
- return fmt.Sprintf("connection error: desc = %q", e.Desc)
-}
-
-// Temporary indicates if this connection error is temporary or fatal.
-func (e ConnectionError) Temporary() bool {
- return e.temp
-}
-
-// Origin returns the original error of this connection error.
-func (e ConnectionError) Origin() error {
- // Never return nil error here.
- // If the original error is nil, return itself.
- if e.err == nil {
- return e
- }
- return e.err
-}
-
-// Unwrap returns the original error of this connection error or nil when the
-// origin is nil.
-func (e ConnectionError) Unwrap() error {
- return e.err
-}
-
-var (
- // ErrConnClosing indicates that the transport is closing.
- ErrConnClosing = connectionErrorf(true, nil, "transport is closing")
- // errStreamDrain indicates that the stream is rejected because the
- // connection is draining. This could be caused by goaway or balancer
- // removing the address.
- errStreamDrain = status.Error(codes.Unavailable, "the connection is draining")
- // errStreamDone is returned from write at the client side to indicate application
- // layer of an error.
- errStreamDone = errors.New("the stream is done")
- // StatusGoAway indicates that the server sent a GOAWAY that included this
- // stream's ID in unprocessed RPCs.
- statusGoAway = status.New(codes.Unavailable, "the stream is rejected because server is draining the connection")
-)
-
-// GoAwayReason contains the reason for the GoAway frame received.
-type GoAwayReason uint8
-
-const (
- // GoAwayInvalid indicates that no GoAway frame is received.
- GoAwayInvalid GoAwayReason = 0
- // GoAwayNoReason is the default value when GoAway frame is received.
- GoAwayNoReason GoAwayReason = 1
- // GoAwayTooManyPings indicates that a GoAway frame with
- // ErrCodeEnhanceYourCalm was received and that the debug data said
- // "too_many_pings".
- GoAwayTooManyPings GoAwayReason = 2
-)
-
-// ContextErr converts the error from context package into a status error.
-func ContextErr(err error) error {
- switch err {
- case context.DeadlineExceeded:
- return status.Error(codes.DeadlineExceeded, err.Error())
- case context.Canceled:
- return status.Error(codes.Canceled, err.Error())
- }
- return status.Errorf(codes.Internal, "Unexpected error from context packet: %v", err)
-}
diff --git a/vendor/google.golang.org/grpc/keepalive/keepalive.go b/vendor/google.golang.org/grpc/keepalive/keepalive.go
deleted file mode 100644
index eb42b19fb..000000000
--- a/vendor/google.golang.org/grpc/keepalive/keepalive.go
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package keepalive defines configurable parameters for point-to-point
-// healthcheck.
-package keepalive
-
-import (
- "time"
-)
-
-// ClientParameters is used to set keepalive parameters on the client-side.
-// These configure how the client will actively probe to notice when a
-// connection is broken and send pings so intermediaries will be aware of the
-// liveness of the connection. Make sure these parameters are set in
-// coordination with the keepalive policy on the server, as incompatible
-// settings can result in closing of connection.
-type ClientParameters struct {
- // After a duration of this time if the client doesn't see any activity it
- // pings the server to see if the transport is still alive.
- // If set below 10s, a minimum value of 10s will be used instead.
- //
- // Note that gRPC servers have a default EnforcementPolicy.MinTime of 5
- // minutes (which means the client shouldn't ping more frequently than every
- // 5 minutes).
- //
- // Though not ideal, it's not a strong requirement for Time to be less than
- // EnforcementPolicy.MinTime. Time will automatically double if the server
- // disconnects due to its enforcement policy.
- //
- // For more details, see
- // https://github.com/grpc/proposal/blob/master/A8-client-side-keepalive.md
- Time time.Duration
- // After having pinged for keepalive check, the client waits for a duration
- // of Timeout and if no activity is seen even after that the connection is
- // closed.
- //
- // If keepalive is enabled, and this value is not explicitly set, the default
- // is 20 seconds.
- Timeout time.Duration
- // If true, client sends keepalive pings even with no active RPCs. If false,
- // when there are no active RPCs, Time and Timeout will be ignored and no
- // keepalive pings will be sent.
- PermitWithoutStream bool
-}
-
-// ServerParameters is used to set keepalive and max-age parameters on the
-// server-side.
-type ServerParameters struct {
- // MaxConnectionIdle is a duration for the amount of time after which an
- // idle connection would be closed by sending a GoAway. Idleness duration is
- // defined since the most recent time the number of outstanding RPCs became
- // zero or the connection establishment.
- MaxConnectionIdle time.Duration // The current default value is infinity.
- // MaxConnectionAge is a duration for the maximum amount of time a
- // connection may exist before it will be closed by sending a GoAway. A
- // random jitter of +/-10% will be added to MaxConnectionAge to spread out
- // connection storms.
- MaxConnectionAge time.Duration // The current default value is infinity.
- // MaxConnectionAgeGrace is an additive period after MaxConnectionAge after
- // which the connection will be forcibly closed.
- MaxConnectionAgeGrace time.Duration // The current default value is infinity.
- // After a duration of this time if the server doesn't see any activity it
- // pings the client to see if the transport is still alive.
- // If set below 1s, a minimum value of 1s will be used instead.
- Time time.Duration // The current default value is 2 hours.
- // After having pinged for keepalive check, the server waits for a duration
- // of Timeout and if no activity is seen even after that the connection is
- // closed.
- Timeout time.Duration // The current default value is 20 seconds.
-}
-
-// EnforcementPolicy is used to set keepalive enforcement policy on the
-// server-side. Server will close connection with a client that violates this
-// policy.
-type EnforcementPolicy struct {
- // MinTime is the minimum amount of time a client should wait before sending
- // a keepalive ping.
- MinTime time.Duration // The current default value is 5 minutes.
- // If true, server allows keepalive pings even when there are no active
- // streams(RPCs). If false, and client sends ping when there are no active
- // streams, server will send GOAWAY and close the connection.
- PermitWithoutStream bool // false by default.
-}
diff --git a/vendor/google.golang.org/grpc/mem/buffer_pool.go b/vendor/google.golang.org/grpc/mem/buffer_pool.go
deleted file mode 100644
index c37c58c02..000000000
--- a/vendor/google.golang.org/grpc/mem/buffer_pool.go
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package mem
-
-import (
- "sort"
- "sync"
-
- "google.golang.org/grpc/internal"
-)
-
-// BufferPool is a pool of buffers that can be shared and reused, resulting in
-// decreased memory allocation.
-type BufferPool interface {
- // Get returns a buffer with specified length from the pool.
- Get(length int) *[]byte
-
- // Put returns a buffer to the pool.
- Put(*[]byte)
-}
-
-var defaultBufferPoolSizes = []int{
- 256,
- 4 << 10, // 4KB (go page size)
- 16 << 10, // 16KB (max HTTP/2 frame size used by gRPC)
- 32 << 10, // 32KB (default buffer size for io.Copy)
- 1 << 20, // 1MB
-}
-
-var defaultBufferPool BufferPool
-
-func init() {
- defaultBufferPool = NewTieredBufferPool(defaultBufferPoolSizes...)
-
- internal.SetDefaultBufferPoolForTesting = func(pool BufferPool) {
- defaultBufferPool = pool
- }
-
- internal.SetBufferPoolingThresholdForTesting = func(threshold int) {
- bufferPoolingThreshold = threshold
- }
-}
-
-// DefaultBufferPool returns the current default buffer pool. It is a BufferPool
-// created with NewBufferPool that uses a set of default sizes optimized for
-// expected workflows.
-func DefaultBufferPool() BufferPool {
- return defaultBufferPool
-}
-
-// NewTieredBufferPool returns a BufferPool implementation that uses multiple
-// underlying pools of the given pool sizes.
-func NewTieredBufferPool(poolSizes ...int) BufferPool {
- sort.Ints(poolSizes)
- pools := make([]*sizedBufferPool, len(poolSizes))
- for i, s := range poolSizes {
- pools[i] = newSizedBufferPool(s)
- }
- return &tieredBufferPool{
- sizedPools: pools,
- }
-}
-
-// tieredBufferPool implements the BufferPool interface with multiple tiers of
-// buffer pools for different sizes of buffers.
-type tieredBufferPool struct {
- sizedPools []*sizedBufferPool
- fallbackPool simpleBufferPool
-}
-
-func (p *tieredBufferPool) Get(size int) *[]byte {
- return p.getPool(size).Get(size)
-}
-
-func (p *tieredBufferPool) Put(buf *[]byte) {
- p.getPool(cap(*buf)).Put(buf)
-}
-
-func (p *tieredBufferPool) getPool(size int) BufferPool {
- poolIdx := sort.Search(len(p.sizedPools), func(i int) bool {
- return p.sizedPools[i].defaultSize >= size
- })
-
- if poolIdx == len(p.sizedPools) {
- return &p.fallbackPool
- }
-
- return p.sizedPools[poolIdx]
-}
-
-// sizedBufferPool is a BufferPool implementation that is optimized for specific
-// buffer sizes. For example, HTTP/2 frames within gRPC have a default max size
-// of 16kb and a sizedBufferPool can be configured to only return buffers with a
-// capacity of 16kb. Note that however it does not support returning larger
-// buffers and in fact panics if such a buffer is requested. Because of this,
-// this BufferPool implementation is not meant to be used on its own and rather
-// is intended to be embedded in a tieredBufferPool such that Get is only
-// invoked when the required size is smaller than or equal to defaultSize.
-type sizedBufferPool struct {
- pool sync.Pool
- defaultSize int
-}
-
-func (p *sizedBufferPool) Get(size int) *[]byte {
- buf := p.pool.Get().(*[]byte)
- b := *buf
- clear(b[:cap(b)])
- *buf = b[:size]
- return buf
-}
-
-func (p *sizedBufferPool) Put(buf *[]byte) {
- if cap(*buf) < p.defaultSize {
- // Ignore buffers that are too small to fit in the pool. Otherwise, when
- // Get is called it will panic as it tries to index outside the bounds
- // of the buffer.
- return
- }
- p.pool.Put(buf)
-}
-
-func newSizedBufferPool(size int) *sizedBufferPool {
- return &sizedBufferPool{
- pool: sync.Pool{
- New: func() any {
- buf := make([]byte, size)
- return &buf
- },
- },
- defaultSize: size,
- }
-}
-
-var _ BufferPool = (*simpleBufferPool)(nil)
-
-// simpleBufferPool is an implementation of the BufferPool interface that
-// attempts to pool buffers with a sync.Pool. When Get is invoked, it tries to
-// acquire a buffer from the pool but if that buffer is too small, it returns it
-// to the pool and creates a new one.
-type simpleBufferPool struct {
- pool sync.Pool
-}
-
-func (p *simpleBufferPool) Get(size int) *[]byte {
- bs, ok := p.pool.Get().(*[]byte)
- if ok && cap(*bs) >= size {
- *bs = (*bs)[:size]
- return bs
- }
-
- // A buffer was pulled from the pool, but it is too small. Put it back in
- // the pool and create one large enough.
- if ok {
- p.pool.Put(bs)
- }
-
- b := make([]byte, size)
- return &b
-}
-
-func (p *simpleBufferPool) Put(buf *[]byte) {
- p.pool.Put(buf)
-}
-
-var _ BufferPool = NopBufferPool{}
-
-// NopBufferPool is a buffer pool that returns new buffers without pooling.
-type NopBufferPool struct{}
-
-// Get returns a buffer with specified length from the pool.
-func (NopBufferPool) Get(length int) *[]byte {
- b := make([]byte, length)
- return &b
-}
-
-// Put returns a buffer to the pool.
-func (NopBufferPool) Put(*[]byte) {
-}
diff --git a/vendor/google.golang.org/grpc/mem/buffer_slice.go b/vendor/google.golang.org/grpc/mem/buffer_slice.go
deleted file mode 100644
index 65002e2cc..000000000
--- a/vendor/google.golang.org/grpc/mem/buffer_slice.go
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package mem
-
-import (
- "io"
-)
-
-const (
- // 32 KiB is what io.Copy uses.
- readAllBufSize = 32 * 1024
-)
-
-// BufferSlice offers a means to represent data that spans one or more Buffer
-// instances. A BufferSlice is meant to be immutable after creation, and methods
-// like Ref create and return copies of the slice. This is why all methods have
-// value receivers rather than pointer receivers.
-//
-// Note that any of the methods that read the underlying buffers such as Ref,
-// Len or CopyTo etc., will panic if any underlying buffers have already been
-// freed. It is recommended to not directly interact with any of the underlying
-// buffers directly, rather such interactions should be mediated through the
-// various methods on this type.
-//
-// By convention, any APIs that return (mem.BufferSlice, error) should reduce
-// the burden on the caller by never returning a mem.BufferSlice that needs to
-// be freed if the error is non-nil, unless explicitly stated.
-type BufferSlice []Buffer
-
-// Len returns the sum of the length of all the Buffers in this slice.
-//
-// # Warning
-//
-// Invoking the built-in len on a BufferSlice will return the number of buffers
-// in the slice, and *not* the value returned by this function.
-func (s BufferSlice) Len() int {
- var length int
- for _, b := range s {
- length += b.Len()
- }
- return length
-}
-
-// Ref invokes Ref on each buffer in the slice.
-func (s BufferSlice) Ref() {
- for _, b := range s {
- b.Ref()
- }
-}
-
-// Free invokes Buffer.Free() on each Buffer in the slice.
-func (s BufferSlice) Free() {
- for _, b := range s {
- b.Free()
- }
-}
-
-// CopyTo copies each of the underlying Buffer's data into the given buffer,
-// returning the number of bytes copied. Has the same semantics as the copy
-// builtin in that it will copy as many bytes as it can, stopping when either dst
-// is full or s runs out of data, returning the minimum of s.Len() and len(dst).
-func (s BufferSlice) CopyTo(dst []byte) int {
- off := 0
- for _, b := range s {
- off += copy(dst[off:], b.ReadOnlyData())
- }
- return off
-}
-
-// Materialize concatenates all the underlying Buffer's data into a single
-// contiguous buffer using CopyTo.
-func (s BufferSlice) Materialize() []byte {
- l := s.Len()
- if l == 0 {
- return nil
- }
- out := make([]byte, l)
- s.CopyTo(out)
- return out
-}
-
-// MaterializeToBuffer functions like Materialize except that it writes the data
-// to a single Buffer pulled from the given BufferPool.
-//
-// As a special case, if the input BufferSlice only actually has one Buffer, this
-// function simply increases the refcount before returning said Buffer. Freeing this
-// buffer won't release it until the BufferSlice is itself released.
-func (s BufferSlice) MaterializeToBuffer(pool BufferPool) Buffer {
- if len(s) == 1 {
- s[0].Ref()
- return s[0]
- }
- sLen := s.Len()
- if sLen == 0 {
- return emptyBuffer{}
- }
- buf := pool.Get(sLen)
- s.CopyTo(*buf)
- return NewBuffer(buf, pool)
-}
-
-// Reader returns a new Reader for the input slice after taking references to
-// each underlying buffer.
-func (s BufferSlice) Reader() Reader {
- s.Ref()
- return &sliceReader{
- data: s,
- len: s.Len(),
- }
-}
-
-// Reader exposes a BufferSlice's data as an io.Reader, allowing it to interface
-// with other parts systems. It also provides an additional convenience method
-// Remaining(), which returns the number of unread bytes remaining in the slice.
-// Buffers will be freed as they are read.
-type Reader interface {
- io.Reader
- io.ByteReader
- // Close frees the underlying BufferSlice and never returns an error. Subsequent
- // calls to Read will return (0, io.EOF).
- Close() error
- // Remaining returns the number of unread bytes remaining in the slice.
- Remaining() int
-}
-
-type sliceReader struct {
- data BufferSlice
- len int
- // The index into data[0].ReadOnlyData().
- bufferIdx int
-}
-
-func (r *sliceReader) Remaining() int {
- return r.len
-}
-
-func (r *sliceReader) Close() error {
- r.data.Free()
- r.data = nil
- r.len = 0
- return nil
-}
-
-func (r *sliceReader) freeFirstBufferIfEmpty() bool {
- if len(r.data) == 0 || r.bufferIdx != len(r.data[0].ReadOnlyData()) {
- return false
- }
-
- r.data[0].Free()
- r.data = r.data[1:]
- r.bufferIdx = 0
- return true
-}
-
-func (r *sliceReader) Read(buf []byte) (n int, _ error) {
- if r.len == 0 {
- return 0, io.EOF
- }
-
- for len(buf) != 0 && r.len != 0 {
- // Copy as much as possible from the first Buffer in the slice into the
- // given byte slice.
- data := r.data[0].ReadOnlyData()
- copied := copy(buf, data[r.bufferIdx:])
- r.len -= copied // Reduce len by the number of bytes copied.
- r.bufferIdx += copied // Increment the buffer index.
- n += copied // Increment the total number of bytes read.
- buf = buf[copied:] // Shrink the given byte slice.
-
- // If we have copied all the data from the first Buffer, free it and advance to
- // the next in the slice.
- r.freeFirstBufferIfEmpty()
- }
-
- return n, nil
-}
-
-func (r *sliceReader) ReadByte() (byte, error) {
- if r.len == 0 {
- return 0, io.EOF
- }
-
- // There may be any number of empty buffers in the slice, clear them all until a
- // non-empty buffer is reached. This is guaranteed to exit since r.len is not 0.
- for r.freeFirstBufferIfEmpty() {
- }
-
- b := r.data[0].ReadOnlyData()[r.bufferIdx]
- r.len--
- r.bufferIdx++
- // Free the first buffer in the slice if the last byte was read
- r.freeFirstBufferIfEmpty()
- return b, nil
-}
-
-var _ io.Writer = (*writer)(nil)
-
-type writer struct {
- buffers *BufferSlice
- pool BufferPool
-}
-
-func (w *writer) Write(p []byte) (n int, err error) {
- b := Copy(p, w.pool)
- *w.buffers = append(*w.buffers, b)
- return b.Len(), nil
-}
-
-// NewWriter wraps the given BufferSlice and BufferPool to implement the
-// io.Writer interface. Every call to Write copies the contents of the given
-// buffer into a new Buffer pulled from the given pool and the Buffer is
-// added to the given BufferSlice.
-func NewWriter(buffers *BufferSlice, pool BufferPool) io.Writer {
- return &writer{buffers: buffers, pool: pool}
-}
-
-// ReadAll reads from r until an error or EOF and returns the data it read.
-// A successful call returns err == nil, not err == EOF. Because ReadAll is
-// defined to read from src until EOF, it does not treat an EOF from Read
-// as an error to be reported.
-//
-// Important: A failed call returns a non-nil error and may also return
-// partially read buffers. It is the responsibility of the caller to free the
-// BufferSlice returned, or its memory will not be reused.
-func ReadAll(r io.Reader, pool BufferPool) (BufferSlice, error) {
- var result BufferSlice
- if wt, ok := r.(io.WriterTo); ok {
- // This is more optimal since wt knows the size of chunks it wants to
- // write and, hence, we can allocate buffers of an optimal size to fit
- // them. E.g. might be a single big chunk, and we wouldn't chop it
- // into pieces.
- w := NewWriter(&result, pool)
- _, err := wt.WriteTo(w)
- return result, err
- }
-nextBuffer:
- for {
- buf := pool.Get(readAllBufSize)
- // We asked for 32KiB but may have been given a bigger buffer.
- // Use all of it if that's the case.
- *buf = (*buf)[:cap(*buf)]
- usedCap := 0
- for {
- n, err := r.Read((*buf)[usedCap:])
- usedCap += n
- if err != nil {
- if usedCap == 0 {
- // Nothing in this buf, put it back
- pool.Put(buf)
- } else {
- *buf = (*buf)[:usedCap]
- result = append(result, NewBuffer(buf, pool))
- }
- if err == io.EOF {
- err = nil
- }
- return result, err
- }
- if len(*buf) == usedCap {
- result = append(result, NewBuffer(buf, pool))
- continue nextBuffer
- }
- }
- }
-}
diff --git a/vendor/google.golang.org/grpc/mem/buffers.go b/vendor/google.golang.org/grpc/mem/buffers.go
deleted file mode 100644
index ecbf0b9a7..000000000
--- a/vendor/google.golang.org/grpc/mem/buffers.go
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package mem provides utilities that facilitate memory reuse in byte slices
-// that are used as buffers.
-//
-// # Experimental
-//
-// Notice: All APIs in this package are EXPERIMENTAL and may be changed or
-// removed in a later release.
-package mem
-
-import (
- "fmt"
- "sync"
- "sync/atomic"
-)
-
-// A Buffer represents a reference counted piece of data (in bytes) that can be
-// acquired by a call to NewBuffer() or Copy(). A reference to a Buffer may be
-// released by calling Free(), which invokes the free function given at creation
-// only after all references are released.
-//
-// Note that a Buffer is not safe for concurrent access and instead each
-// goroutine should use its own reference to the data, which can be acquired via
-// a call to Ref().
-//
-// Attempts to access the underlying data after releasing the reference to the
-// Buffer will panic.
-type Buffer interface {
- // ReadOnlyData returns the underlying byte slice. Note that it is undefined
- // behavior to modify the contents of this slice in any way.
- ReadOnlyData() []byte
- // Ref increases the reference counter for this Buffer.
- Ref()
- // Free decrements this Buffer's reference counter and frees the underlying
- // byte slice if the counter reaches 0 as a result of this call.
- Free()
- // Len returns the Buffer's size.
- Len() int
-
- split(n int) (left, right Buffer)
- read(buf []byte) (int, Buffer)
-}
-
-var (
- bufferPoolingThreshold = 1 << 10
-
- bufferObjectPool = sync.Pool{New: func() any { return new(buffer) }}
- refObjectPool = sync.Pool{New: func() any { return new(atomic.Int32) }}
-)
-
-// IsBelowBufferPoolingThreshold returns true if the given size is less than or
-// equal to the threshold for buffer pooling. This is used to determine whether
-// to pool buffers or allocate them directly.
-func IsBelowBufferPoolingThreshold(size int) bool {
- return size <= bufferPoolingThreshold
-}
-
-type buffer struct {
- origData *[]byte
- data []byte
- refs *atomic.Int32
- pool BufferPool
-}
-
-func newBuffer() *buffer {
- return bufferObjectPool.Get().(*buffer)
-}
-
-// NewBuffer creates a new Buffer from the given data, initializing the reference
-// counter to 1. The data will then be returned to the given pool when all
-// references to the returned Buffer are released. As a special case to avoid
-// additional allocations, if the given buffer pool is nil, the returned buffer
-// will be a "no-op" Buffer where invoking Buffer.Free() does nothing and the
-// underlying data is never freed.
-//
-// Note that the backing array of the given data is not copied.
-func NewBuffer(data *[]byte, pool BufferPool) Buffer {
- // Use the buffer's capacity instead of the length, otherwise buffers may
- // not be reused under certain conditions. For example, if a large buffer
- // is acquired from the pool, but fewer bytes than the buffering threshold
- // are written to it, the buffer will not be returned to the pool.
- if pool == nil || IsBelowBufferPoolingThreshold(cap(*data)) {
- return (SliceBuffer)(*data)
- }
- b := newBuffer()
- b.origData = data
- b.data = *data
- b.pool = pool
- b.refs = refObjectPool.Get().(*atomic.Int32)
- b.refs.Add(1)
- return b
-}
-
-// Copy creates a new Buffer from the given data, initializing the reference
-// counter to 1.
-//
-// It acquires a []byte from the given pool and copies over the backing array
-// of the given data. The []byte acquired from the pool is returned to the
-// pool when all references to the returned Buffer are released.
-func Copy(data []byte, pool BufferPool) Buffer {
- if IsBelowBufferPoolingThreshold(len(data)) {
- buf := make(SliceBuffer, len(data))
- copy(buf, data)
- return buf
- }
-
- buf := pool.Get(len(data))
- copy(*buf, data)
- return NewBuffer(buf, pool)
-}
-
-func (b *buffer) ReadOnlyData() []byte {
- if b.refs == nil {
- panic("Cannot read freed buffer")
- }
- return b.data
-}
-
-func (b *buffer) Ref() {
- if b.refs == nil {
- panic("Cannot ref freed buffer")
- }
- b.refs.Add(1)
-}
-
-func (b *buffer) Free() {
- if b.refs == nil {
- panic("Cannot free freed buffer")
- }
-
- refs := b.refs.Add(-1)
- switch {
- case refs > 0:
- return
- case refs == 0:
- if b.pool != nil {
- b.pool.Put(b.origData)
- }
-
- refObjectPool.Put(b.refs)
- b.origData = nil
- b.data = nil
- b.refs = nil
- b.pool = nil
- bufferObjectPool.Put(b)
- default:
- panic("Cannot free freed buffer")
- }
-}
-
-func (b *buffer) Len() int {
- return len(b.ReadOnlyData())
-}
-
-func (b *buffer) split(n int) (Buffer, Buffer) {
- if b.refs == nil {
- panic("Cannot split freed buffer")
- }
-
- b.refs.Add(1)
- split := newBuffer()
- split.origData = b.origData
- split.data = b.data[n:]
- split.refs = b.refs
- split.pool = b.pool
-
- b.data = b.data[:n]
-
- return b, split
-}
-
-func (b *buffer) read(buf []byte) (int, Buffer) {
- if b.refs == nil {
- panic("Cannot read freed buffer")
- }
-
- n := copy(buf, b.data)
- if n == len(b.data) {
- b.Free()
- return n, nil
- }
-
- b.data = b.data[n:]
- return n, b
-}
-
-func (b *buffer) String() string {
- return fmt.Sprintf("mem.Buffer(%p, data: %p, length: %d)", b, b.ReadOnlyData(), len(b.ReadOnlyData()))
-}
-
-// ReadUnsafe reads bytes from the given Buffer into the provided slice.
-// It does not perform safety checks.
-func ReadUnsafe(dst []byte, buf Buffer) (int, Buffer) {
- return buf.read(dst)
-}
-
-// SplitUnsafe modifies the receiver to point to the first n bytes while it
-// returns a new reference to the remaining bytes. The returned Buffer
-// functions just like a normal reference acquired using Ref().
-func SplitUnsafe(buf Buffer, n int) (left, right Buffer) {
- return buf.split(n)
-}
-
-type emptyBuffer struct{}
-
-func (e emptyBuffer) ReadOnlyData() []byte {
- return nil
-}
-
-func (e emptyBuffer) Ref() {}
-func (e emptyBuffer) Free() {}
-
-func (e emptyBuffer) Len() int {
- return 0
-}
-
-func (e emptyBuffer) split(int) (left, right Buffer) {
- return e, e
-}
-
-func (e emptyBuffer) read([]byte) (int, Buffer) {
- return 0, e
-}
-
-// SliceBuffer is a Buffer implementation that wraps a byte slice. It provides
-// methods for reading, splitting, and managing the byte slice.
-type SliceBuffer []byte
-
-// ReadOnlyData returns the byte slice.
-func (s SliceBuffer) ReadOnlyData() []byte { return s }
-
-// Ref is a noop implementation of Ref.
-func (s SliceBuffer) Ref() {}
-
-// Free is a noop implementation of Free.
-func (s SliceBuffer) Free() {}
-
-// Len is a noop implementation of Len.
-func (s SliceBuffer) Len() int { return len(s) }
-
-func (s SliceBuffer) split(n int) (left, right Buffer) {
- return s[:n], s[n:]
-}
-
-func (s SliceBuffer) read(buf []byte) (int, Buffer) {
- n := copy(buf, s)
- if n == len(s) {
- return n, nil
- }
- return n, s[n:]
-}
diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go
deleted file mode 100644
index d2e15253b..000000000
--- a/vendor/google.golang.org/grpc/metadata/metadata.go
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package metadata define the structure of the metadata supported by gRPC library.
-// Please refer to https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
-// for more information about custom-metadata.
-package metadata // import "google.golang.org/grpc/metadata"
-
-import (
- "context"
- "fmt"
- "strings"
-
- "google.golang.org/grpc/internal"
-)
-
-func init() {
- internal.FromOutgoingContextRaw = fromOutgoingContextRaw
-}
-
-// DecodeKeyValue returns k, v, nil.
-//
-// Deprecated: use k and v directly instead.
-func DecodeKeyValue(k, v string) (string, string, error) {
- return k, v, nil
-}
-
-// MD is a mapping from metadata keys to values. Users should use the following
-// two convenience functions New and Pairs to generate MD.
-type MD map[string][]string
-
-// New creates an MD from a given key-value map.
-//
-// Only the following ASCII characters are allowed in keys:
-// - digits: 0-9
-// - uppercase letters: A-Z (normalized to lower)
-// - lowercase letters: a-z
-// - special characters: -_.
-//
-// Uppercase letters are automatically converted to lowercase.
-//
-// Keys beginning with "grpc-" are reserved for grpc-internal use only and may
-// result in errors if set in metadata.
-func New(m map[string]string) MD {
- md := make(MD, len(m))
- for k, val := range m {
- key := strings.ToLower(k)
- md[key] = append(md[key], val)
- }
- return md
-}
-
-// Pairs returns an MD formed by the mapping of key, value ...
-// Pairs panics if len(kv) is odd.
-//
-// Only the following ASCII characters are allowed in keys:
-// - digits: 0-9
-// - uppercase letters: A-Z (normalized to lower)
-// - lowercase letters: a-z
-// - special characters: -_.
-//
-// Uppercase letters are automatically converted to lowercase.
-//
-// Keys beginning with "grpc-" are reserved for grpc-internal use only and may
-// result in errors if set in metadata.
-func Pairs(kv ...string) MD {
- if len(kv)%2 == 1 {
- panic(fmt.Sprintf("metadata: Pairs got the odd number of input pairs for metadata: %d", len(kv)))
- }
- md := make(MD, len(kv)/2)
- for i := 0; i < len(kv); i += 2 {
- key := strings.ToLower(kv[i])
- md[key] = append(md[key], kv[i+1])
- }
- return md
-}
-
-// Len returns the number of items in md.
-func (md MD) Len() int {
- return len(md)
-}
-
-// Copy returns a copy of md.
-func (md MD) Copy() MD {
- out := make(MD, len(md))
- for k, v := range md {
- out[k] = copyOf(v)
- }
- return out
-}
-
-// Get obtains the values for a given key.
-//
-// k is converted to lowercase before searching in md.
-func (md MD) Get(k string) []string {
- k = strings.ToLower(k)
- return md[k]
-}
-
-// Set sets the value of a given key with a slice of values.
-//
-// k is converted to lowercase before storing in md.
-func (md MD) Set(k string, vals ...string) {
- if len(vals) == 0 {
- return
- }
- k = strings.ToLower(k)
- md[k] = vals
-}
-
-// Append adds the values to key k, not overwriting what was already stored at
-// that key.
-//
-// k is converted to lowercase before storing in md.
-func (md MD) Append(k string, vals ...string) {
- if len(vals) == 0 {
- return
- }
- k = strings.ToLower(k)
- md[k] = append(md[k], vals...)
-}
-
-// Delete removes the values for a given key k which is converted to lowercase
-// before removing it from md.
-func (md MD) Delete(k string) {
- k = strings.ToLower(k)
- delete(md, k)
-}
-
-// Join joins any number of mds into a single MD.
-//
-// The order of values for each key is determined by the order in which the mds
-// containing those values are presented to Join.
-func Join(mds ...MD) MD {
- out := MD{}
- for _, md := range mds {
- for k, v := range md {
- out[k] = append(out[k], v...)
- }
- }
- return out
-}
-
-type mdIncomingKey struct{}
-type mdOutgoingKey struct{}
-
-// NewIncomingContext creates a new context with incoming md attached. md must
-// not be modified after calling this function.
-func NewIncomingContext(ctx context.Context, md MD) context.Context {
- return context.WithValue(ctx, mdIncomingKey{}, md)
-}
-
-// NewOutgoingContext creates a new context with outgoing md attached. If used
-// in conjunction with AppendToOutgoingContext, NewOutgoingContext will
-// overwrite any previously-appended metadata. md must not be modified after
-// calling this function.
-func NewOutgoingContext(ctx context.Context, md MD) context.Context {
- return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md})
-}
-
-// AppendToOutgoingContext returns a new context with the provided kv merged
-// with any existing metadata in the context. Please refer to the documentation
-// of Pairs for a description of kv.
-func AppendToOutgoingContext(ctx context.Context, kv ...string) context.Context {
- if len(kv)%2 == 1 {
- panic(fmt.Sprintf("metadata: AppendToOutgoingContext got an odd number of input pairs for metadata: %d", len(kv)))
- }
- md, _ := ctx.Value(mdOutgoingKey{}).(rawMD)
- added := make([][]string, len(md.added)+1)
- copy(added, md.added)
- kvCopy := make([]string, 0, len(kv))
- for i := 0; i < len(kv); i += 2 {
- kvCopy = append(kvCopy, strings.ToLower(kv[i]), kv[i+1])
- }
- added[len(added)-1] = kvCopy
- return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md.md, added: added})
-}
-
-// FromIncomingContext returns the incoming metadata in ctx if it exists.
-//
-// All keys in the returned MD are lowercase.
-func FromIncomingContext(ctx context.Context) (MD, bool) {
- md, ok := ctx.Value(mdIncomingKey{}).(MD)
- if !ok {
- return nil, false
- }
- out := make(MD, len(md))
- for k, v := range md {
- // We need to manually convert all keys to lower case, because MD is a
- // map, and there's no guarantee that the MD attached to the context is
- // created using our helper functions.
- key := strings.ToLower(k)
- out[key] = copyOf(v)
- }
- return out, true
-}
-
-// ValueFromIncomingContext returns the metadata value corresponding to the metadata
-// key from the incoming metadata if it exists. Keys are matched in a case insensitive
-// manner.
-func ValueFromIncomingContext(ctx context.Context, key string) []string {
- md, ok := ctx.Value(mdIncomingKey{}).(MD)
- if !ok {
- return nil
- }
-
- if v, ok := md[key]; ok {
- return copyOf(v)
- }
- for k, v := range md {
- // Case insensitive comparison: MD is a map, and there's no guarantee
- // that the MD attached to the context is created using our helper
- // functions.
- if strings.EqualFold(k, key) {
- return copyOf(v)
- }
- }
- return nil
-}
-
-func copyOf(v []string) []string {
- vals := make([]string, len(v))
- copy(vals, v)
- return vals
-}
-
-// fromOutgoingContextRaw returns the un-merged, intermediary contents of rawMD.
-//
-// Remember to perform strings.ToLower on the keys, for both the returned MD (MD
-// is a map, there's no guarantee it's created using our helper functions) and
-// the extra kv pairs (AppendToOutgoingContext doesn't turn them into
-// lowercase).
-func fromOutgoingContextRaw(ctx context.Context) (MD, [][]string, bool) {
- raw, ok := ctx.Value(mdOutgoingKey{}).(rawMD)
- if !ok {
- return nil, nil, false
- }
-
- return raw.md, raw.added, true
-}
-
-// FromOutgoingContext returns the outgoing metadata in ctx if it exists.
-//
-// All keys in the returned MD are lowercase.
-func FromOutgoingContext(ctx context.Context) (MD, bool) {
- raw, ok := ctx.Value(mdOutgoingKey{}).(rawMD)
- if !ok {
- return nil, false
- }
-
- mdSize := len(raw.md)
- for i := range raw.added {
- mdSize += len(raw.added[i]) / 2
- }
-
- out := make(MD, mdSize)
- for k, v := range raw.md {
- // We need to manually convert all keys to lower case, because MD is a
- // map, and there's no guarantee that the MD attached to the context is
- // created using our helper functions.
- key := strings.ToLower(k)
- out[key] = copyOf(v)
- }
- for _, added := range raw.added {
- if len(added)%2 == 1 {
- panic(fmt.Sprintf("metadata: FromOutgoingContext got an odd number of input pairs for metadata: %d", len(added)))
- }
-
- for i := 0; i < len(added); i += 2 {
- key := strings.ToLower(added[i])
- out[key] = append(out[key], added[i+1])
- }
- }
- return out, ok
-}
-
-type rawMD struct {
- md MD
- added [][]string
-}
diff --git a/vendor/google.golang.org/grpc/peer/peer.go b/vendor/google.golang.org/grpc/peer/peer.go
deleted file mode 100644
index 499a49c8c..000000000
--- a/vendor/google.golang.org/grpc/peer/peer.go
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package peer defines various peer information associated with RPCs and
-// corresponding utils.
-package peer
-
-import (
- "context"
- "fmt"
- "net"
- "strings"
-
- "google.golang.org/grpc/credentials"
-)
-
-// Peer contains the information of the peer for an RPC, such as the address
-// and authentication information.
-type Peer struct {
- // Addr is the peer address.
- Addr net.Addr
- // LocalAddr is the local address.
- LocalAddr net.Addr
- // AuthInfo is the authentication information of the transport.
- // It is nil if there is no transport security being used.
- AuthInfo credentials.AuthInfo
-}
-
-// String ensures the Peer types implements the Stringer interface in order to
-// allow to print a context with a peerKey value effectively.
-func (p *Peer) String() string {
- if p == nil {
- return "Peer<nil>"
- }
- sb := &strings.Builder{}
- sb.WriteString("Peer{")
- if p.Addr != nil {
- fmt.Fprintf(sb, "Addr: '%s', ", p.Addr.String())
- } else {
- fmt.Fprintf(sb, "Addr: <nil>, ")
- }
- if p.LocalAddr != nil {
- fmt.Fprintf(sb, "LocalAddr: '%s', ", p.LocalAddr.String())
- } else {
- fmt.Fprintf(sb, "LocalAddr: <nil>, ")
- }
- if p.AuthInfo != nil {
- fmt.Fprintf(sb, "AuthInfo: '%s'", p.AuthInfo.AuthType())
- } else {
- fmt.Fprintf(sb, "AuthInfo: <nil>")
- }
- sb.WriteString("}")
-
- return sb.String()
-}
-
-type peerKey struct{}
-
-// NewContext creates a new context with peer information attached.
-func NewContext(ctx context.Context, p *Peer) context.Context {
- return context.WithValue(ctx, peerKey{}, p)
-}
-
-// FromContext returns the peer information in ctx if it exists.
-func FromContext(ctx context.Context) (p *Peer, ok bool) {
- p, ok = ctx.Value(peerKey{}).(*Peer)
- return
-}
diff --git a/vendor/google.golang.org/grpc/picker_wrapper.go b/vendor/google.golang.org/grpc/picker_wrapper.go
deleted file mode 100644
index bdaa2130e..000000000
--- a/vendor/google.golang.org/grpc/picker_wrapper.go
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "fmt"
- "io"
- "sync/atomic"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/internal/channelz"
- istatus "google.golang.org/grpc/internal/status"
- "google.golang.org/grpc/internal/transport"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
-)
-
-// pickerGeneration stores a picker and a channel used to signal that a picker
-// newer than this one is available.
-type pickerGeneration struct {
- // picker is the picker produced by the LB policy. May be nil if a picker
- // has never been produced.
- picker balancer.Picker
- // blockingCh is closed when the picker has been invalidated because there
- // is a new one available.
- blockingCh chan struct{}
-}
-
-// pickerWrapper is a wrapper of balancer.Picker. It blocks on certain pick
-// actions and unblock when there's a picker update.
-type pickerWrapper struct {
- // If pickerGen holds a nil pointer, the pickerWrapper is closed.
- pickerGen atomic.Pointer[pickerGeneration]
- statsHandlers []stats.Handler // to record blocking picker calls
-}
-
-func newPickerWrapper(statsHandlers []stats.Handler) *pickerWrapper {
- pw := &pickerWrapper{
- statsHandlers: statsHandlers,
- }
- pw.pickerGen.Store(&pickerGeneration{
- blockingCh: make(chan struct{}),
- })
- return pw
-}
-
-// updatePicker is called by UpdateState calls from the LB policy. It
-// unblocks all blocked pick.
-func (pw *pickerWrapper) updatePicker(p balancer.Picker) {
- old := pw.pickerGen.Swap(&pickerGeneration{
- picker: p,
- blockingCh: make(chan struct{}),
- })
- close(old.blockingCh)
-}
-
-// doneChannelzWrapper performs the following:
-// - increments the calls started channelz counter
-// - wraps the done function in the passed in result to increment the calls
-// failed or calls succeeded channelz counter before invoking the actual
-// done function.
-func doneChannelzWrapper(acbw *acBalancerWrapper, result *balancer.PickResult) {
- ac := acbw.ac
- ac.incrCallsStarted()
- done := result.Done
- result.Done = func(b balancer.DoneInfo) {
- if b.Err != nil && b.Err != io.EOF {
- ac.incrCallsFailed()
- } else {
- ac.incrCallsSucceeded()
- }
- if done != nil {
- done(b)
- }
- }
-}
-
-// pick returns the transport that will be used for the RPC.
-// It may block in the following cases:
-// - there's no picker
-// - the current picker returns ErrNoSubConnAvailable
-// - the current picker returns other errors and failfast is false.
-// - the subConn returned by the current picker is not READY
-// When one of these situations happens, pick blocks until the picker gets updated.
-func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.PickInfo) (transport.ClientTransport, balancer.PickResult, error) {
- var ch chan struct{}
-
- var lastPickErr error
-
- for {
- pg := pw.pickerGen.Load()
- if pg == nil {
- return nil, balancer.PickResult{}, ErrClientConnClosing
- }
- if pg.picker == nil {
- ch = pg.blockingCh
- }
- if ch == pg.blockingCh {
- // This could happen when either:
- // - pw.picker is nil (the previous if condition), or
- // - we have already called pick on the current picker.
- select {
- case <-ctx.Done():
- var errStr string
- if lastPickErr != nil {
- errStr = "latest balancer error: " + lastPickErr.Error()
- } else {
- errStr = fmt.Sprintf("received context error while waiting for new LB policy update: %s", ctx.Err().Error())
- }
- switch ctx.Err() {
- case context.DeadlineExceeded:
- return nil, balancer.PickResult{}, status.Error(codes.DeadlineExceeded, errStr)
- case context.Canceled:
- return nil, balancer.PickResult{}, status.Error(codes.Canceled, errStr)
- }
- case <-ch:
- }
- continue
- }
-
- // If the channel is set, it means that the pick call had to wait for a
- // new picker at some point. Either it's the first iteration and this
- // function received the first picker, or a picker errored with
- // ErrNoSubConnAvailable or errored with failfast set to false, which
- // will trigger a continue to the next iteration. In the first case this
- // conditional will hit if this call had to block (the channel is set).
- // In the second case, the only way it will get to this conditional is
- // if there is a new picker.
- if ch != nil {
- for _, sh := range pw.statsHandlers {
- sh.HandleRPC(ctx, &stats.PickerUpdated{})
- }
- }
-
- ch = pg.blockingCh
- p := pg.picker
-
- pickResult, err := p.Pick(info)
- if err != nil {
- if err == balancer.ErrNoSubConnAvailable {
- continue
- }
- if st, ok := status.FromError(err); ok {
- // Status error: end the RPC unconditionally with this status.
- // First restrict the code to the list allowed by gRFC A54.
- if istatus.IsRestrictedControlPlaneCode(st) {
- err = status.Errorf(codes.Internal, "received picker error with illegal status: %v", err)
- }
- return nil, balancer.PickResult{}, dropError{error: err}
- }
- // For all other errors, wait for ready RPCs should block and other
- // RPCs should fail with unavailable.
- if !failfast {
- lastPickErr = err
- continue
- }
- return nil, balancer.PickResult{}, status.Error(codes.Unavailable, err.Error())
- }
-
- acbw, ok := pickResult.SubConn.(*acBalancerWrapper)
- if !ok {
- logger.Errorf("subconn returned from pick is type %T, not *acBalancerWrapper", pickResult.SubConn)
- continue
- }
- if t := acbw.ac.getReadyTransport(); t != nil {
- if channelz.IsOn() {
- doneChannelzWrapper(acbw, &pickResult)
- return t, pickResult, nil
- }
- return t, pickResult, nil
- }
- if pickResult.Done != nil {
- // Calling done with nil error, no bytes sent and no bytes received.
- // DoneInfo with default value works.
- pickResult.Done(balancer.DoneInfo{})
- }
- logger.Infof("blockingPicker: the picked transport is not ready, loop back to repick")
- // If ok == false, ac.state is not READY.
- // A valid picker always returns READY subConn. This means the state of ac
- // just changed, and picker will be updated shortly.
- // continue back to the beginning of the for loop to repick.
- }
-}
-
-func (pw *pickerWrapper) close() {
- old := pw.pickerGen.Swap(nil)
- close(old.blockingCh)
-}
-
-// reset clears the pickerWrapper and prepares it for being used again when idle
-// mode is exited.
-func (pw *pickerWrapper) reset() {
- old := pw.pickerGen.Swap(&pickerGeneration{blockingCh: make(chan struct{})})
- close(old.blockingCh)
-}
-
-// dropError is a wrapper error that indicates the LB policy wishes to drop the
-// RPC and not retry it.
-type dropError struct {
- error
-}
diff --git a/vendor/google.golang.org/grpc/preloader.go b/vendor/google.golang.org/grpc/preloader.go
deleted file mode 100644
index ee0ff969a..000000000
--- a/vendor/google.golang.org/grpc/preloader.go
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *
- * Copyright 2019 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/status"
-)
-
-// PreparedMsg is responsible for creating a Marshalled and Compressed object.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type PreparedMsg struct {
- // Struct for preparing msg before sending them
- encodedData mem.BufferSlice
- hdr []byte
- payload mem.BufferSlice
- pf payloadFormat
-}
-
-// Encode marshalls and compresses the message using the codec and compressor for the stream.
-func (p *PreparedMsg) Encode(s Stream, msg any) error {
- ctx := s.Context()
- rpcInfo, ok := rpcInfoFromContext(ctx)
- if !ok {
- return status.Errorf(codes.Internal, "grpc: unable to get rpcInfo")
- }
-
- // check if the context has the relevant information to prepareMsg
- if rpcInfo.preloaderInfo == nil {
- return status.Errorf(codes.Internal, "grpc: rpcInfo.preloaderInfo is nil")
- }
- if rpcInfo.preloaderInfo.codec == nil {
- return status.Errorf(codes.Internal, "grpc: rpcInfo.preloaderInfo.codec is nil")
- }
-
- // prepare the msg
- data, err := encode(rpcInfo.preloaderInfo.codec, msg)
- if err != nil {
- return err
- }
-
- materializedData := data.Materialize()
- data.Free()
- p.encodedData = mem.BufferSlice{mem.SliceBuffer(materializedData)}
-
- // TODO: it should be possible to grab the bufferPool from the underlying
- // stream implementation with a type cast to its actual type (such as
- // addrConnStream) and accessing the buffer pool directly.
- var compData mem.BufferSlice
- compData, p.pf, err = compress(p.encodedData, rpcInfo.preloaderInfo.cp, rpcInfo.preloaderInfo.comp, mem.DefaultBufferPool())
- if err != nil {
- return err
- }
-
- if p.pf.isCompressed() {
- materializedCompData := compData.Materialize()
- compData.Free()
- compData = mem.BufferSlice{mem.SliceBuffer(materializedCompData)}
- }
-
- p.hdr, p.payload = msgHeader(p.encodedData, compData, p.pf)
-
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go
deleted file mode 100644
index ef3d6ed6c..000000000
--- a/vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package dns implements a dns resolver to be installed as the default resolver
-// in grpc.
-package dns
-
-import (
- "time"
-
- "google.golang.org/grpc/internal/resolver/dns"
- "google.golang.org/grpc/resolver"
-)
-
-// SetResolvingTimeout sets the maximum duration for DNS resolution requests.
-//
-// This function affects the global timeout used by all channels using the DNS
-// name resolver scheme.
-//
-// It must be called only at application startup, before any gRPC calls are
-// made. Modifying this value after initialization is not thread-safe.
-//
-// The default value is 30 seconds. Setting the timeout too low may result in
-// premature timeouts during resolution, while setting it too high may lead to
-// unnecessary delays in service discovery. Choose a value appropriate for your
-// specific needs and network environment.
-func SetResolvingTimeout(timeout time.Duration) {
- dns.ResolvingTimeout = timeout
-}
-
-// NewBuilder creates a dnsBuilder which is used to factory DNS resolvers.
-//
-// Deprecated: import grpc and use resolver.Get("dns") instead.
-func NewBuilder() resolver.Builder {
- return dns.NewBuilder()
-}
-
-// SetMinResolutionInterval sets the default minimum interval at which DNS
-// re-resolutions are allowed. This helps to prevent excessive re-resolution.
-//
-// It must be called only at application startup, before any gRPC calls are
-// made. Modifying this value after initialization is not thread-safe.
-func SetMinResolutionInterval(d time.Duration) {
- dns.MinResolutionInterval = d
-}
diff --git a/vendor/google.golang.org/grpc/resolver/map.go b/vendor/google.golang.org/grpc/resolver/map.go
deleted file mode 100644
index ada5b9bb7..000000000
--- a/vendor/google.golang.org/grpc/resolver/map.go
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- *
- * Copyright 2021 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package resolver
-
-type addressMapEntry struct {
- addr Address
- value any
-}
-
-// AddressMap is a map of addresses to arbitrary values taking into account
-// Attributes. BalancerAttributes are ignored, as are Metadata and Type.
-// Multiple accesses may not be performed concurrently. Must be created via
-// NewAddressMap; do not construct directly.
-type AddressMap struct {
- // The underlying map is keyed by an Address with fields that we don't care
- // about being set to their zero values. The only fields that we care about
- // are `Addr`, `ServerName` and `Attributes`. Since we need to be able to
- // distinguish between addresses with same `Addr` and `ServerName`, but
- // different `Attributes`, we cannot store the `Attributes` in the map key.
- //
- // The comparison operation for structs work as follows:
- // Struct values are comparable if all their fields are comparable. Two
- // struct values are equal if their corresponding non-blank fields are equal.
- //
- // The value type of the map contains a slice of addresses which match the key
- // in their `Addr` and `ServerName` fields and contain the corresponding value
- // associated with them.
- m map[Address]addressMapEntryList
-}
-
-func toMapKey(addr *Address) Address {
- return Address{Addr: addr.Addr, ServerName: addr.ServerName}
-}
-
-type addressMapEntryList []*addressMapEntry
-
-// NewAddressMap creates a new AddressMap.
-func NewAddressMap() *AddressMap {
- return &AddressMap{m: make(map[Address]addressMapEntryList)}
-}
-
-// find returns the index of addr in the addressMapEntry slice, or -1 if not
-// present.
-func (l addressMapEntryList) find(addr Address) int {
- for i, entry := range l {
- // Attributes are the only thing to match on here, since `Addr` and
- // `ServerName` are already equal.
- if entry.addr.Attributes.Equal(addr.Attributes) {
- return i
- }
- }
- return -1
-}
-
-// Get returns the value for the address in the map, if present.
-func (a *AddressMap) Get(addr Address) (value any, ok bool) {
- addrKey := toMapKey(&addr)
- entryList := a.m[addrKey]
- if entry := entryList.find(addr); entry != -1 {
- return entryList[entry].value, true
- }
- return nil, false
-}
-
-// Set updates or adds the value to the address in the map.
-func (a *AddressMap) Set(addr Address, value any) {
- addrKey := toMapKey(&addr)
- entryList := a.m[addrKey]
- if entry := entryList.find(addr); entry != -1 {
- entryList[entry].value = value
- return
- }
- a.m[addrKey] = append(entryList, &addressMapEntry{addr: addr, value: value})
-}
-
-// Delete removes addr from the map.
-func (a *AddressMap) Delete(addr Address) {
- addrKey := toMapKey(&addr)
- entryList := a.m[addrKey]
- entry := entryList.find(addr)
- if entry == -1 {
- return
- }
- if len(entryList) == 1 {
- entryList = nil
- } else {
- copy(entryList[entry:], entryList[entry+1:])
- entryList = entryList[:len(entryList)-1]
- }
- a.m[addrKey] = entryList
-}
-
-// Len returns the number of entries in the map.
-func (a *AddressMap) Len() int {
- ret := 0
- for _, entryList := range a.m {
- ret += len(entryList)
- }
- return ret
-}
-
-// Keys returns a slice of all current map keys.
-func (a *AddressMap) Keys() []Address {
- ret := make([]Address, 0, a.Len())
- for _, entryList := range a.m {
- for _, entry := range entryList {
- ret = append(ret, entry.addr)
- }
- }
- return ret
-}
-
-// Values returns a slice of all current map values.
-func (a *AddressMap) Values() []any {
- ret := make([]any, 0, a.Len())
- for _, entryList := range a.m {
- for _, entry := range entryList {
- ret = append(ret, entry.value)
- }
- }
- return ret
-}
-
-type endpointNode struct {
- addrs map[string]struct{}
-}
-
-// Equal returns whether the unordered set of addrs are the same between the
-// endpoint nodes.
-func (en *endpointNode) Equal(en2 *endpointNode) bool {
- if len(en.addrs) != len(en2.addrs) {
- return false
- }
- for addr := range en.addrs {
- if _, ok := en2.addrs[addr]; !ok {
- return false
- }
- }
- return true
-}
-
-func toEndpointNode(endpoint Endpoint) endpointNode {
- en := make(map[string]struct{})
- for _, addr := range endpoint.Addresses {
- en[addr.Addr] = struct{}{}
- }
- return endpointNode{
- addrs: en,
- }
-}
-
-// EndpointMap is a map of endpoints to arbitrary values keyed on only the
-// unordered set of address strings within an endpoint. This map is not thread
-// safe, thus it is unsafe to access concurrently. Must be created via
-// NewEndpointMap; do not construct directly.
-type EndpointMap struct {
- endpoints map[*endpointNode]any
-}
-
-// NewEndpointMap creates a new EndpointMap.
-func NewEndpointMap() *EndpointMap {
- return &EndpointMap{
- endpoints: make(map[*endpointNode]any),
- }
-}
-
-// Get returns the value for the address in the map, if present.
-func (em *EndpointMap) Get(e Endpoint) (value any, ok bool) {
- en := toEndpointNode(e)
- if endpoint := em.find(en); endpoint != nil {
- return em.endpoints[endpoint], true
- }
- return nil, false
-}
-
-// Set updates or adds the value to the address in the map.
-func (em *EndpointMap) Set(e Endpoint, value any) {
- en := toEndpointNode(e)
- if endpoint := em.find(en); endpoint != nil {
- em.endpoints[endpoint] = value
- return
- }
- em.endpoints[&en] = value
-}
-
-// Len returns the number of entries in the map.
-func (em *EndpointMap) Len() int {
- return len(em.endpoints)
-}
-
-// Keys returns a slice of all current map keys, as endpoints specifying the
-// addresses present in the endpoint keys, in which uniqueness is determined by
-// the unordered set of addresses. Thus, endpoint information returned is not
-// the full endpoint data (drops duplicated addresses and attributes) but can be
-// used for EndpointMap accesses.
-func (em *EndpointMap) Keys() []Endpoint {
- ret := make([]Endpoint, 0, len(em.endpoints))
- for en := range em.endpoints {
- var endpoint Endpoint
- for addr := range en.addrs {
- endpoint.Addresses = append(endpoint.Addresses, Address{Addr: addr})
- }
- ret = append(ret, endpoint)
- }
- return ret
-}
-
-// Values returns a slice of all current map values.
-func (em *EndpointMap) Values() []any {
- ret := make([]any, 0, len(em.endpoints))
- for _, val := range em.endpoints {
- ret = append(ret, val)
- }
- return ret
-}
-
-// find returns a pointer to the endpoint node in em if the endpoint node is
-// already present. If not found, nil is returned. The comparisons are done on
-// the unordered set of addresses within an endpoint.
-func (em EndpointMap) find(e endpointNode) *endpointNode {
- for endpoint := range em.endpoints {
- if e.Equal(endpoint) {
- return endpoint
- }
- }
- return nil
-}
-
-// Delete removes the specified endpoint from the map.
-func (em *EndpointMap) Delete(e Endpoint) {
- en := toEndpointNode(e)
- if entry := em.find(en); entry != nil {
- delete(em.endpoints, entry)
- }
-}
diff --git a/vendor/google.golang.org/grpc/resolver/resolver.go b/vendor/google.golang.org/grpc/resolver/resolver.go
deleted file mode 100644
index 8eb1cf3bc..000000000
--- a/vendor/google.golang.org/grpc/resolver/resolver.go
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package resolver defines APIs for name resolution in gRPC.
-// All APIs in this package are experimental.
-package resolver
-
-import (
- "context"
- "errors"
- "fmt"
- "net"
- "net/url"
- "strings"
-
- "google.golang.org/grpc/attributes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/serviceconfig"
-)
-
-var (
- // m is a map from scheme to resolver builder.
- m = make(map[string]Builder)
- // defaultScheme is the default scheme to use.
- defaultScheme = "passthrough"
-)
-
-// TODO(bar) install dns resolver in init(){}.
-
-// Register registers the resolver builder to the resolver map. b.Scheme will
-// be used as the scheme registered with this builder. The registry is case
-// sensitive, and schemes should not contain any uppercase characters.
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. If multiple Resolvers are
-// registered with the same name, the one registered last will take effect.
-func Register(b Builder) {
- m[b.Scheme()] = b
-}
-
-// Get returns the resolver builder registered with the given scheme.
-//
-// If no builder is register with the scheme, nil will be returned.
-func Get(scheme string) Builder {
- if b, ok := m[scheme]; ok {
- return b
- }
- return nil
-}
-
-// SetDefaultScheme sets the default scheme that will be used. The default
-// scheme is initially set to "passthrough".
-//
-// NOTE: this function must only be called during initialization time (i.e. in
-// an init() function), and is not thread-safe. The scheme set last overrides
-// previously set values.
-func SetDefaultScheme(scheme string) {
- defaultScheme = scheme
- internal.UserSetDefaultScheme = true
-}
-
-// GetDefaultScheme gets the default scheme that will be used by grpc.Dial. If
-// SetDefaultScheme is never called, the default scheme used by grpc.NewClient is "dns" instead.
-func GetDefaultScheme() string {
- return defaultScheme
-}
-
-// Address represents a server the client connects to.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type Address struct {
- // Addr is the server address on which a connection will be established.
- Addr string
-
- // ServerName is the name of this address.
- // If non-empty, the ServerName is used as the transport certification authority for
- // the address, instead of the hostname from the Dial target string. In most cases,
- // this should not be set.
- //
- // WARNING: ServerName must only be populated with trusted values. It
- // is insecure to populate it with data from untrusted inputs since untrusted
- // values could be used to bypass the authority checks performed by TLS.
- ServerName string
-
- // Attributes contains arbitrary data about this address intended for
- // consumption by the SubConn.
- Attributes *attributes.Attributes
-
- // BalancerAttributes contains arbitrary data about this address intended
- // for consumption by the LB policy. These attributes do not affect SubConn
- // creation, connection establishment, handshaking, etc.
- //
- // Deprecated: when an Address is inside an Endpoint, this field should not
- // be used, and it will eventually be removed entirely.
- BalancerAttributes *attributes.Attributes
-
- // Metadata is the information associated with Addr, which may be used
- // to make load balancing decision.
- //
- // Deprecated: use Attributes instead.
- Metadata any
-}
-
-// Equal returns whether a and o are identical. Metadata is compared directly,
-// not with any recursive introspection.
-//
-// This method compares all fields of the address. When used to tell apart
-// addresses during subchannel creation or connection establishment, it might be
-// more appropriate for the caller to implement custom equality logic.
-func (a Address) Equal(o Address) bool {
- return a.Addr == o.Addr && a.ServerName == o.ServerName &&
- a.Attributes.Equal(o.Attributes) &&
- a.BalancerAttributes.Equal(o.BalancerAttributes) &&
- a.Metadata == o.Metadata
-}
-
-// String returns JSON formatted string representation of the address.
-func (a Address) String() string {
- var sb strings.Builder
- sb.WriteString(fmt.Sprintf("{Addr: %q, ", a.Addr))
- sb.WriteString(fmt.Sprintf("ServerName: %q, ", a.ServerName))
- if a.Attributes != nil {
- sb.WriteString(fmt.Sprintf("Attributes: %v, ", a.Attributes.String()))
- }
- if a.BalancerAttributes != nil {
- sb.WriteString(fmt.Sprintf("BalancerAttributes: %v", a.BalancerAttributes.String()))
- }
- sb.WriteString("}")
- return sb.String()
-}
-
-// BuildOptions includes additional information for the builder to create
-// the resolver.
-type BuildOptions struct {
- // DisableServiceConfig indicates whether a resolver implementation should
- // fetch service config data.
- DisableServiceConfig bool
- // DialCreds is the transport credentials used by the ClientConn for
- // communicating with the target gRPC service (set via
- // WithTransportCredentials). In cases where a name resolution service
- // requires the same credentials, the resolver may use this field. In most
- // cases though, it is not appropriate, and this field may be ignored.
- DialCreds credentials.TransportCredentials
- // CredsBundle is the credentials bundle used by the ClientConn for
- // communicating with the target gRPC service (set via
- // WithCredentialsBundle). In cases where a name resolution service
- // requires the same credentials, the resolver may use this field. In most
- // cases though, it is not appropriate, and this field may be ignored.
- CredsBundle credentials.Bundle
- // Dialer is the custom dialer used by the ClientConn for dialling the
- // target gRPC service (set via WithDialer). In cases where a name
- // resolution service requires the same dialer, the resolver may use this
- // field. In most cases though, it is not appropriate, and this field may
- // be ignored.
- Dialer func(context.Context, string) (net.Conn, error)
- // Authority is the effective authority of the clientconn for which the
- // resolver is built.
- Authority string
-}
-
-// An Endpoint is one network endpoint, or server, which may have multiple
-// addresses with which it can be accessed.
-type Endpoint struct {
- // Addresses contains a list of addresses used to access this endpoint.
- Addresses []Address
-
- // Attributes contains arbitrary data about this endpoint intended for
- // consumption by the LB policy.
- Attributes *attributes.Attributes
-}
-
-// State contains the current Resolver state relevant to the ClientConn.
-type State struct {
- // Addresses is the latest set of resolved addresses for the target.
- //
- // If a resolver sets Addresses but does not set Endpoints, one Endpoint
- // will be created for each Address before the State is passed to the LB
- // policy. The BalancerAttributes of each entry in Addresses will be set
- // in Endpoints.Attributes, and be cleared in the Endpoint's Address's
- // BalancerAttributes.
- //
- // Soon, Addresses will be deprecated and replaced fully by Endpoints.
- Addresses []Address
-
- // Endpoints is the latest set of resolved endpoints for the target.
- //
- // If a resolver produces a State containing Endpoints but not Addresses,
- // it must take care to ensure the LB policies it selects will support
- // Endpoints.
- Endpoints []Endpoint
-
- // ServiceConfig contains the result from parsing the latest service
- // config. If it is nil, it indicates no service config is present or the
- // resolver does not provide service configs.
- ServiceConfig *serviceconfig.ParseResult
-
- // Attributes contains arbitrary data about the resolver intended for
- // consumption by the load balancing policy.
- Attributes *attributes.Attributes
-}
-
-// ClientConn contains the callbacks for resolver to notify any updates
-// to the gRPC ClientConn.
-//
-// This interface is to be implemented by gRPC. Users should not need a
-// brand new implementation of this interface. For the situations like
-// testing, the new implementation should embed this interface. This allows
-// gRPC to add new methods to this interface.
-type ClientConn interface {
- // UpdateState updates the state of the ClientConn appropriately.
- //
- // If an error is returned, the resolver should try to resolve the
- // target again. The resolver should use a backoff timer to prevent
- // overloading the server with requests. If a resolver is certain that
- // reresolving will not change the result, e.g. because it is
- // a watch-based resolver, returned errors can be ignored.
- //
- // If the resolved State is the same as the last reported one, calling
- // UpdateState can be omitted.
- UpdateState(State) error
- // ReportError notifies the ClientConn that the Resolver encountered an
- // error. The ClientConn then forwards this error to the load balancing
- // policy.
- ReportError(error)
- // NewAddress is called by resolver to notify ClientConn a new list
- // of resolved addresses.
- // The address list should be the complete list of resolved addresses.
- //
- // Deprecated: Use UpdateState instead.
- NewAddress(addresses []Address)
- // ParseServiceConfig parses the provided service config and returns an
- // object that provides the parsed config.
- ParseServiceConfig(serviceConfigJSON string) *serviceconfig.ParseResult
-}
-
-// Target represents a target for gRPC, as specified in:
-// https://github.com/grpc/grpc/blob/master/doc/naming.md.
-// It is parsed from the target string that gets passed into Dial or DialContext
-// by the user. And gRPC passes it to the resolver and the balancer.
-//
-// If the target follows the naming spec, and the parsed scheme is registered
-// with gRPC, we will parse the target string according to the spec. If the
-// target does not contain a scheme or if the parsed scheme is not registered
-// (i.e. no corresponding resolver available to resolve the endpoint), we will
-// apply the default scheme, and will attempt to reparse it.
-type Target struct {
- // URL contains the parsed dial target with an optional default scheme added
- // to it if the original dial target contained no scheme or contained an
- // unregistered scheme. Any query params specified in the original dial
- // target can be accessed from here.
- URL url.URL
-}
-
-// Endpoint retrieves endpoint without leading "/" from either `URL.Path`
-// or `URL.Opaque`. The latter is used when the former is empty.
-func (t Target) Endpoint() string {
- endpoint := t.URL.Path
- if endpoint == "" {
- endpoint = t.URL.Opaque
- }
- // For targets of the form "[scheme]://[authority]/endpoint, the endpoint
- // value returned from url.Parse() contains a leading "/". Although this is
- // in accordance with RFC 3986, we do not want to break existing resolver
- // implementations which expect the endpoint without the leading "/". So, we
- // end up stripping the leading "/" here. But this will result in an
- // incorrect parsing for something like "unix:///path/to/socket". Since we
- // own the "unix" resolver, we can workaround in the unix resolver by using
- // the `URL` field.
- return strings.TrimPrefix(endpoint, "/")
-}
-
-// String returns the canonical string representation of Target.
-func (t Target) String() string {
- return t.URL.Scheme + "://" + t.URL.Host + "/" + t.Endpoint()
-}
-
-// Builder creates a resolver that will be used to watch name resolution updates.
-type Builder interface {
- // Build creates a new resolver for the given target.
- //
- // gRPC dial calls Build synchronously, and fails if the returned error is
- // not nil.
- Build(target Target, cc ClientConn, opts BuildOptions) (Resolver, error)
- // Scheme returns the scheme supported by this resolver. Scheme is defined
- // at https://github.com/grpc/grpc/blob/master/doc/naming.md. The returned
- // string should not contain uppercase characters, as they will not match
- // the parsed target's scheme as defined in RFC 3986.
- Scheme() string
-}
-
-// ResolveNowOptions includes additional information for ResolveNow.
-type ResolveNowOptions struct{}
-
-// Resolver watches for the updates on the specified target.
-// Updates include address updates and service config updates.
-type Resolver interface {
- // ResolveNow will be called by gRPC to try to resolve the target name
- // again. It's just a hint, resolver can ignore this if it's not necessary.
- //
- // It could be called multiple times concurrently.
- ResolveNow(ResolveNowOptions)
- // Close closes the resolver.
- Close()
-}
-
-// AuthorityOverrider is implemented by Builders that wish to override the
-// default authority for the ClientConn.
-// By default, the authority used is target.Endpoint().
-type AuthorityOverrider interface {
- // OverrideAuthority returns the authority to use for a ClientConn with the
- // given target. The implementation must generate it without blocking,
- // typically in line, and must keep it unchanged.
- OverrideAuthority(Target) string
-}
-
-// ValidateEndpoints validates endpoints from a petiole policy's perspective.
-// Petiole policies should call this before calling into their children. See
-// [gRPC A61](https://github.com/grpc/proposal/blob/master/A61-IPv4-IPv6-dualstack-backends.md)
-// for details.
-func ValidateEndpoints(endpoints []Endpoint) error {
- if len(endpoints) == 0 {
- return errors.New("endpoints list is empty")
- }
-
- for _, endpoint := range endpoints {
- for range endpoint.Addresses {
- return nil
- }
- }
- return errors.New("endpoints list contains no addresses")
-}
diff --git a/vendor/google.golang.org/grpc/resolver_wrapper.go b/vendor/google.golang.org/grpc/resolver_wrapper.go
deleted file mode 100644
index 23bb3fb25..000000000
--- a/vendor/google.golang.org/grpc/resolver_wrapper.go
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "strings"
- "sync"
-
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/internal/grpcsync"
- "google.golang.org/grpc/internal/pretty"
- "google.golang.org/grpc/resolver"
- "google.golang.org/grpc/serviceconfig"
-)
-
-// ccResolverWrapper is a wrapper on top of cc for resolvers.
-// It implements resolver.ClientConn interface.
-type ccResolverWrapper struct {
- // The following fields are initialized when the wrapper is created and are
- // read-only afterwards, and therefore can be accessed without a mutex.
- cc *ClientConn
- ignoreServiceConfig bool
- serializer *grpcsync.CallbackSerializer
- serializerCancel context.CancelFunc
-
- resolver resolver.Resolver // only accessed within the serializer
-
- // The following fields are protected by mu. Caller must take cc.mu before
- // taking mu.
- mu sync.Mutex
- curState resolver.State
- closed bool
-}
-
-// newCCResolverWrapper initializes the ccResolverWrapper. It can only be used
-// after calling start, which builds the resolver.
-func newCCResolverWrapper(cc *ClientConn) *ccResolverWrapper {
- ctx, cancel := context.WithCancel(cc.ctx)
- return &ccResolverWrapper{
- cc: cc,
- ignoreServiceConfig: cc.dopts.disableServiceConfig,
- serializer: grpcsync.NewCallbackSerializer(ctx),
- serializerCancel: cancel,
- }
-}
-
-// start builds the name resolver using the resolver.Builder in cc and returns
-// any error encountered. It must always be the first operation performed on
-// any newly created ccResolverWrapper, except that close may be called instead.
-func (ccr *ccResolverWrapper) start() error {
- errCh := make(chan error)
- ccr.serializer.TrySchedule(func(ctx context.Context) {
- if ctx.Err() != nil {
- return
- }
- opts := resolver.BuildOptions{
- DisableServiceConfig: ccr.cc.dopts.disableServiceConfig,
- DialCreds: ccr.cc.dopts.copts.TransportCredentials,
- CredsBundle: ccr.cc.dopts.copts.CredsBundle,
- Dialer: ccr.cc.dopts.copts.Dialer,
- Authority: ccr.cc.authority,
- }
- var err error
- ccr.resolver, err = ccr.cc.resolverBuilder.Build(ccr.cc.parsedTarget, ccr, opts)
- errCh <- err
- })
- return <-errCh
-}
-
-func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOptions) {
- ccr.serializer.TrySchedule(func(ctx context.Context) {
- if ctx.Err() != nil || ccr.resolver == nil {
- return
- }
- ccr.resolver.ResolveNow(o)
- })
-}
-
-// close initiates async shutdown of the wrapper. To determine the wrapper has
-// finished shutting down, the channel should block on ccr.serializer.Done()
-// without cc.mu held.
-func (ccr *ccResolverWrapper) close() {
- channelz.Info(logger, ccr.cc.channelz, "Closing the name resolver")
- ccr.mu.Lock()
- ccr.closed = true
- ccr.mu.Unlock()
-
- ccr.serializer.TrySchedule(func(context.Context) {
- if ccr.resolver == nil {
- return
- }
- ccr.resolver.Close()
- ccr.resolver = nil
- })
- ccr.serializerCancel()
-}
-
-// UpdateState is called by resolver implementations to report new state to gRPC
-// which includes addresses and service config.
-func (ccr *ccResolverWrapper) UpdateState(s resolver.State) error {
- ccr.cc.mu.Lock()
- ccr.mu.Lock()
- if ccr.closed {
- ccr.mu.Unlock()
- ccr.cc.mu.Unlock()
- return nil
- }
- if s.Endpoints == nil {
- s.Endpoints = make([]resolver.Endpoint, 0, len(s.Addresses))
- for _, a := range s.Addresses {
- ep := resolver.Endpoint{Addresses: []resolver.Address{a}, Attributes: a.BalancerAttributes}
- ep.Addresses[0].BalancerAttributes = nil
- s.Endpoints = append(s.Endpoints, ep)
- }
- }
- ccr.addChannelzTraceEvent(s)
- ccr.curState = s
- ccr.mu.Unlock()
- return ccr.cc.updateResolverStateAndUnlock(s, nil)
-}
-
-// ReportError is called by resolver implementations to report errors
-// encountered during name resolution to gRPC.
-func (ccr *ccResolverWrapper) ReportError(err error) {
- ccr.cc.mu.Lock()
- ccr.mu.Lock()
- if ccr.closed {
- ccr.mu.Unlock()
- ccr.cc.mu.Unlock()
- return
- }
- ccr.mu.Unlock()
- channelz.Warningf(logger, ccr.cc.channelz, "ccResolverWrapper: reporting error to cc: %v", err)
- ccr.cc.updateResolverStateAndUnlock(resolver.State{}, err)
-}
-
-// NewAddress is called by the resolver implementation to send addresses to
-// gRPC.
-func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) {
- ccr.cc.mu.Lock()
- ccr.mu.Lock()
- if ccr.closed {
- ccr.mu.Unlock()
- ccr.cc.mu.Unlock()
- return
- }
- s := resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig}
- ccr.addChannelzTraceEvent(s)
- ccr.curState = s
- ccr.mu.Unlock()
- ccr.cc.updateResolverStateAndUnlock(s, nil)
-}
-
-// ParseServiceConfig is called by resolver implementations to parse a JSON
-// representation of the service config.
-func (ccr *ccResolverWrapper) ParseServiceConfig(scJSON string) *serviceconfig.ParseResult {
- return parseServiceConfig(scJSON, ccr.cc.dopts.maxCallAttempts)
-}
-
-// addChannelzTraceEvent adds a channelz trace event containing the new
-// state received from resolver implementations.
-func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) {
- if !logger.V(0) && !channelz.IsOn() {
- return
- }
- var updates []string
- var oldSC, newSC *ServiceConfig
- var oldOK, newOK bool
- if ccr.curState.ServiceConfig != nil {
- oldSC, oldOK = ccr.curState.ServiceConfig.Config.(*ServiceConfig)
- }
- if s.ServiceConfig != nil {
- newSC, newOK = s.ServiceConfig.Config.(*ServiceConfig)
- }
- if oldOK != newOK || (oldOK && newOK && oldSC.rawJSONString != newSC.rawJSONString) {
- updates = append(updates, "service config updated")
- }
- if len(ccr.curState.Addresses) > 0 && len(s.Addresses) == 0 {
- updates = append(updates, "resolver returned an empty address list")
- } else if len(ccr.curState.Addresses) == 0 && len(s.Addresses) > 0 {
- updates = append(updates, "resolver returned new addresses")
- }
- channelz.Infof(logger, ccr.cc.channelz, "Resolver state updated: %s (%v)", pretty.ToJSON(s), strings.Join(updates, "; "))
-}
diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go
deleted file mode 100644
index 9fac2b08b..000000000
--- a/vendor/google.golang.org/grpc/rpc_util.go
+++ /dev/null
@@ -1,1046 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "compress/gzip"
- "context"
- "encoding/binary"
- "fmt"
- "io"
- "math"
- "strings"
- "sync"
- "time"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/encoding"
- "google.golang.org/grpc/encoding/proto"
- "google.golang.org/grpc/internal/transport"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
-)
-
-// Compressor defines the interface gRPC uses to compress a message.
-//
-// Deprecated: use package encoding.
-type Compressor interface {
- // Do compresses p into w.
- Do(w io.Writer, p []byte) error
- // Type returns the compression algorithm the Compressor uses.
- Type() string
-}
-
-type gzipCompressor struct {
- pool sync.Pool
-}
-
-// NewGZIPCompressor creates a Compressor based on GZIP.
-//
-// Deprecated: use package encoding/gzip.
-func NewGZIPCompressor() Compressor {
- c, _ := NewGZIPCompressorWithLevel(gzip.DefaultCompression)
- return c
-}
-
-// NewGZIPCompressorWithLevel is like NewGZIPCompressor but specifies the gzip compression level instead
-// of assuming DefaultCompression.
-//
-// The error returned will be nil if the level is valid.
-//
-// Deprecated: use package encoding/gzip.
-func NewGZIPCompressorWithLevel(level int) (Compressor, error) {
- if level < gzip.DefaultCompression || level > gzip.BestCompression {
- return nil, fmt.Errorf("grpc: invalid compression level: %d", level)
- }
- return &gzipCompressor{
- pool: sync.Pool{
- New: func() any {
- w, err := gzip.NewWriterLevel(io.Discard, level)
- if err != nil {
- panic(err)
- }
- return w
- },
- },
- }, nil
-}
-
-func (c *gzipCompressor) Do(w io.Writer, p []byte) error {
- z := c.pool.Get().(*gzip.Writer)
- defer c.pool.Put(z)
- z.Reset(w)
- if _, err := z.Write(p); err != nil {
- return err
- }
- return z.Close()
-}
-
-func (c *gzipCompressor) Type() string {
- return "gzip"
-}
-
-// Decompressor defines the interface gRPC uses to decompress a message.
-//
-// Deprecated: use package encoding.
-type Decompressor interface {
- // Do reads the data from r and uncompress them.
- Do(r io.Reader) ([]byte, error)
- // Type returns the compression algorithm the Decompressor uses.
- Type() string
-}
-
-type gzipDecompressor struct {
- pool sync.Pool
-}
-
-// NewGZIPDecompressor creates a Decompressor based on GZIP.
-//
-// Deprecated: use package encoding/gzip.
-func NewGZIPDecompressor() Decompressor {
- return &gzipDecompressor{}
-}
-
-func (d *gzipDecompressor) Do(r io.Reader) ([]byte, error) {
- var z *gzip.Reader
- switch maybeZ := d.pool.Get().(type) {
- case nil:
- newZ, err := gzip.NewReader(r)
- if err != nil {
- return nil, err
- }
- z = newZ
- case *gzip.Reader:
- z = maybeZ
- if err := z.Reset(r); err != nil {
- d.pool.Put(z)
- return nil, err
- }
- }
-
- defer func() {
- z.Close()
- d.pool.Put(z)
- }()
- return io.ReadAll(z)
-}
-
-func (d *gzipDecompressor) Type() string {
- return "gzip"
-}
-
-// callInfo contains all related configuration and information about an RPC.
-type callInfo struct {
- compressorType string
- failFast bool
- maxReceiveMessageSize *int
- maxSendMessageSize *int
- creds credentials.PerRPCCredentials
- contentSubtype string
- codec baseCodec
- maxRetryRPCBufferSize int
- onFinish []func(err error)
-}
-
-func defaultCallInfo() *callInfo {
- return &callInfo{
- failFast: true,
- maxRetryRPCBufferSize: 256 * 1024, // 256KB
- }
-}
-
-// CallOption configures a Call before it starts or extracts information from
-// a Call after it completes.
-type CallOption interface {
- // before is called before the call is sent to any server. If before
- // returns a non-nil error, the RPC fails with that error.
- before(*callInfo) error
-
- // after is called after the call has completed. after cannot return an
- // error, so any failures should be reported via output parameters.
- after(*callInfo, *csAttempt)
-}
-
-// EmptyCallOption does not alter the Call configuration.
-// It can be embedded in another structure to carry satellite data for use
-// by interceptors.
-type EmptyCallOption struct{}
-
-func (EmptyCallOption) before(*callInfo) error { return nil }
-func (EmptyCallOption) after(*callInfo, *csAttempt) {}
-
-// StaticMethod returns a CallOption which specifies that a call is being made
-// to a method that is static, which means the method is known at compile time
-// and doesn't change at runtime. This can be used as a signal to stats plugins
-// that this method is safe to include as a key to a measurement.
-func StaticMethod() CallOption {
- return StaticMethodCallOption{}
-}
-
-// StaticMethodCallOption is a CallOption that specifies that a call comes
-// from a static method.
-type StaticMethodCallOption struct {
- EmptyCallOption
-}
-
-// Header returns a CallOptions that retrieves the header metadata
-// for a unary RPC.
-func Header(md *metadata.MD) CallOption {
- return HeaderCallOption{HeaderAddr: md}
-}
-
-// HeaderCallOption is a CallOption for collecting response header metadata.
-// The metadata field will be populated *after* the RPC completes.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type HeaderCallOption struct {
- HeaderAddr *metadata.MD
-}
-
-func (o HeaderCallOption) before(*callInfo) error { return nil }
-func (o HeaderCallOption) after(_ *callInfo, attempt *csAttempt) {
- *o.HeaderAddr, _ = attempt.s.Header()
-}
-
-// Trailer returns a CallOptions that retrieves the trailer metadata
-// for a unary RPC.
-func Trailer(md *metadata.MD) CallOption {
- return TrailerCallOption{TrailerAddr: md}
-}
-
-// TrailerCallOption is a CallOption for collecting response trailer metadata.
-// The metadata field will be populated *after* the RPC completes.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type TrailerCallOption struct {
- TrailerAddr *metadata.MD
-}
-
-func (o TrailerCallOption) before(*callInfo) error { return nil }
-func (o TrailerCallOption) after(_ *callInfo, attempt *csAttempt) {
- *o.TrailerAddr = attempt.s.Trailer()
-}
-
-// Peer returns a CallOption that retrieves peer information for a unary RPC.
-// The peer field will be populated *after* the RPC completes.
-func Peer(p *peer.Peer) CallOption {
- return PeerCallOption{PeerAddr: p}
-}
-
-// PeerCallOption is a CallOption for collecting the identity of the remote
-// peer. The peer field will be populated *after* the RPC completes.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type PeerCallOption struct {
- PeerAddr *peer.Peer
-}
-
-func (o PeerCallOption) before(*callInfo) error { return nil }
-func (o PeerCallOption) after(_ *callInfo, attempt *csAttempt) {
- if x, ok := peer.FromContext(attempt.s.Context()); ok {
- *o.PeerAddr = *x
- }
-}
-
-// WaitForReady configures the RPC's behavior when the client is in
-// TRANSIENT_FAILURE, which occurs when all addresses fail to connect. If
-// waitForReady is false, the RPC will fail immediately. Otherwise, the client
-// will wait until a connection becomes available or the RPC's deadline is
-// reached.
-//
-// By default, RPCs do not "wait for ready".
-func WaitForReady(waitForReady bool) CallOption {
- return FailFastCallOption{FailFast: !waitForReady}
-}
-
-// FailFast is the opposite of WaitForReady.
-//
-// Deprecated: use WaitForReady.
-func FailFast(failFast bool) CallOption {
- return FailFastCallOption{FailFast: failFast}
-}
-
-// FailFastCallOption is a CallOption for indicating whether an RPC should fail
-// fast or not.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type FailFastCallOption struct {
- FailFast bool
-}
-
-func (o FailFastCallOption) before(c *callInfo) error {
- c.failFast = o.FailFast
- return nil
-}
-func (o FailFastCallOption) after(*callInfo, *csAttempt) {}
-
-// OnFinish returns a CallOption that configures a callback to be called when
-// the call completes. The error passed to the callback is the status of the
-// RPC, and may be nil. The onFinish callback provided will only be called once
-// by gRPC. This is mainly used to be used by streaming interceptors, to be
-// notified when the RPC completes along with information about the status of
-// the RPC.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func OnFinish(onFinish func(err error)) CallOption {
- return OnFinishCallOption{
- OnFinish: onFinish,
- }
-}
-
-// OnFinishCallOption is CallOption that indicates a callback to be called when
-// the call completes.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type OnFinishCallOption struct {
- OnFinish func(error)
-}
-
-func (o OnFinishCallOption) before(c *callInfo) error {
- c.onFinish = append(c.onFinish, o.OnFinish)
- return nil
-}
-
-func (o OnFinishCallOption) after(*callInfo, *csAttempt) {}
-
-// MaxCallRecvMsgSize returns a CallOption which sets the maximum message size
-// in bytes the client can receive. If this is not set, gRPC uses the default
-// 4MB.
-func MaxCallRecvMsgSize(bytes int) CallOption {
- return MaxRecvMsgSizeCallOption{MaxRecvMsgSize: bytes}
-}
-
-// MaxRecvMsgSizeCallOption is a CallOption that indicates the maximum message
-// size in bytes the client can receive.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type MaxRecvMsgSizeCallOption struct {
- MaxRecvMsgSize int
-}
-
-func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error {
- c.maxReceiveMessageSize = &o.MaxRecvMsgSize
- return nil
-}
-func (o MaxRecvMsgSizeCallOption) after(*callInfo, *csAttempt) {}
-
-// MaxCallSendMsgSize returns a CallOption which sets the maximum message size
-// in bytes the client can send. If this is not set, gRPC uses the default
-// `math.MaxInt32`.
-func MaxCallSendMsgSize(bytes int) CallOption {
- return MaxSendMsgSizeCallOption{MaxSendMsgSize: bytes}
-}
-
-// MaxSendMsgSizeCallOption is a CallOption that indicates the maximum message
-// size in bytes the client can send.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type MaxSendMsgSizeCallOption struct {
- MaxSendMsgSize int
-}
-
-func (o MaxSendMsgSizeCallOption) before(c *callInfo) error {
- c.maxSendMessageSize = &o.MaxSendMsgSize
- return nil
-}
-func (o MaxSendMsgSizeCallOption) after(*callInfo, *csAttempt) {}
-
-// PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials
-// for a call.
-func PerRPCCredentials(creds credentials.PerRPCCredentials) CallOption {
- return PerRPCCredsCallOption{Creds: creds}
-}
-
-// PerRPCCredsCallOption is a CallOption that indicates the per-RPC
-// credentials to use for the call.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type PerRPCCredsCallOption struct {
- Creds credentials.PerRPCCredentials
-}
-
-func (o PerRPCCredsCallOption) before(c *callInfo) error {
- c.creds = o.Creds
- return nil
-}
-func (o PerRPCCredsCallOption) after(*callInfo, *csAttempt) {}
-
-// UseCompressor returns a CallOption which sets the compressor used when
-// sending the request. If WithCompressor is also set, UseCompressor has
-// higher priority.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func UseCompressor(name string) CallOption {
- return CompressorCallOption{CompressorType: name}
-}
-
-// CompressorCallOption is a CallOption that indicates the compressor to use.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type CompressorCallOption struct {
- CompressorType string
-}
-
-func (o CompressorCallOption) before(c *callInfo) error {
- c.compressorType = o.CompressorType
- return nil
-}
-func (o CompressorCallOption) after(*callInfo, *csAttempt) {}
-
-// CallContentSubtype returns a CallOption that will set the content-subtype
-// for a call. For example, if content-subtype is "json", the Content-Type over
-// the wire will be "application/grpc+json". The content-subtype is converted
-// to lowercase before being included in Content-Type. See Content-Type on
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details.
-//
-// If ForceCodec is not also used, the content-subtype will be used to look up
-// the Codec to use in the registry controlled by RegisterCodec. See the
-// documentation on RegisterCodec for details on registration. The lookup of
-// content-subtype is case-insensitive. If no such Codec is found, the call
-// will result in an error with code codes.Internal.
-//
-// If ForceCodec is also used, that Codec will be used for all request and
-// response messages, with the content-subtype set to the given contentSubtype
-// here for requests.
-func CallContentSubtype(contentSubtype string) CallOption {
- return ContentSubtypeCallOption{ContentSubtype: strings.ToLower(contentSubtype)}
-}
-
-// ContentSubtypeCallOption is a CallOption that indicates the content-subtype
-// used for marshaling messages.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type ContentSubtypeCallOption struct {
- ContentSubtype string
-}
-
-func (o ContentSubtypeCallOption) before(c *callInfo) error {
- c.contentSubtype = o.ContentSubtype
- return nil
-}
-func (o ContentSubtypeCallOption) after(*callInfo, *csAttempt) {}
-
-// ForceCodec returns a CallOption that will set codec to be used for all
-// request and response messages for a call. The result of calling Name() will
-// be used as the content-subtype after converting to lowercase, unless
-// CallContentSubtype is also used.
-//
-// See Content-Type on
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details. Also see the documentation on RegisterCodec and
-// CallContentSubtype for more details on the interaction between Codec and
-// content-subtype.
-//
-// This function is provided for advanced users; prefer to use only
-// CallContentSubtype to select a registered codec instead.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ForceCodec(codec encoding.Codec) CallOption {
- return ForceCodecCallOption{Codec: codec}
-}
-
-// ForceCodecCallOption is a CallOption that indicates the codec used for
-// marshaling messages.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type ForceCodecCallOption struct {
- Codec encoding.Codec
-}
-
-func (o ForceCodecCallOption) before(c *callInfo) error {
- c.codec = newCodecV1Bridge(o.Codec)
- return nil
-}
-func (o ForceCodecCallOption) after(*callInfo, *csAttempt) {}
-
-// ForceCodecV2 returns a CallOption that will set codec to be used for all
-// request and response messages for a call. The result of calling Name() will
-// be used as the content-subtype after converting to lowercase, unless
-// CallContentSubtype is also used.
-//
-// See Content-Type on
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details. Also see the documentation on RegisterCodec and
-// CallContentSubtype for more details on the interaction between Codec and
-// content-subtype.
-//
-// This function is provided for advanced users; prefer to use only
-// CallContentSubtype to select a registered codec instead.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ForceCodecV2(codec encoding.CodecV2) CallOption {
- return ForceCodecV2CallOption{CodecV2: codec}
-}
-
-// ForceCodecV2CallOption is a CallOption that indicates the codec used for
-// marshaling messages.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type ForceCodecV2CallOption struct {
- CodecV2 encoding.CodecV2
-}
-
-func (o ForceCodecV2CallOption) before(c *callInfo) error {
- c.codec = o.CodecV2
- return nil
-}
-
-func (o ForceCodecV2CallOption) after(*callInfo, *csAttempt) {}
-
-// CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of
-// an encoding.Codec.
-//
-// Deprecated: use ForceCodec instead.
-func CallCustomCodec(codec Codec) CallOption {
- return CustomCodecCallOption{Codec: codec}
-}
-
-// CustomCodecCallOption is a CallOption that indicates the codec used for
-// marshaling messages.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type CustomCodecCallOption struct {
- Codec Codec
-}
-
-func (o CustomCodecCallOption) before(c *callInfo) error {
- c.codec = newCodecV0Bridge(o.Codec)
- return nil
-}
-func (o CustomCodecCallOption) after(*callInfo, *csAttempt) {}
-
-// MaxRetryRPCBufferSize returns a CallOption that limits the amount of memory
-// used for buffering this RPC's requests for retry purposes.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func MaxRetryRPCBufferSize(bytes int) CallOption {
- return MaxRetryRPCBufferSizeCallOption{bytes}
-}
-
-// MaxRetryRPCBufferSizeCallOption is a CallOption indicating the amount of
-// memory to be used for caching this RPC for retry purposes.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type MaxRetryRPCBufferSizeCallOption struct {
- MaxRetryRPCBufferSize int
-}
-
-func (o MaxRetryRPCBufferSizeCallOption) before(c *callInfo) error {
- c.maxRetryRPCBufferSize = o.MaxRetryRPCBufferSize
- return nil
-}
-func (o MaxRetryRPCBufferSizeCallOption) after(*callInfo, *csAttempt) {}
-
-// The format of the payload: compressed or not?
-type payloadFormat uint8
-
-const (
- compressionNone payloadFormat = 0 // no compression
- compressionMade payloadFormat = 1 // compressed
-)
-
-func (pf payloadFormat) isCompressed() bool {
- return pf == compressionMade
-}
-
-type streamReader interface {
- ReadMessageHeader(header []byte) error
- Read(n int) (mem.BufferSlice, error)
-}
-
-// parser reads complete gRPC messages from the underlying reader.
-type parser struct {
- // r is the underlying reader.
- // See the comment on recvMsg for the permissible
- // error types.
- r streamReader
-
- // The header of a gRPC message. Find more detail at
- // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
- header [5]byte
-
- // bufferPool is the pool of shared receive buffers.
- bufferPool mem.BufferPool
-}
-
-// recvMsg reads a complete gRPC message from the stream.
-//
-// It returns the message and its payload (compression/encoding)
-// format. The caller owns the returned msg memory.
-//
-// If there is an error, possible values are:
-// - io.EOF, when no messages remain
-// - io.ErrUnexpectedEOF
-// - of type transport.ConnectionError
-// - an error from the status package
-//
-// No other error values or types must be returned, which also means
-// that the underlying streamReader must not return an incompatible
-// error.
-func (p *parser) recvMsg(maxReceiveMessageSize int) (payloadFormat, mem.BufferSlice, error) {
- err := p.r.ReadMessageHeader(p.header[:])
- if err != nil {
- return 0, nil, err
- }
-
- pf := payloadFormat(p.header[0])
- length := binary.BigEndian.Uint32(p.header[1:])
-
- if int64(length) > int64(maxInt) {
- return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max length allowed on current machine (%d vs. %d)", length, maxInt)
- }
- if int(length) > maxReceiveMessageSize {
- return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize)
- }
-
- data, err := p.r.Read(int(length))
- if err != nil {
- if err == io.EOF {
- err = io.ErrUnexpectedEOF
- }
- return 0, nil, err
- }
- return pf, data, nil
-}
-
-// encode serializes msg and returns a buffer containing the message, or an
-// error if it is too large to be transmitted by grpc. If msg is nil, it
-// generates an empty message.
-func encode(c baseCodec, msg any) (mem.BufferSlice, error) {
- if msg == nil { // NOTE: typed nils will not be caught by this check
- return nil, nil
- }
- b, err := c.Marshal(msg)
- if err != nil {
- return nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error())
- }
- if uint(b.Len()) > math.MaxUint32 {
- b.Free()
- return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", len(b))
- }
- return b, nil
-}
-
-// compress returns the input bytes compressed by compressor or cp.
-// If both compressors are nil, or if the message has zero length, returns nil,
-// indicating no compression was done.
-//
-// TODO(dfawley): eliminate cp parameter by wrapping Compressor in an encoding.Compressor.
-func compress(in mem.BufferSlice, cp Compressor, compressor encoding.Compressor, pool mem.BufferPool) (mem.BufferSlice, payloadFormat, error) {
- if (compressor == nil && cp == nil) || in.Len() == 0 {
- return nil, compressionNone, nil
- }
- var out mem.BufferSlice
- w := mem.NewWriter(&out, pool)
- wrapErr := func(err error) error {
- out.Free()
- return status.Errorf(codes.Internal, "grpc: error while compressing: %v", err.Error())
- }
- if compressor != nil {
- z, err := compressor.Compress(w)
- if err != nil {
- return nil, 0, wrapErr(err)
- }
- for _, b := range in {
- if _, err := z.Write(b.ReadOnlyData()); err != nil {
- return nil, 0, wrapErr(err)
- }
- }
- if err := z.Close(); err != nil {
- return nil, 0, wrapErr(err)
- }
- } else {
- // This is obviously really inefficient since it fully materializes the data, but
- // there is no way around this with the old Compressor API. At least it attempts
- // to return the buffer to the provider, in the hopes it can be reused (maybe
- // even by a subsequent call to this very function).
- buf := in.MaterializeToBuffer(pool)
- defer buf.Free()
- if err := cp.Do(w, buf.ReadOnlyData()); err != nil {
- return nil, 0, wrapErr(err)
- }
- }
- return out, compressionMade, nil
-}
-
-const (
- payloadLen = 1
- sizeLen = 4
- headerLen = payloadLen + sizeLen
-)
-
-// msgHeader returns a 5-byte header for the message being transmitted and the
-// payload, which is compData if non-nil or data otherwise.
-func msgHeader(data, compData mem.BufferSlice, pf payloadFormat) (hdr []byte, payload mem.BufferSlice) {
- hdr = make([]byte, headerLen)
- hdr[0] = byte(pf)
-
- var length uint32
- if pf.isCompressed() {
- length = uint32(compData.Len())
- payload = compData
- } else {
- length = uint32(data.Len())
- payload = data
- }
-
- // Write length of payload into buf
- binary.BigEndian.PutUint32(hdr[payloadLen:], length)
- return hdr, payload
-}
-
-func outPayload(client bool, msg any, dataLength, payloadLength int, t time.Time) *stats.OutPayload {
- return &stats.OutPayload{
- Client: client,
- Payload: msg,
- Length: dataLength,
- WireLength: payloadLength + headerLen,
- CompressedLength: payloadLength,
- SentTime: t,
- }
-}
-
-func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool, isServer bool) *status.Status {
- switch pf {
- case compressionNone:
- case compressionMade:
- if recvCompress == "" || recvCompress == encoding.Identity {
- return status.New(codes.Internal, "grpc: compressed flag set with identity or empty encoding")
- }
- if !haveCompressor {
- if isServer {
- return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
- }
- return status.Newf(codes.Internal, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
- }
- default:
- return status.Newf(codes.Internal, "grpc: received unexpected payload format %d", pf)
- }
- return nil
-}
-
-type payloadInfo struct {
- compressedLength int // The compressed length got from wire.
- uncompressedBytes mem.BufferSlice
-}
-
-func (p *payloadInfo) free() {
- if p != nil && p.uncompressedBytes != nil {
- p.uncompressedBytes.Free()
- }
-}
-
-// recvAndDecompress reads a message from the stream, decompressing it if necessary.
-//
-// Cancelling the returned cancel function releases the buffer back to the pool. So the caller should cancel as soon as
-// the buffer is no longer needed.
-// TODO: Refactor this function to reduce the number of arguments.
-// See: https://google.github.io/styleguide/go/best-practices.html#function-argument-lists
-func recvAndDecompress(p *parser, s recvCompressor, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor, isServer bool,
-) (out mem.BufferSlice, err error) {
- pf, compressed, err := p.recvMsg(maxReceiveMessageSize)
- if err != nil {
- return nil, err
- }
-
- compressedLength := compressed.Len()
-
- if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil, isServer); st != nil {
- compressed.Free()
- return nil, st.Err()
- }
-
- var size int
- if pf.isCompressed() {
- defer compressed.Free()
-
- // To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor,
- // use this decompressor as the default.
- if dc != nil {
- var uncompressedBuf []byte
- uncompressedBuf, err = dc.Do(compressed.Reader())
- if err == nil {
- out = mem.BufferSlice{mem.SliceBuffer(uncompressedBuf)}
- }
- size = len(uncompressedBuf)
- } else {
- out, size, err = decompress(compressor, compressed, maxReceiveMessageSize, p.bufferPool)
- }
- if err != nil {
- return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err)
- }
- if size > maxReceiveMessageSize {
- out.Free()
- // TODO: Revisit the error code. Currently keep it consistent with java
- // implementation.
- return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize)
- }
- } else {
- out = compressed
- }
-
- if payInfo != nil {
- payInfo.compressedLength = compressedLength
- out.Ref()
- payInfo.uncompressedBytes = out
- }
-
- return out, nil
-}
-
-// Using compressor, decompress d, returning data and size.
-// Optionally, if data will be over maxReceiveMessageSize, just return the size.
-func decompress(compressor encoding.Compressor, d mem.BufferSlice, maxReceiveMessageSize int, pool mem.BufferPool) (mem.BufferSlice, int, error) {
- dcReader, err := compressor.Decompress(d.Reader())
- if err != nil {
- return nil, 0, err
- }
-
- out, err := mem.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1), pool)
- if err != nil {
- out.Free()
- return nil, 0, err
- }
- return out, out.Len(), nil
-}
-
-type recvCompressor interface {
- RecvCompress() string
-}
-
-// For the two compressor parameters, both should not be set, but if they are,
-// dc takes precedence over compressor.
-// TODO(dfawley): wrap the old compressor/decompressor using the new API?
-func recv(p *parser, c baseCodec, s recvCompressor, dc Decompressor, m any, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor, isServer bool) error {
- data, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor, isServer)
- if err != nil {
- return err
- }
-
- // If the codec wants its own reference to the data, it can get it. Otherwise, always
- // free the buffers.
- defer data.Free()
-
- if err := c.Unmarshal(data, m); err != nil {
- return status.Errorf(codes.Internal, "grpc: failed to unmarshal the received message: %v", err)
- }
-
- return nil
-}
-
-// Information about RPC
-type rpcInfo struct {
- failfast bool
- preloaderInfo *compressorInfo
-}
-
-// Information about Preloader
-// Responsible for storing codec, and compressors
-// If stream (s) has context s.Context which stores rpcInfo that has non nil
-// pointers to codec, and compressors, then we can use preparedMsg for Async message prep
-// and reuse marshalled bytes
-type compressorInfo struct {
- codec baseCodec
- cp Compressor
- comp encoding.Compressor
-}
-
-type rpcInfoContextKey struct{}
-
-func newContextWithRPCInfo(ctx context.Context, failfast bool, codec baseCodec, cp Compressor, comp encoding.Compressor) context.Context {
- return context.WithValue(ctx, rpcInfoContextKey{}, &rpcInfo{
- failfast: failfast,
- preloaderInfo: &compressorInfo{
- codec: codec,
- cp: cp,
- comp: comp,
- },
- })
-}
-
-func rpcInfoFromContext(ctx context.Context) (s *rpcInfo, ok bool) {
- s, ok = ctx.Value(rpcInfoContextKey{}).(*rpcInfo)
- return
-}
-
-// Code returns the error code for err if it was produced by the rpc system.
-// Otherwise, it returns codes.Unknown.
-//
-// Deprecated: use status.Code instead.
-func Code(err error) codes.Code {
- return status.Code(err)
-}
-
-// ErrorDesc returns the error description of err if it was produced by the rpc system.
-// Otherwise, it returns err.Error() or empty string when err is nil.
-//
-// Deprecated: use status.Convert and Message method instead.
-func ErrorDesc(err error) string {
- return status.Convert(err).Message()
-}
-
-// Errorf returns an error containing an error code and a description;
-// Errorf returns nil if c is OK.
-//
-// Deprecated: use status.Errorf instead.
-func Errorf(c codes.Code, format string, a ...any) error {
- return status.Errorf(c, format, a...)
-}
-
-var errContextCanceled = status.Error(codes.Canceled, context.Canceled.Error())
-var errContextDeadline = status.Error(codes.DeadlineExceeded, context.DeadlineExceeded.Error())
-
-// toRPCErr converts an error into an error from the status package.
-func toRPCErr(err error) error {
- switch err {
- case nil, io.EOF:
- return err
- case context.DeadlineExceeded:
- return errContextDeadline
- case context.Canceled:
- return errContextCanceled
- case io.ErrUnexpectedEOF:
- return status.Error(codes.Internal, err.Error())
- }
-
- switch e := err.(type) {
- case transport.ConnectionError:
- return status.Error(codes.Unavailable, e.Desc)
- case *transport.NewStreamError:
- return toRPCErr(e.Err)
- }
-
- if _, ok := status.FromError(err); ok {
- return err
- }
-
- return status.Error(codes.Unknown, err.Error())
-}
-
-// setCallInfoCodec should only be called after CallOptions have been applied.
-func setCallInfoCodec(c *callInfo) error {
- if c.codec != nil {
- // codec was already set by a CallOption; use it, but set the content
- // subtype if it is not set.
- if c.contentSubtype == "" {
- // c.codec is a baseCodec to hide the difference between grpc.Codec and
- // encoding.Codec (Name vs. String method name). We only support
- // setting content subtype from encoding.Codec to avoid a behavior
- // change with the deprecated version.
- if ec, ok := c.codec.(encoding.CodecV2); ok {
- c.contentSubtype = strings.ToLower(ec.Name())
- }
- }
- return nil
- }
-
- if c.contentSubtype == "" {
- // No codec specified in CallOptions; use proto by default.
- c.codec = getCodec(proto.Name)
- return nil
- }
-
- // c.contentSubtype is already lowercased in CallContentSubtype
- c.codec = getCodec(c.contentSubtype)
- if c.codec == nil {
- return status.Errorf(codes.Internal, "no codec registered for content-subtype %s", c.contentSubtype)
- }
- return nil
-}
-
-// The SupportPackageIsVersion variables are referenced from generated protocol
-// buffer files to ensure compatibility with the gRPC version used. The latest
-// support package version is 9.
-//
-// Older versions are kept for compatibility.
-//
-// These constants should not be referenced from any other code.
-const (
- SupportPackageIsVersion3 = true
- SupportPackageIsVersion4 = true
- SupportPackageIsVersion5 = true
- SupportPackageIsVersion6 = true
- SupportPackageIsVersion7 = true
- SupportPackageIsVersion8 = true
- SupportPackageIsVersion9 = true
-)
-
-const grpcUA = "grpc-go/" + Version
diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go
deleted file mode 100644
index 16065a027..000000000
--- a/vendor/google.golang.org/grpc/server.go
+++ /dev/null
@@ -1,2205 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "errors"
- "fmt"
- "io"
- "math"
- "net"
- "net/http"
- "reflect"
- "runtime"
- "strings"
- "sync"
- "sync/atomic"
- "time"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/credentials"
- "google.golang.org/grpc/encoding"
- "google.golang.org/grpc/encoding/proto"
- "google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/internal/binarylog"
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/internal/grpcsync"
- "google.golang.org/grpc/internal/grpcutil"
- "google.golang.org/grpc/internal/transport"
- "google.golang.org/grpc/keepalive"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
- "google.golang.org/grpc/tap"
-)
-
-const (
- defaultServerMaxReceiveMessageSize = 1024 * 1024 * 4
- defaultServerMaxSendMessageSize = math.MaxInt32
-
- // Server transports are tracked in a map which is keyed on listener
- // address. For regular gRPC traffic, connections are accepted in Serve()
- // through a call to Accept(), and we use the actual listener address as key
- // when we add it to the map. But for connections received through
- // ServeHTTP(), we do not have a listener and hence use this dummy value.
- listenerAddressForServeHTTP = "listenerAddressForServeHTTP"
-)
-
-func init() {
- internal.GetServerCredentials = func(srv *Server) credentials.TransportCredentials {
- return srv.opts.creds
- }
- internal.IsRegisteredMethod = func(srv *Server, method string) bool {
- return srv.isRegisteredMethod(method)
- }
- internal.ServerFromContext = serverFromContext
- internal.AddGlobalServerOptions = func(opt ...ServerOption) {
- globalServerOptions = append(globalServerOptions, opt...)
- }
- internal.ClearGlobalServerOptions = func() {
- globalServerOptions = nil
- }
- internal.BinaryLogger = binaryLogger
- internal.JoinServerOptions = newJoinServerOption
- internal.BufferPool = bufferPool
-}
-
-var statusOK = status.New(codes.OK, "")
-var logger = grpclog.Component("core")
-
-// MethodHandler is a function type that processes a unary RPC method call.
-type MethodHandler func(srv any, ctx context.Context, dec func(any) error, interceptor UnaryServerInterceptor) (any, error)
-
-// MethodDesc represents an RPC service's method specification.
-type MethodDesc struct {
- MethodName string
- Handler MethodHandler
-}
-
-// ServiceDesc represents an RPC service's specification.
-type ServiceDesc struct {
- ServiceName string
- // The pointer to the service interface. Used to check whether the user
- // provided implementation satisfies the interface requirements.
- HandlerType any
- Methods []MethodDesc
- Streams []StreamDesc
- Metadata any
-}
-
-// serviceInfo wraps information about a service. It is very similar to
-// ServiceDesc and is constructed from it for internal purposes.
-type serviceInfo struct {
- // Contains the implementation for the methods in this service.
- serviceImpl any
- methods map[string]*MethodDesc
- streams map[string]*StreamDesc
- mdata any
-}
-
-// Server is a gRPC server to serve RPC requests.
-type Server struct {
- opts serverOptions
-
- mu sync.Mutex // guards following
- lis map[net.Listener]bool
- // conns contains all active server transports. It is a map keyed on a
- // listener address with the value being the set of active transports
- // belonging to that listener.
- conns map[string]map[transport.ServerTransport]bool
- serve bool
- drain bool
- cv *sync.Cond // signaled when connections close for GracefulStop
- services map[string]*serviceInfo // service name -> service info
- events traceEventLog
-
- quit *grpcsync.Event
- done *grpcsync.Event
- channelzRemoveOnce sync.Once
- serveWG sync.WaitGroup // counts active Serve goroutines for Stop/GracefulStop
- handlersWG sync.WaitGroup // counts active method handler goroutines
-
- channelz *channelz.Server
-
- serverWorkerChannel chan func()
- serverWorkerChannelClose func()
-}
-
-type serverOptions struct {
- creds credentials.TransportCredentials
- codec baseCodec
- cp Compressor
- dc Decompressor
- unaryInt UnaryServerInterceptor
- streamInt StreamServerInterceptor
- chainUnaryInts []UnaryServerInterceptor
- chainStreamInts []StreamServerInterceptor
- binaryLogger binarylog.Logger
- inTapHandle tap.ServerInHandle
- statsHandlers []stats.Handler
- maxConcurrentStreams uint32
- maxReceiveMessageSize int
- maxSendMessageSize int
- unknownStreamDesc *StreamDesc
- keepaliveParams keepalive.ServerParameters
- keepalivePolicy keepalive.EnforcementPolicy
- initialWindowSize int32
- initialConnWindowSize int32
- writeBufferSize int
- readBufferSize int
- sharedWriteBuffer bool
- connectionTimeout time.Duration
- maxHeaderListSize *uint32
- headerTableSize *uint32
- numServerWorkers uint32
- bufferPool mem.BufferPool
- waitForHandlers bool
-}
-
-var defaultServerOptions = serverOptions{
- maxConcurrentStreams: math.MaxUint32,
- maxReceiveMessageSize: defaultServerMaxReceiveMessageSize,
- maxSendMessageSize: defaultServerMaxSendMessageSize,
- connectionTimeout: 120 * time.Second,
- writeBufferSize: defaultWriteBufSize,
- readBufferSize: defaultReadBufSize,
- bufferPool: mem.DefaultBufferPool(),
-}
-var globalServerOptions []ServerOption
-
-// A ServerOption sets options such as credentials, codec and keepalive parameters, etc.
-type ServerOption interface {
- apply(*serverOptions)
-}
-
-// EmptyServerOption does not alter the server configuration. It can be embedded
-// in another structure to build custom server options.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type EmptyServerOption struct{}
-
-func (EmptyServerOption) apply(*serverOptions) {}
-
-// funcServerOption wraps a function that modifies serverOptions into an
-// implementation of the ServerOption interface.
-type funcServerOption struct {
- f func(*serverOptions)
-}
-
-func (fdo *funcServerOption) apply(do *serverOptions) {
- fdo.f(do)
-}
-
-func newFuncServerOption(f func(*serverOptions)) *funcServerOption {
- return &funcServerOption{
- f: f,
- }
-}
-
-// joinServerOption provides a way to combine arbitrary number of server
-// options into one.
-type joinServerOption struct {
- opts []ServerOption
-}
-
-func (mdo *joinServerOption) apply(do *serverOptions) {
- for _, opt := range mdo.opts {
- opt.apply(do)
- }
-}
-
-func newJoinServerOption(opts ...ServerOption) ServerOption {
- return &joinServerOption{opts: opts}
-}
-
-// SharedWriteBuffer allows reusing per-connection transport write buffer.
-// If this option is set to true every connection will release the buffer after
-// flushing the data on the wire.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func SharedWriteBuffer(val bool) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.sharedWriteBuffer = val
- })
-}
-
-// WriteBufferSize determines how much data can be batched before doing a write
-// on the wire. The default value for this buffer is 32KB. Zero or negative
-// values will disable the write buffer such that each write will be on underlying
-// connection. Note: A Send call may not directly translate to a write.
-func WriteBufferSize(s int) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.writeBufferSize = s
- })
-}
-
-// ReadBufferSize lets you set the size of read buffer, this determines how much
-// data can be read at most for one read syscall. The default value for this
-// buffer is 32KB. Zero or negative values will disable read buffer for a
-// connection so data framer can access the underlying conn directly.
-func ReadBufferSize(s int) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.readBufferSize = s
- })
-}
-
-// InitialWindowSize returns a ServerOption that sets window size for stream.
-// The lower bound for window size is 64K and any value smaller than that will be ignored.
-func InitialWindowSize(s int32) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.initialWindowSize = s
- })
-}
-
-// InitialConnWindowSize returns a ServerOption that sets window size for a connection.
-// The lower bound for window size is 64K and any value smaller than that will be ignored.
-func InitialConnWindowSize(s int32) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.initialConnWindowSize = s
- })
-}
-
-// KeepaliveParams returns a ServerOption that sets keepalive and max-age parameters for the server.
-func KeepaliveParams(kp keepalive.ServerParameters) ServerOption {
- if kp.Time > 0 && kp.Time < internal.KeepaliveMinServerPingTime {
- logger.Warning("Adjusting keepalive ping interval to minimum period of 1s")
- kp.Time = internal.KeepaliveMinServerPingTime
- }
-
- return newFuncServerOption(func(o *serverOptions) {
- o.keepaliveParams = kp
- })
-}
-
-// KeepaliveEnforcementPolicy returns a ServerOption that sets keepalive enforcement policy for the server.
-func KeepaliveEnforcementPolicy(kep keepalive.EnforcementPolicy) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.keepalivePolicy = kep
- })
-}
-
-// CustomCodec returns a ServerOption that sets a codec for message marshaling and unmarshaling.
-//
-// This will override any lookups by content-subtype for Codecs registered with RegisterCodec.
-//
-// Deprecated: register codecs using encoding.RegisterCodec. The server will
-// automatically use registered codecs based on the incoming requests' headers.
-// See also
-// https://github.com/grpc/grpc-go/blob/master/Documentation/encoding.md#using-a-codec.
-// Will be supported throughout 1.x.
-func CustomCodec(codec Codec) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.codec = newCodecV0Bridge(codec)
- })
-}
-
-// ForceServerCodec returns a ServerOption that sets a codec for message
-// marshaling and unmarshaling.
-//
-// This will override any lookups by content-subtype for Codecs registered
-// with RegisterCodec.
-//
-// See Content-Type on
-// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for
-// more details. Also see the documentation on RegisterCodec and
-// CallContentSubtype for more details on the interaction between encoding.Codec
-// and content-subtype.
-//
-// This function is provided for advanced users; prefer to register codecs
-// using encoding.RegisterCodec.
-// The server will automatically use registered codecs based on the incoming
-// requests' headers. See also
-// https://github.com/grpc/grpc-go/blob/master/Documentation/encoding.md#using-a-codec.
-// Will be supported throughout 1.x.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ForceServerCodec(codec encoding.Codec) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.codec = newCodecV1Bridge(codec)
- })
-}
-
-// ForceServerCodecV2 is the equivalent of ForceServerCodec, but for the new
-// CodecV2 interface.
-//
-// Will be supported throughout 1.x.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ForceServerCodecV2(codecV2 encoding.CodecV2) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.codec = codecV2
- })
-}
-
-// RPCCompressor returns a ServerOption that sets a compressor for outbound
-// messages. For backward compatibility, all outbound messages will be sent
-// using this compressor, regardless of incoming message compression. By
-// default, server messages will be sent using the same compressor with which
-// request messages were sent.
-//
-// Deprecated: use encoding.RegisterCompressor instead. Will be supported
-// throughout 1.x.
-func RPCCompressor(cp Compressor) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.cp = cp
- })
-}
-
-// RPCDecompressor returns a ServerOption that sets a decompressor for inbound
-// messages. It has higher priority than decompressors registered via
-// encoding.RegisterCompressor.
-//
-// Deprecated: use encoding.RegisterCompressor instead. Will be supported
-// throughout 1.x.
-func RPCDecompressor(dc Decompressor) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.dc = dc
- })
-}
-
-// MaxMsgSize returns a ServerOption to set the max message size in bytes the server can receive.
-// If this is not set, gRPC uses the default limit.
-//
-// Deprecated: use MaxRecvMsgSize instead. Will be supported throughout 1.x.
-func MaxMsgSize(m int) ServerOption {
- return MaxRecvMsgSize(m)
-}
-
-// MaxRecvMsgSize returns a ServerOption to set the max message size in bytes the server can receive.
-// If this is not set, gRPC uses the default 4MB.
-func MaxRecvMsgSize(m int) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.maxReceiveMessageSize = m
- })
-}
-
-// MaxSendMsgSize returns a ServerOption to set the max message size in bytes the server can send.
-// If this is not set, gRPC uses the default `math.MaxInt32`.
-func MaxSendMsgSize(m int) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.maxSendMessageSize = m
- })
-}
-
-// MaxConcurrentStreams returns a ServerOption that will apply a limit on the number
-// of concurrent streams to each ServerTransport.
-func MaxConcurrentStreams(n uint32) ServerOption {
- if n == 0 {
- n = math.MaxUint32
- }
- return newFuncServerOption(func(o *serverOptions) {
- o.maxConcurrentStreams = n
- })
-}
-
-// Creds returns a ServerOption that sets credentials for server connections.
-func Creds(c credentials.TransportCredentials) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.creds = c
- })
-}
-
-// UnaryInterceptor returns a ServerOption that sets the UnaryServerInterceptor for the
-// server. Only one unary interceptor can be installed. The construction of multiple
-// interceptors (e.g., chaining) can be implemented at the caller.
-func UnaryInterceptor(i UnaryServerInterceptor) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- if o.unaryInt != nil {
- panic("The unary server interceptor was already set and may not be reset.")
- }
- o.unaryInt = i
- })
-}
-
-// ChainUnaryInterceptor returns a ServerOption that specifies the chained interceptor
-// for unary RPCs. The first interceptor will be the outer most,
-// while the last interceptor will be the inner most wrapper around the real call.
-// All unary interceptors added by this method will be chained.
-func ChainUnaryInterceptor(interceptors ...UnaryServerInterceptor) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.chainUnaryInts = append(o.chainUnaryInts, interceptors...)
- })
-}
-
-// StreamInterceptor returns a ServerOption that sets the StreamServerInterceptor for the
-// server. Only one stream interceptor can be installed.
-func StreamInterceptor(i StreamServerInterceptor) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- if o.streamInt != nil {
- panic("The stream server interceptor was already set and may not be reset.")
- }
- o.streamInt = i
- })
-}
-
-// ChainStreamInterceptor returns a ServerOption that specifies the chained interceptor
-// for streaming RPCs. The first interceptor will be the outer most,
-// while the last interceptor will be the inner most wrapper around the real call.
-// All stream interceptors added by this method will be chained.
-func ChainStreamInterceptor(interceptors ...StreamServerInterceptor) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.chainStreamInts = append(o.chainStreamInts, interceptors...)
- })
-}
-
-// InTapHandle returns a ServerOption that sets the tap handle for all the server
-// transport to be created. Only one can be installed.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func InTapHandle(h tap.ServerInHandle) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- if o.inTapHandle != nil {
- panic("The tap handle was already set and may not be reset.")
- }
- o.inTapHandle = h
- })
-}
-
-// StatsHandler returns a ServerOption that sets the stats handler for the server.
-func StatsHandler(h stats.Handler) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- if h == nil {
- logger.Error("ignoring nil parameter in grpc.StatsHandler ServerOption")
- // Do not allow a nil stats handler, which would otherwise cause
- // panics.
- return
- }
- o.statsHandlers = append(o.statsHandlers, h)
- })
-}
-
-// binaryLogger returns a ServerOption that can set the binary logger for the
-// server.
-func binaryLogger(bl binarylog.Logger) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.binaryLogger = bl
- })
-}
-
-// UnknownServiceHandler returns a ServerOption that allows for adding a custom
-// unknown service handler. The provided method is a bidi-streaming RPC service
-// handler that will be invoked instead of returning the "unimplemented" gRPC
-// error whenever a request is received for an unregistered service or method.
-// The handling function and stream interceptor (if set) have full access to
-// the ServerStream, including its Context.
-func UnknownServiceHandler(streamHandler StreamHandler) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.unknownStreamDesc = &StreamDesc{
- StreamName: "unknown_service_handler",
- Handler: streamHandler,
- // We need to assume that the users of the streamHandler will want to use both.
- ClientStreams: true,
- ServerStreams: true,
- }
- })
-}
-
-// ConnectionTimeout returns a ServerOption that sets the timeout for
-// connection establishment (up to and including HTTP/2 handshaking) for all
-// new connections. If this is not set, the default is 120 seconds. A zero or
-// negative value will result in an immediate timeout.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ConnectionTimeout(d time.Duration) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.connectionTimeout = d
- })
-}
-
-// MaxHeaderListSizeServerOption is a ServerOption that sets the max
-// (uncompressed) size of header list that the server is prepared to accept.
-type MaxHeaderListSizeServerOption struct {
- MaxHeaderListSize uint32
-}
-
-func (o MaxHeaderListSizeServerOption) apply(so *serverOptions) {
- so.maxHeaderListSize = &o.MaxHeaderListSize
-}
-
-// MaxHeaderListSize returns a ServerOption that sets the max (uncompressed) size
-// of header list that the server is prepared to accept.
-func MaxHeaderListSize(s uint32) ServerOption {
- return MaxHeaderListSizeServerOption{
- MaxHeaderListSize: s,
- }
-}
-
-// HeaderTableSize returns a ServerOption that sets the size of dynamic
-// header table for stream.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func HeaderTableSize(s uint32) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.headerTableSize = &s
- })
-}
-
-// NumStreamWorkers returns a ServerOption that sets the number of worker
-// goroutines that should be used to process incoming streams. Setting this to
-// zero (default) will disable workers and spawn a new goroutine for each
-// stream.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func NumStreamWorkers(numServerWorkers uint32) ServerOption {
- // TODO: If/when this API gets stabilized (i.e. stream workers become the
- // only way streams are processed), change the behavior of the zero value to
- // a sane default. Preliminary experiments suggest that a value equal to the
- // number of CPUs available is most performant; requires thorough testing.
- return newFuncServerOption(func(o *serverOptions) {
- o.numServerWorkers = numServerWorkers
- })
-}
-
-// WaitForHandlers cause Stop to wait until all outstanding method handlers have
-// exited before returning. If false, Stop will return as soon as all
-// connections have closed, but method handlers may still be running. By
-// default, Stop does not wait for method handlers to return.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func WaitForHandlers(w bool) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.waitForHandlers = w
- })
-}
-
-func bufferPool(bufferPool mem.BufferPool) ServerOption {
- return newFuncServerOption(func(o *serverOptions) {
- o.bufferPool = bufferPool
- })
-}
-
-// serverWorkerResetThreshold defines how often the stack must be reset. Every
-// N requests, by spawning a new goroutine in its place, a worker can reset its
-// stack so that large stacks don't live in memory forever. 2^16 should allow
-// each goroutine stack to live for at least a few seconds in a typical
-// workload (assuming a QPS of a few thousand requests/sec).
-const serverWorkerResetThreshold = 1 << 16
-
-// serverWorker blocks on a *transport.ServerStream channel forever and waits
-// for data to be fed by serveStreams. This allows multiple requests to be
-// processed by the same goroutine, removing the need for expensive stack
-// re-allocations (see the runtime.morestack problem [1]).
-//
-// [1] https://github.com/golang/go/issues/18138
-func (s *Server) serverWorker() {
- for completed := 0; completed < serverWorkerResetThreshold; completed++ {
- f, ok := <-s.serverWorkerChannel
- if !ok {
- return
- }
- f()
- }
- go s.serverWorker()
-}
-
-// initServerWorkers creates worker goroutines and a channel to process incoming
-// connections to reduce the time spent overall on runtime.morestack.
-func (s *Server) initServerWorkers() {
- s.serverWorkerChannel = make(chan func())
- s.serverWorkerChannelClose = grpcsync.OnceFunc(func() {
- close(s.serverWorkerChannel)
- })
- for i := uint32(0); i < s.opts.numServerWorkers; i++ {
- go s.serverWorker()
- }
-}
-
-// NewServer creates a gRPC server which has no service registered and has not
-// started to accept requests yet.
-func NewServer(opt ...ServerOption) *Server {
- opts := defaultServerOptions
- for _, o := range globalServerOptions {
- o.apply(&opts)
- }
- for _, o := range opt {
- o.apply(&opts)
- }
- s := &Server{
- lis: make(map[net.Listener]bool),
- opts: opts,
- conns: make(map[string]map[transport.ServerTransport]bool),
- services: make(map[string]*serviceInfo),
- quit: grpcsync.NewEvent(),
- done: grpcsync.NewEvent(),
- channelz: channelz.RegisterServer(""),
- }
- chainUnaryServerInterceptors(s)
- chainStreamServerInterceptors(s)
- s.cv = sync.NewCond(&s.mu)
- if EnableTracing {
- _, file, line, _ := runtime.Caller(1)
- s.events = newTraceEventLog("grpc.Server", fmt.Sprintf("%s:%d", file, line))
- }
-
- if s.opts.numServerWorkers > 0 {
- s.initServerWorkers()
- }
-
- channelz.Info(logger, s.channelz, "Server created")
- return s
-}
-
-// printf records an event in s's event log, unless s has been stopped.
-// REQUIRES s.mu is held.
-func (s *Server) printf(format string, a ...any) {
- if s.events != nil {
- s.events.Printf(format, a...)
- }
-}
-
-// errorf records an error in s's event log, unless s has been stopped.
-// REQUIRES s.mu is held.
-func (s *Server) errorf(format string, a ...any) {
- if s.events != nil {
- s.events.Errorf(format, a...)
- }
-}
-
-// ServiceRegistrar wraps a single method that supports service registration. It
-// enables users to pass concrete types other than grpc.Server to the service
-// registration methods exported by the IDL generated code.
-type ServiceRegistrar interface {
- // RegisterService registers a service and its implementation to the
- // concrete type implementing this interface. It may not be called
- // once the server has started serving.
- // desc describes the service and its methods and handlers. impl is the
- // service implementation which is passed to the method handlers.
- RegisterService(desc *ServiceDesc, impl any)
-}
-
-// RegisterService registers a service and its implementation to the gRPC
-// server. It is called from the IDL generated code. This must be called before
-// invoking Serve. If ss is non-nil (for legacy code), its type is checked to
-// ensure it implements sd.HandlerType.
-func (s *Server) RegisterService(sd *ServiceDesc, ss any) {
- if ss != nil {
- ht := reflect.TypeOf(sd.HandlerType).Elem()
- st := reflect.TypeOf(ss)
- if !st.Implements(ht) {
- logger.Fatalf("grpc: Server.RegisterService found the handler of type %v that does not satisfy %v", st, ht)
- }
- }
- s.register(sd, ss)
-}
-
-func (s *Server) register(sd *ServiceDesc, ss any) {
- s.mu.Lock()
- defer s.mu.Unlock()
- s.printf("RegisterService(%q)", sd.ServiceName)
- if s.serve {
- logger.Fatalf("grpc: Server.RegisterService after Server.Serve for %q", sd.ServiceName)
- }
- if _, ok := s.services[sd.ServiceName]; ok {
- logger.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName)
- }
- info := &serviceInfo{
- serviceImpl: ss,
- methods: make(map[string]*MethodDesc),
- streams: make(map[string]*StreamDesc),
- mdata: sd.Metadata,
- }
- for i := range sd.Methods {
- d := &sd.Methods[i]
- info.methods[d.MethodName] = d
- }
- for i := range sd.Streams {
- d := &sd.Streams[i]
- info.streams[d.StreamName] = d
- }
- s.services[sd.ServiceName] = info
-}
-
-// MethodInfo contains the information of an RPC including its method name and type.
-type MethodInfo struct {
- // Name is the method name only, without the service name or package name.
- Name string
- // IsClientStream indicates whether the RPC is a client streaming RPC.
- IsClientStream bool
- // IsServerStream indicates whether the RPC is a server streaming RPC.
- IsServerStream bool
-}
-
-// ServiceInfo contains unary RPC method info, streaming RPC method info and metadata for a service.
-type ServiceInfo struct {
- Methods []MethodInfo
- // Metadata is the metadata specified in ServiceDesc when registering service.
- Metadata any
-}
-
-// GetServiceInfo returns a map from service names to ServiceInfo.
-// Service names include the package names, in the form of <package>.<service>.
-func (s *Server) GetServiceInfo() map[string]ServiceInfo {
- ret := make(map[string]ServiceInfo)
- for n, srv := range s.services {
- methods := make([]MethodInfo, 0, len(srv.methods)+len(srv.streams))
- for m := range srv.methods {
- methods = append(methods, MethodInfo{
- Name: m,
- IsClientStream: false,
- IsServerStream: false,
- })
- }
- for m, d := range srv.streams {
- methods = append(methods, MethodInfo{
- Name: m,
- IsClientStream: d.ClientStreams,
- IsServerStream: d.ServerStreams,
- })
- }
-
- ret[n] = ServiceInfo{
- Methods: methods,
- Metadata: srv.mdata,
- }
- }
- return ret
-}
-
-// ErrServerStopped indicates that the operation is now illegal because of
-// the server being stopped.
-var ErrServerStopped = errors.New("grpc: the server has been stopped")
-
-type listenSocket struct {
- net.Listener
- channelz *channelz.Socket
-}
-
-func (l *listenSocket) Close() error {
- err := l.Listener.Close()
- channelz.RemoveEntry(l.channelz.ID)
- channelz.Info(logger, l.channelz, "ListenSocket deleted")
- return err
-}
-
-// Serve accepts incoming connections on the listener lis, creating a new
-// ServerTransport and service goroutine for each. The service goroutines
-// read gRPC requests and then call the registered handlers to reply to them.
-// Serve returns when lis.Accept fails with fatal errors. lis will be closed when
-// this method returns.
-// Serve will return a non-nil error unless Stop or GracefulStop is called.
-//
-// Note: All supported releases of Go (as of December 2023) override the OS
-// defaults for TCP keepalive time and interval to 15s. To enable TCP keepalive
-// with OS defaults for keepalive time and interval, callers need to do the
-// following two things:
-// - pass a net.Listener created by calling the Listen method on a
-// net.ListenConfig with the `KeepAlive` field set to a negative value. This
-// will result in the Go standard library not overriding OS defaults for TCP
-// keepalive interval and time. But this will also result in the Go standard
-// library not enabling TCP keepalives by default.
-// - override the Accept method on the passed in net.Listener and set the
-// SO_KEEPALIVE socket option to enable TCP keepalives, with OS defaults.
-func (s *Server) Serve(lis net.Listener) error {
- s.mu.Lock()
- s.printf("serving")
- s.serve = true
- if s.lis == nil {
- // Serve called after Stop or GracefulStop.
- s.mu.Unlock()
- lis.Close()
- return ErrServerStopped
- }
-
- s.serveWG.Add(1)
- defer func() {
- s.serveWG.Done()
- if s.quit.HasFired() {
- // Stop or GracefulStop called; block until done and return nil.
- <-s.done.Done()
- }
- }()
-
- ls := &listenSocket{
- Listener: lis,
- channelz: channelz.RegisterSocket(&channelz.Socket{
- SocketType: channelz.SocketTypeListen,
- Parent: s.channelz,
- RefName: lis.Addr().String(),
- LocalAddr: lis.Addr(),
- SocketOptions: channelz.GetSocketOption(lis)},
- ),
- }
- s.lis[ls] = true
-
- defer func() {
- s.mu.Lock()
- if s.lis != nil && s.lis[ls] {
- ls.Close()
- delete(s.lis, ls)
- }
- s.mu.Unlock()
- }()
-
- s.mu.Unlock()
- channelz.Info(logger, ls.channelz, "ListenSocket created")
-
- var tempDelay time.Duration // how long to sleep on accept failure
- for {
- rawConn, err := lis.Accept()
- if err != nil {
- if ne, ok := err.(interface {
- Temporary() bool
- }); ok && ne.Temporary() {
- if tempDelay == 0 {
- tempDelay = 5 * time.Millisecond
- } else {
- tempDelay *= 2
- }
- if max := 1 * time.Second; tempDelay > max {
- tempDelay = max
- }
- s.mu.Lock()
- s.printf("Accept error: %v; retrying in %v", err, tempDelay)
- s.mu.Unlock()
- timer := time.NewTimer(tempDelay)
- select {
- case <-timer.C:
- case <-s.quit.Done():
- timer.Stop()
- return nil
- }
- continue
- }
- s.mu.Lock()
- s.printf("done serving; Accept = %v", err)
- s.mu.Unlock()
-
- if s.quit.HasFired() {
- return nil
- }
- return err
- }
- tempDelay = 0
- // Start a new goroutine to deal with rawConn so we don't stall this Accept
- // loop goroutine.
- //
- // Make sure we account for the goroutine so GracefulStop doesn't nil out
- // s.conns before this conn can be added.
- s.serveWG.Add(1)
- go func() {
- s.handleRawConn(lis.Addr().String(), rawConn)
- s.serveWG.Done()
- }()
- }
-}
-
-// handleRawConn forks a goroutine to handle a just-accepted connection that
-// has not had any I/O performed on it yet.
-func (s *Server) handleRawConn(lisAddr string, rawConn net.Conn) {
- if s.quit.HasFired() {
- rawConn.Close()
- return
- }
- rawConn.SetDeadline(time.Now().Add(s.opts.connectionTimeout))
-
- // Finish handshaking (HTTP2)
- st := s.newHTTP2Transport(rawConn)
- rawConn.SetDeadline(time.Time{})
- if st == nil {
- return
- }
-
- if cc, ok := rawConn.(interface {
- PassServerTransport(transport.ServerTransport)
- }); ok {
- cc.PassServerTransport(st)
- }
-
- if !s.addConn(lisAddr, st) {
- return
- }
- go func() {
- s.serveStreams(context.Background(), st, rawConn)
- s.removeConn(lisAddr, st)
- }()
-}
-
-// newHTTP2Transport sets up a http/2 transport (using the
-// gRPC http2 server transport in transport/http2_server.go).
-func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport {
- config := &transport.ServerConfig{
- MaxStreams: s.opts.maxConcurrentStreams,
- ConnectionTimeout: s.opts.connectionTimeout,
- Credentials: s.opts.creds,
- InTapHandle: s.opts.inTapHandle,
- StatsHandlers: s.opts.statsHandlers,
- KeepaliveParams: s.opts.keepaliveParams,
- KeepalivePolicy: s.opts.keepalivePolicy,
- InitialWindowSize: s.opts.initialWindowSize,
- InitialConnWindowSize: s.opts.initialConnWindowSize,
- WriteBufferSize: s.opts.writeBufferSize,
- ReadBufferSize: s.opts.readBufferSize,
- SharedWriteBuffer: s.opts.sharedWriteBuffer,
- ChannelzParent: s.channelz,
- MaxHeaderListSize: s.opts.maxHeaderListSize,
- HeaderTableSize: s.opts.headerTableSize,
- BufferPool: s.opts.bufferPool,
- }
- st, err := transport.NewServerTransport(c, config)
- if err != nil {
- s.mu.Lock()
- s.errorf("NewServerTransport(%q) failed: %v", c.RemoteAddr(), err)
- s.mu.Unlock()
- // ErrConnDispatched means that the connection was dispatched away from
- // gRPC; those connections should be left open.
- if err != credentials.ErrConnDispatched {
- // Don't log on ErrConnDispatched and io.EOF to prevent log spam.
- if err != io.EOF {
- channelz.Info(logger, s.channelz, "grpc: Server.Serve failed to create ServerTransport: ", err)
- }
- c.Close()
- }
- return nil
- }
-
- return st
-}
-
-func (s *Server) serveStreams(ctx context.Context, st transport.ServerTransport, rawConn net.Conn) {
- ctx = transport.SetConnection(ctx, rawConn)
- ctx = peer.NewContext(ctx, st.Peer())
- for _, sh := range s.opts.statsHandlers {
- ctx = sh.TagConn(ctx, &stats.ConnTagInfo{
- RemoteAddr: st.Peer().Addr,
- LocalAddr: st.Peer().LocalAddr,
- })
- sh.HandleConn(ctx, &stats.ConnBegin{})
- }
-
- defer func() {
- st.Close(errors.New("finished serving streams for the server transport"))
- for _, sh := range s.opts.statsHandlers {
- sh.HandleConn(ctx, &stats.ConnEnd{})
- }
- }()
-
- streamQuota := newHandlerQuota(s.opts.maxConcurrentStreams)
- st.HandleStreams(ctx, func(stream *transport.ServerStream) {
- s.handlersWG.Add(1)
- streamQuota.acquire()
- f := func() {
- defer streamQuota.release()
- defer s.handlersWG.Done()
- s.handleStream(st, stream)
- }
-
- if s.opts.numServerWorkers > 0 {
- select {
- case s.serverWorkerChannel <- f:
- return
- default:
- // If all stream workers are busy, fallback to the default code path.
- }
- }
- go f()
- })
-}
-
-var _ http.Handler = (*Server)(nil)
-
-// ServeHTTP implements the Go standard library's http.Handler
-// interface by responding to the gRPC request r, by looking up
-// the requested gRPC method in the gRPC server s.
-//
-// The provided HTTP request must have arrived on an HTTP/2
-// connection. When using the Go standard library's server,
-// practically this means that the Request must also have arrived
-// over TLS.
-//
-// To share one port (such as 443 for https) between gRPC and an
-// existing http.Handler, use a root http.Handler such as:
-//
-// if r.ProtoMajor == 2 && strings.HasPrefix(
-// r.Header.Get("Content-Type"), "application/grpc") {
-// grpcServer.ServeHTTP(w, r)
-// } else {
-// yourMux.ServeHTTP(w, r)
-// }
-//
-// Note that ServeHTTP uses Go's HTTP/2 server implementation which is totally
-// separate from grpc-go's HTTP/2 server. Performance and features may vary
-// between the two paths. ServeHTTP does not support some gRPC features
-// available through grpc-go's HTTP/2 server.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- st, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandlers, s.opts.bufferPool)
- if err != nil {
- // Errors returned from transport.NewServerHandlerTransport have
- // already been written to w.
- return
- }
- if !s.addConn(listenerAddressForServeHTTP, st) {
- return
- }
- defer s.removeConn(listenerAddressForServeHTTP, st)
- s.serveStreams(r.Context(), st, nil)
-}
-
-func (s *Server) addConn(addr string, st transport.ServerTransport) bool {
- s.mu.Lock()
- defer s.mu.Unlock()
- if s.conns == nil {
- st.Close(errors.New("Server.addConn called when server has already been stopped"))
- return false
- }
- if s.drain {
- // Transport added after we drained our existing conns: drain it
- // immediately.
- st.Drain("")
- }
-
- if s.conns[addr] == nil {
- // Create a map entry if this is the first connection on this listener.
- s.conns[addr] = make(map[transport.ServerTransport]bool)
- }
- s.conns[addr][st] = true
- return true
-}
-
-func (s *Server) removeConn(addr string, st transport.ServerTransport) {
- s.mu.Lock()
- defer s.mu.Unlock()
-
- conns := s.conns[addr]
- if conns != nil {
- delete(conns, st)
- if len(conns) == 0 {
- // If the last connection for this address is being removed, also
- // remove the map entry corresponding to the address. This is used
- // in GracefulStop() when waiting for all connections to be closed.
- delete(s.conns, addr)
- }
- s.cv.Broadcast()
- }
-}
-
-func (s *Server) incrCallsStarted() {
- s.channelz.ServerMetrics.CallsStarted.Add(1)
- s.channelz.ServerMetrics.LastCallStartedTimestamp.Store(time.Now().UnixNano())
-}
-
-func (s *Server) incrCallsSucceeded() {
- s.channelz.ServerMetrics.CallsSucceeded.Add(1)
-}
-
-func (s *Server) incrCallsFailed() {
- s.channelz.ServerMetrics.CallsFailed.Add(1)
-}
-
-func (s *Server) sendResponse(ctx context.Context, stream *transport.ServerStream, msg any, cp Compressor, opts *transport.WriteOptions, comp encoding.Compressor) error {
- data, err := encode(s.getCodec(stream.ContentSubtype()), msg)
- if err != nil {
- channelz.Error(logger, s.channelz, "grpc: server failed to encode response: ", err)
- return err
- }
-
- compData, pf, err := compress(data, cp, comp, s.opts.bufferPool)
- if err != nil {
- data.Free()
- channelz.Error(logger, s.channelz, "grpc: server failed to compress response: ", err)
- return err
- }
-
- hdr, payload := msgHeader(data, compData, pf)
-
- defer func() {
- compData.Free()
- data.Free()
- // payload does not need to be freed here, it is either data or compData, both of
- // which are already freed.
- }()
-
- dataLen := data.Len()
- payloadLen := payload.Len()
- // TODO(dfawley): should we be checking len(data) instead?
- if payloadLen > s.opts.maxSendMessageSize {
- return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", payloadLen, s.opts.maxSendMessageSize)
- }
- err = stream.Write(hdr, payload, opts)
- if err == nil {
- if len(s.opts.statsHandlers) != 0 {
- for _, sh := range s.opts.statsHandlers {
- sh.HandleRPC(ctx, outPayload(false, msg, dataLen, payloadLen, time.Now()))
- }
- }
- }
- return err
-}
-
-// chainUnaryServerInterceptors chains all unary server interceptors into one.
-func chainUnaryServerInterceptors(s *Server) {
- // Prepend opts.unaryInt to the chaining interceptors if it exists, since unaryInt will
- // be executed before any other chained interceptors.
- interceptors := s.opts.chainUnaryInts
- if s.opts.unaryInt != nil {
- interceptors = append([]UnaryServerInterceptor{s.opts.unaryInt}, s.opts.chainUnaryInts...)
- }
-
- var chainedInt UnaryServerInterceptor
- if len(interceptors) == 0 {
- chainedInt = nil
- } else if len(interceptors) == 1 {
- chainedInt = interceptors[0]
- } else {
- chainedInt = chainUnaryInterceptors(interceptors)
- }
-
- s.opts.unaryInt = chainedInt
-}
-
-func chainUnaryInterceptors(interceptors []UnaryServerInterceptor) UnaryServerInterceptor {
- return func(ctx context.Context, req any, info *UnaryServerInfo, handler UnaryHandler) (any, error) {
- return interceptors[0](ctx, req, info, getChainUnaryHandler(interceptors, 0, info, handler))
- }
-}
-
-func getChainUnaryHandler(interceptors []UnaryServerInterceptor, curr int, info *UnaryServerInfo, finalHandler UnaryHandler) UnaryHandler {
- if curr == len(interceptors)-1 {
- return finalHandler
- }
- return func(ctx context.Context, req any) (any, error) {
- return interceptors[curr+1](ctx, req, info, getChainUnaryHandler(interceptors, curr+1, info, finalHandler))
- }
-}
-
-func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerStream, info *serviceInfo, md *MethodDesc, trInfo *traceInfo) (err error) {
- shs := s.opts.statsHandlers
- if len(shs) != 0 || trInfo != nil || channelz.IsOn() {
- if channelz.IsOn() {
- s.incrCallsStarted()
- }
- var statsBegin *stats.Begin
- for _, sh := range shs {
- beginTime := time.Now()
- statsBegin = &stats.Begin{
- BeginTime: beginTime,
- IsClientStream: false,
- IsServerStream: false,
- }
- sh.HandleRPC(ctx, statsBegin)
- }
- if trInfo != nil {
- trInfo.tr.LazyLog(&trInfo.firstLine, false)
- }
- // The deferred error handling for tracing, stats handler and channelz are
- // combined into one function to reduce stack usage -- a defer takes ~56-64
- // bytes on the stack, so overflowing the stack will require a stack
- // re-allocation, which is expensive.
- //
- // To maintain behavior similar to separate deferred statements, statements
- // should be executed in the reverse order. That is, tracing first, stats
- // handler second, and channelz last. Note that panics *within* defers will
- // lead to different behavior, but that's an acceptable compromise; that
- // would be undefined behavior territory anyway.
- defer func() {
- if trInfo != nil {
- if err != nil && err != io.EOF {
- trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true)
- trInfo.tr.SetError()
- }
- trInfo.tr.Finish()
- }
-
- for _, sh := range shs {
- end := &stats.End{
- BeginTime: statsBegin.BeginTime,
- EndTime: time.Now(),
- }
- if err != nil && err != io.EOF {
- end.Error = toRPCErr(err)
- }
- sh.HandleRPC(ctx, end)
- }
-
- if channelz.IsOn() {
- if err != nil && err != io.EOF {
- s.incrCallsFailed()
- } else {
- s.incrCallsSucceeded()
- }
- }
- }()
- }
- var binlogs []binarylog.MethodLogger
- if ml := binarylog.GetMethodLogger(stream.Method()); ml != nil {
- binlogs = append(binlogs, ml)
- }
- if s.opts.binaryLogger != nil {
- if ml := s.opts.binaryLogger.GetMethodLogger(stream.Method()); ml != nil {
- binlogs = append(binlogs, ml)
- }
- }
- if len(binlogs) != 0 {
- md, _ := metadata.FromIncomingContext(ctx)
- logEntry := &binarylog.ClientHeader{
- Header: md,
- MethodName: stream.Method(),
- PeerAddr: nil,
- }
- if deadline, ok := ctx.Deadline(); ok {
- logEntry.Timeout = time.Until(deadline)
- if logEntry.Timeout < 0 {
- logEntry.Timeout = 0
- }
- }
- if a := md[":authority"]; len(a) > 0 {
- logEntry.Authority = a[0]
- }
- if peer, ok := peer.FromContext(ctx); ok {
- logEntry.PeerAddr = peer.Addr
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, logEntry)
- }
- }
-
- // comp and cp are used for compression. decomp and dc are used for
- // decompression. If comp and decomp are both set, they are the same;
- // however they are kept separate to ensure that at most one of the
- // compressor/decompressor variable pairs are set for use later.
- var comp, decomp encoding.Compressor
- var cp Compressor
- var dc Decompressor
- var sendCompressorName string
-
- // If dc is set and matches the stream's compression, use it. Otherwise, try
- // to find a matching registered compressor for decomp.
- if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc {
- dc = s.opts.dc
- } else if rc != "" && rc != encoding.Identity {
- decomp = encoding.GetCompressor(rc)
- if decomp == nil {
- st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc)
- stream.WriteStatus(st)
- return st.Err()
- }
- }
-
- // If cp is set, use it. Otherwise, attempt to compress the response using
- // the incoming message compression method.
- //
- // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686.
- if s.opts.cp != nil {
- cp = s.opts.cp
- sendCompressorName = cp.Type()
- } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity {
- // Legacy compressor not specified; attempt to respond with same encoding.
- comp = encoding.GetCompressor(rc)
- if comp != nil {
- sendCompressorName = comp.Name()
- }
- }
-
- if sendCompressorName != "" {
- if err := stream.SetSendCompress(sendCompressorName); err != nil {
- return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err)
- }
- }
-
- var payInfo *payloadInfo
- if len(shs) != 0 || len(binlogs) != 0 {
- payInfo = &payloadInfo{}
- defer payInfo.free()
- }
-
- d, err := recvAndDecompress(&parser{r: stream, bufferPool: s.opts.bufferPool}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp, true)
- if err != nil {
- if e := stream.WriteStatus(status.Convert(err)); e != nil {
- channelz.Warningf(logger, s.channelz, "grpc: Server.processUnaryRPC failed to write status: %v", e)
- }
- return err
- }
- defer d.Free()
- df := func(v any) error {
- if err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil {
- return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err)
- }
-
- for _, sh := range shs {
- sh.HandleRPC(ctx, &stats.InPayload{
- RecvTime: time.Now(),
- Payload: v,
- Length: d.Len(),
- WireLength: payInfo.compressedLength + headerLen,
- CompressedLength: payInfo.compressedLength,
- })
- }
- if len(binlogs) != 0 {
- cm := &binarylog.ClientMessage{
- Message: d.Materialize(),
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, cm)
- }
- }
- if trInfo != nil {
- trInfo.tr.LazyLog(&payload{sent: false, msg: v}, true)
- }
- return nil
- }
- ctx = NewContextWithServerTransportStream(ctx, stream)
- reply, appErr := md.Handler(info.serviceImpl, ctx, df, s.opts.unaryInt)
- if appErr != nil {
- appStatus, ok := status.FromError(appErr)
- if !ok {
- // Convert non-status application error to a status error with code
- // Unknown, but handle context errors specifically.
- appStatus = status.FromContextError(appErr)
- appErr = appStatus.Err()
- }
- if trInfo != nil {
- trInfo.tr.LazyLog(stringer(appStatus.Message()), true)
- trInfo.tr.SetError()
- }
- if e := stream.WriteStatus(appStatus); e != nil {
- channelz.Warningf(logger, s.channelz, "grpc: Server.processUnaryRPC failed to write status: %v", e)
- }
- if len(binlogs) != 0 {
- if h, _ := stream.Header(); h.Len() > 0 {
- // Only log serverHeader if there was header. Otherwise it can
- // be trailer only.
- sh := &binarylog.ServerHeader{
- Header: h,
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, sh)
- }
- }
- st := &binarylog.ServerTrailer{
- Trailer: stream.Trailer(),
- Err: appErr,
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, st)
- }
- }
- return appErr
- }
- if trInfo != nil {
- trInfo.tr.LazyLog(stringer("OK"), false)
- }
- opts := &transport.WriteOptions{Last: true}
-
- // Server handler could have set new compressor by calling SetSendCompressor.
- // In case it is set, we need to use it for compressing outbound message.
- if stream.SendCompress() != sendCompressorName {
- comp = encoding.GetCompressor(stream.SendCompress())
- }
- if err := s.sendResponse(ctx, stream, reply, cp, opts, comp); err != nil {
- if err == io.EOF {
- // The entire stream is done (for unary RPC only).
- return err
- }
- if sts, ok := status.FromError(err); ok {
- if e := stream.WriteStatus(sts); e != nil {
- channelz.Warningf(logger, s.channelz, "grpc: Server.processUnaryRPC failed to write status: %v", e)
- }
- } else {
- switch st := err.(type) {
- case transport.ConnectionError:
- // Nothing to do here.
- default:
- panic(fmt.Sprintf("grpc: Unexpected error (%T) from sendResponse: %v", st, st))
- }
- }
- if len(binlogs) != 0 {
- h, _ := stream.Header()
- sh := &binarylog.ServerHeader{
- Header: h,
- }
- st := &binarylog.ServerTrailer{
- Trailer: stream.Trailer(),
- Err: appErr,
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, sh)
- binlog.Log(ctx, st)
- }
- }
- return err
- }
- if len(binlogs) != 0 {
- h, _ := stream.Header()
- sh := &binarylog.ServerHeader{
- Header: h,
- }
- sm := &binarylog.ServerMessage{
- Message: reply,
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, sh)
- binlog.Log(ctx, sm)
- }
- }
- if trInfo != nil {
- trInfo.tr.LazyLog(&payload{sent: true, msg: reply}, true)
- }
- // TODO: Should we be logging if writing status failed here, like above?
- // Should the logging be in WriteStatus? Should we ignore the WriteStatus
- // error or allow the stats handler to see it?
- if len(binlogs) != 0 {
- st := &binarylog.ServerTrailer{
- Trailer: stream.Trailer(),
- Err: appErr,
- }
- for _, binlog := range binlogs {
- binlog.Log(ctx, st)
- }
- }
- return stream.WriteStatus(statusOK)
-}
-
-// chainStreamServerInterceptors chains all stream server interceptors into one.
-func chainStreamServerInterceptors(s *Server) {
- // Prepend opts.streamInt to the chaining interceptors if it exists, since streamInt will
- // be executed before any other chained interceptors.
- interceptors := s.opts.chainStreamInts
- if s.opts.streamInt != nil {
- interceptors = append([]StreamServerInterceptor{s.opts.streamInt}, s.opts.chainStreamInts...)
- }
-
- var chainedInt StreamServerInterceptor
- if len(interceptors) == 0 {
- chainedInt = nil
- } else if len(interceptors) == 1 {
- chainedInt = interceptors[0]
- } else {
- chainedInt = chainStreamInterceptors(interceptors)
- }
-
- s.opts.streamInt = chainedInt
-}
-
-func chainStreamInterceptors(interceptors []StreamServerInterceptor) StreamServerInterceptor {
- return func(srv any, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error {
- return interceptors[0](srv, ss, info, getChainStreamHandler(interceptors, 0, info, handler))
- }
-}
-
-func getChainStreamHandler(interceptors []StreamServerInterceptor, curr int, info *StreamServerInfo, finalHandler StreamHandler) StreamHandler {
- if curr == len(interceptors)-1 {
- return finalHandler
- }
- return func(srv any, stream ServerStream) error {
- return interceptors[curr+1](srv, stream, info, getChainStreamHandler(interceptors, curr+1, info, finalHandler))
- }
-}
-
-func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.ServerStream, info *serviceInfo, sd *StreamDesc, trInfo *traceInfo) (err error) {
- if channelz.IsOn() {
- s.incrCallsStarted()
- }
- shs := s.opts.statsHandlers
- var statsBegin *stats.Begin
- if len(shs) != 0 {
- beginTime := time.Now()
- statsBegin = &stats.Begin{
- BeginTime: beginTime,
- IsClientStream: sd.ClientStreams,
- IsServerStream: sd.ServerStreams,
- }
- for _, sh := range shs {
- sh.HandleRPC(ctx, statsBegin)
- }
- }
- ctx = NewContextWithServerTransportStream(ctx, stream)
- ss := &serverStream{
- ctx: ctx,
- s: stream,
- p: &parser{r: stream, bufferPool: s.opts.bufferPool},
- codec: s.getCodec(stream.ContentSubtype()),
- maxReceiveMessageSize: s.opts.maxReceiveMessageSize,
- maxSendMessageSize: s.opts.maxSendMessageSize,
- trInfo: trInfo,
- statsHandler: shs,
- }
-
- if len(shs) != 0 || trInfo != nil || channelz.IsOn() {
- // See comment in processUnaryRPC on defers.
- defer func() {
- if trInfo != nil {
- ss.mu.Lock()
- if err != nil && err != io.EOF {
- ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true)
- ss.trInfo.tr.SetError()
- }
- ss.trInfo.tr.Finish()
- ss.trInfo.tr = nil
- ss.mu.Unlock()
- }
-
- if len(shs) != 0 {
- end := &stats.End{
- BeginTime: statsBegin.BeginTime,
- EndTime: time.Now(),
- }
- if err != nil && err != io.EOF {
- end.Error = toRPCErr(err)
- }
- for _, sh := range shs {
- sh.HandleRPC(ctx, end)
- }
- }
-
- if channelz.IsOn() {
- if err != nil && err != io.EOF {
- s.incrCallsFailed()
- } else {
- s.incrCallsSucceeded()
- }
- }
- }()
- }
-
- if ml := binarylog.GetMethodLogger(stream.Method()); ml != nil {
- ss.binlogs = append(ss.binlogs, ml)
- }
- if s.opts.binaryLogger != nil {
- if ml := s.opts.binaryLogger.GetMethodLogger(stream.Method()); ml != nil {
- ss.binlogs = append(ss.binlogs, ml)
- }
- }
- if len(ss.binlogs) != 0 {
- md, _ := metadata.FromIncomingContext(ctx)
- logEntry := &binarylog.ClientHeader{
- Header: md,
- MethodName: stream.Method(),
- PeerAddr: nil,
- }
- if deadline, ok := ctx.Deadline(); ok {
- logEntry.Timeout = time.Until(deadline)
- if logEntry.Timeout < 0 {
- logEntry.Timeout = 0
- }
- }
- if a := md[":authority"]; len(a) > 0 {
- logEntry.Authority = a[0]
- }
- if peer, ok := peer.FromContext(ss.Context()); ok {
- logEntry.PeerAddr = peer.Addr
- }
- for _, binlog := range ss.binlogs {
- binlog.Log(ctx, logEntry)
- }
- }
-
- // If dc is set and matches the stream's compression, use it. Otherwise, try
- // to find a matching registered compressor for decomp.
- if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc {
- ss.dc = s.opts.dc
- } else if rc != "" && rc != encoding.Identity {
- ss.decomp = encoding.GetCompressor(rc)
- if ss.decomp == nil {
- st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc)
- ss.s.WriteStatus(st)
- return st.Err()
- }
- }
-
- // If cp is set, use it. Otherwise, attempt to compress the response using
- // the incoming message compression method.
- //
- // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686.
- if s.opts.cp != nil {
- ss.cp = s.opts.cp
- ss.sendCompressorName = s.opts.cp.Type()
- } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity {
- // Legacy compressor not specified; attempt to respond with same encoding.
- ss.comp = encoding.GetCompressor(rc)
- if ss.comp != nil {
- ss.sendCompressorName = rc
- }
- }
-
- if ss.sendCompressorName != "" {
- if err := stream.SetSendCompress(ss.sendCompressorName); err != nil {
- return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err)
- }
- }
-
- ss.ctx = newContextWithRPCInfo(ss.ctx, false, ss.codec, ss.cp, ss.comp)
-
- if trInfo != nil {
- trInfo.tr.LazyLog(&trInfo.firstLine, false)
- }
- var appErr error
- var server any
- if info != nil {
- server = info.serviceImpl
- }
- if s.opts.streamInt == nil {
- appErr = sd.Handler(server, ss)
- } else {
- info := &StreamServerInfo{
- FullMethod: stream.Method(),
- IsClientStream: sd.ClientStreams,
- IsServerStream: sd.ServerStreams,
- }
- appErr = s.opts.streamInt(server, ss, info, sd.Handler)
- }
- if appErr != nil {
- appStatus, ok := status.FromError(appErr)
- if !ok {
- // Convert non-status application error to a status error with code
- // Unknown, but handle context errors specifically.
- appStatus = status.FromContextError(appErr)
- appErr = appStatus.Err()
- }
- if trInfo != nil {
- ss.mu.Lock()
- ss.trInfo.tr.LazyLog(stringer(appStatus.Message()), true)
- ss.trInfo.tr.SetError()
- ss.mu.Unlock()
- }
- if len(ss.binlogs) != 0 {
- st := &binarylog.ServerTrailer{
- Trailer: ss.s.Trailer(),
- Err: appErr,
- }
- for _, binlog := range ss.binlogs {
- binlog.Log(ctx, st)
- }
- }
- ss.s.WriteStatus(appStatus)
- // TODO: Should we log an error from WriteStatus here and below?
- return appErr
- }
- if trInfo != nil {
- ss.mu.Lock()
- ss.trInfo.tr.LazyLog(stringer("OK"), false)
- ss.mu.Unlock()
- }
- if len(ss.binlogs) != 0 {
- st := &binarylog.ServerTrailer{
- Trailer: ss.s.Trailer(),
- Err: appErr,
- }
- for _, binlog := range ss.binlogs {
- binlog.Log(ctx, st)
- }
- }
- return ss.s.WriteStatus(statusOK)
-}
-
-func (s *Server) handleStream(t transport.ServerTransport, stream *transport.ServerStream) {
- ctx := stream.Context()
- ctx = contextWithServer(ctx, s)
- var ti *traceInfo
- if EnableTracing {
- tr := newTrace("grpc.Recv."+methodFamily(stream.Method()), stream.Method())
- ctx = newTraceContext(ctx, tr)
- ti = &traceInfo{
- tr: tr,
- firstLine: firstLine{
- client: false,
- remoteAddr: t.Peer().Addr,
- },
- }
- if dl, ok := ctx.Deadline(); ok {
- ti.firstLine.deadline = time.Until(dl)
- }
- }
-
- sm := stream.Method()
- if sm != "" && sm[0] == '/' {
- sm = sm[1:]
- }
- pos := strings.LastIndex(sm, "/")
- if pos == -1 {
- if ti != nil {
- ti.tr.LazyLog(&fmtStringer{"Malformed method name %q", []any{sm}}, true)
- ti.tr.SetError()
- }
- errDesc := fmt.Sprintf("malformed method name: %q", stream.Method())
- if err := stream.WriteStatus(status.New(codes.Unimplemented, errDesc)); err != nil {
- if ti != nil {
- ti.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true)
- ti.tr.SetError()
- }
- channelz.Warningf(logger, s.channelz, "grpc: Server.handleStream failed to write status: %v", err)
- }
- if ti != nil {
- ti.tr.Finish()
- }
- return
- }
- service := sm[:pos]
- method := sm[pos+1:]
-
- // FromIncomingContext is expensive: skip if there are no statsHandlers
- if len(s.opts.statsHandlers) > 0 {
- md, _ := metadata.FromIncomingContext(ctx)
- for _, sh := range s.opts.statsHandlers {
- ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: stream.Method()})
- sh.HandleRPC(ctx, &stats.InHeader{
- FullMethod: stream.Method(),
- RemoteAddr: t.Peer().Addr,
- LocalAddr: t.Peer().LocalAddr,
- Compression: stream.RecvCompress(),
- WireLength: stream.HeaderWireLength(),
- Header: md,
- })
- }
- }
- // To have calls in stream callouts work. Will delete once all stats handler
- // calls come from the gRPC layer.
- stream.SetContext(ctx)
-
- srv, knownService := s.services[service]
- if knownService {
- if md, ok := srv.methods[method]; ok {
- s.processUnaryRPC(ctx, stream, srv, md, ti)
- return
- }
- if sd, ok := srv.streams[method]; ok {
- s.processStreamingRPC(ctx, stream, srv, sd, ti)
- return
- }
- }
- // Unknown service, or known server unknown method.
- if unknownDesc := s.opts.unknownStreamDesc; unknownDesc != nil {
- s.processStreamingRPC(ctx, stream, nil, unknownDesc, ti)
- return
- }
- var errDesc string
- if !knownService {
- errDesc = fmt.Sprintf("unknown service %v", service)
- } else {
- errDesc = fmt.Sprintf("unknown method %v for service %v", method, service)
- }
- if ti != nil {
- ti.tr.LazyPrintf("%s", errDesc)
- ti.tr.SetError()
- }
- if err := stream.WriteStatus(status.New(codes.Unimplemented, errDesc)); err != nil {
- if ti != nil {
- ti.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true)
- ti.tr.SetError()
- }
- channelz.Warningf(logger, s.channelz, "grpc: Server.handleStream failed to write status: %v", err)
- }
- if ti != nil {
- ti.tr.Finish()
- }
-}
-
-// The key to save ServerTransportStream in the context.
-type streamKey struct{}
-
-// NewContextWithServerTransportStream creates a new context from ctx and
-// attaches stream to it.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func NewContextWithServerTransportStream(ctx context.Context, stream ServerTransportStream) context.Context {
- return context.WithValue(ctx, streamKey{}, stream)
-}
-
-// ServerTransportStream is a minimal interface that a transport stream must
-// implement. This can be used to mock an actual transport stream for tests of
-// handler code that use, for example, grpc.SetHeader (which requires some
-// stream to be in context).
-//
-// See also NewContextWithServerTransportStream.
-//
-// # Experimental
-//
-// Notice: This type is EXPERIMENTAL and may be changed or removed in a
-// later release.
-type ServerTransportStream interface {
- Method() string
- SetHeader(md metadata.MD) error
- SendHeader(md metadata.MD) error
- SetTrailer(md metadata.MD) error
-}
-
-// ServerTransportStreamFromContext returns the ServerTransportStream saved in
-// ctx. Returns nil if the given context has no stream associated with it
-// (which implies it is not an RPC invocation context).
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ServerTransportStreamFromContext(ctx context.Context) ServerTransportStream {
- s, _ := ctx.Value(streamKey{}).(ServerTransportStream)
- return s
-}
-
-// Stop stops the gRPC server. It immediately closes all open
-// connections and listeners.
-// It cancels all active RPCs on the server side and the corresponding
-// pending RPCs on the client side will get notified by connection
-// errors.
-func (s *Server) Stop() {
- s.stop(false)
-}
-
-// GracefulStop stops the gRPC server gracefully. It stops the server from
-// accepting new connections and RPCs and blocks until all the pending RPCs are
-// finished.
-func (s *Server) GracefulStop() {
- s.stop(true)
-}
-
-func (s *Server) stop(graceful bool) {
- s.quit.Fire()
- defer s.done.Fire()
-
- s.channelzRemoveOnce.Do(func() { channelz.RemoveEntry(s.channelz.ID) })
- s.mu.Lock()
- s.closeListenersLocked()
- // Wait for serving threads to be ready to exit. Only then can we be sure no
- // new conns will be created.
- s.mu.Unlock()
- s.serveWG.Wait()
-
- s.mu.Lock()
- defer s.mu.Unlock()
-
- if graceful {
- s.drainAllServerTransportsLocked()
- } else {
- s.closeServerTransportsLocked()
- }
-
- for len(s.conns) != 0 {
- s.cv.Wait()
- }
- s.conns = nil
-
- if s.opts.numServerWorkers > 0 {
- // Closing the channel (only once, via grpcsync.OnceFunc) after all the
- // connections have been closed above ensures that there are no
- // goroutines executing the callback passed to st.HandleStreams (where
- // the channel is written to).
- s.serverWorkerChannelClose()
- }
-
- if graceful || s.opts.waitForHandlers {
- s.handlersWG.Wait()
- }
-
- if s.events != nil {
- s.events.Finish()
- s.events = nil
- }
-}
-
-// s.mu must be held by the caller.
-func (s *Server) closeServerTransportsLocked() {
- for _, conns := range s.conns {
- for st := range conns {
- st.Close(errors.New("Server.Stop called"))
- }
- }
-}
-
-// s.mu must be held by the caller.
-func (s *Server) drainAllServerTransportsLocked() {
- if !s.drain {
- for _, conns := range s.conns {
- for st := range conns {
- st.Drain("graceful_stop")
- }
- }
- s.drain = true
- }
-}
-
-// s.mu must be held by the caller.
-func (s *Server) closeListenersLocked() {
- for lis := range s.lis {
- lis.Close()
- }
- s.lis = nil
-}
-
-// contentSubtype must be lowercase
-// cannot return nil
-func (s *Server) getCodec(contentSubtype string) baseCodec {
- if s.opts.codec != nil {
- return s.opts.codec
- }
- if contentSubtype == "" {
- return getCodec(proto.Name)
- }
- codec := getCodec(contentSubtype)
- if codec == nil {
- logger.Warningf("Unsupported codec %q. Defaulting to %q for now. This will start to fail in future releases.", contentSubtype, proto.Name)
- return getCodec(proto.Name)
- }
- return codec
-}
-
-type serverKey struct{}
-
-// serverFromContext gets the Server from the context.
-func serverFromContext(ctx context.Context) *Server {
- s, _ := ctx.Value(serverKey{}).(*Server)
- return s
-}
-
-// contextWithServer sets the Server in the context.
-func contextWithServer(ctx context.Context, server *Server) context.Context {
- return context.WithValue(ctx, serverKey{}, server)
-}
-
-// isRegisteredMethod returns whether the passed in method is registered as a
-// method on the server. /service/method and service/method will match if the
-// service and method are registered on the server.
-func (s *Server) isRegisteredMethod(serviceMethod string) bool {
- if serviceMethod != "" && serviceMethod[0] == '/' {
- serviceMethod = serviceMethod[1:]
- }
- pos := strings.LastIndex(serviceMethod, "/")
- if pos == -1 { // Invalid method name syntax.
- return false
- }
- service := serviceMethod[:pos]
- method := serviceMethod[pos+1:]
- srv, knownService := s.services[service]
- if knownService {
- if _, ok := srv.methods[method]; ok {
- return true
- }
- if _, ok := srv.streams[method]; ok {
- return true
- }
- }
- return false
-}
-
-// SetHeader sets the header metadata to be sent from the server to the client.
-// The context provided must be the context passed to the server's handler.
-//
-// Streaming RPCs should prefer the SetHeader method of the ServerStream.
-//
-// When called multiple times, all the provided metadata will be merged. All
-// the metadata will be sent out when one of the following happens:
-//
-// - grpc.SendHeader is called, or for streaming handlers, stream.SendHeader.
-// - The first response message is sent. For unary handlers, this occurs when
-// the handler returns; for streaming handlers, this can happen when stream's
-// SendMsg method is called.
-// - An RPC status is sent out (error or success). This occurs when the handler
-// returns.
-//
-// SetHeader will fail if called after any of the events above.
-//
-// The error returned is compatible with the status package. However, the
-// status code will often not match the RPC status as seen by the client
-// application, and therefore, should not be relied upon for this purpose.
-func SetHeader(ctx context.Context, md metadata.MD) error {
- if md.Len() == 0 {
- return nil
- }
- stream := ServerTransportStreamFromContext(ctx)
- if stream == nil {
- return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx)
- }
- return stream.SetHeader(md)
-}
-
-// SendHeader sends header metadata. It may be called at most once, and may not
-// be called after any event that causes headers to be sent (see SetHeader for
-// a complete list). The provided md and headers set by SetHeader() will be
-// sent.
-//
-// The error returned is compatible with the status package. However, the
-// status code will often not match the RPC status as seen by the client
-// application, and therefore, should not be relied upon for this purpose.
-func SendHeader(ctx context.Context, md metadata.MD) error {
- stream := ServerTransportStreamFromContext(ctx)
- if stream == nil {
- return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx)
- }
- if err := stream.SendHeader(md); err != nil {
- return toRPCErr(err)
- }
- return nil
-}
-
-// SetSendCompressor sets a compressor for outbound messages from the server.
-// It must not be called after any event that causes headers to be sent
-// (see ServerStream.SetHeader for the complete list). Provided compressor is
-// used when below conditions are met:
-//
-// - compressor is registered via encoding.RegisterCompressor
-// - compressor name must exist in the client advertised compressor names
-// sent in grpc-accept-encoding header. Use ClientSupportedCompressors to
-// get client supported compressor names.
-//
-// The context provided must be the context passed to the server's handler.
-// It must be noted that compressor name encoding.Identity disables the
-// outbound compression.
-// By default, server messages will be sent using the same compressor with
-// which request messages were sent.
-//
-// It is not safe to call SetSendCompressor concurrently with SendHeader and
-// SendMsg.
-//
-// # Experimental
-//
-// Notice: This function is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func SetSendCompressor(ctx context.Context, name string) error {
- stream, ok := ServerTransportStreamFromContext(ctx).(*transport.ServerStream)
- if !ok || stream == nil {
- return fmt.Errorf("failed to fetch the stream from the given context")
- }
-
- if err := validateSendCompressor(name, stream.ClientAdvertisedCompressors()); err != nil {
- return fmt.Errorf("unable to set send compressor: %w", err)
- }
-
- return stream.SetSendCompress(name)
-}
-
-// ClientSupportedCompressors returns compressor names advertised by the client
-// via grpc-accept-encoding header.
-//
-// The context provided must be the context passed to the server's handler.
-//
-// # Experimental
-//
-// Notice: This function is EXPERIMENTAL and may be changed or removed in a
-// later release.
-func ClientSupportedCompressors(ctx context.Context) ([]string, error) {
- stream, ok := ServerTransportStreamFromContext(ctx).(*transport.ServerStream)
- if !ok || stream == nil {
- return nil, fmt.Errorf("failed to fetch the stream from the given context %v", ctx)
- }
-
- return stream.ClientAdvertisedCompressors(), nil
-}
-
-// SetTrailer sets the trailer metadata that will be sent when an RPC returns.
-// When called more than once, all the provided metadata will be merged.
-//
-// The error returned is compatible with the status package. However, the
-// status code will often not match the RPC status as seen by the client
-// application, and therefore, should not be relied upon for this purpose.
-func SetTrailer(ctx context.Context, md metadata.MD) error {
- if md.Len() == 0 {
- return nil
- }
- stream := ServerTransportStreamFromContext(ctx)
- if stream == nil {
- return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx)
- }
- return stream.SetTrailer(md)
-}
-
-// Method returns the method string for the server context. The returned
-// string is in the format of "/service/method".
-func Method(ctx context.Context) (string, bool) {
- s := ServerTransportStreamFromContext(ctx)
- if s == nil {
- return "", false
- }
- return s.Method(), true
-}
-
-// validateSendCompressor returns an error when given compressor name cannot be
-// handled by the server or the client based on the advertised compressors.
-func validateSendCompressor(name string, clientCompressors []string) error {
- if name == encoding.Identity {
- return nil
- }
-
- if !grpcutil.IsCompressorNameRegistered(name) {
- return fmt.Errorf("compressor not registered %q", name)
- }
-
- for _, c := range clientCompressors {
- if c == name {
- return nil // found match
- }
- }
- return fmt.Errorf("client does not support compressor %q", name)
-}
-
-// atomicSemaphore implements a blocking, counting semaphore. acquire should be
-// called synchronously; release may be called asynchronously.
-type atomicSemaphore struct {
- n atomic.Int64
- wait chan struct{}
-}
-
-func (q *atomicSemaphore) acquire() {
- if q.n.Add(-1) < 0 {
- // We ran out of quota. Block until a release happens.
- <-q.wait
- }
-}
-
-func (q *atomicSemaphore) release() {
- // N.B. the "<= 0" check below should allow for this to work with multiple
- // concurrent calls to acquire, but also note that with synchronous calls to
- // acquire, as our system does, n will never be less than -1. There are
- // fairness issues (queuing) to consider if this was to be generalized.
- if q.n.Add(1) <= 0 {
- // An acquire was waiting on us. Unblock it.
- q.wait <- struct{}{}
- }
-}
-
-func newHandlerQuota(n uint32) *atomicSemaphore {
- a := &atomicSemaphore{wait: make(chan struct{}, 1)}
- a.n.Store(int64(n))
- return a
-}
diff --git a/vendor/google.golang.org/grpc/service_config.go b/vendor/google.golang.org/grpc/service_config.go
deleted file mode 100644
index 7e83027d1..000000000
--- a/vendor/google.golang.org/grpc/service_config.go
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "reflect"
- "time"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/balancer/pickfirst"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/internal/balancer/gracefulswitch"
- internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
- "google.golang.org/grpc/serviceconfig"
-)
-
-const maxInt = int(^uint(0) >> 1)
-
-// MethodConfig defines the configuration recommended by the service providers for a
-// particular method.
-//
-// Deprecated: Users should not use this struct. Service config should be received
-// through name resolver, as specified here
-// https://github.com/grpc/grpc/blob/master/doc/service_config.md
-type MethodConfig = internalserviceconfig.MethodConfig
-
-// ServiceConfig is provided by the service provider and contains parameters for how
-// clients that connect to the service should behave.
-//
-// Deprecated: Users should not use this struct. Service config should be received
-// through name resolver, as specified here
-// https://github.com/grpc/grpc/blob/master/doc/service_config.md
-type ServiceConfig struct {
- serviceconfig.Config
-
- // lbConfig is the service config's load balancing configuration. If
- // lbConfig and LB are both present, lbConfig will be used.
- lbConfig serviceconfig.LoadBalancingConfig
-
- // Methods contains a map for the methods in this service. If there is an
- // exact match for a method (i.e. /service/method) in the map, use the
- // corresponding MethodConfig. If there's no exact match, look for the
- // default config for the service (/service/) and use the corresponding
- // MethodConfig if it exists. Otherwise, the method has no MethodConfig to
- // use.
- Methods map[string]MethodConfig
-
- // If a retryThrottlingPolicy is provided, gRPC will automatically throttle
- // retry attempts and hedged RPCs when the client’s ratio of failures to
- // successes exceeds a threshold.
- //
- // For each server name, the gRPC client will maintain a token_count which is
- // initially set to maxTokens, and can take values between 0 and maxTokens.
- //
- // Every outgoing RPC (regardless of service or method invoked) will change
- // token_count as follows:
- //
- // - Every failed RPC will decrement the token_count by 1.
- // - Every successful RPC will increment the token_count by tokenRatio.
- //
- // If token_count is less than or equal to maxTokens / 2, then RPCs will not
- // be retried and hedged RPCs will not be sent.
- retryThrottling *retryThrottlingPolicy
- // healthCheckConfig must be set as one of the requirement to enable LB channel
- // health check.
- healthCheckConfig *healthCheckConfig
- // rawJSONString stores service config json string that get parsed into
- // this service config struct.
- rawJSONString string
-}
-
-// healthCheckConfig defines the go-native version of the LB channel health check config.
-type healthCheckConfig struct {
- // serviceName is the service name to use in the health-checking request.
- ServiceName string
-}
-
-type jsonRetryPolicy struct {
- MaxAttempts int
- InitialBackoff internalserviceconfig.Duration
- MaxBackoff internalserviceconfig.Duration
- BackoffMultiplier float64
- RetryableStatusCodes []codes.Code
-}
-
-// retryThrottlingPolicy defines the go-native version of the retry throttling
-// policy defined by the service config here:
-// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#integration-with-service-config
-type retryThrottlingPolicy struct {
- // The number of tokens starts at maxTokens. The token_count will always be
- // between 0 and maxTokens.
- //
- // This field is required and must be greater than zero.
- MaxTokens float64
- // The amount of tokens to add on each successful RPC. Typically this will
- // be some number between 0 and 1, e.g., 0.1.
- //
- // This field is required and must be greater than zero. Up to 3 decimal
- // places are supported.
- TokenRatio float64
-}
-
-type jsonName struct {
- Service string
- Method string
-}
-
-var (
- errDuplicatedName = errors.New("duplicated name")
- errEmptyServiceNonEmptyMethod = errors.New("cannot combine empty 'service' and non-empty 'method'")
-)
-
-func (j jsonName) generatePath() (string, error) {
- if j.Service == "" {
- if j.Method != "" {
- return "", errEmptyServiceNonEmptyMethod
- }
- return "", nil
- }
- res := "/" + j.Service + "/"
- if j.Method != "" {
- res += j.Method
- }
- return res, nil
-}
-
-// TODO(lyuxuan): delete this struct after cleaning up old service config implementation.
-type jsonMC struct {
- Name *[]jsonName
- WaitForReady *bool
- Timeout *internalserviceconfig.Duration
- MaxRequestMessageBytes *int64
- MaxResponseMessageBytes *int64
- RetryPolicy *jsonRetryPolicy
-}
-
-// TODO(lyuxuan): delete this struct after cleaning up old service config implementation.
-type jsonSC struct {
- LoadBalancingPolicy *string
- LoadBalancingConfig *json.RawMessage
- MethodConfig *[]jsonMC
- RetryThrottling *retryThrottlingPolicy
- HealthCheckConfig *healthCheckConfig
-}
-
-func init() {
- internal.ParseServiceConfig = func(js string) *serviceconfig.ParseResult {
- return parseServiceConfig(js, defaultMaxCallAttempts)
- }
-}
-
-func parseServiceConfig(js string, maxAttempts int) *serviceconfig.ParseResult {
- if len(js) == 0 {
- return &serviceconfig.ParseResult{Err: fmt.Errorf("no JSON service config provided")}
- }
- var rsc jsonSC
- err := json.Unmarshal([]byte(js), &rsc)
- if err != nil {
- logger.Warningf("grpc: unmarshalling service config %s: %v", js, err)
- return &serviceconfig.ParseResult{Err: err}
- }
- sc := ServiceConfig{
- Methods: make(map[string]MethodConfig),
- retryThrottling: rsc.RetryThrottling,
- healthCheckConfig: rsc.HealthCheckConfig,
- rawJSONString: js,
- }
- c := rsc.LoadBalancingConfig
- if c == nil {
- name := pickfirst.Name
- if rsc.LoadBalancingPolicy != nil {
- name = *rsc.LoadBalancingPolicy
- }
- if balancer.Get(name) == nil {
- name = pickfirst.Name
- }
- cfg := []map[string]any{{name: struct{}{}}}
- strCfg, err := json.Marshal(cfg)
- if err != nil {
- return &serviceconfig.ParseResult{Err: fmt.Errorf("unexpected error marshaling simple LB config: %w", err)}
- }
- r := json.RawMessage(strCfg)
- c = &r
- }
- cfg, err := gracefulswitch.ParseConfig(*c)
- if err != nil {
- return &serviceconfig.ParseResult{Err: err}
- }
- sc.lbConfig = cfg
-
- if rsc.MethodConfig == nil {
- return &serviceconfig.ParseResult{Config: &sc}
- }
-
- paths := map[string]struct{}{}
- for _, m := range *rsc.MethodConfig {
- if m.Name == nil {
- continue
- }
-
- mc := MethodConfig{
- WaitForReady: m.WaitForReady,
- Timeout: (*time.Duration)(m.Timeout),
- }
- if mc.RetryPolicy, err = convertRetryPolicy(m.RetryPolicy, maxAttempts); err != nil {
- logger.Warningf("grpc: unmarshalling service config %s: %v", js, err)
- return &serviceconfig.ParseResult{Err: err}
- }
- if m.MaxRequestMessageBytes != nil {
- if *m.MaxRequestMessageBytes > int64(maxInt) {
- mc.MaxReqSize = newInt(maxInt)
- } else {
- mc.MaxReqSize = newInt(int(*m.MaxRequestMessageBytes))
- }
- }
- if m.MaxResponseMessageBytes != nil {
- if *m.MaxResponseMessageBytes > int64(maxInt) {
- mc.MaxRespSize = newInt(maxInt)
- } else {
- mc.MaxRespSize = newInt(int(*m.MaxResponseMessageBytes))
- }
- }
- for i, n := range *m.Name {
- path, err := n.generatePath()
- if err != nil {
- logger.Warningf("grpc: error unmarshalling service config %s due to methodConfig[%d]: %v", js, i, err)
- return &serviceconfig.ParseResult{Err: err}
- }
-
- if _, ok := paths[path]; ok {
- err = errDuplicatedName
- logger.Warningf("grpc: error unmarshalling service config %s due to methodConfig[%d]: %v", js, i, err)
- return &serviceconfig.ParseResult{Err: err}
- }
- paths[path] = struct{}{}
- sc.Methods[path] = mc
- }
- }
-
- if sc.retryThrottling != nil {
- if mt := sc.retryThrottling.MaxTokens; mt <= 0 || mt > 1000 {
- return &serviceconfig.ParseResult{Err: fmt.Errorf("invalid retry throttling config: maxTokens (%v) out of range (0, 1000]", mt)}
- }
- if tr := sc.retryThrottling.TokenRatio; tr <= 0 {
- return &serviceconfig.ParseResult{Err: fmt.Errorf("invalid retry throttling config: tokenRatio (%v) may not be negative", tr)}
- }
- }
- return &serviceconfig.ParseResult{Config: &sc}
-}
-
-func convertRetryPolicy(jrp *jsonRetryPolicy, maxAttempts int) (p *internalserviceconfig.RetryPolicy, err error) {
- if jrp == nil {
- return nil, nil
- }
-
- if jrp.MaxAttempts <= 1 ||
- jrp.InitialBackoff <= 0 ||
- jrp.MaxBackoff <= 0 ||
- jrp.BackoffMultiplier <= 0 ||
- len(jrp.RetryableStatusCodes) == 0 {
- logger.Warningf("grpc: ignoring retry policy %v due to illegal configuration", jrp)
- return nil, nil
- }
-
- if jrp.MaxAttempts < maxAttempts {
- maxAttempts = jrp.MaxAttempts
- }
- rp := &internalserviceconfig.RetryPolicy{
- MaxAttempts: maxAttempts,
- InitialBackoff: time.Duration(jrp.InitialBackoff),
- MaxBackoff: time.Duration(jrp.MaxBackoff),
- BackoffMultiplier: jrp.BackoffMultiplier,
- RetryableStatusCodes: make(map[codes.Code]bool),
- }
- for _, code := range jrp.RetryableStatusCodes {
- rp.RetryableStatusCodes[code] = true
- }
- return rp, nil
-}
-
-func minPointers(a, b *int) *int {
- if *a < *b {
- return a
- }
- return b
-}
-
-func getMaxSize(mcMax, doptMax *int, defaultVal int) *int {
- if mcMax == nil && doptMax == nil {
- return &defaultVal
- }
- if mcMax != nil && doptMax != nil {
- return minPointers(mcMax, doptMax)
- }
- if mcMax != nil {
- return mcMax
- }
- return doptMax
-}
-
-func newInt(b int) *int {
- return &b
-}
-
-func init() {
- internal.EqualServiceConfigForTesting = equalServiceConfig
-}
-
-// equalServiceConfig compares two configs. The rawJSONString field is ignored,
-// because they may diff in white spaces.
-//
-// If any of them is NOT *ServiceConfig, return false.
-func equalServiceConfig(a, b serviceconfig.Config) bool {
- if a == nil && b == nil {
- return true
- }
- aa, ok := a.(*ServiceConfig)
- if !ok {
- return false
- }
- bb, ok := b.(*ServiceConfig)
- if !ok {
- return false
- }
- aaRaw := aa.rawJSONString
- aa.rawJSONString = ""
- bbRaw := bb.rawJSONString
- bb.rawJSONString = ""
- defer func() {
- aa.rawJSONString = aaRaw
- bb.rawJSONString = bbRaw
- }()
- // Using reflect.DeepEqual instead of cmp.Equal because many balancer
- // configs are unexported, and cmp.Equal cannot compare unexported fields
- // from unexported structs.
- return reflect.DeepEqual(aa, bb)
-}
diff --git a/vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go b/vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go
deleted file mode 100644
index 35e7a20a0..000000000
--- a/vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright 2019 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package serviceconfig defines types and methods for operating on gRPC
-// service configs.
-//
-// # Experimental
-//
-// Notice: This package is EXPERIMENTAL and may be changed or removed in a
-// later release.
-package serviceconfig
-
-// Config represents an opaque data structure holding a service config.
-type Config interface {
- isServiceConfig()
-}
-
-// LoadBalancingConfig represents an opaque data structure holding a load
-// balancing config.
-type LoadBalancingConfig interface {
- isLoadBalancingConfig()
-}
-
-// ParseResult contains a service config or an error. Exactly one must be
-// non-nil.
-type ParseResult struct {
- Config Config
- Err error
-}
diff --git a/vendor/google.golang.org/grpc/stats/handlers.go b/vendor/google.golang.org/grpc/stats/handlers.go
deleted file mode 100644
index dc03731e4..000000000
--- a/vendor/google.golang.org/grpc/stats/handlers.go
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *
- * Copyright 2016 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package stats
-
-import (
- "context"
- "net"
-)
-
-// ConnTagInfo defines the relevant information needed by connection context tagger.
-type ConnTagInfo struct {
- // RemoteAddr is the remote address of the corresponding connection.
- RemoteAddr net.Addr
- // LocalAddr is the local address of the corresponding connection.
- LocalAddr net.Addr
-}
-
-// RPCTagInfo defines the relevant information needed by RPC context tagger.
-type RPCTagInfo struct {
- // FullMethodName is the RPC method in the format of /package.service/method.
- FullMethodName string
- // FailFast indicates if this RPC is failfast.
- // This field is only valid on client side, it's always false on server side.
- FailFast bool
-}
-
-// Handler defines the interface for the related stats handling (e.g., RPCs, connections).
-type Handler interface {
- // TagRPC can attach some information to the given context.
- // The context used for the rest lifetime of the RPC will be derived from
- // the returned context.
- TagRPC(context.Context, *RPCTagInfo) context.Context
- // HandleRPC processes the RPC stats.
- HandleRPC(context.Context, RPCStats)
-
- // TagConn can attach some information to the given context.
- // The returned context will be used for stats handling.
- // For conn stats handling, the context used in HandleConn for this
- // connection will be derived from the context returned.
- // For RPC stats handling,
- // - On server side, the context used in HandleRPC for all RPCs on this
- // connection will be derived from the context returned.
- // - On client side, the context is not derived from the context returned.
- TagConn(context.Context, *ConnTagInfo) context.Context
- // HandleConn processes the Conn stats.
- HandleConn(context.Context, ConnStats)
-}
diff --git a/vendor/google.golang.org/grpc/stats/metrics.go b/vendor/google.golang.org/grpc/stats/metrics.go
deleted file mode 100644
index 641c8e979..000000000
--- a/vendor/google.golang.org/grpc/stats/metrics.go
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package stats
-
-import "maps"
-
-// MetricSet is a set of metrics to record. Once created, MetricSet is immutable,
-// however Add and Remove can make copies with specific metrics added or
-// removed, respectively.
-//
-// Do not construct directly; use NewMetricSet instead.
-type MetricSet struct {
- // metrics are the set of metrics to initialize.
- metrics map[string]bool
-}
-
-// NewMetricSet returns a MetricSet containing metricNames.
-func NewMetricSet(metricNames ...string) *MetricSet {
- newMetrics := make(map[string]bool)
- for _, metric := range metricNames {
- newMetrics[metric] = true
- }
- return &MetricSet{metrics: newMetrics}
-}
-
-// Metrics returns the metrics set. The returned map is read-only and must not
-// be modified.
-func (m *MetricSet) Metrics() map[string]bool {
- return m.metrics
-}
-
-// Add adds the metricNames to the metrics set and returns a new copy with the
-// additional metrics.
-func (m *MetricSet) Add(metricNames ...string) *MetricSet {
- newMetrics := make(map[string]bool)
- for metric := range m.metrics {
- newMetrics[metric] = true
- }
-
- for _, metric := range metricNames {
- newMetrics[metric] = true
- }
- return &MetricSet{metrics: newMetrics}
-}
-
-// Join joins the metrics passed in with the metrics set, and returns a new copy
-// with the merged metrics.
-func (m *MetricSet) Join(metrics *MetricSet) *MetricSet {
- newMetrics := make(map[string]bool)
- maps.Copy(newMetrics, m.metrics)
- maps.Copy(newMetrics, metrics.metrics)
- return &MetricSet{metrics: newMetrics}
-}
-
-// Remove removes the metricNames from the metrics set and returns a new copy
-// with the metrics removed.
-func (m *MetricSet) Remove(metricNames ...string) *MetricSet {
- newMetrics := make(map[string]bool)
- for metric := range m.metrics {
- newMetrics[metric] = true
- }
-
- for _, metric := range metricNames {
- delete(newMetrics, metric)
- }
- return &MetricSet{metrics: newMetrics}
-}
diff --git a/vendor/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go
deleted file mode 100644
index 6f20d2d54..000000000
--- a/vendor/google.golang.org/grpc/stats/stats.go
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- *
- * Copyright 2016 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package stats is for collecting and reporting various network and RPC stats.
-// This package is for monitoring purpose only. All fields are read-only.
-// All APIs are experimental.
-package stats // import "google.golang.org/grpc/stats"
-
-import (
- "context"
- "net"
- "time"
-
- "google.golang.org/grpc/metadata"
-)
-
-// RPCStats contains stats information about RPCs.
-type RPCStats interface {
- isRPCStats()
- // IsClient returns true if this RPCStats is from client side.
- IsClient() bool
-}
-
-// Begin contains stats when an RPC attempt begins.
-// FailFast is only valid if this Begin is from client side.
-type Begin struct {
- // Client is true if this Begin is from client side.
- Client bool
- // BeginTime is the time when the RPC attempt begins.
- BeginTime time.Time
- // FailFast indicates if this RPC is failfast.
- FailFast bool
- // IsClientStream indicates whether the RPC is a client streaming RPC.
- IsClientStream bool
- // IsServerStream indicates whether the RPC is a server streaming RPC.
- IsServerStream bool
- // IsTransparentRetryAttempt indicates whether this attempt was initiated
- // due to transparently retrying a previous attempt.
- IsTransparentRetryAttempt bool
-}
-
-// IsClient indicates if the stats information is from client side.
-func (s *Begin) IsClient() bool { return s.Client }
-
-func (s *Begin) isRPCStats() {}
-
-// PickerUpdated indicates that the LB policy provided a new picker while the
-// RPC was waiting for one.
-type PickerUpdated struct{}
-
-// IsClient indicates if the stats information is from client side. Only Client
-// Side interfaces with a Picker, thus always returns true.
-func (*PickerUpdated) IsClient() bool { return true }
-
-func (*PickerUpdated) isRPCStats() {}
-
-// InPayload contains the information for an incoming payload.
-type InPayload struct {
- // Client is true if this InPayload is from client side.
- Client bool
- // Payload is the payload with original type. This may be modified after
- // the call to HandleRPC which provides the InPayload returns and must be
- // copied if needed later.
- Payload any
-
- // Length is the size of the uncompressed payload data. Does not include any
- // framing (gRPC or HTTP/2).
- Length int
- // CompressedLength is the size of the compressed payload data. Does not
- // include any framing (gRPC or HTTP/2). Same as Length if compression not
- // enabled.
- CompressedLength int
- // WireLength is the size of the compressed payload data plus gRPC framing.
- // Does not include HTTP/2 framing.
- WireLength int
-
- // RecvTime is the time when the payload is received.
- RecvTime time.Time
-}
-
-// IsClient indicates if the stats information is from client side.
-func (s *InPayload) IsClient() bool { return s.Client }
-
-func (s *InPayload) isRPCStats() {}
-
-// InHeader contains stats when a header is received.
-type InHeader struct {
- // Client is true if this InHeader is from client side.
- Client bool
- // WireLength is the wire length of header.
- WireLength int
- // Compression is the compression algorithm used for the RPC.
- Compression string
- // Header contains the header metadata received.
- Header metadata.MD
-
- // The following fields are valid only if Client is false.
- // FullMethod is the full RPC method string, i.e., /package.service/method.
- FullMethod string
- // RemoteAddr is the remote address of the corresponding connection.
- RemoteAddr net.Addr
- // LocalAddr is the local address of the corresponding connection.
- LocalAddr net.Addr
-}
-
-// IsClient indicates if the stats information is from client side.
-func (s *InHeader) IsClient() bool { return s.Client }
-
-func (s *InHeader) isRPCStats() {}
-
-// InTrailer contains stats when a trailer is received.
-type InTrailer struct {
- // Client is true if this InTrailer is from client side.
- Client bool
- // WireLength is the wire length of trailer.
- WireLength int
- // Trailer contains the trailer metadata received from the server. This
- // field is only valid if this InTrailer is from the client side.
- Trailer metadata.MD
-}
-
-// IsClient indicates if the stats information is from client side.
-func (s *InTrailer) IsClient() bool { return s.Client }
-
-func (s *InTrailer) isRPCStats() {}
-
-// OutPayload contains the information for an outgoing payload.
-type OutPayload struct {
- // Client is true if this OutPayload is from client side.
- Client bool
- // Payload is the payload with original type. This may be modified after
- // the call to HandleRPC which provides the OutPayload returns and must be
- // copied if needed later.
- Payload any
- // Length is the size of the uncompressed payload data. Does not include any
- // framing (gRPC or HTTP/2).
- Length int
- // CompressedLength is the size of the compressed payload data. Does not
- // include any framing (gRPC or HTTP/2). Same as Length if compression not
- // enabled.
- CompressedLength int
- // WireLength is the size of the compressed payload data plus gRPC framing.
- // Does not include HTTP/2 framing.
- WireLength int
- // SentTime is the time when the payload is sent.
- SentTime time.Time
-}
-
-// IsClient indicates if this stats information is from client side.
-func (s *OutPayload) IsClient() bool { return s.Client }
-
-func (s *OutPayload) isRPCStats() {}
-
-// OutHeader contains stats when a header is sent.
-type OutHeader struct {
- // Client is true if this OutHeader is from client side.
- Client bool
- // Compression is the compression algorithm used for the RPC.
- Compression string
- // Header contains the header metadata sent.
- Header metadata.MD
-
- // The following fields are valid only if Client is true.
- // FullMethod is the full RPC method string, i.e., /package.service/method.
- FullMethod string
- // RemoteAddr is the remote address of the corresponding connection.
- RemoteAddr net.Addr
- // LocalAddr is the local address of the corresponding connection.
- LocalAddr net.Addr
-}
-
-// IsClient indicates if this stats information is from client side.
-func (s *OutHeader) IsClient() bool { return s.Client }
-
-func (s *OutHeader) isRPCStats() {}
-
-// OutTrailer contains stats when a trailer is sent.
-type OutTrailer struct {
- // Client is true if this OutTrailer is from client side.
- Client bool
- // WireLength is the wire length of trailer.
- //
- // Deprecated: This field is never set. The length is not known when this message is
- // emitted because the trailer fields are compressed with hpack after that.
- WireLength int
- // Trailer contains the trailer metadata sent to the client. This
- // field is only valid if this OutTrailer is from the server side.
- Trailer metadata.MD
-}
-
-// IsClient indicates if this stats information is from client side.
-func (s *OutTrailer) IsClient() bool { return s.Client }
-
-func (s *OutTrailer) isRPCStats() {}
-
-// End contains stats when an RPC ends.
-type End struct {
- // Client is true if this End is from client side.
- Client bool
- // BeginTime is the time when the RPC began.
- BeginTime time.Time
- // EndTime is the time when the RPC ends.
- EndTime time.Time
- // Trailer contains the trailer metadata received from the server. This
- // field is only valid if this End is from the client side.
- // Deprecated: use Trailer in InTrailer instead.
- Trailer metadata.MD
- // Error is the error the RPC ended with. It is an error generated from
- // status.Status and can be converted back to status.Status using
- // status.FromError if non-nil.
- Error error
-}
-
-// IsClient indicates if this is from client side.
-func (s *End) IsClient() bool { return s.Client }
-
-func (s *End) isRPCStats() {}
-
-// ConnStats contains stats information about connections.
-type ConnStats interface {
- isConnStats()
- // IsClient returns true if this ConnStats is from client side.
- IsClient() bool
-}
-
-// ConnBegin contains the stats of a connection when it is established.
-type ConnBegin struct {
- // Client is true if this ConnBegin is from client side.
- Client bool
-}
-
-// IsClient indicates if this is from client side.
-func (s *ConnBegin) IsClient() bool { return s.Client }
-
-func (s *ConnBegin) isConnStats() {}
-
-// ConnEnd contains the stats of a connection when it ends.
-type ConnEnd struct {
- // Client is true if this ConnEnd is from client side.
- Client bool
-}
-
-// IsClient indicates if this is from client side.
-func (s *ConnEnd) IsClient() bool { return s.Client }
-
-func (s *ConnEnd) isConnStats() {}
-
-// SetTags attaches stats tagging data to the context, which will be sent in
-// the outgoing RPC with the header grpc-tags-bin. Subsequent calls to
-// SetTags will overwrite the values from earlier calls.
-//
-// Deprecated: set the `grpc-tags-bin` header in the metadata instead.
-func SetTags(ctx context.Context, b []byte) context.Context {
- return metadata.AppendToOutgoingContext(ctx, "grpc-tags-bin", string(b))
-}
-
-// Tags returns the tags from the context for the inbound RPC.
-//
-// Deprecated: obtain the `grpc-tags-bin` header from metadata instead.
-func Tags(ctx context.Context) []byte {
- traceValues := metadata.ValueFromIncomingContext(ctx, "grpc-tags-bin")
- if len(traceValues) == 0 {
- return nil
- }
- return []byte(traceValues[len(traceValues)-1])
-}
-
-// SetTrace attaches stats tagging data to the context, which will be sent in
-// the outgoing RPC with the header grpc-trace-bin. Subsequent calls to
-// SetTrace will overwrite the values from earlier calls.
-//
-// Deprecated: set the `grpc-trace-bin` header in the metadata instead.
-func SetTrace(ctx context.Context, b []byte) context.Context {
- return metadata.AppendToOutgoingContext(ctx, "grpc-trace-bin", string(b))
-}
-
-// Trace returns the trace from the context for the inbound RPC.
-//
-// Deprecated: obtain the `grpc-trace-bin` header from metadata instead.
-func Trace(ctx context.Context) []byte {
- traceValues := metadata.ValueFromIncomingContext(ctx, "grpc-trace-bin")
- if len(traceValues) == 0 {
- return nil
- }
- return []byte(traceValues[len(traceValues)-1])
-}
diff --git a/vendor/google.golang.org/grpc/status/status.go b/vendor/google.golang.org/grpc/status/status.go
deleted file mode 100644
index a93360efb..000000000
--- a/vendor/google.golang.org/grpc/status/status.go
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- *
- * Copyright 2017 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package status implements errors returned by gRPC. These errors are
-// serialized and transmitted on the wire between server and client, and allow
-// for additional data to be transmitted via the Details field in the status
-// proto. gRPC service handlers should return an error created by this
-// package, and gRPC clients should expect a corresponding error to be
-// returned from the RPC call.
-//
-// This package upholds the invariants that a non-nil error may not
-// contain an OK code, and an OK code must result in a nil error.
-package status
-
-import (
- "context"
- "errors"
- "fmt"
-
- spb "google.golang.org/genproto/googleapis/rpc/status"
-
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/internal/status"
-)
-
-// Status references google.golang.org/grpc/internal/status. It represents an
-// RPC status code, message, and details. It is immutable and should be
-// created with New, Newf, or FromProto.
-// https://godoc.org/google.golang.org/grpc/internal/status
-type Status = status.Status
-
-// New returns a Status representing c and msg.
-func New(c codes.Code, msg string) *Status {
- return status.New(c, msg)
-}
-
-// Newf returns New(c, fmt.Sprintf(format, a...)).
-func Newf(c codes.Code, format string, a ...any) *Status {
- return New(c, fmt.Sprintf(format, a...))
-}
-
-// Error returns an error representing c and msg. If c is OK, returns nil.
-func Error(c codes.Code, msg string) error {
- return New(c, msg).Err()
-}
-
-// Errorf returns Error(c, fmt.Sprintf(format, a...)).
-func Errorf(c codes.Code, format string, a ...any) error {
- return Error(c, fmt.Sprintf(format, a...))
-}
-
-// ErrorProto returns an error representing s. If s.Code is OK, returns nil.
-func ErrorProto(s *spb.Status) error {
- return FromProto(s).Err()
-}
-
-// FromProto returns a Status representing s.
-func FromProto(s *spb.Status) *Status {
- return status.FromProto(s)
-}
-
-// FromError returns a Status representation of err.
-//
-// - If err was produced by this package or implements the method `GRPCStatus()
-// *Status` and `GRPCStatus()` does not return nil, or if err wraps a type
-// satisfying this, the Status from `GRPCStatus()` is returned. For wrapped
-// errors, the message returned contains the entire err.Error() text and not
-// just the wrapped status. In that case, ok is true.
-//
-// - If err is nil, a Status is returned with codes.OK and no message, and ok
-// is true.
-//
-// - If err implements the method `GRPCStatus() *Status` and `GRPCStatus()`
-// returns nil (which maps to Codes.OK), or if err wraps a type
-// satisfying this, a Status is returned with codes.Unknown and err's
-// Error() message, and ok is false.
-//
-// - Otherwise, err is an error not compatible with this package. In this
-// case, a Status is returned with codes.Unknown and err's Error() message,
-// and ok is false.
-func FromError(err error) (s *Status, ok bool) {
- if err == nil {
- return nil, true
- }
- type grpcstatus interface{ GRPCStatus() *Status }
- if gs, ok := err.(grpcstatus); ok {
- grpcStatus := gs.GRPCStatus()
- if grpcStatus == nil {
- // Error has status nil, which maps to codes.OK. There
- // is no sensible behavior for this, so we turn it into
- // an error with codes.Unknown and discard the existing
- // status.
- return New(codes.Unknown, err.Error()), false
- }
- return grpcStatus, true
- }
- var gs grpcstatus
- if errors.As(err, &gs) {
- grpcStatus := gs.GRPCStatus()
- if grpcStatus == nil {
- // Error wraps an error that has status nil, which maps
- // to codes.OK. There is no sensible behavior for this,
- // so we turn it into an error with codes.Unknown and
- // discard the existing status.
- return New(codes.Unknown, err.Error()), false
- }
- p := grpcStatus.Proto()
- p.Message = err.Error()
- return status.FromProto(p), true
- }
- return New(codes.Unknown, err.Error()), false
-}
-
-// Convert is a convenience function which removes the need to handle the
-// boolean return value from FromError.
-func Convert(err error) *Status {
- s, _ := FromError(err)
- return s
-}
-
-// Code returns the Code of the error if it is a Status error or if it wraps a
-// Status error. If that is not the case, it returns codes.OK if err is nil, or
-// codes.Unknown otherwise.
-func Code(err error) codes.Code {
- // Don't use FromError to avoid allocation of OK status.
- if err == nil {
- return codes.OK
- }
-
- return Convert(err).Code()
-}
-
-// FromContextError converts a context error or wrapped context error into a
-// Status. It returns a Status with codes.OK if err is nil, or a Status with
-// codes.Unknown if err is non-nil and not a context error.
-func FromContextError(err error) *Status {
- if err == nil {
- return nil
- }
- if errors.Is(err, context.DeadlineExceeded) {
- return New(codes.DeadlineExceeded, err.Error())
- }
- if errors.Is(err, context.Canceled) {
- return New(codes.Canceled, err.Error())
- }
- return New(codes.Unknown, err.Error())
-}
diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go
deleted file mode 100644
index 17e2267b3..000000000
--- a/vendor/google.golang.org/grpc/stream.go
+++ /dev/null
@@ -1,1823 +0,0 @@
-/*
- *
- * Copyright 2014 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
- "errors"
- "io"
- "math"
- rand "math/rand/v2"
- "strconv"
- "sync"
- "time"
-
- "google.golang.org/grpc/balancer"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/encoding"
- "google.golang.org/grpc/internal"
- "google.golang.org/grpc/internal/balancerload"
- "google.golang.org/grpc/internal/binarylog"
- "google.golang.org/grpc/internal/channelz"
- "google.golang.org/grpc/internal/grpcutil"
- imetadata "google.golang.org/grpc/internal/metadata"
- iresolver "google.golang.org/grpc/internal/resolver"
- "google.golang.org/grpc/internal/serviceconfig"
- istatus "google.golang.org/grpc/internal/status"
- "google.golang.org/grpc/internal/transport"
- "google.golang.org/grpc/mem"
- "google.golang.org/grpc/metadata"
- "google.golang.org/grpc/peer"
- "google.golang.org/grpc/stats"
- "google.golang.org/grpc/status"
-)
-
-var metadataFromOutgoingContextRaw = internal.FromOutgoingContextRaw.(func(context.Context) (metadata.MD, [][]string, bool))
-
-// StreamHandler defines the handler called by gRPC server to complete the
-// execution of a streaming RPC.
-//
-// If a StreamHandler returns an error, it should either be produced by the
-// status package, or be one of the context errors. Otherwise, gRPC will use
-// codes.Unknown as the status code and err.Error() as the status message of the
-// RPC.
-type StreamHandler func(srv any, stream ServerStream) error
-
-// StreamDesc represents a streaming RPC service's method specification. Used
-// on the server when registering services and on the client when initiating
-// new streams.
-type StreamDesc struct {
- // StreamName and Handler are only used when registering handlers on a
- // server.
- StreamName string // the name of the method excluding the service
- Handler StreamHandler // the handler called for the method
-
- // ServerStreams and ClientStreams are used for registering handlers on a
- // server as well as defining RPC behavior when passed to NewClientStream
- // and ClientConn.NewStream. At least one must be true.
- ServerStreams bool // indicates the server can perform streaming sends
- ClientStreams bool // indicates the client can perform streaming sends
-}
-
-// Stream defines the common interface a client or server stream has to satisfy.
-//
-// Deprecated: See ClientStream and ServerStream documentation instead.
-type Stream interface {
- // Deprecated: See ClientStream and ServerStream documentation instead.
- Context() context.Context
- // Deprecated: See ClientStream and ServerStream documentation instead.
- SendMsg(m any) error
- // Deprecated: See ClientStream and ServerStream documentation instead.
- RecvMsg(m any) error
-}
-
-// ClientStream defines the client-side behavior of a streaming RPC.
-//
-// All errors returned from ClientStream methods are compatible with the
-// status package.
-type ClientStream interface {
- // Header returns the header metadata received from the server if there
- // is any. It blocks if the metadata is not ready to read. If the metadata
- // is nil and the error is also nil, then the stream was terminated without
- // headers, and the status can be discovered by calling RecvMsg.
- Header() (metadata.MD, error)
- // Trailer returns the trailer metadata from the server, if there is any.
- // It must only be called after stream.CloseAndRecv has returned, or
- // stream.Recv has returned a non-nil error (including io.EOF).
- Trailer() metadata.MD
- // CloseSend closes the send direction of the stream. It closes the stream
- // when non-nil error is met. It is also not safe to call CloseSend
- // concurrently with SendMsg.
- CloseSend() error
- // Context returns the context for this stream.
- //
- // It should not be called until after Header or RecvMsg has returned. Once
- // called, subsequent client-side retries are disabled.
- Context() context.Context
- // SendMsg is generally called by generated code. On error, SendMsg aborts
- // the stream. If the error was generated by the client, the status is
- // returned directly; otherwise, io.EOF is returned and the status of
- // the stream may be discovered using RecvMsg. For unary or server-streaming
- // RPCs (StreamDesc.ClientStreams is false), a nil error is returned
- // unconditionally.
- //
- // SendMsg blocks until:
- // - There is sufficient flow control to schedule m with the transport, or
- // - The stream is done, or
- // - The stream breaks.
- //
- // SendMsg does not wait until the message is received by the server. An
- // untimely stream closure may result in lost messages. To ensure delivery,
- // users should ensure the RPC completed successfully using RecvMsg.
- //
- // It is safe to have a goroutine calling SendMsg and another goroutine
- // calling RecvMsg on the same stream at the same time, but it is not safe
- // to call SendMsg on the same stream in different goroutines. It is also
- // not safe to call CloseSend concurrently with SendMsg.
- //
- // It is not safe to modify the message after calling SendMsg. Tracing
- // libraries and stats handlers may use the message lazily.
- SendMsg(m any) error
- // RecvMsg blocks until it receives a message into m or the stream is
- // done. It returns io.EOF when the stream completes successfully. On
- // any other error, the stream is aborted and the error contains the RPC
- // status.
- //
- // It is safe to have a goroutine calling SendMsg and another goroutine
- // calling RecvMsg on the same stream at the same time, but it is not
- // safe to call RecvMsg on the same stream in different goroutines.
- RecvMsg(m any) error
-}
-
-// NewStream creates a new Stream for the client side. This is typically
-// called by generated code. ctx is used for the lifetime of the stream.
-//
-// To ensure resources are not leaked due to the stream returned, one of the following
-// actions must be performed:
-//
-// 1. Call Close on the ClientConn.
-// 2. Cancel the context provided.
-// 3. Call RecvMsg until a non-nil error is returned. A protobuf-generated
-// client-streaming RPC, for instance, might use the helper function
-// CloseAndRecv (note that CloseSend does not Recv, therefore is not
-// guaranteed to release all resources).
-// 4. Receive a non-nil, non-io.EOF error from Header or SendMsg.
-//
-// If none of the above happen, a goroutine and a context will be leaked, and grpc
-// will not call the optionally-configured stats handler with a stats.End message.
-func (cc *ClientConn) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) {
- // allow interceptor to see all applicable call options, which means those
- // configured as defaults from dial option as well as per-call options
- opts = combine(cc.dopts.callOptions, opts)
-
- if cc.dopts.streamInt != nil {
- return cc.dopts.streamInt(ctx, desc, cc, method, newClientStream, opts...)
- }
- return newClientStream(ctx, desc, cc, method, opts...)
-}
-
-// NewClientStream is a wrapper for ClientConn.NewStream.
-func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) {
- return cc.NewStream(ctx, desc, method, opts...)
-}
-
-func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) {
- // Start tracking the RPC for idleness purposes. This is where a stream is
- // created for both streaming and unary RPCs, and hence is a good place to
- // track active RPC count.
- if err := cc.idlenessMgr.OnCallBegin(); err != nil {
- return nil, err
- }
- // Add a calloption, to decrement the active call count, that gets executed
- // when the RPC completes.
- opts = append([]CallOption{OnFinish(func(error) { cc.idlenessMgr.OnCallEnd() })}, opts...)
-
- if md, added, ok := metadataFromOutgoingContextRaw(ctx); ok {
- // validate md
- if err := imetadata.Validate(md); err != nil {
- return nil, status.Error(codes.Internal, err.Error())
- }
- // validate added
- for _, kvs := range added {
- for i := 0; i < len(kvs); i += 2 {
- if err := imetadata.ValidatePair(kvs[i], kvs[i+1]); err != nil {
- return nil, status.Error(codes.Internal, err.Error())
- }
- }
- }
- }
- if channelz.IsOn() {
- cc.incrCallsStarted()
- defer func() {
- if err != nil {
- cc.incrCallsFailed()
- }
- }()
- }
- // Provide an opportunity for the first RPC to see the first service config
- // provided by the resolver.
- if err := cc.waitForResolvedAddrs(ctx); err != nil {
- return nil, err
- }
-
- var mc serviceconfig.MethodConfig
- var onCommit func()
- newStream := func(ctx context.Context, done func()) (iresolver.ClientStream, error) {
- return newClientStreamWithParams(ctx, desc, cc, method, mc, onCommit, done, opts...)
- }
-
- rpcInfo := iresolver.RPCInfo{Context: ctx, Method: method}
- rpcConfig, err := cc.safeConfigSelector.SelectConfig(rpcInfo)
- if err != nil {
- if st, ok := status.FromError(err); ok {
- // Restrict the code to the list allowed by gRFC A54.
- if istatus.IsRestrictedControlPlaneCode(st) {
- err = status.Errorf(codes.Internal, "config selector returned illegal status: %v", err)
- }
- return nil, err
- }
- return nil, toRPCErr(err)
- }
-
- if rpcConfig != nil {
- if rpcConfig.Context != nil {
- ctx = rpcConfig.Context
- }
- mc = rpcConfig.MethodConfig
- onCommit = rpcConfig.OnCommitted
- if rpcConfig.Interceptor != nil {
- rpcInfo.Context = nil
- ns := newStream
- newStream = func(ctx context.Context, done func()) (iresolver.ClientStream, error) {
- cs, err := rpcConfig.Interceptor.NewStream(ctx, rpcInfo, done, ns)
- if err != nil {
- return nil, toRPCErr(err)
- }
- return cs, nil
- }
- }
- }
-
- return newStream(ctx, func() {})
-}
-
-func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), opts ...CallOption) (_ iresolver.ClientStream, err error) {
- c := defaultCallInfo()
- if mc.WaitForReady != nil {
- c.failFast = !*mc.WaitForReady
- }
-
- // Possible context leak:
- // The cancel function for the child context we create will only be called
- // when RecvMsg returns a non-nil error, if the ClientConn is closed, or if
- // an error is generated by SendMsg.
- // https://github.com/grpc/grpc-go/issues/1818.
- var cancel context.CancelFunc
- if mc.Timeout != nil && *mc.Timeout >= 0 {
- ctx, cancel = context.WithTimeout(ctx, *mc.Timeout)
- } else {
- ctx, cancel = context.WithCancel(ctx)
- }
- defer func() {
- if err != nil {
- cancel()
- }
- }()
-
- for _, o := range opts {
- if err := o.before(c); err != nil {
- return nil, toRPCErr(err)
- }
- }
- c.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize)
- c.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize)
- if err := setCallInfoCodec(c); err != nil {
- return nil, err
- }
-
- callHdr := &transport.CallHdr{
- Host: cc.authority,
- Method: method,
- ContentSubtype: c.contentSubtype,
- DoneFunc: doneFunc,
- }
-
- // Set our outgoing compression according to the UseCompressor CallOption, if
- // set. In that case, also find the compressor from the encoding package.
- // Otherwise, use the compressor configured by the WithCompressor DialOption,
- // if set.
- var cp Compressor
- var comp encoding.Compressor
- if ct := c.compressorType; ct != "" {
- callHdr.SendCompress = ct
- if ct != encoding.Identity {
- comp = encoding.GetCompressor(ct)
- if comp == nil {
- return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct)
- }
- }
- } else if cc.dopts.cp != nil {
- callHdr.SendCompress = cc.dopts.cp.Type()
- cp = cc.dopts.cp
- }
- if c.creds != nil {
- callHdr.Creds = c.creds
- }
-
- cs := &clientStream{
- callHdr: callHdr,
- ctx: ctx,
- methodConfig: &mc,
- opts: opts,
- callInfo: c,
- cc: cc,
- desc: desc,
- codec: c.codec,
- cp: cp,
- comp: comp,
- cancel: cancel,
- firstAttempt: true,
- onCommit: onCommit,
- }
- if !cc.dopts.disableRetry {
- cs.retryThrottler = cc.retryThrottler.Load().(*retryThrottler)
- }
- if ml := binarylog.GetMethodLogger(method); ml != nil {
- cs.binlogs = append(cs.binlogs, ml)
- }
- if cc.dopts.binaryLogger != nil {
- if ml := cc.dopts.binaryLogger.GetMethodLogger(method); ml != nil {
- cs.binlogs = append(cs.binlogs, ml)
- }
- }
-
- // Pick the transport to use and create a new stream on the transport.
- // Assign cs.attempt upon success.
- op := func(a *csAttempt) error {
- if err := a.getTransport(); err != nil {
- return err
- }
- if err := a.newStream(); err != nil {
- return err
- }
- // Because this operation is always called either here (while creating
- // the clientStream) or by the retry code while locked when replaying
- // the operation, it is safe to access cs.attempt directly.
- cs.attempt = a
- return nil
- }
- if err := cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op, nil) }); err != nil {
- return nil, err
- }
-
- if len(cs.binlogs) != 0 {
- md, _ := metadata.FromOutgoingContext(ctx)
- logEntry := &binarylog.ClientHeader{
- OnClientSide: true,
- Header: md,
- MethodName: method,
- Authority: cs.cc.authority,
- }
- if deadline, ok := ctx.Deadline(); ok {
- logEntry.Timeout = time.Until(deadline)
- if logEntry.Timeout < 0 {
- logEntry.Timeout = 0
- }
- }
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, logEntry)
- }
- }
-
- if desc != unaryStreamDesc {
- // Listen on cc and stream contexts to cleanup when the user closes the
- // ClientConn or cancels the stream context. In all other cases, an error
- // should already be injected into the recv buffer by the transport, which
- // the client will eventually receive, and then we will cancel the stream's
- // context in clientStream.finish.
- go func() {
- select {
- case <-cc.ctx.Done():
- cs.finish(ErrClientConnClosing)
- case <-ctx.Done():
- cs.finish(toRPCErr(ctx.Err()))
- }
- }()
- }
- return cs, nil
-}
-
-// newAttemptLocked creates a new csAttempt without a transport or stream.
-func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) {
- if err := cs.ctx.Err(); err != nil {
- return nil, toRPCErr(err)
- }
- if err := cs.cc.ctx.Err(); err != nil {
- return nil, ErrClientConnClosing
- }
-
- ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.cp, cs.comp)
- method := cs.callHdr.Method
- var beginTime time.Time
- shs := cs.cc.dopts.copts.StatsHandlers
- for _, sh := range shs {
- ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: cs.callInfo.failFast})
- beginTime = time.Now()
- begin := &stats.Begin{
- Client: true,
- BeginTime: beginTime,
- FailFast: cs.callInfo.failFast,
- IsClientStream: cs.desc.ClientStreams,
- IsServerStream: cs.desc.ServerStreams,
- IsTransparentRetryAttempt: isTransparent,
- }
- sh.HandleRPC(ctx, begin)
- }
-
- var trInfo *traceInfo
- if EnableTracing {
- trInfo = &traceInfo{
- tr: newTrace("grpc.Sent."+methodFamily(method), method),
- firstLine: firstLine{
- client: true,
- },
- }
- if deadline, ok := ctx.Deadline(); ok {
- trInfo.firstLine.deadline = time.Until(deadline)
- }
- trInfo.tr.LazyLog(&trInfo.firstLine, false)
- ctx = newTraceContext(ctx, trInfo.tr)
- }
-
- if cs.cc.parsedTarget.URL.Scheme == internal.GRPCResolverSchemeExtraMetadata {
- // Add extra metadata (metadata that will be added by transport) to context
- // so the balancer can see them.
- ctx = grpcutil.WithExtraMetadata(ctx, metadata.Pairs(
- "content-type", grpcutil.ContentType(cs.callHdr.ContentSubtype),
- ))
- }
-
- return &csAttempt{
- ctx: ctx,
- beginTime: beginTime,
- cs: cs,
- dc: cs.cc.dopts.dc,
- statsHandlers: shs,
- trInfo: trInfo,
- }, nil
-}
-
-func (a *csAttempt) getTransport() error {
- cs := a.cs
-
- var err error
- a.t, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method)
- if err != nil {
- if de, ok := err.(dropError); ok {
- err = de.error
- a.drop = true
- }
- return err
- }
- if a.trInfo != nil {
- a.trInfo.firstLine.SetRemoteAddr(a.t.RemoteAddr())
- }
- return nil
-}
-
-func (a *csAttempt) newStream() error {
- cs := a.cs
- cs.callHdr.PreviousAttempts = cs.numRetries
-
- // Merge metadata stored in PickResult, if any, with existing call metadata.
- // It is safe to overwrite the csAttempt's context here, since all state
- // maintained in it are local to the attempt. When the attempt has to be
- // retried, a new instance of csAttempt will be created.
- if a.pickResult.Metadata != nil {
- // We currently do not have a function it the metadata package which
- // merges given metadata with existing metadata in a context. Existing
- // function `AppendToOutgoingContext()` takes a variadic argument of key
- // value pairs.
- //
- // TODO: Make it possible to retrieve key value pairs from metadata.MD
- // in a form passable to AppendToOutgoingContext(), or create a version
- // of AppendToOutgoingContext() that accepts a metadata.MD.
- md, _ := metadata.FromOutgoingContext(a.ctx)
- md = metadata.Join(md, a.pickResult.Metadata)
- a.ctx = metadata.NewOutgoingContext(a.ctx, md)
- }
-
- s, err := a.t.NewStream(a.ctx, cs.callHdr)
- if err != nil {
- nse, ok := err.(*transport.NewStreamError)
- if !ok {
- // Unexpected.
- return err
- }
-
- if nse.AllowTransparentRetry {
- a.allowTransparentRetry = true
- }
-
- // Unwrap and convert error.
- return toRPCErr(nse.Err)
- }
- a.s = s
- a.ctx = s.Context()
- a.p = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool}
- return nil
-}
-
-// clientStream implements a client side Stream.
-type clientStream struct {
- callHdr *transport.CallHdr
- opts []CallOption
- callInfo *callInfo
- cc *ClientConn
- desc *StreamDesc
-
- codec baseCodec
- cp Compressor
- comp encoding.Compressor
-
- cancel context.CancelFunc // cancels all attempts
-
- sentLast bool // sent an end stream
-
- methodConfig *MethodConfig
-
- ctx context.Context // the application's context, wrapped by stats/tracing
-
- retryThrottler *retryThrottler // The throttler active when the RPC began.
-
- binlogs []binarylog.MethodLogger
- // serverHeaderBinlogged is a boolean for whether server header has been
- // logged. Server header will be logged when the first time one of those
- // happens: stream.Header(), stream.Recv().
- //
- // It's only read and used by Recv() and Header(), so it doesn't need to be
- // synchronized.
- serverHeaderBinlogged bool
-
- mu sync.Mutex
- firstAttempt bool // if true, transparent retry is valid
- numRetries int // exclusive of transparent retry attempt(s)
- numRetriesSincePushback int // retries since pushback; to reset backoff
- finished bool // TODO: replace with atomic cmpxchg or sync.Once?
- // attempt is the active client stream attempt.
- // The only place where it is written is the newAttemptLocked method and this method never writes nil.
- // So, attempt can be nil only inside newClientStream function when clientStream is first created.
- // One of the first things done after clientStream's creation, is to call newAttemptLocked which either
- // assigns a non nil value to the attempt or returns an error. If an error is returned from newAttemptLocked,
- // then newClientStream calls finish on the clientStream and returns. So, finish method is the only
- // place where we need to check if the attempt is nil.
- attempt *csAttempt
- // TODO(hedging): hedging will have multiple attempts simultaneously.
- committed bool // active attempt committed for retry?
- onCommit func()
- replayBuffer []replayOp // operations to replay on retry
- replayBufferSize int // current size of replayBuffer
-}
-
-type replayOp struct {
- op func(a *csAttempt) error
- cleanup func()
-}
-
-// csAttempt implements a single transport stream attempt within a
-// clientStream.
-type csAttempt struct {
- ctx context.Context
- cs *clientStream
- t transport.ClientTransport
- s *transport.ClientStream
- p *parser
- pickResult balancer.PickResult
-
- finished bool
- dc Decompressor
- decomp encoding.Compressor
- decompSet bool
-
- mu sync.Mutex // guards trInfo.tr
- // trInfo may be nil (if EnableTracing is false).
- // trInfo.tr is set when created (if EnableTracing is true),
- // and cleared when the finish method is called.
- trInfo *traceInfo
-
- statsHandlers []stats.Handler
- beginTime time.Time
-
- // set for newStream errors that may be transparently retried
- allowTransparentRetry bool
- // set for pick errors that are returned as a status
- drop bool
-}
-
-func (cs *clientStream) commitAttemptLocked() {
- if !cs.committed && cs.onCommit != nil {
- cs.onCommit()
- }
- cs.committed = true
- for _, op := range cs.replayBuffer {
- if op.cleanup != nil {
- op.cleanup()
- }
- }
- cs.replayBuffer = nil
-}
-
-func (cs *clientStream) commitAttempt() {
- cs.mu.Lock()
- cs.commitAttemptLocked()
- cs.mu.Unlock()
-}
-
-// shouldRetry returns nil if the RPC should be retried; otherwise it returns
-// the error that should be returned by the operation. If the RPC should be
-// retried, the bool indicates whether it is being retried transparently.
-func (a *csAttempt) shouldRetry(err error) (bool, error) {
- cs := a.cs
-
- if cs.finished || cs.committed || a.drop {
- // RPC is finished or committed or was dropped by the picker; cannot retry.
- return false, err
- }
- if a.s == nil && a.allowTransparentRetry {
- return true, nil
- }
- // Wait for the trailers.
- unprocessed := false
- if a.s != nil {
- <-a.s.Done()
- unprocessed = a.s.Unprocessed()
- }
- if cs.firstAttempt && unprocessed {
- // First attempt, stream unprocessed: transparently retry.
- return true, nil
- }
- if cs.cc.dopts.disableRetry {
- return false, err
- }
-
- pushback := 0
- hasPushback := false
- if a.s != nil {
- if !a.s.TrailersOnly() {
- return false, err
- }
-
- // TODO(retry): Move down if the spec changes to not check server pushback
- // before considering this a failure for throttling.
- sps := a.s.Trailer()["grpc-retry-pushback-ms"]
- if len(sps) == 1 {
- var e error
- if pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 {
- channelz.Infof(logger, cs.cc.channelz, "Server retry pushback specified to abort (%q).", sps[0])
- cs.retryThrottler.throttle() // This counts as a failure for throttling.
- return false, err
- }
- hasPushback = true
- } else if len(sps) > 1 {
- channelz.Warningf(logger, cs.cc.channelz, "Server retry pushback specified multiple values (%q); not retrying.", sps)
- cs.retryThrottler.throttle() // This counts as a failure for throttling.
- return false, err
- }
- }
-
- var code codes.Code
- if a.s != nil {
- code = a.s.Status().Code()
- } else {
- code = status.Code(err)
- }
-
- rp := cs.methodConfig.RetryPolicy
- if rp == nil || !rp.RetryableStatusCodes[code] {
- return false, err
- }
-
- // Note: the ordering here is important; we count this as a failure
- // only if the code matched a retryable code.
- if cs.retryThrottler.throttle() {
- return false, err
- }
- if cs.numRetries+1 >= rp.MaxAttempts {
- return false, err
- }
-
- var dur time.Duration
- if hasPushback {
- dur = time.Millisecond * time.Duration(pushback)
- cs.numRetriesSincePushback = 0
- } else {
- fact := math.Pow(rp.BackoffMultiplier, float64(cs.numRetriesSincePushback))
- cur := min(float64(rp.InitialBackoff)*fact, float64(rp.MaxBackoff))
- // Apply jitter by multiplying with a random factor between 0.8 and 1.2
- cur *= 0.8 + 0.4*rand.Float64()
- dur = time.Duration(int64(cur))
- cs.numRetriesSincePushback++
- }
-
- // TODO(dfawley): we could eagerly fail here if dur puts us past the
- // deadline, but unsure if it is worth doing.
- t := time.NewTimer(dur)
- select {
- case <-t.C:
- cs.numRetries++
- return false, nil
- case <-cs.ctx.Done():
- t.Stop()
- return false, status.FromContextError(cs.ctx.Err()).Err()
- }
-}
-
-// Returns nil if a retry was performed and succeeded; error otherwise.
-func (cs *clientStream) retryLocked(attempt *csAttempt, lastErr error) error {
- for {
- attempt.finish(toRPCErr(lastErr))
- isTransparent, err := attempt.shouldRetry(lastErr)
- if err != nil {
- cs.commitAttemptLocked()
- return err
- }
- cs.firstAttempt = false
- attempt, err = cs.newAttemptLocked(isTransparent)
- if err != nil {
- // Only returns error if the clientconn is closed or the context of
- // the stream is canceled.
- return err
- }
- // Note that the first op in replayBuffer always sets cs.attempt
- // if it is able to pick a transport and create a stream.
- if lastErr = cs.replayBufferLocked(attempt); lastErr == nil {
- return nil
- }
- }
-}
-
-func (cs *clientStream) Context() context.Context {
- cs.commitAttempt()
- // No need to lock before using attempt, since we know it is committed and
- // cannot change.
- if cs.attempt.s != nil {
- return cs.attempt.s.Context()
- }
- return cs.ctx
-}
-
-func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) error {
- cs.mu.Lock()
- for {
- if cs.committed {
- cs.mu.Unlock()
- // toRPCErr is used in case the error from the attempt comes from
- // NewClientStream, which intentionally doesn't return a status
- // error to allow for further inspection; all other errors should
- // already be status errors.
- return toRPCErr(op(cs.attempt))
- }
- if len(cs.replayBuffer) == 0 {
- // For the first op, which controls creation of the stream and
- // assigns cs.attempt, we need to create a new attempt inline
- // before executing the first op. On subsequent ops, the attempt
- // is created immediately before replaying the ops.
- var err error
- if cs.attempt, err = cs.newAttemptLocked(false /* isTransparent */); err != nil {
- cs.mu.Unlock()
- cs.finish(err)
- return err
- }
- }
- a := cs.attempt
- cs.mu.Unlock()
- err := op(a)
- cs.mu.Lock()
- if a != cs.attempt {
- // We started another attempt already.
- continue
- }
- if err == io.EOF {
- <-a.s.Done()
- }
- if err == nil || (err == io.EOF && a.s.Status().Code() == codes.OK) {
- onSuccess()
- cs.mu.Unlock()
- return err
- }
- if err := cs.retryLocked(a, err); err != nil {
- cs.mu.Unlock()
- return err
- }
- }
-}
-
-func (cs *clientStream) Header() (metadata.MD, error) {
- var m metadata.MD
- err := cs.withRetry(func(a *csAttempt) error {
- var err error
- m, err = a.s.Header()
- return toRPCErr(err)
- }, cs.commitAttemptLocked)
-
- if m == nil && err == nil {
- // The stream ended with success. Finish the clientStream.
- err = io.EOF
- }
-
- if err != nil {
- cs.finish(err)
- // Do not return the error. The user should get it by calling Recv().
- return nil, nil
- }
-
- if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged && m != nil {
- // Only log if binary log is on and header has not been logged, and
- // there is actually headers to log.
- logEntry := &binarylog.ServerHeader{
- OnClientSide: true,
- Header: m,
- PeerAddr: nil,
- }
- if peer, ok := peer.FromContext(cs.Context()); ok {
- logEntry.PeerAddr = peer.Addr
- }
- cs.serverHeaderBinlogged = true
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, logEntry)
- }
- }
-
- return m, nil
-}
-
-func (cs *clientStream) Trailer() metadata.MD {
- // On RPC failure, we never need to retry, because usage requires that
- // RecvMsg() returned a non-nil error before calling this function is valid.
- // We would have retried earlier if necessary.
- //
- // Commit the attempt anyway, just in case users are not following those
- // directions -- it will prevent races and should not meaningfully impact
- // performance.
- cs.commitAttempt()
- if cs.attempt.s == nil {
- return nil
- }
- return cs.attempt.s.Trailer()
-}
-
-func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error {
- for _, f := range cs.replayBuffer {
- if err := f.op(attempt); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (cs *clientStream) bufferForRetryLocked(sz int, op func(a *csAttempt) error, cleanup func()) {
- // Note: we still will buffer if retry is disabled (for transparent retries).
- if cs.committed {
- return
- }
- cs.replayBufferSize += sz
- if cs.replayBufferSize > cs.callInfo.maxRetryRPCBufferSize {
- cs.commitAttemptLocked()
- cleanup()
- return
- }
- cs.replayBuffer = append(cs.replayBuffer, replayOp{op: op, cleanup: cleanup})
-}
-
-func (cs *clientStream) SendMsg(m any) (err error) {
- defer func() {
- if err != nil && err != io.EOF {
- // Call finish on the client stream for errors generated by this SendMsg
- // call, as these indicate problems created by this client. (Transport
- // errors are converted to an io.EOF error in csAttempt.sendMsg; the real
- // error will be returned from RecvMsg eventually in that case, or be
- // retried.)
- cs.finish(err)
- }
- }()
- if cs.sentLast {
- return status.Errorf(codes.Internal, "SendMsg called after CloseSend")
- }
- if !cs.desc.ClientStreams {
- cs.sentLast = true
- }
-
- // load hdr, payload, data
- hdr, data, payload, pf, err := prepareMsg(m, cs.codec, cs.cp, cs.comp, cs.cc.dopts.copts.BufferPool)
- if err != nil {
- return err
- }
-
- defer func() {
- data.Free()
- // only free payload if compression was made, and therefore it is a different set
- // of buffers from data.
- if pf.isCompressed() {
- payload.Free()
- }
- }()
-
- dataLen := data.Len()
- payloadLen := payload.Len()
- // TODO(dfawley): should we be checking len(data) instead?
- if payloadLen > *cs.callInfo.maxSendMessageSize {
- return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payloadLen, *cs.callInfo.maxSendMessageSize)
- }
-
- // always take an extra ref in case data == payload (i.e. when the data isn't
- // compressed). The original ref will always be freed by the deferred free above.
- payload.Ref()
- op := func(a *csAttempt) error {
- return a.sendMsg(m, hdr, payload, dataLen, payloadLen)
- }
-
- // onSuccess is invoked when the op is captured for a subsequent retry. If the
- // stream was established by a previous message and therefore retries are
- // disabled, onSuccess will not be invoked, and payloadRef can be freed
- // immediately.
- onSuccessCalled := false
- err = cs.withRetry(op, func() {
- cs.bufferForRetryLocked(len(hdr)+payloadLen, op, payload.Free)
- onSuccessCalled = true
- })
- if !onSuccessCalled {
- payload.Free()
- }
- if len(cs.binlogs) != 0 && err == nil {
- cm := &binarylog.ClientMessage{
- OnClientSide: true,
- Message: data.Materialize(),
- }
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, cm)
- }
- }
- return err
-}
-
-func (cs *clientStream) RecvMsg(m any) error {
- if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged {
- // Call Header() to binary log header if it's not already logged.
- cs.Header()
- }
- var recvInfo *payloadInfo
- if len(cs.binlogs) != 0 {
- recvInfo = &payloadInfo{}
- defer recvInfo.free()
- }
- err := cs.withRetry(func(a *csAttempt) error {
- return a.recvMsg(m, recvInfo)
- }, cs.commitAttemptLocked)
- if len(cs.binlogs) != 0 && err == nil {
- sm := &binarylog.ServerMessage{
- OnClientSide: true,
- Message: recvInfo.uncompressedBytes.Materialize(),
- }
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, sm)
- }
- }
- if err != nil || !cs.desc.ServerStreams {
- // err != nil or non-server-streaming indicates end of stream.
- cs.finish(err)
- }
- return err
-}
-
-func (cs *clientStream) CloseSend() error {
- if cs.sentLast {
- // TODO: return an error and finish the stream instead, due to API misuse?
- return nil
- }
- cs.sentLast = true
- op := func(a *csAttempt) error {
- a.s.Write(nil, nil, &transport.WriteOptions{Last: true})
- // Always return nil; io.EOF is the only error that might make sense
- // instead, but there is no need to signal the client to call RecvMsg
- // as the only use left for the stream after CloseSend is to call
- // RecvMsg. This also matches historical behavior.
- return nil
- }
- cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op, nil) })
- if len(cs.binlogs) != 0 {
- chc := &binarylog.ClientHalfClose{
- OnClientSide: true,
- }
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, chc)
- }
- }
- // We never returned an error here for reasons.
- return nil
-}
-
-func (cs *clientStream) finish(err error) {
- if err == io.EOF {
- // Ending a stream with EOF indicates a success.
- err = nil
- }
- cs.mu.Lock()
- if cs.finished {
- cs.mu.Unlock()
- return
- }
- cs.finished = true
- for _, onFinish := range cs.callInfo.onFinish {
- onFinish(err)
- }
- cs.commitAttemptLocked()
- if cs.attempt != nil {
- cs.attempt.finish(err)
- // after functions all rely upon having a stream.
- if cs.attempt.s != nil {
- for _, o := range cs.opts {
- o.after(cs.callInfo, cs.attempt)
- }
- }
- }
-
- cs.mu.Unlock()
- // Only one of cancel or trailer needs to be logged.
- if len(cs.binlogs) != 0 {
- switch err {
- case errContextCanceled, errContextDeadline, ErrClientConnClosing:
- c := &binarylog.Cancel{
- OnClientSide: true,
- }
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, c)
- }
- default:
- logEntry := &binarylog.ServerTrailer{
- OnClientSide: true,
- Trailer: cs.Trailer(),
- Err: err,
- }
- if peer, ok := peer.FromContext(cs.Context()); ok {
- logEntry.PeerAddr = peer.Addr
- }
- for _, binlog := range cs.binlogs {
- binlog.Log(cs.ctx, logEntry)
- }
- }
- }
- if err == nil {
- cs.retryThrottler.successfulRPC()
- }
- if channelz.IsOn() {
- if err != nil {
- cs.cc.incrCallsFailed()
- } else {
- cs.cc.incrCallsSucceeded()
- }
- }
- cs.cancel()
-}
-
-func (a *csAttempt) sendMsg(m any, hdr []byte, payld mem.BufferSlice, dataLength, payloadLength int) error {
- cs := a.cs
- if a.trInfo != nil {
- a.mu.Lock()
- if a.trInfo.tr != nil {
- a.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true)
- }
- a.mu.Unlock()
- }
- if err := a.s.Write(hdr, payld, &transport.WriteOptions{Last: !cs.desc.ClientStreams}); err != nil {
- if !cs.desc.ClientStreams {
- // For non-client-streaming RPCs, we return nil instead of EOF on error
- // because the generated code requires it. finish is not called; RecvMsg()
- // will call it with the stream's status independently.
- return nil
- }
- return io.EOF
- }
- if len(a.statsHandlers) != 0 {
- for _, sh := range a.statsHandlers {
- sh.HandleRPC(a.ctx, outPayload(true, m, dataLength, payloadLength, time.Now()))
- }
- }
- return nil
-}
-
-func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) {
- cs := a.cs
- if len(a.statsHandlers) != 0 && payInfo == nil {
- payInfo = &payloadInfo{}
- defer payInfo.free()
- }
-
- if !a.decompSet {
- // Block until we receive headers containing received message encoding.
- if ct := a.s.RecvCompress(); ct != "" && ct != encoding.Identity {
- if a.dc == nil || a.dc.Type() != ct {
- // No configured decompressor, or it does not match the incoming
- // message encoding; attempt to find a registered compressor that does.
- a.dc = nil
- a.decomp = encoding.GetCompressor(ct)
- }
- } else {
- // No compression is used; disable our decompressor.
- a.dc = nil
- }
- // Only initialize this state once per stream.
- a.decompSet = true
- }
- if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp, false); err != nil {
- if err == io.EOF {
- if statusErr := a.s.Status().Err(); statusErr != nil {
- return statusErr
- }
- return io.EOF // indicates successful end of stream.
- }
-
- return toRPCErr(err)
- }
- if a.trInfo != nil {
- a.mu.Lock()
- if a.trInfo.tr != nil {
- a.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true)
- }
- a.mu.Unlock()
- }
- for _, sh := range a.statsHandlers {
- sh.HandleRPC(a.ctx, &stats.InPayload{
- Client: true,
- RecvTime: time.Now(),
- Payload: m,
- WireLength: payInfo.compressedLength + headerLen,
- CompressedLength: payInfo.compressedLength,
- Length: payInfo.uncompressedBytes.Len(),
- })
- }
- if cs.desc.ServerStreams {
- // Subsequent messages should be received by subsequent RecvMsg calls.
- return nil
- }
- // Special handling for non-server-stream rpcs.
- // This recv expects EOF or errors, so we don't collect inPayload.
- if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp, false); err == io.EOF {
- return a.s.Status().Err() // non-server streaming Recv returns nil on success
- } else if err != nil {
- return toRPCErr(err)
- }
- return toRPCErr(errors.New("grpc: client streaming protocol violation: get <nil>, want <EOF>"))
-}
-
-func (a *csAttempt) finish(err error) {
- a.mu.Lock()
- if a.finished {
- a.mu.Unlock()
- return
- }
- a.finished = true
- if err == io.EOF {
- // Ending a stream with EOF indicates a success.
- err = nil
- }
- var tr metadata.MD
- if a.s != nil {
- a.s.Close(err)
- tr = a.s.Trailer()
- }
-
- if a.pickResult.Done != nil {
- br := false
- if a.s != nil {
- br = a.s.BytesReceived()
- }
- a.pickResult.Done(balancer.DoneInfo{
- Err: err,
- Trailer: tr,
- BytesSent: a.s != nil,
- BytesReceived: br,
- ServerLoad: balancerload.Parse(tr),
- })
- }
- for _, sh := range a.statsHandlers {
- end := &stats.End{
- Client: true,
- BeginTime: a.beginTime,
- EndTime: time.Now(),
- Trailer: tr,
- Error: err,
- }
- sh.HandleRPC(a.ctx, end)
- }
- if a.trInfo != nil && a.trInfo.tr != nil {
- if err == nil {
- a.trInfo.tr.LazyPrintf("RPC: [OK]")
- } else {
- a.trInfo.tr.LazyPrintf("RPC: [%v]", err)
- a.trInfo.tr.SetError()
- }
- a.trInfo.tr.Finish()
- a.trInfo.tr = nil
- }
- a.mu.Unlock()
-}
-
-// newNonRetryClientStream creates a ClientStream with the specified transport, on the
-// given addrConn.
-//
-// It's expected that the given transport is either the same one in addrConn, or
-// is already closed. To avoid race, transport is specified separately, instead
-// of using ac.transport.
-//
-// Main difference between this and ClientConn.NewStream:
-// - no retry
-// - no service config (or wait for service config)
-// - no tracing or stats
-func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method string, t transport.ClientTransport, ac *addrConn, opts ...CallOption) (_ ClientStream, err error) {
- if t == nil {
- // TODO: return RPC error here?
- return nil, errors.New("transport provided is nil")
- }
- // defaultCallInfo contains unnecessary info(i.e. failfast, maxRetryRPCBufferSize), so we just initialize an empty struct.
- c := &callInfo{}
-
- // Possible context leak:
- // The cancel function for the child context we create will only be called
- // when RecvMsg returns a non-nil error, if the ClientConn is closed, or if
- // an error is generated by SendMsg.
- // https://github.com/grpc/grpc-go/issues/1818.
- ctx, cancel := context.WithCancel(ctx)
- defer func() {
- if err != nil {
- cancel()
- }
- }()
-
- for _, o := range opts {
- if err := o.before(c); err != nil {
- return nil, toRPCErr(err)
- }
- }
- c.maxReceiveMessageSize = getMaxSize(nil, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize)
- c.maxSendMessageSize = getMaxSize(nil, c.maxSendMessageSize, defaultServerMaxSendMessageSize)
- if err := setCallInfoCodec(c); err != nil {
- return nil, err
- }
-
- callHdr := &transport.CallHdr{
- Host: ac.cc.authority,
- Method: method,
- ContentSubtype: c.contentSubtype,
- }
-
- // Set our outgoing compression according to the UseCompressor CallOption, if
- // set. In that case, also find the compressor from the encoding package.
- // Otherwise, use the compressor configured by the WithCompressor DialOption,
- // if set.
- var cp Compressor
- var comp encoding.Compressor
- if ct := c.compressorType; ct != "" {
- callHdr.SendCompress = ct
- if ct != encoding.Identity {
- comp = encoding.GetCompressor(ct)
- if comp == nil {
- return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct)
- }
- }
- } else if ac.cc.dopts.cp != nil {
- callHdr.SendCompress = ac.cc.dopts.cp.Type()
- cp = ac.cc.dopts.cp
- }
- if c.creds != nil {
- callHdr.Creds = c.creds
- }
-
- // Use a special addrConnStream to avoid retry.
- as := &addrConnStream{
- callHdr: callHdr,
- ac: ac,
- ctx: ctx,
- cancel: cancel,
- opts: opts,
- callInfo: c,
- desc: desc,
- codec: c.codec,
- cp: cp,
- comp: comp,
- t: t,
- }
-
- s, err := as.t.NewStream(as.ctx, as.callHdr)
- if err != nil {
- err = toRPCErr(err)
- return nil, err
- }
- as.s = s
- as.p = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool}
- ac.incrCallsStarted()
- if desc != unaryStreamDesc {
- // Listen on stream context to cleanup when the stream context is
- // canceled. Also listen for the addrConn's context in case the
- // addrConn is closed or reconnects to a different address. In all
- // other cases, an error should already be injected into the recv
- // buffer by the transport, which the client will eventually receive,
- // and then we will cancel the stream's context in
- // addrConnStream.finish.
- go func() {
- ac.mu.Lock()
- acCtx := ac.ctx
- ac.mu.Unlock()
- select {
- case <-acCtx.Done():
- as.finish(status.Error(codes.Canceled, "grpc: the SubConn is closing"))
- case <-ctx.Done():
- as.finish(toRPCErr(ctx.Err()))
- }
- }()
- }
- return as, nil
-}
-
-type addrConnStream struct {
- s *transport.ClientStream
- ac *addrConn
- callHdr *transport.CallHdr
- cancel context.CancelFunc
- opts []CallOption
- callInfo *callInfo
- t transport.ClientTransport
- ctx context.Context
- sentLast bool
- desc *StreamDesc
- codec baseCodec
- cp Compressor
- comp encoding.Compressor
- decompSet bool
- dc Decompressor
- decomp encoding.Compressor
- p *parser
- mu sync.Mutex
- finished bool
-}
-
-func (as *addrConnStream) Header() (metadata.MD, error) {
- m, err := as.s.Header()
- if err != nil {
- as.finish(toRPCErr(err))
- }
- return m, err
-}
-
-func (as *addrConnStream) Trailer() metadata.MD {
- return as.s.Trailer()
-}
-
-func (as *addrConnStream) CloseSend() error {
- if as.sentLast {
- // TODO: return an error and finish the stream instead, due to API misuse?
- return nil
- }
- as.sentLast = true
-
- as.s.Write(nil, nil, &transport.WriteOptions{Last: true})
- // Always return nil; io.EOF is the only error that might make sense
- // instead, but there is no need to signal the client to call RecvMsg
- // as the only use left for the stream after CloseSend is to call
- // RecvMsg. This also matches historical behavior.
- return nil
-}
-
-func (as *addrConnStream) Context() context.Context {
- return as.s.Context()
-}
-
-func (as *addrConnStream) SendMsg(m any) (err error) {
- defer func() {
- if err != nil && err != io.EOF {
- // Call finish on the client stream for errors generated by this SendMsg
- // call, as these indicate problems created by this client. (Transport
- // errors are converted to an io.EOF error in csAttempt.sendMsg; the real
- // error will be returned from RecvMsg eventually in that case, or be
- // retried.)
- as.finish(err)
- }
- }()
- if as.sentLast {
- return status.Errorf(codes.Internal, "SendMsg called after CloseSend")
- }
- if !as.desc.ClientStreams {
- as.sentLast = true
- }
-
- // load hdr, payload, data
- hdr, data, payload, pf, err := prepareMsg(m, as.codec, as.cp, as.comp, as.ac.dopts.copts.BufferPool)
- if err != nil {
- return err
- }
-
- defer func() {
- data.Free()
- // only free payload if compression was made, and therefore it is a different set
- // of buffers from data.
- if pf.isCompressed() {
- payload.Free()
- }
- }()
-
- // TODO(dfawley): should we be checking len(data) instead?
- if payload.Len() > *as.callInfo.maxSendMessageSize {
- return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payload.Len(), *as.callInfo.maxSendMessageSize)
- }
-
- if err := as.s.Write(hdr, payload, &transport.WriteOptions{Last: !as.desc.ClientStreams}); err != nil {
- if !as.desc.ClientStreams {
- // For non-client-streaming RPCs, we return nil instead of EOF on error
- // because the generated code requires it. finish is not called; RecvMsg()
- // will call it with the stream's status independently.
- return nil
- }
- return io.EOF
- }
-
- return nil
-}
-
-func (as *addrConnStream) RecvMsg(m any) (err error) {
- defer func() {
- if err != nil || !as.desc.ServerStreams {
- // err != nil or non-server-streaming indicates end of stream.
- as.finish(err)
- }
- }()
-
- if !as.decompSet {
- // Block until we receive headers containing received message encoding.
- if ct := as.s.RecvCompress(); ct != "" && ct != encoding.Identity {
- if as.dc == nil || as.dc.Type() != ct {
- // No configured decompressor, or it does not match the incoming
- // message encoding; attempt to find a registered compressor that does.
- as.dc = nil
- as.decomp = encoding.GetCompressor(ct)
- }
- } else {
- // No compression is used; disable our decompressor.
- as.dc = nil
- }
- // Only initialize this state once per stream.
- as.decompSet = true
- }
- if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err != nil {
- if err == io.EOF {
- if statusErr := as.s.Status().Err(); statusErr != nil {
- return statusErr
- }
- return io.EOF // indicates successful end of stream.
- }
- return toRPCErr(err)
- }
-
- if as.desc.ServerStreams {
- // Subsequent messages should be received by subsequent RecvMsg calls.
- return nil
- }
-
- // Special handling for non-server-stream rpcs.
- // This recv expects EOF or errors, so we don't collect inPayload.
- if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err == io.EOF {
- return as.s.Status().Err() // non-server streaming Recv returns nil on success
- } else if err != nil {
- return toRPCErr(err)
- }
- return toRPCErr(errors.New("grpc: client streaming protocol violation: get <nil>, want <EOF>"))
-}
-
-func (as *addrConnStream) finish(err error) {
- as.mu.Lock()
- if as.finished {
- as.mu.Unlock()
- return
- }
- as.finished = true
- if err == io.EOF {
- // Ending a stream with EOF indicates a success.
- err = nil
- }
- if as.s != nil {
- as.s.Close(err)
- }
-
- if err != nil {
- as.ac.incrCallsFailed()
- } else {
- as.ac.incrCallsSucceeded()
- }
- as.cancel()
- as.mu.Unlock()
-}
-
-// ServerStream defines the server-side behavior of a streaming RPC.
-//
-// Errors returned from ServerStream methods are compatible with the status
-// package. However, the status code will often not match the RPC status as
-// seen by the client application, and therefore, should not be relied upon for
-// this purpose.
-type ServerStream interface {
- // SetHeader sets the header metadata. It may be called multiple times.
- // When call multiple times, all the provided metadata will be merged.
- // All the metadata will be sent out when one of the following happens:
- // - ServerStream.SendHeader() is called;
- // - The first response is sent out;
- // - An RPC status is sent out (error or success).
- SetHeader(metadata.MD) error
- // SendHeader sends the header metadata.
- // The provided md and headers set by SetHeader() will be sent.
- // It fails if called multiple times.
- SendHeader(metadata.MD) error
- // SetTrailer sets the trailer metadata which will be sent with the RPC status.
- // When called more than once, all the provided metadata will be merged.
- SetTrailer(metadata.MD)
- // Context returns the context for this stream.
- Context() context.Context
- // SendMsg sends a message. On error, SendMsg aborts the stream and the
- // error is returned directly.
- //
- // SendMsg blocks until:
- // - There is sufficient flow control to schedule m with the transport, or
- // - The stream is done, or
- // - The stream breaks.
- //
- // SendMsg does not wait until the message is received by the client. An
- // untimely stream closure may result in lost messages.
- //
- // It is safe to have a goroutine calling SendMsg and another goroutine
- // calling RecvMsg on the same stream at the same time, but it is not safe
- // to call SendMsg on the same stream in different goroutines.
- //
- // It is not safe to modify the message after calling SendMsg. Tracing
- // libraries and stats handlers may use the message lazily.
- SendMsg(m any) error
- // RecvMsg blocks until it receives a message into m or the stream is
- // done. It returns io.EOF when the client has performed a CloseSend. On
- // any non-EOF error, the stream is aborted and the error contains the
- // RPC status.
- //
- // It is safe to have a goroutine calling SendMsg and another goroutine
- // calling RecvMsg on the same stream at the same time, but it is not
- // safe to call RecvMsg on the same stream in different goroutines.
- RecvMsg(m any) error
-}
-
-// serverStream implements a server side Stream.
-type serverStream struct {
- ctx context.Context
- s *transport.ServerStream
- p *parser
- codec baseCodec
-
- cp Compressor
- dc Decompressor
- comp encoding.Compressor
- decomp encoding.Compressor
-
- sendCompressorName string
-
- maxReceiveMessageSize int
- maxSendMessageSize int
- trInfo *traceInfo
-
- statsHandler []stats.Handler
-
- binlogs []binarylog.MethodLogger
- // serverHeaderBinlogged indicates whether server header has been logged. It
- // will happen when one of the following two happens: stream.SendHeader(),
- // stream.Send().
- //
- // It's only checked in send and sendHeader, doesn't need to be
- // synchronized.
- serverHeaderBinlogged bool
-
- mu sync.Mutex // protects trInfo.tr after the service handler runs.
-}
-
-func (ss *serverStream) Context() context.Context {
- return ss.ctx
-}
-
-func (ss *serverStream) SetHeader(md metadata.MD) error {
- if md.Len() == 0 {
- return nil
- }
- err := imetadata.Validate(md)
- if err != nil {
- return status.Error(codes.Internal, err.Error())
- }
- return ss.s.SetHeader(md)
-}
-
-func (ss *serverStream) SendHeader(md metadata.MD) error {
- err := imetadata.Validate(md)
- if err != nil {
- return status.Error(codes.Internal, err.Error())
- }
-
- err = ss.s.SendHeader(md)
- if len(ss.binlogs) != 0 && !ss.serverHeaderBinlogged {
- h, _ := ss.s.Header()
- sh := &binarylog.ServerHeader{
- Header: h,
- }
- ss.serverHeaderBinlogged = true
- for _, binlog := range ss.binlogs {
- binlog.Log(ss.ctx, sh)
- }
- }
- return err
-}
-
-func (ss *serverStream) SetTrailer(md metadata.MD) {
- if md.Len() == 0 {
- return
- }
- if err := imetadata.Validate(md); err != nil {
- logger.Errorf("stream: failed to validate md when setting trailer, err: %v", err)
- }
- ss.s.SetTrailer(md)
-}
-
-func (ss *serverStream) SendMsg(m any) (err error) {
- defer func() {
- if ss.trInfo != nil {
- ss.mu.Lock()
- if ss.trInfo.tr != nil {
- if err == nil {
- ss.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true)
- } else {
- ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true)
- ss.trInfo.tr.SetError()
- }
- }
- ss.mu.Unlock()
- }
- if err != nil && err != io.EOF {
- st, _ := status.FromError(toRPCErr(err))
- ss.s.WriteStatus(st)
- // Non-user specified status was sent out. This should be an error
- // case (as a server side Cancel maybe).
- //
- // This is not handled specifically now. User will return a final
- // status from the service handler, we will log that error instead.
- // This behavior is similar to an interceptor.
- }
- }()
-
- // Server handler could have set new compressor by calling SetSendCompressor.
- // In case it is set, we need to use it for compressing outbound message.
- if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName {
- ss.comp = encoding.GetCompressor(sendCompressorsName)
- ss.sendCompressorName = sendCompressorsName
- }
-
- // load hdr, payload, data
- hdr, data, payload, pf, err := prepareMsg(m, ss.codec, ss.cp, ss.comp, ss.p.bufferPool)
- if err != nil {
- return err
- }
-
- defer func() {
- data.Free()
- // only free payload if compression was made, and therefore it is a different set
- // of buffers from data.
- if pf.isCompressed() {
- payload.Free()
- }
- }()
-
- dataLen := data.Len()
- payloadLen := payload.Len()
-
- // TODO(dfawley): should we be checking len(data) instead?
- if payloadLen > ss.maxSendMessageSize {
- return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payloadLen, ss.maxSendMessageSize)
- }
- if err := ss.s.Write(hdr, payload, &transport.WriteOptions{Last: false}); err != nil {
- return toRPCErr(err)
- }
-
- if len(ss.binlogs) != 0 {
- if !ss.serverHeaderBinlogged {
- h, _ := ss.s.Header()
- sh := &binarylog.ServerHeader{
- Header: h,
- }
- ss.serverHeaderBinlogged = true
- for _, binlog := range ss.binlogs {
- binlog.Log(ss.ctx, sh)
- }
- }
- sm := &binarylog.ServerMessage{
- Message: data.Materialize(),
- }
- for _, binlog := range ss.binlogs {
- binlog.Log(ss.ctx, sm)
- }
- }
- if len(ss.statsHandler) != 0 {
- for _, sh := range ss.statsHandler {
- sh.HandleRPC(ss.s.Context(), outPayload(false, m, dataLen, payloadLen, time.Now()))
- }
- }
- return nil
-}
-
-func (ss *serverStream) RecvMsg(m any) (err error) {
- defer func() {
- if ss.trInfo != nil {
- ss.mu.Lock()
- if ss.trInfo.tr != nil {
- if err == nil {
- ss.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true)
- } else if err != io.EOF {
- ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true)
- ss.trInfo.tr.SetError()
- }
- }
- ss.mu.Unlock()
- }
- if err != nil && err != io.EOF {
- st, _ := status.FromError(toRPCErr(err))
- ss.s.WriteStatus(st)
- // Non-user specified status was sent out. This should be an error
- // case (as a server side Cancel maybe).
- //
- // This is not handled specifically now. User will return a final
- // status from the service handler, we will log that error instead.
- // This behavior is similar to an interceptor.
- }
- }()
- var payInfo *payloadInfo
- if len(ss.statsHandler) != 0 || len(ss.binlogs) != 0 {
- payInfo = &payloadInfo{}
- defer payInfo.free()
- }
- if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp, true); err != nil {
- if err == io.EOF {
- if len(ss.binlogs) != 0 {
- chc := &binarylog.ClientHalfClose{}
- for _, binlog := range ss.binlogs {
- binlog.Log(ss.ctx, chc)
- }
- }
- return err
- }
- if err == io.ErrUnexpectedEOF {
- err = status.Errorf(codes.Internal, io.ErrUnexpectedEOF.Error())
- }
- return toRPCErr(err)
- }
- if len(ss.statsHandler) != 0 {
- for _, sh := range ss.statsHandler {
- sh.HandleRPC(ss.s.Context(), &stats.InPayload{
- RecvTime: time.Now(),
- Payload: m,
- Length: payInfo.uncompressedBytes.Len(),
- WireLength: payInfo.compressedLength + headerLen,
- CompressedLength: payInfo.compressedLength,
- })
- }
- }
- if len(ss.binlogs) != 0 {
- cm := &binarylog.ClientMessage{
- Message: payInfo.uncompressedBytes.Materialize(),
- }
- for _, binlog := range ss.binlogs {
- binlog.Log(ss.ctx, cm)
- }
- }
- return nil
-}
-
-// MethodFromServerStream returns the method string for the input stream.
-// The returned string is in the format of "/service/method".
-func MethodFromServerStream(stream ServerStream) (string, bool) {
- return Method(stream.Context())
-}
-
-// prepareMsg returns the hdr, payload and data using the compressors passed or
-// using the passed preparedmsg. The returned boolean indicates whether
-// compression was made and therefore whether the payload needs to be freed in
-// addition to the returned data. Freeing the payload if the returned boolean is
-// false can lead to undefined behavior.
-func prepareMsg(m any, codec baseCodec, cp Compressor, comp encoding.Compressor, pool mem.BufferPool) (hdr []byte, data, payload mem.BufferSlice, pf payloadFormat, err error) {
- if preparedMsg, ok := m.(*PreparedMsg); ok {
- return preparedMsg.hdr, preparedMsg.encodedData, preparedMsg.payload, preparedMsg.pf, nil
- }
- // The input interface is not a prepared msg.
- // Marshal and Compress the data at this point
- data, err = encode(codec, m)
- if err != nil {
- return nil, nil, nil, 0, err
- }
- compData, pf, err := compress(data, cp, comp, pool)
- if err != nil {
- data.Free()
- return nil, nil, nil, 0, err
- }
- hdr, payload = msgHeader(data, compData, pf)
- return hdr, data, payload, pf, nil
-}
diff --git a/vendor/google.golang.org/grpc/stream_interfaces.go b/vendor/google.golang.org/grpc/stream_interfaces.go
deleted file mode 100644
index 0037fee0b..000000000
--- a/vendor/google.golang.org/grpc/stream_interfaces.go
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-// ServerStreamingClient represents the client side of a server-streaming (one
-// request, many responses) RPC. It is generic over the type of the response
-// message. It is used in generated code.
-type ServerStreamingClient[Res any] interface {
- // Recv receives the next response message from the server. The client may
- // repeatedly call Recv to read messages from the response stream. If
- // io.EOF is returned, the stream has terminated with an OK status. Any
- // other error is compatible with the status package and indicates the
- // RPC's status code and message.
- Recv() (*Res, error)
-
- // ClientStream is embedded to provide Context, Header, and Trailer
- // functionality. No other methods in the ClientStream should be called
- // directly.
- ClientStream
-}
-
-// ServerStreamingServer represents the server side of a server-streaming (one
-// request, many responses) RPC. It is generic over the type of the response
-// message. It is used in generated code.
-//
-// To terminate the response stream, return from the handler method and return
-// an error from the status package, or use nil to indicate an OK status code.
-type ServerStreamingServer[Res any] interface {
- // Send sends a response message to the client. The server handler may
- // call Send multiple times to send multiple messages to the client. An
- // error is returned if the stream was terminated unexpectedly, and the
- // handler method should return, as the stream is no longer usable.
- Send(*Res) error
-
- // ServerStream is embedded to provide Context, SetHeader, SendHeader, and
- // SetTrailer functionality. No other methods in the ServerStream should
- // be called directly.
- ServerStream
-}
-
-// ClientStreamingClient represents the client side of a client-streaming (many
-// requests, one response) RPC. It is generic over both the type of the request
-// message stream and the type of the unary response message. It is used in
-// generated code.
-type ClientStreamingClient[Req any, Res any] interface {
- // Send sends a request message to the server. The client may call Send
- // multiple times to send multiple messages to the server. On error, Send
- // aborts the stream. If the error was generated by the client, the status
- // is returned directly. Otherwise, io.EOF is returned, and the status of
- // the stream may be discovered using CloseAndRecv().
- Send(*Req) error
-
- // CloseAndRecv closes the request stream and waits for the server's
- // response. This method must be called once and only once after sending
- // all request messages. Any error returned is implemented by the status
- // package.
- CloseAndRecv() (*Res, error)
-
- // ClientStream is embedded to provide Context, Header, and Trailer
- // functionality. No other methods in the ClientStream should be called
- // directly.
- ClientStream
-}
-
-// ClientStreamingServer represents the server side of a client-streaming (many
-// requests, one response) RPC. It is generic over both the type of the request
-// message stream and the type of the unary response message. It is used in
-// generated code.
-//
-// To terminate the RPC, call SendAndClose and return nil from the method
-// handler or do not call SendAndClose and return an error from the status
-// package.
-type ClientStreamingServer[Req any, Res any] interface {
- // Recv receives the next request message from the client. The server may
- // repeatedly call Recv to read messages from the request stream. If
- // io.EOF is returned, it indicates the client called CloseAndRecv on its
- // ClientStreamingClient. Any other error indicates the stream was
- // terminated unexpectedly, and the handler method should return, as the
- // stream is no longer usable.
- Recv() (*Req, error)
-
- // SendAndClose sends a single response message to the client and closes
- // the stream. This method must be called once and only once after all
- // request messages have been processed. Recv should not be called after
- // calling SendAndClose.
- SendAndClose(*Res) error
-
- // ServerStream is embedded to provide Context, SetHeader, SendHeader, and
- // SetTrailer functionality. No other methods in the ServerStream should
- // be called directly.
- ServerStream
-}
-
-// BidiStreamingClient represents the client side of a bidirectional-streaming
-// (many requests, many responses) RPC. It is generic over both the type of the
-// request message stream and the type of the response message stream. It is
-// used in generated code.
-type BidiStreamingClient[Req any, Res any] interface {
- // Send sends a request message to the server. The client may call Send
- // multiple times to send multiple messages to the server. On error, Send
- // aborts the stream. If the error was generated by the client, the status
- // is returned directly. Otherwise, io.EOF is returned, and the status of
- // the stream may be discovered using Recv().
- Send(*Req) error
-
- // Recv receives the next response message from the server. The client may
- // repeatedly call Recv to read messages from the response stream. If
- // io.EOF is returned, the stream has terminated with an OK status. Any
- // other error is compatible with the status package and indicates the
- // RPC's status code and message.
- Recv() (*Res, error)
-
- // ClientStream is embedded to provide Context, Header, Trailer, and
- // CloseSend functionality. No other methods in the ClientStream should be
- // called directly.
- ClientStream
-}
-
-// BidiStreamingServer represents the server side of a bidirectional-streaming
-// (many requests, many responses) RPC. It is generic over both the type of the
-// request message stream and the type of the response message stream. It is
-// used in generated code.
-//
-// To terminate the stream, return from the handler method and return
-// an error from the status package, or use nil to indicate an OK status code.
-type BidiStreamingServer[Req any, Res any] interface {
- // Recv receives the next request message from the client. The server may
- // repeatedly call Recv to read messages from the request stream. If
- // io.EOF is returned, it indicates the client called CloseSend on its
- // BidiStreamingClient. Any other error indicates the stream was
- // terminated unexpectedly, and the handler method should return, as the
- // stream is no longer usable.
- Recv() (*Req, error)
-
- // Send sends a response message to the client. The server handler may
- // call Send multiple times to send multiple messages to the client. An
- // error is returned if the stream was terminated unexpectedly, and the
- // handler method should return, as the stream is no longer usable.
- Send(*Res) error
-
- // ServerStream is embedded to provide Context, SetHeader, SendHeader, and
- // SetTrailer functionality. No other methods in the ServerStream should
- // be called directly.
- ServerStream
-}
-
-// GenericClientStream implements the ServerStreamingClient, ClientStreamingClient,
-// and BidiStreamingClient interfaces. It is used in generated code.
-type GenericClientStream[Req any, Res any] struct {
- ClientStream
-}
-
-var _ ServerStreamingClient[string] = (*GenericClientStream[int, string])(nil)
-var _ ClientStreamingClient[int, string] = (*GenericClientStream[int, string])(nil)
-var _ BidiStreamingClient[int, string] = (*GenericClientStream[int, string])(nil)
-
-// Send pushes one message into the stream of requests to be consumed by the
-// server. The type of message which can be sent is determined by the Req type
-// parameter of the GenericClientStream receiver.
-func (x *GenericClientStream[Req, Res]) Send(m *Req) error {
- return x.ClientStream.SendMsg(m)
-}
-
-// Recv reads one message from the stream of responses generated by the server.
-// The type of the message returned is determined by the Res type parameter
-// of the GenericClientStream receiver.
-func (x *GenericClientStream[Req, Res]) Recv() (*Res, error) {
- m := new(Res)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-// CloseAndRecv closes the sending side of the stream, then receives the unary
-// response from the server. The type of message which it returns is determined
-// by the Res type parameter of the GenericClientStream receiver.
-func (x *GenericClientStream[Req, Res]) CloseAndRecv() (*Res, error) {
- if err := x.ClientStream.CloseSend(); err != nil {
- return nil, err
- }
- m := new(Res)
- if err := x.ClientStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
-
-// GenericServerStream implements the ServerStreamingServer, ClientStreamingServer,
-// and BidiStreamingServer interfaces. It is used in generated code.
-type GenericServerStream[Req any, Res any] struct {
- ServerStream
-}
-
-var _ ServerStreamingServer[string] = (*GenericServerStream[int, string])(nil)
-var _ ClientStreamingServer[int, string] = (*GenericServerStream[int, string])(nil)
-var _ BidiStreamingServer[int, string] = (*GenericServerStream[int, string])(nil)
-
-// Send pushes one message into the stream of responses to be consumed by the
-// client. The type of message which can be sent is determined by the Res
-// type parameter of the serverStreamServer receiver.
-func (x *GenericServerStream[Req, Res]) Send(m *Res) error {
- return x.ServerStream.SendMsg(m)
-}
-
-// SendAndClose pushes the unary response to the client. The type of message
-// which can be sent is determined by the Res type parameter of the
-// clientStreamServer receiver.
-func (x *GenericServerStream[Req, Res]) SendAndClose(m *Res) error {
- return x.ServerStream.SendMsg(m)
-}
-
-// Recv reads one message from the stream of requests generated by the client.
-// The type of the message returned is determined by the Req type parameter
-// of the clientStreamServer receiver.
-func (x *GenericServerStream[Req, Res]) Recv() (*Req, error) {
- m := new(Req)
- if err := x.ServerStream.RecvMsg(m); err != nil {
- return nil, err
- }
- return m, nil
-}
diff --git a/vendor/google.golang.org/grpc/tap/tap.go b/vendor/google.golang.org/grpc/tap/tap.go
deleted file mode 100644
index 07f012576..000000000
--- a/vendor/google.golang.org/grpc/tap/tap.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * Copyright 2016 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// Package tap defines the function handles which are executed on the transport
-// layer of gRPC-Go and related information.
-//
-// # Experimental
-//
-// Notice: This API is EXPERIMENTAL and may be changed or removed in a
-// later release.
-package tap
-
-import (
- "context"
-
- "google.golang.org/grpc/metadata"
-)
-
-// Info defines the relevant information needed by the handles.
-type Info struct {
- // FullMethodName is the string of grpc method (in the format of
- // /package.service/method).
- FullMethodName string
-
- // Header contains the header metadata received.
- Header metadata.MD
-
- // TODO: More to be added.
-}
-
-// ServerInHandle defines the function which runs before a new stream is
-// created on the server side. If it returns a non-nil error, the stream will
-// not be created and an error will be returned to the client. If the error
-// returned is a status error, that status code and message will be used,
-// otherwise PermissionDenied will be the code and err.Error() will be the
-// message.
-//
-// It's intended to be used in situations where you don't want to waste the
-// resources to accept the new stream (e.g. rate-limiting). For other general
-// usages, please use interceptors.
-//
-// Note that it is executed in the per-connection I/O goroutine(s) instead of
-// per-RPC goroutine. Therefore, users should NOT have any
-// blocking/time-consuming work in this handle. Otherwise all the RPCs would
-// slow down. Also, for the same reason, this handle won't be called
-// concurrently by gRPC.
-type ServerInHandle func(ctx context.Context, info *Info) (context.Context, error)
diff --git a/vendor/google.golang.org/grpc/trace.go b/vendor/google.golang.org/grpc/trace.go
deleted file mode 100644
index 10f4f798f..000000000
--- a/vendor/google.golang.org/grpc/trace.go
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- *
- * Copyright 2015 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "bytes"
- "fmt"
- "io"
- "net"
- "strings"
- "sync"
- "time"
-)
-
-// EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package.
-// This should only be set before any RPCs are sent or received by this program.
-var EnableTracing bool
-
-// methodFamily returns the trace family for the given method.
-// It turns "/pkg.Service/GetFoo" into "pkg.Service".
-func methodFamily(m string) string {
- m = strings.TrimPrefix(m, "/") // remove leading slash
- if i := strings.Index(m, "/"); i >= 0 {
- m = m[:i] // remove everything from second slash
- }
- return m
-}
-
-// traceEventLog mirrors golang.org/x/net/trace.EventLog.
-//
-// It exists in order to avoid importing x/net/trace on grpcnotrace builds.
-type traceEventLog interface {
- Printf(format string, a ...any)
- Errorf(format string, a ...any)
- Finish()
-}
-
-// traceLog mirrors golang.org/x/net/trace.Trace.
-//
-// It exists in order to avoid importing x/net/trace on grpcnotrace builds.
-type traceLog interface {
- LazyLog(x fmt.Stringer, sensitive bool)
- LazyPrintf(format string, a ...any)
- SetError()
- SetRecycler(f func(any))
- SetTraceInfo(traceID, spanID uint64)
- SetMaxEvents(m int)
- Finish()
-}
-
-// traceInfo contains tracing information for an RPC.
-type traceInfo struct {
- tr traceLog
- firstLine firstLine
-}
-
-// firstLine is the first line of an RPC trace.
-// It may be mutated after construction; remoteAddr specifically may change
-// during client-side use.
-type firstLine struct {
- mu sync.Mutex
- client bool // whether this is a client (outgoing) RPC
- remoteAddr net.Addr
- deadline time.Duration // may be zero
-}
-
-func (f *firstLine) SetRemoteAddr(addr net.Addr) {
- f.mu.Lock()
- f.remoteAddr = addr
- f.mu.Unlock()
-}
-
-func (f *firstLine) String() string {
- f.mu.Lock()
- defer f.mu.Unlock()
-
- var line bytes.Buffer
- io.WriteString(&line, "RPC: ")
- if f.client {
- io.WriteString(&line, "to")
- } else {
- io.WriteString(&line, "from")
- }
- fmt.Fprintf(&line, " %v deadline:", f.remoteAddr)
- if f.deadline != 0 {
- fmt.Fprint(&line, f.deadline)
- } else {
- io.WriteString(&line, "none")
- }
- return line.String()
-}
-
-const truncateSize = 100
-
-func truncate(x string, l int) string {
- if l > len(x) {
- return x
- }
- return x[:l]
-}
-
-// payload represents an RPC request or response payload.
-type payload struct {
- sent bool // whether this is an outgoing payload
- msg any // e.g. a proto.Message
- // TODO(dsymonds): add stringifying info to codec, and limit how much we hold here?
-}
-
-func (p payload) String() string {
- if p.sent {
- return truncate(fmt.Sprintf("sent: %v", p.msg), truncateSize)
- }
- return truncate(fmt.Sprintf("recv: %v", p.msg), truncateSize)
-}
-
-type fmtStringer struct {
- format string
- a []any
-}
-
-func (f *fmtStringer) String() string {
- return fmt.Sprintf(f.format, f.a...)
-}
-
-type stringer string
-
-func (s stringer) String() string { return string(s) }
diff --git a/vendor/google.golang.org/grpc/trace_notrace.go b/vendor/google.golang.org/grpc/trace_notrace.go
deleted file mode 100644
index 1da3a2308..000000000
--- a/vendor/google.golang.org/grpc/trace_notrace.go
+++ /dev/null
@@ -1,52 +0,0 @@
-//go:build grpcnotrace
-
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-// grpcnotrace can be used to avoid importing golang.org/x/net/trace, which in
-// turn enables binaries using gRPC-Go for dead code elimination, which can
-// yield 10-15% improvements in binary size when tracing is not needed.
-
-import (
- "context"
- "fmt"
-)
-
-type notrace struct{}
-
-func (notrace) LazyLog(x fmt.Stringer, sensitive bool) {}
-func (notrace) LazyPrintf(format string, a ...any) {}
-func (notrace) SetError() {}
-func (notrace) SetRecycler(f func(any)) {}
-func (notrace) SetTraceInfo(traceID, spanID uint64) {}
-func (notrace) SetMaxEvents(m int) {}
-func (notrace) Finish() {}
-
-func newTrace(family, title string) traceLog {
- return notrace{}
-}
-
-func newTraceContext(ctx context.Context, tr traceLog) context.Context {
- return ctx
-}
-
-func newTraceEventLog(family, title string) traceEventLog {
- return nil
-}
diff --git a/vendor/google.golang.org/grpc/trace_withtrace.go b/vendor/google.golang.org/grpc/trace_withtrace.go
deleted file mode 100644
index 88d6e8571..000000000
--- a/vendor/google.golang.org/grpc/trace_withtrace.go
+++ /dev/null
@@ -1,39 +0,0 @@
-//go:build !grpcnotrace
-
-/*
- *
- * Copyright 2024 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-import (
- "context"
-
- t "golang.org/x/net/trace"
-)
-
-func newTrace(family, title string) traceLog {
- return t.New(family, title)
-}
-
-func newTraceContext(ctx context.Context, tr traceLog) context.Context {
- return t.NewContext(ctx, tr)
-}
-
-func newTraceEventLog(family, title string) traceEventLog {
- return t.NewEventLog(family, title)
-}
diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go
deleted file mode 100644
index d2bba7f3d..000000000
--- a/vendor/google.golang.org/grpc/version.go
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- *
- * Copyright 2018 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package grpc
-
-// Version is the current grpc version.
-const Version = "1.69.4"
diff --git a/vendor/google.golang.org/protobuf/LICENSE b/vendor/google.golang.org/protobuf/LICENSE
deleted file mode 100644
index 49ea0f928..000000000
--- a/vendor/google.golang.org/protobuf/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2018 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/google.golang.org/protobuf/PATENTS b/vendor/google.golang.org/protobuf/PATENTS
deleted file mode 100644
index 733099041..000000000
--- a/vendor/google.golang.org/protobuf/PATENTS
+++ /dev/null
@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Go project.
-
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this section)
-patent license to make, have made, use, offer to sell, sell, import,
-transfer and otherwise run, modify and propagate the contents of this
-implementation of Go, where such license applies only to those patent
-claims, both currently owned or controlled by Google and acquired in
-the future, licensable by Google that are necessarily infringed by this
-implementation of Go. This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation. If you or your agent or exclusive licensee institute or
-order or agree to the institution of patent litigation against any
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
-that this implementation of Go or any code incorporated within this
-implementation of Go constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of Go
-shall terminate as of the date such litigation is filed.
diff --git a/vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go b/vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go
deleted file mode 100644
index 2ef36bbcf..000000000
--- a/vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protodelim marshals and unmarshals varint size-delimited messages.
-package protodelim
-
-import (
- "bufio"
- "encoding/binary"
- "fmt"
- "io"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/proto"
-)
-
-// MarshalOptions is a configurable varint size-delimited marshaler.
-type MarshalOptions struct{ proto.MarshalOptions }
-
-// MarshalTo writes a varint size-delimited wire-format message to w.
-// If w returns an error, MarshalTo returns it unchanged.
-func (o MarshalOptions) MarshalTo(w io.Writer, m proto.Message) (int, error) {
- msgBytes, err := o.MarshalOptions.Marshal(m)
- if err != nil {
- return 0, err
- }
-
- sizeBytes := protowire.AppendVarint(nil, uint64(len(msgBytes)))
- sizeWritten, err := w.Write(sizeBytes)
- if err != nil {
- return sizeWritten, err
- }
- msgWritten, err := w.Write(msgBytes)
- if err != nil {
- return sizeWritten + msgWritten, err
- }
- return sizeWritten + msgWritten, nil
-}
-
-// MarshalTo writes a varint size-delimited wire-format message to w
-// with the default options.
-//
-// See the documentation for [MarshalOptions.MarshalTo].
-func MarshalTo(w io.Writer, m proto.Message) (int, error) {
- return MarshalOptions{}.MarshalTo(w, m)
-}
-
-// UnmarshalOptions is a configurable varint size-delimited unmarshaler.
-type UnmarshalOptions struct {
- proto.UnmarshalOptions
-
- // MaxSize is the maximum size in wire-format bytes of a single message.
- // Unmarshaling a message larger than MaxSize will return an error.
- // A zero MaxSize will default to 4 MiB.
- // Setting MaxSize to -1 disables the limit.
- MaxSize int64
-}
-
-const defaultMaxSize = 4 << 20 // 4 MiB, corresponds to the default gRPC max request/response size
-
-// SizeTooLargeError is an error that is returned when the unmarshaler encounters a message size
-// that is larger than its configured [UnmarshalOptions.MaxSize].
-type SizeTooLargeError struct {
- // Size is the varint size of the message encountered
- // that was larger than the provided MaxSize.
- Size uint64
-
- // MaxSize is the MaxSize limit configured in UnmarshalOptions, which Size exceeded.
- MaxSize uint64
-}
-
-func (e *SizeTooLargeError) Error() string {
- return fmt.Sprintf("message size %d exceeded unmarshaler's maximum configured size %d", e.Size, e.MaxSize)
-}
-
-// Reader is the interface expected by [UnmarshalFrom].
-// It is implemented by *[bufio.Reader].
-type Reader interface {
- io.Reader
- io.ByteReader
-}
-
-// UnmarshalFrom parses and consumes a varint size-delimited wire-format message
-// from r.
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-//
-// The error is [io.EOF] error only if no bytes are read.
-// If an EOF happens after reading some but not all the bytes,
-// UnmarshalFrom returns a non-io.EOF error.
-// In particular if r returns a non-io.EOF error, UnmarshalFrom returns it unchanged,
-// and if only a size is read with no subsequent message, [io.ErrUnexpectedEOF] is returned.
-func (o UnmarshalOptions) UnmarshalFrom(r Reader, m proto.Message) error {
- var sizeArr [binary.MaxVarintLen64]byte
- sizeBuf := sizeArr[:0]
- for i := range sizeArr {
- b, err := r.ReadByte()
- if err != nil {
- // Immediate EOF is unexpected.
- if err == io.EOF && i != 0 {
- break
- }
- return err
- }
- sizeBuf = append(sizeBuf, b)
- if b < 0x80 {
- break
- }
- }
- size, n := protowire.ConsumeVarint(sizeBuf)
- if n < 0 {
- return protowire.ParseError(n)
- }
-
- maxSize := o.MaxSize
- if maxSize == 0 {
- maxSize = defaultMaxSize
- }
- if maxSize != -1 && size > uint64(maxSize) {
- return errors.Wrap(&SizeTooLargeError{Size: size, MaxSize: uint64(maxSize)}, "")
- }
-
- var b []byte
- var err error
- if br, ok := r.(*bufio.Reader); ok {
- // Use the []byte from the bufio.Reader instead of having to allocate one.
- // This reduces CPU usage and allocated bytes.
- b, err = br.Peek(int(size))
- if err == nil {
- defer br.Discard(int(size))
- } else {
- b = nil
- }
- }
- if b == nil {
- b = make([]byte, size)
- _, err = io.ReadFull(r, b)
- }
-
- if err == io.EOF {
- return io.ErrUnexpectedEOF
- }
- if err != nil {
- return err
- }
- if err := o.Unmarshal(b, m); err != nil {
- return err
- }
- return nil
-}
-
-// UnmarshalFrom parses and consumes a varint size-delimited wire-format message
-// from r with the default options.
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-//
-// See the documentation for [UnmarshalOptions.UnmarshalFrom].
-func UnmarshalFrom(r Reader, m proto.Message) error {
- return UnmarshalOptions{}.UnmarshalFrom(r, m)
-}
diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go
deleted file mode 100644
index cffdfda96..000000000
--- a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go
+++ /dev/null
@@ -1,685 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protojson
-
-import (
- "encoding/base64"
- "fmt"
- "math"
- "strconv"
- "strings"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/json"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/internal/set"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// Unmarshal reads the given []byte into the given [proto.Message].
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-func Unmarshal(b []byte, m proto.Message) error {
- return UnmarshalOptions{}.Unmarshal(b, m)
-}
-
-// UnmarshalOptions is a configurable JSON format parser.
-type UnmarshalOptions struct {
- pragma.NoUnkeyedLiterals
-
- // If AllowPartial is set, input for messages that will result in missing
- // required fields will not return an error.
- AllowPartial bool
-
- // If DiscardUnknown is set, unknown fields and enum name values are ignored.
- DiscardUnknown bool
-
- // Resolver is used for looking up types when unmarshaling
- // google.protobuf.Any messages or extension fields.
- // If nil, this defaults to using protoregistry.GlobalTypes.
- Resolver interface {
- protoregistry.MessageTypeResolver
- protoregistry.ExtensionTypeResolver
- }
-
- // RecursionLimit limits how deeply messages may be nested.
- // If zero, a default limit is applied.
- RecursionLimit int
-}
-
-// Unmarshal reads the given []byte and populates the given [proto.Message]
-// using options in the UnmarshalOptions object.
-// It will clear the message first before setting the fields.
-// If it returns an error, the given message may be partially set.
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error {
- return o.unmarshal(b, m)
-}
-
-// unmarshal is a centralized function that all unmarshal operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for unmarshal that do not go through this.
-func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error {
- proto.Reset(m)
-
- if o.Resolver == nil {
- o.Resolver = protoregistry.GlobalTypes
- }
- if o.RecursionLimit == 0 {
- o.RecursionLimit = protowire.DefaultRecursionLimit
- }
-
- dec := decoder{json.NewDecoder(b), o}
- if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil {
- return err
- }
-
- // Check for EOF.
- tok, err := dec.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.EOF {
- return dec.unexpectedTokenError(tok)
- }
-
- if o.AllowPartial {
- return nil
- }
- return proto.CheckInitialized(m)
-}
-
-type decoder struct {
- *json.Decoder
- opts UnmarshalOptions
-}
-
-// newError returns an error object with position info.
-func (d decoder) newError(pos int, f string, x ...any) error {
- line, column := d.Position(pos)
- head := fmt.Sprintf("(line %d:%d): ", line, column)
- return errors.New(head+f, x...)
-}
-
-// unexpectedTokenError returns a syntax error for the given unexpected token.
-func (d decoder) unexpectedTokenError(tok json.Token) error {
- return d.syntaxError(tok.Pos(), "unexpected token %s", tok.RawString())
-}
-
-// syntaxError returns a syntax error for given position.
-func (d decoder) syntaxError(pos int, f string, x ...any) error {
- line, column := d.Position(pos)
- head := fmt.Sprintf("syntax error (line %d:%d): ", line, column)
- return errors.New(head+f, x...)
-}
-
-// unmarshalMessage unmarshals a message into the given protoreflect.Message.
-func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) error {
- d.opts.RecursionLimit--
- if d.opts.RecursionLimit < 0 {
- return errors.New("exceeded max recursion depth")
- }
- if unmarshal := wellKnownTypeUnmarshaler(m.Descriptor().FullName()); unmarshal != nil {
- return unmarshal(d, m)
- }
-
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.ObjectOpen {
- return d.unexpectedTokenError(tok)
- }
-
- messageDesc := m.Descriptor()
- if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
- return errors.New("no support for proto1 MessageSets")
- }
-
- var seenNums set.Ints
- var seenOneofs set.Ints
- fieldDescs := messageDesc.Fields()
- for {
- // Read field name.
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- default:
- return d.unexpectedTokenError(tok)
- case json.ObjectClose:
- return nil
- case json.Name:
- // Continue below.
- }
-
- name := tok.Name()
- // Unmarshaling a non-custom embedded message in Any will contain the
- // JSON field "@type" which should be skipped because it is not a field
- // of the embedded message, but simply an artifact of the Any format.
- if skipTypeURL && name == "@type" {
- d.Read()
- continue
- }
-
- // Get the FieldDescriptor.
- var fd protoreflect.FieldDescriptor
- if strings.HasPrefix(name, "[") && strings.HasSuffix(name, "]") {
- // Only extension names are in [name] format.
- extName := protoreflect.FullName(name[1 : len(name)-1])
- extType, err := d.opts.Resolver.FindExtensionByName(extName)
- if err != nil && err != protoregistry.NotFound {
- return d.newError(tok.Pos(), "unable to resolve %s: %v", tok.RawString(), err)
- }
- if extType != nil {
- fd = extType.TypeDescriptor()
- if !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() {
- return d.newError(tok.Pos(), "message %v cannot be extended by %v", messageDesc.FullName(), fd.FullName())
- }
- }
- } else {
- // The name can either be the JSON name or the proto field name.
- fd = fieldDescs.ByJSONName(name)
- if fd == nil {
- fd = fieldDescs.ByTextName(name)
- }
- }
- if flags.ProtoLegacyWeak {
- if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() {
- fd = nil // reset since the weak reference is not linked in
- }
- }
-
- if fd == nil {
- // Field is unknown.
- if d.opts.DiscardUnknown {
- if err := d.skipJSONValue(); err != nil {
- return err
- }
- continue
- }
- return d.newError(tok.Pos(), "unknown field %v", tok.RawString())
- }
-
- // Do not allow duplicate fields.
- num := uint64(fd.Number())
- if seenNums.Has(num) {
- return d.newError(tok.Pos(), "duplicate field %v", tok.RawString())
- }
- seenNums.Set(num)
-
- // No need to set values for JSON null unless the field type is
- // google.protobuf.Value or google.protobuf.NullValue.
- if tok, _ := d.Peek(); tok.Kind() == json.Null && !isKnownValue(fd) && !isNullValue(fd) {
- d.Read()
- continue
- }
-
- switch {
- case fd.IsList():
- list := m.Mutable(fd).List()
- if err := d.unmarshalList(list, fd); err != nil {
- return err
- }
- case fd.IsMap():
- mmap := m.Mutable(fd).Map()
- if err := d.unmarshalMap(mmap, fd); err != nil {
- return err
- }
- default:
- // If field is a oneof, check if it has already been set.
- if od := fd.ContainingOneof(); od != nil {
- idx := uint64(od.Index())
- if seenOneofs.Has(idx) {
- return d.newError(tok.Pos(), "error parsing %s, oneof %v is already set", tok.RawString(), od.FullName())
- }
- seenOneofs.Set(idx)
- }
-
- // Required or optional fields.
- if err := d.unmarshalSingular(m, fd); err != nil {
- return err
- }
- }
- }
-}
-
-func isKnownValue(fd protoreflect.FieldDescriptor) bool {
- md := fd.Message()
- return md != nil && md.FullName() == genid.Value_message_fullname
-}
-
-func isNullValue(fd protoreflect.FieldDescriptor) bool {
- ed := fd.Enum()
- return ed != nil && ed.FullName() == genid.NullValue_enum_fullname
-}
-
-// unmarshalSingular unmarshals to the non-repeated field specified
-// by the given FieldDescriptor.
-func (d decoder) unmarshalSingular(m protoreflect.Message, fd protoreflect.FieldDescriptor) error {
- var val protoreflect.Value
- var err error
- switch fd.Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- val = m.NewField(fd)
- err = d.unmarshalMessage(val.Message(), false)
- default:
- val, err = d.unmarshalScalar(fd)
- }
-
- if err != nil {
- return err
- }
- if val.IsValid() {
- m.Set(fd, val)
- }
- return nil
-}
-
-// unmarshalScalar unmarshals to a scalar/enum protoreflect.Value specified by
-// the given FieldDescriptor.
-func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) {
- const b32 int = 32
- const b64 int = 64
-
- tok, err := d.Read()
- if err != nil {
- return protoreflect.Value{}, err
- }
-
- kind := fd.Kind()
- switch kind {
- case protoreflect.BoolKind:
- if tok.Kind() == json.Bool {
- return protoreflect.ValueOfBool(tok.Bool()), nil
- }
-
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- if v, ok := unmarshalInt(tok, b32); ok {
- return v, nil
- }
-
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- if v, ok := unmarshalInt(tok, b64); ok {
- return v, nil
- }
-
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- if v, ok := unmarshalUint(tok, b32); ok {
- return v, nil
- }
-
- case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- if v, ok := unmarshalUint(tok, b64); ok {
- return v, nil
- }
-
- case protoreflect.FloatKind:
- if v, ok := unmarshalFloat(tok, b32); ok {
- return v, nil
- }
-
- case protoreflect.DoubleKind:
- if v, ok := unmarshalFloat(tok, b64); ok {
- return v, nil
- }
-
- case protoreflect.StringKind:
- if tok.Kind() == json.String {
- return protoreflect.ValueOfString(tok.ParsedString()), nil
- }
-
- case protoreflect.BytesKind:
- if v, ok := unmarshalBytes(tok); ok {
- return v, nil
- }
-
- case protoreflect.EnumKind:
- if v, ok := unmarshalEnum(tok, fd, d.opts.DiscardUnknown); ok {
- return v, nil
- }
-
- default:
- panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind))
- }
-
- return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v field %v: %v", kind, fd.JSONName(), tok.RawString())
-}
-
-func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
- switch tok.Kind() {
- case json.Number:
- return getInt(tok, bitSize)
-
- case json.String:
- // Decode number from string.
- s := strings.TrimSpace(tok.ParsedString())
- if len(s) != len(tok.ParsedString()) {
- return protoreflect.Value{}, false
- }
- dec := json.NewDecoder([]byte(s))
- tok, err := dec.Read()
- if err != nil {
- return protoreflect.Value{}, false
- }
- return getInt(tok, bitSize)
- }
- return protoreflect.Value{}, false
-}
-
-func getInt(tok json.Token, bitSize int) (protoreflect.Value, bool) {
- n, ok := tok.Int(bitSize)
- if !ok {
- return protoreflect.Value{}, false
- }
- if bitSize == 32 {
- return protoreflect.ValueOfInt32(int32(n)), true
- }
- return protoreflect.ValueOfInt64(n), true
-}
-
-func unmarshalUint(tok json.Token, bitSize int) (protoreflect.Value, bool) {
- switch tok.Kind() {
- case json.Number:
- return getUint(tok, bitSize)
-
- case json.String:
- // Decode number from string.
- s := strings.TrimSpace(tok.ParsedString())
- if len(s) != len(tok.ParsedString()) {
- return protoreflect.Value{}, false
- }
- dec := json.NewDecoder([]byte(s))
- tok, err := dec.Read()
- if err != nil {
- return protoreflect.Value{}, false
- }
- return getUint(tok, bitSize)
- }
- return protoreflect.Value{}, false
-}
-
-func getUint(tok json.Token, bitSize int) (protoreflect.Value, bool) {
- n, ok := tok.Uint(bitSize)
- if !ok {
- return protoreflect.Value{}, false
- }
- if bitSize == 32 {
- return protoreflect.ValueOfUint32(uint32(n)), true
- }
- return protoreflect.ValueOfUint64(n), true
-}
-
-func unmarshalFloat(tok json.Token, bitSize int) (protoreflect.Value, bool) {
- switch tok.Kind() {
- case json.Number:
- return getFloat(tok, bitSize)
-
- case json.String:
- s := tok.ParsedString()
- switch s {
- case "NaN":
- if bitSize == 32 {
- return protoreflect.ValueOfFloat32(float32(math.NaN())), true
- }
- return protoreflect.ValueOfFloat64(math.NaN()), true
- case "Infinity":
- if bitSize == 32 {
- return protoreflect.ValueOfFloat32(float32(math.Inf(+1))), true
- }
- return protoreflect.ValueOfFloat64(math.Inf(+1)), true
- case "-Infinity":
- if bitSize == 32 {
- return protoreflect.ValueOfFloat32(float32(math.Inf(-1))), true
- }
- return protoreflect.ValueOfFloat64(math.Inf(-1)), true
- }
-
- // Decode number from string.
- if len(s) != len(strings.TrimSpace(s)) {
- return protoreflect.Value{}, false
- }
- dec := json.NewDecoder([]byte(s))
- tok, err := dec.Read()
- if err != nil {
- return protoreflect.Value{}, false
- }
- return getFloat(tok, bitSize)
- }
- return protoreflect.Value{}, false
-}
-
-func getFloat(tok json.Token, bitSize int) (protoreflect.Value, bool) {
- n, ok := tok.Float(bitSize)
- if !ok {
- return protoreflect.Value{}, false
- }
- if bitSize == 32 {
- return protoreflect.ValueOfFloat32(float32(n)), true
- }
- return protoreflect.ValueOfFloat64(n), true
-}
-
-func unmarshalBytes(tok json.Token) (protoreflect.Value, bool) {
- if tok.Kind() != json.String {
- return protoreflect.Value{}, false
- }
-
- s := tok.ParsedString()
- enc := base64.StdEncoding
- if strings.ContainsAny(s, "-_") {
- enc = base64.URLEncoding
- }
- if len(s)%4 != 0 {
- enc = enc.WithPadding(base64.NoPadding)
- }
- b, err := enc.DecodeString(s)
- if err != nil {
- return protoreflect.Value{}, false
- }
- return protoreflect.ValueOfBytes(b), true
-}
-
-func unmarshalEnum(tok json.Token, fd protoreflect.FieldDescriptor, discardUnknown bool) (protoreflect.Value, bool) {
- switch tok.Kind() {
- case json.String:
- // Lookup EnumNumber based on name.
- s := tok.ParsedString()
- if enumVal := fd.Enum().Values().ByName(protoreflect.Name(s)); enumVal != nil {
- return protoreflect.ValueOfEnum(enumVal.Number()), true
- }
- if discardUnknown {
- return protoreflect.Value{}, true
- }
-
- case json.Number:
- if n, ok := tok.Int(32); ok {
- return protoreflect.ValueOfEnum(protoreflect.EnumNumber(n)), true
- }
-
- case json.Null:
- // This is only valid for google.protobuf.NullValue.
- if isNullValue(fd) {
- return protoreflect.ValueOfEnum(0), true
- }
- }
-
- return protoreflect.Value{}, false
-}
-
-func (d decoder) unmarshalList(list protoreflect.List, fd protoreflect.FieldDescriptor) error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.ArrayOpen {
- return d.unexpectedTokenError(tok)
- }
-
- switch fd.Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- for {
- tok, err := d.Peek()
- if err != nil {
- return err
- }
-
- if tok.Kind() == json.ArrayClose {
- d.Read()
- return nil
- }
-
- val := list.NewElement()
- if err := d.unmarshalMessage(val.Message(), false); err != nil {
- return err
- }
- list.Append(val)
- }
- default:
- for {
- tok, err := d.Peek()
- if err != nil {
- return err
- }
-
- if tok.Kind() == json.ArrayClose {
- d.Read()
- return nil
- }
-
- val, err := d.unmarshalScalar(fd)
- if err != nil {
- return err
- }
- if val.IsValid() {
- list.Append(val)
- }
- }
- }
-
- return nil
-}
-
-func (d decoder) unmarshalMap(mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.ObjectOpen {
- return d.unexpectedTokenError(tok)
- }
-
- // Determine ahead whether map entry is a scalar type or a message type in
- // order to call the appropriate unmarshalMapValue func inside the for loop
- // below.
- var unmarshalMapValue func() (protoreflect.Value, error)
- switch fd.MapValue().Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- unmarshalMapValue = func() (protoreflect.Value, error) {
- val := mmap.NewValue()
- if err := d.unmarshalMessage(val.Message(), false); err != nil {
- return protoreflect.Value{}, err
- }
- return val, nil
- }
- default:
- unmarshalMapValue = func() (protoreflect.Value, error) {
- return d.unmarshalScalar(fd.MapValue())
- }
- }
-
-Loop:
- for {
- // Read field name.
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- default:
- return d.unexpectedTokenError(tok)
- case json.ObjectClose:
- break Loop
- case json.Name:
- // Continue.
- }
-
- // Unmarshal field name.
- pkey, err := d.unmarshalMapKey(tok, fd.MapKey())
- if err != nil {
- return err
- }
-
- // Check for duplicate field name.
- if mmap.Has(pkey) {
- return d.newError(tok.Pos(), "duplicate map key %v", tok.RawString())
- }
-
- // Read and unmarshal field value.
- pval, err := unmarshalMapValue()
- if err != nil {
- return err
- }
- if pval.IsValid() {
- mmap.Set(pkey, pval)
- }
- }
-
- return nil
-}
-
-// unmarshalMapKey converts given token of Name kind into a protoreflect.MapKey.
-// A map key type is any integral or string type.
-func (d decoder) unmarshalMapKey(tok json.Token, fd protoreflect.FieldDescriptor) (protoreflect.MapKey, error) {
- const b32 = 32
- const b64 = 64
- const base10 = 10
-
- name := tok.Name()
- kind := fd.Kind()
- switch kind {
- case protoreflect.StringKind:
- return protoreflect.ValueOfString(name).MapKey(), nil
-
- case protoreflect.BoolKind:
- switch name {
- case "true":
- return protoreflect.ValueOfBool(true).MapKey(), nil
- case "false":
- return protoreflect.ValueOfBool(false).MapKey(), nil
- }
-
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- if n, err := strconv.ParseInt(name, base10, b32); err == nil {
- return protoreflect.ValueOfInt32(int32(n)).MapKey(), nil
- }
-
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- if n, err := strconv.ParseInt(name, base10, b64); err == nil {
- return protoreflect.ValueOfInt64(int64(n)).MapKey(), nil
- }
-
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- if n, err := strconv.ParseUint(name, base10, b32); err == nil {
- return protoreflect.ValueOfUint32(uint32(n)).MapKey(), nil
- }
-
- case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- if n, err := strconv.ParseUint(name, base10, b64); err == nil {
- return protoreflect.ValueOfUint64(uint64(n)).MapKey(), nil
- }
-
- default:
- panic(fmt.Sprintf("invalid kind for map key: %v", kind))
- }
-
- return protoreflect.MapKey{}, d.newError(tok.Pos(), "invalid value for %v key: %s", kind, tok.RawString())
-}
diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/doc.go b/vendor/google.golang.org/protobuf/encoding/protojson/doc.go
deleted file mode 100644
index ae71007c1..000000000
--- a/vendor/google.golang.org/protobuf/encoding/protojson/doc.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protojson marshals and unmarshals protocol buffer messages as JSON
-// format. It follows the guide at
-// https://protobuf.dev/programming-guides/proto3#json.
-//
-// This package produces a different output than the standard [encoding/json]
-// package, which does not operate correctly on protocol buffer messages.
-package protojson
diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go
deleted file mode 100644
index 0e72d8537..000000000
--- a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protojson
-
-import (
- "encoding/base64"
- "fmt"
-
- "google.golang.org/protobuf/internal/encoding/json"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/order"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-const defaultIndent = " "
-
-// Format formats the message as a multiline string.
-// This function is only intended for human consumption and ignores errors.
-// Do not depend on the output being stable. Its output will change across
-// different builds of your program, even when using the same version of the
-// protobuf module.
-func Format(m proto.Message) string {
- return MarshalOptions{Multiline: true}.Format(m)
-}
-
-// Marshal writes the given [proto.Message] in JSON format using default options.
-// Do not depend on the output being stable. Its output will change across
-// different builds of your program, even when using the same version of the
-// protobuf module.
-func Marshal(m proto.Message) ([]byte, error) {
- return MarshalOptions{}.Marshal(m)
-}
-
-// MarshalOptions is a configurable JSON format marshaler.
-type MarshalOptions struct {
- pragma.NoUnkeyedLiterals
-
- // Multiline specifies whether the marshaler should format the output in
- // indented-form with every textual element on a new line.
- // If Indent is an empty string, then an arbitrary indent is chosen.
- Multiline bool
-
- // Indent specifies the set of indentation characters to use in a multiline
- // formatted output such that every entry is preceded by Indent and
- // terminated by a newline. If non-empty, then Multiline is treated as true.
- // Indent can only be composed of space or tab characters.
- Indent string
-
- // AllowPartial allows messages that have missing required fields to marshal
- // without returning an error. If AllowPartial is false (the default),
- // Marshal will return error if there are any missing required fields.
- AllowPartial bool
-
- // UseProtoNames uses proto field name instead of lowerCamelCase name in JSON
- // field names.
- UseProtoNames bool
-
- // UseEnumNumbers emits enum values as numbers.
- UseEnumNumbers bool
-
- // EmitUnpopulated specifies whether to emit unpopulated fields. It does not
- // emit unpopulated oneof fields or unpopulated extension fields.
- // The JSON value emitted for unpopulated fields are as follows:
- // ╔═══════╤════════════════════════════╗
- // ║ JSON │ Protobuf field ║
- // ╠═══════╪════════════════════════════╣
- // ║ false │ proto3 boolean fields ║
- // ║ 0 │ proto3 numeric fields ║
- // ║ "" │ proto3 string/bytes fields ║
- // ║ null │ proto2 scalar fields ║
- // ║ null │ message fields ║
- // ║ [] │ list fields ║
- // ║ {} │ map fields ║
- // ╚═══════╧════════════════════════════╝
- EmitUnpopulated bool
-
- // EmitDefaultValues specifies whether to emit default-valued primitive fields,
- // empty lists, and empty maps. The fields affected are as follows:
- // ╔═══════╤════════════════════════════════════════╗
- // ║ JSON │ Protobuf field ║
- // ╠═══════╪════════════════════════════════════════╣
- // ║ false │ non-optional scalar boolean fields ║
- // ║ 0 │ non-optional scalar numeric fields ║
- // ║ "" │ non-optional scalar string/byte fields ║
- // ║ [] │ empty repeated fields ║
- // ║ {} │ empty map fields ║
- // ╚═══════╧════════════════════════════════════════╝
- //
- // Behaves similarly to EmitUnpopulated, but does not emit "null"-value fields,
- // i.e. presence-sensing fields that are omitted will remain omitted to preserve
- // presence-sensing.
- // EmitUnpopulated takes precedence over EmitDefaultValues since the former generates
- // a strict superset of the latter.
- EmitDefaultValues bool
-
- // Resolver is used for looking up types when expanding google.protobuf.Any
- // messages. If nil, this defaults to using protoregistry.GlobalTypes.
- Resolver interface {
- protoregistry.ExtensionTypeResolver
- protoregistry.MessageTypeResolver
- }
-}
-
-// Format formats the message as a string.
-// This method is only intended for human consumption and ignores errors.
-// Do not depend on the output being stable. Its output will change across
-// different builds of your program, even when using the same version of the
-// protobuf module.
-func (o MarshalOptions) Format(m proto.Message) string {
- if m == nil || !m.ProtoReflect().IsValid() {
- return "<nil>" // invalid syntax, but okay since this is for debugging
- }
- o.AllowPartial = true
- b, _ := o.Marshal(m)
- return string(b)
-}
-
-// Marshal marshals the given [proto.Message] in the JSON format using options in
-// Do not depend on the output being stable. Its output will change across
-// different builds of your program, even when using the same version of the
-// protobuf module.
-func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) {
- return o.marshal(nil, m)
-}
-
-// MarshalAppend appends the JSON format encoding of m to b,
-// returning the result.
-func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) {
- return o.marshal(b, m)
-}
-
-// marshal is a centralized function that all marshal operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for marshal that do not go through this.
-func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) {
- if o.Multiline && o.Indent == "" {
- o.Indent = defaultIndent
- }
- if o.Resolver == nil {
- o.Resolver = protoregistry.GlobalTypes
- }
-
- internalEnc, err := json.NewEncoder(b, o.Indent)
- if err != nil {
- return nil, err
- }
-
- // Treat nil message interface as an empty message,
- // in which case the output in an empty JSON object.
- if m == nil {
- return append(b, '{', '}'), nil
- }
-
- enc := encoder{internalEnc, o}
- if err := enc.marshalMessage(m.ProtoReflect(), ""); err != nil {
- return nil, err
- }
- if o.AllowPartial {
- return enc.Bytes(), nil
- }
- return enc.Bytes(), proto.CheckInitialized(m)
-}
-
-type encoder struct {
- *json.Encoder
- opts MarshalOptions
-}
-
-// typeFieldDesc is a synthetic field descriptor used for the "@type" field.
-var typeFieldDesc = func() protoreflect.FieldDescriptor {
- var fd filedesc.Field
- fd.L0.FullName = "@type"
- fd.L0.Index = -1
- fd.L1.Cardinality = protoreflect.Optional
- fd.L1.Kind = protoreflect.StringKind
- return &fd
-}()
-
-// typeURLFieldRanger wraps a protoreflect.Message and modifies its Range method
-// to additionally iterate over a synthetic field for the type URL.
-type typeURLFieldRanger struct {
- order.FieldRanger
- typeURL string
-}
-
-func (m typeURLFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- if !f(typeFieldDesc, protoreflect.ValueOfString(m.typeURL)) {
- return
- }
- m.FieldRanger.Range(f)
-}
-
-// unpopulatedFieldRanger wraps a protoreflect.Message and modifies its Range
-// method to additionally iterate over unpopulated fields.
-type unpopulatedFieldRanger struct {
- protoreflect.Message
-
- skipNull bool
-}
-
-func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- fds := m.Descriptor().Fields()
- for i := 0; i < fds.Len(); i++ {
- fd := fds.Get(i)
- if m.Has(fd) || fd.ContainingOneof() != nil {
- continue // ignore populated fields and fields within a oneofs
- }
-
- v := m.Get(fd)
- if fd.HasPresence() {
- if m.skipNull {
- continue
- }
- v = protoreflect.Value{} // use invalid value to emit null
- }
- if !f(fd, v) {
- return
- }
- }
- m.Message.Range(f)
-}
-
-// marshalMessage marshals the fields in the given protoreflect.Message.
-// If the typeURL is non-empty, then a synthetic "@type" field is injected
-// containing the URL as the value.
-func (e encoder) marshalMessage(m protoreflect.Message, typeURL string) error {
- if !flags.ProtoLegacy && messageset.IsMessageSet(m.Descriptor()) {
- return errors.New("no support for proto1 MessageSets")
- }
-
- if marshal := wellKnownTypeMarshaler(m.Descriptor().FullName()); marshal != nil {
- return marshal(e, m)
- }
-
- e.StartObject()
- defer e.EndObject()
-
- var fields order.FieldRanger = m
- switch {
- case e.opts.EmitUnpopulated:
- fields = unpopulatedFieldRanger{Message: m, skipNull: false}
- case e.opts.EmitDefaultValues:
- fields = unpopulatedFieldRanger{Message: m, skipNull: true}
- }
- if typeURL != "" {
- fields = typeURLFieldRanger{fields, typeURL}
- }
-
- var err error
- order.RangeFields(fields, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- name := fd.JSONName()
- if e.opts.UseProtoNames {
- name = fd.TextName()
- }
-
- if err = e.WriteName(name); err != nil {
- return false
- }
- if err = e.marshalValue(v, fd); err != nil {
- return false
- }
- return true
- })
- return err
-}
-
-// marshalValue marshals the given protoreflect.Value.
-func (e encoder) marshalValue(val protoreflect.Value, fd protoreflect.FieldDescriptor) error {
- switch {
- case fd.IsList():
- return e.marshalList(val.List(), fd)
- case fd.IsMap():
- return e.marshalMap(val.Map(), fd)
- default:
- return e.marshalSingular(val, fd)
- }
-}
-
-// marshalSingular marshals the given non-repeated field value. This includes
-// all scalar types, enums, messages, and groups.
-func (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error {
- if !val.IsValid() {
- e.WriteNull()
- return nil
- }
-
- switch kind := fd.Kind(); kind {
- case protoreflect.BoolKind:
- e.WriteBool(val.Bool())
-
- case protoreflect.StringKind:
- if e.WriteString(val.String()) != nil {
- return errors.InvalidUTF8(string(fd.FullName()))
- }
-
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- e.WriteInt(val.Int())
-
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- e.WriteUint(val.Uint())
-
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Uint64Kind,
- protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind:
- // 64-bit integers are written out as JSON string.
- e.WriteString(val.String())
-
- case protoreflect.FloatKind:
- // Encoder.WriteFloat handles the special numbers NaN and infinites.
- e.WriteFloat(val.Float(), 32)
-
- case protoreflect.DoubleKind:
- // Encoder.WriteFloat handles the special numbers NaN and infinites.
- e.WriteFloat(val.Float(), 64)
-
- case protoreflect.BytesKind:
- e.WriteString(base64.StdEncoding.EncodeToString(val.Bytes()))
-
- case protoreflect.EnumKind:
- if fd.Enum().FullName() == genid.NullValue_enum_fullname {
- e.WriteNull()
- } else {
- desc := fd.Enum().Values().ByNumber(val.Enum())
- if e.opts.UseEnumNumbers || desc == nil {
- e.WriteInt(int64(val.Enum()))
- } else {
- e.WriteString(string(desc.Name()))
- }
- }
-
- case protoreflect.MessageKind, protoreflect.GroupKind:
- if err := e.marshalMessage(val.Message(), ""); err != nil {
- return err
- }
-
- default:
- panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind))
- }
- return nil
-}
-
-// marshalList marshals the given protoreflect.List.
-func (e encoder) marshalList(list protoreflect.List, fd protoreflect.FieldDescriptor) error {
- e.StartArray()
- defer e.EndArray()
-
- for i := 0; i < list.Len(); i++ {
- item := list.Get(i)
- if err := e.marshalSingular(item, fd); err != nil {
- return err
- }
- }
- return nil
-}
-
-// marshalMap marshals given protoreflect.Map.
-func (e encoder) marshalMap(mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error {
- e.StartObject()
- defer e.EndObject()
-
- var err error
- order.RangeEntries(mmap, order.GenericKeyOrder, func(k protoreflect.MapKey, v protoreflect.Value) bool {
- if err = e.WriteName(k.String()); err != nil {
- return false
- }
- if err = e.marshalSingular(v, fd.MapValue()); err != nil {
- return false
- }
- return true
- })
- return err
-}
diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go
deleted file mode 100644
index e9fe10394..000000000
--- a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go
+++ /dev/null
@@ -1,880 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protojson
-
-import (
- "bytes"
- "fmt"
- "math"
- "strconv"
- "strings"
- "time"
-
- "google.golang.org/protobuf/internal/encoding/json"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type marshalFunc func(encoder, protoreflect.Message) error
-
-// wellKnownTypeMarshaler returns a marshal function if the message type
-// has specialized serialization behavior. It returns nil otherwise.
-func wellKnownTypeMarshaler(name protoreflect.FullName) marshalFunc {
- if name.Parent() == genid.GoogleProtobuf_package {
- switch name.Name() {
- case genid.Any_message_name:
- return encoder.marshalAny
- case genid.Timestamp_message_name:
- return encoder.marshalTimestamp
- case genid.Duration_message_name:
- return encoder.marshalDuration
- case genid.BoolValue_message_name,
- genid.Int32Value_message_name,
- genid.Int64Value_message_name,
- genid.UInt32Value_message_name,
- genid.UInt64Value_message_name,
- genid.FloatValue_message_name,
- genid.DoubleValue_message_name,
- genid.StringValue_message_name,
- genid.BytesValue_message_name:
- return encoder.marshalWrapperType
- case genid.Struct_message_name:
- return encoder.marshalStruct
- case genid.ListValue_message_name:
- return encoder.marshalListValue
- case genid.Value_message_name:
- return encoder.marshalKnownValue
- case genid.FieldMask_message_name:
- return encoder.marshalFieldMask
- case genid.Empty_message_name:
- return encoder.marshalEmpty
- }
- }
- return nil
-}
-
-type unmarshalFunc func(decoder, protoreflect.Message) error
-
-// wellKnownTypeUnmarshaler returns a unmarshal function if the message type
-// has specialized serialization behavior. It returns nil otherwise.
-func wellKnownTypeUnmarshaler(name protoreflect.FullName) unmarshalFunc {
- if name.Parent() == genid.GoogleProtobuf_package {
- switch name.Name() {
- case genid.Any_message_name:
- return decoder.unmarshalAny
- case genid.Timestamp_message_name:
- return decoder.unmarshalTimestamp
- case genid.Duration_message_name:
- return decoder.unmarshalDuration
- case genid.BoolValue_message_name,
- genid.Int32Value_message_name,
- genid.Int64Value_message_name,
- genid.UInt32Value_message_name,
- genid.UInt64Value_message_name,
- genid.FloatValue_message_name,
- genid.DoubleValue_message_name,
- genid.StringValue_message_name,
- genid.BytesValue_message_name:
- return decoder.unmarshalWrapperType
- case genid.Struct_message_name:
- return decoder.unmarshalStruct
- case genid.ListValue_message_name:
- return decoder.unmarshalListValue
- case genid.Value_message_name:
- return decoder.unmarshalKnownValue
- case genid.FieldMask_message_name:
- return decoder.unmarshalFieldMask
- case genid.Empty_message_name:
- return decoder.unmarshalEmpty
- }
- }
- return nil
-}
-
-// The JSON representation of an Any message uses the regular representation of
-// the deserialized, embedded message, with an additional field `@type` which
-// contains the type URL. If the embedded message type is well-known and has a
-// custom JSON representation, that representation will be embedded adding a
-// field `value` which holds the custom JSON in addition to the `@type` field.
-
-func (e encoder) marshalAny(m protoreflect.Message) error {
- fds := m.Descriptor().Fields()
- fdType := fds.ByNumber(genid.Any_TypeUrl_field_number)
- fdValue := fds.ByNumber(genid.Any_Value_field_number)
-
- if !m.Has(fdType) {
- if !m.Has(fdValue) {
- // If message is empty, marshal out empty JSON object.
- e.StartObject()
- e.EndObject()
- return nil
- } else {
- // Return error if type_url field is not set, but value is set.
- return errors.New("%s: %v is not set", genid.Any_message_fullname, genid.Any_TypeUrl_field_name)
- }
- }
-
- typeVal := m.Get(fdType)
- valueVal := m.Get(fdValue)
-
- // Resolve the type in order to unmarshal value field.
- typeURL := typeVal.String()
- emt, err := e.opts.Resolver.FindMessageByURL(typeURL)
- if err != nil {
- return errors.New("%s: unable to resolve %q: %v", genid.Any_message_fullname, typeURL, err)
- }
-
- em := emt.New()
- err = proto.UnmarshalOptions{
- AllowPartial: true, // never check required fields inside an Any
- Resolver: e.opts.Resolver,
- }.Unmarshal(valueVal.Bytes(), em.Interface())
- if err != nil {
- return errors.New("%s: unable to unmarshal %q: %v", genid.Any_message_fullname, typeURL, err)
- }
-
- // If type of value has custom JSON encoding, marshal out a field "value"
- // with corresponding custom JSON encoding of the embedded message as a
- // field.
- if marshal := wellKnownTypeMarshaler(emt.Descriptor().FullName()); marshal != nil {
- e.StartObject()
- defer e.EndObject()
-
- // Marshal out @type field.
- e.WriteName("@type")
- if err := e.WriteString(typeURL); err != nil {
- return err
- }
-
- e.WriteName("value")
- return marshal(e, em)
- }
-
- // Else, marshal out the embedded message's fields in this Any object.
- if err := e.marshalMessage(em, typeURL); err != nil {
- return err
- }
-
- return nil
-}
-
-func (d decoder) unmarshalAny(m protoreflect.Message) error {
- // Peek to check for json.ObjectOpen to avoid advancing a read.
- start, err := d.Peek()
- if err != nil {
- return err
- }
- if start.Kind() != json.ObjectOpen {
- return d.unexpectedTokenError(start)
- }
-
- // Use another decoder to parse the unread bytes for @type field. This
- // avoids advancing a read from current decoder because the current JSON
- // object may contain the fields of the embedded type.
- dec := decoder{d.Clone(), UnmarshalOptions{RecursionLimit: d.opts.RecursionLimit}}
- tok, err := findTypeURL(dec)
- switch err {
- case errEmptyObject:
- // An empty JSON object translates to an empty Any message.
- d.Read() // Read json.ObjectOpen.
- d.Read() // Read json.ObjectClose.
- return nil
-
- case errMissingType:
- if d.opts.DiscardUnknown {
- // Treat all fields as unknowns, similar to an empty object.
- return d.skipJSONValue()
- }
- // Use start.Pos() for line position.
- return d.newError(start.Pos(), err.Error())
-
- default:
- if err != nil {
- return err
- }
- }
-
- typeURL := tok.ParsedString()
- emt, err := d.opts.Resolver.FindMessageByURL(typeURL)
- if err != nil {
- return d.newError(tok.Pos(), "unable to resolve %v: %q", tok.RawString(), err)
- }
-
- // Create new message for the embedded message type and unmarshal into it.
- em := emt.New()
- if unmarshal := wellKnownTypeUnmarshaler(emt.Descriptor().FullName()); unmarshal != nil {
- // If embedded message is a custom type,
- // unmarshal the JSON "value" field into it.
- if err := d.unmarshalAnyValue(unmarshal, em); err != nil {
- return err
- }
- } else {
- // Else unmarshal the current JSON object into it.
- if err := d.unmarshalMessage(em, true); err != nil {
- return err
- }
- }
- // Serialize the embedded message and assign the resulting bytes to the
- // proto value field.
- b, err := proto.MarshalOptions{
- AllowPartial: true, // No need to check required fields inside an Any.
- Deterministic: true,
- }.Marshal(em.Interface())
- if err != nil {
- return d.newError(start.Pos(), "error in marshaling Any.value field: %v", err)
- }
-
- fds := m.Descriptor().Fields()
- fdType := fds.ByNumber(genid.Any_TypeUrl_field_number)
- fdValue := fds.ByNumber(genid.Any_Value_field_number)
-
- m.Set(fdType, protoreflect.ValueOfString(typeURL))
- m.Set(fdValue, protoreflect.ValueOfBytes(b))
- return nil
-}
-
-var errEmptyObject = fmt.Errorf(`empty object`)
-var errMissingType = fmt.Errorf(`missing "@type" field`)
-
-// findTypeURL returns the token for the "@type" field value from the given
-// JSON bytes. It is expected that the given bytes start with json.ObjectOpen.
-// It returns errEmptyObject if the JSON object is empty or errMissingType if
-// @type field does not exist. It returns other error if the @type field is not
-// valid or other decoding issues.
-func findTypeURL(d decoder) (json.Token, error) {
- var typeURL string
- var typeTok json.Token
- numFields := 0
- // Skip start object.
- d.Read()
-
-Loop:
- for {
- tok, err := d.Read()
- if err != nil {
- return json.Token{}, err
- }
-
- switch tok.Kind() {
- case json.ObjectClose:
- if typeURL == "" {
- // Did not find @type field.
- if numFields > 0 {
- return json.Token{}, errMissingType
- }
- return json.Token{}, errEmptyObject
- }
- break Loop
-
- case json.Name:
- numFields++
- if tok.Name() != "@type" {
- // Skip value.
- if err := d.skipJSONValue(); err != nil {
- return json.Token{}, err
- }
- continue
- }
-
- // Return error if this was previously set already.
- if typeURL != "" {
- return json.Token{}, d.newError(tok.Pos(), `duplicate "@type" field`)
- }
- // Read field value.
- tok, err := d.Read()
- if err != nil {
- return json.Token{}, err
- }
- if tok.Kind() != json.String {
- return json.Token{}, d.newError(tok.Pos(), `@type field value is not a string: %v`, tok.RawString())
- }
- typeURL = tok.ParsedString()
- if typeURL == "" {
- return json.Token{}, d.newError(tok.Pos(), `@type field contains empty value`)
- }
- typeTok = tok
- }
- }
-
- return typeTok, nil
-}
-
-// skipJSONValue parses a JSON value (null, boolean, string, number, object and
-// array) in order to advance the read to the next JSON value. It relies on
-// the decoder returning an error if the types are not in valid sequence.
-func (d decoder) skipJSONValue() error {
- var open int
- for {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case json.ObjectClose, json.ArrayClose:
- open--
- case json.ObjectOpen, json.ArrayOpen:
- open++
- if open > d.opts.RecursionLimit {
- return errors.New("exceeded max recursion depth")
- }
- case json.EOF:
- // This can only happen if there's a bug in Decoder.Read.
- // Avoid an infinite loop if this does happen.
- return errors.New("unexpected EOF")
- }
- if open == 0 {
- return nil
- }
- }
-}
-
-// unmarshalAnyValue unmarshals the given custom-type message from the JSON
-// object's "value" field.
-func (d decoder) unmarshalAnyValue(unmarshal unmarshalFunc, m protoreflect.Message) error {
- // Skip ObjectOpen, and start reading the fields.
- d.Read()
-
- var found bool // Used for detecting duplicate "value".
- for {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case json.ObjectClose:
- if !found {
- // We tolerate an omitted `value` field with the google.protobuf.Empty Well-Known-Type,
- // for compatibility with other proto runtimes that have interpreted the spec differently.
- if m.Descriptor().FullName() != genid.Empty_message_fullname {
- return d.newError(tok.Pos(), `missing "value" field`)
- }
- }
- return nil
-
- case json.Name:
- switch tok.Name() {
- case "@type":
- // Skip the value as this was previously parsed already.
- d.Read()
-
- case "value":
- if found {
- return d.newError(tok.Pos(), `duplicate "value" field`)
- }
- // Unmarshal the field value into the given message.
- if err := unmarshal(d, m); err != nil {
- return err
- }
- found = true
-
- default:
- if d.opts.DiscardUnknown {
- if err := d.skipJSONValue(); err != nil {
- return err
- }
- continue
- }
- return d.newError(tok.Pos(), "unknown field %v", tok.RawString())
- }
- }
- }
-}
-
-// Wrapper types are encoded as JSON primitives like string, number or boolean.
-
-func (e encoder) marshalWrapperType(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.WrapperValue_Value_field_number)
- val := m.Get(fd)
- return e.marshalSingular(val, fd)
-}
-
-func (d decoder) unmarshalWrapperType(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.WrapperValue_Value_field_number)
- val, err := d.unmarshalScalar(fd)
- if err != nil {
- return err
- }
- m.Set(fd, val)
- return nil
-}
-
-// The JSON representation for Empty is an empty JSON object.
-
-func (e encoder) marshalEmpty(protoreflect.Message) error {
- e.StartObject()
- e.EndObject()
- return nil
-}
-
-func (d decoder) unmarshalEmpty(protoreflect.Message) error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.ObjectOpen {
- return d.unexpectedTokenError(tok)
- }
-
- for {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case json.ObjectClose:
- return nil
-
- case json.Name:
- if d.opts.DiscardUnknown {
- if err := d.skipJSONValue(); err != nil {
- return err
- }
- continue
- }
- return d.newError(tok.Pos(), "unknown field %v", tok.RawString())
-
- default:
- return d.unexpectedTokenError(tok)
- }
- }
-}
-
-// The JSON representation for Struct is a JSON object that contains the encoded
-// Struct.fields map and follows the serialization rules for a map.
-
-func (e encoder) marshalStruct(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.Struct_Fields_field_number)
- return e.marshalMap(m.Get(fd).Map(), fd)
-}
-
-func (d decoder) unmarshalStruct(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.Struct_Fields_field_number)
- return d.unmarshalMap(m.Mutable(fd).Map(), fd)
-}
-
-// The JSON representation for ListValue is JSON array that contains the encoded
-// ListValue.values repeated field and follows the serialization rules for a
-// repeated field.
-
-func (e encoder) marshalListValue(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.ListValue_Values_field_number)
- return e.marshalList(m.Get(fd).List(), fd)
-}
-
-func (d decoder) unmarshalListValue(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.ListValue_Values_field_number)
- return d.unmarshalList(m.Mutable(fd).List(), fd)
-}
-
-// The JSON representation for a Value is dependent on the oneof field that is
-// set. Each of the field in the oneof has its own custom serialization rule. A
-// Value message needs to be a oneof field set, else it is an error.
-
-func (e encoder) marshalKnownValue(m protoreflect.Message) error {
- od := m.Descriptor().Oneofs().ByName(genid.Value_Kind_oneof_name)
- fd := m.WhichOneof(od)
- if fd == nil {
- return errors.New("%s: none of the oneof fields is set", genid.Value_message_fullname)
- }
- if fd.Number() == genid.Value_NumberValue_field_number {
- if v := m.Get(fd).Float(); math.IsNaN(v) || math.IsInf(v, 0) {
- return errors.New("%s: invalid %v value", genid.Value_NumberValue_field_fullname, v)
- }
- }
- return e.marshalSingular(m.Get(fd), fd)
-}
-
-func (d decoder) unmarshalKnownValue(m protoreflect.Message) error {
- tok, err := d.Peek()
- if err != nil {
- return err
- }
-
- var fd protoreflect.FieldDescriptor
- var val protoreflect.Value
- switch tok.Kind() {
- case json.Null:
- d.Read()
- fd = m.Descriptor().Fields().ByNumber(genid.Value_NullValue_field_number)
- val = protoreflect.ValueOfEnum(0)
-
- case json.Bool:
- tok, err := d.Read()
- if err != nil {
- return err
- }
- fd = m.Descriptor().Fields().ByNumber(genid.Value_BoolValue_field_number)
- val = protoreflect.ValueOfBool(tok.Bool())
-
- case json.Number:
- tok, err := d.Read()
- if err != nil {
- return err
- }
- fd = m.Descriptor().Fields().ByNumber(genid.Value_NumberValue_field_number)
- var ok bool
- val, ok = unmarshalFloat(tok, 64)
- if !ok {
- return d.newError(tok.Pos(), "invalid %v: %v", genid.Value_message_fullname, tok.RawString())
- }
-
- case json.String:
- // A JSON string may have been encoded from the number_value field,
- // e.g. "NaN", "Infinity", etc. Parsing a proto double type also allows
- // for it to be in JSON string form. Given this custom encoding spec,
- // however, there is no way to identify that and hence a JSON string is
- // always assigned to the string_value field, which means that certain
- // encoding cannot be parsed back to the same field.
- tok, err := d.Read()
- if err != nil {
- return err
- }
- fd = m.Descriptor().Fields().ByNumber(genid.Value_StringValue_field_number)
- val = protoreflect.ValueOfString(tok.ParsedString())
-
- case json.ObjectOpen:
- fd = m.Descriptor().Fields().ByNumber(genid.Value_StructValue_field_number)
- val = m.NewField(fd)
- if err := d.unmarshalStruct(val.Message()); err != nil {
- return err
- }
-
- case json.ArrayOpen:
- fd = m.Descriptor().Fields().ByNumber(genid.Value_ListValue_field_number)
- val = m.NewField(fd)
- if err := d.unmarshalListValue(val.Message()); err != nil {
- return err
- }
-
- default:
- return d.newError(tok.Pos(), "invalid %v: %v", genid.Value_message_fullname, tok.RawString())
- }
-
- m.Set(fd, val)
- return nil
-}
-
-// The JSON representation for a Duration is a JSON string that ends in the
-// suffix "s" (indicating seconds) and is preceded by the number of seconds,
-// with nanoseconds expressed as fractional seconds.
-//
-// Durations less than one second are represented with a 0 seconds field and a
-// positive or negative nanos field. For durations of one second or more, a
-// non-zero value for the nanos field must be of the same sign as the seconds
-// field.
-//
-// Duration.seconds must be from -315,576,000,000 to +315,576,000,000 inclusive.
-// Duration.nanos must be from -999,999,999 to +999,999,999 inclusive.
-
-const (
- secondsInNanos = 999999999
- maxSecondsInDuration = 315576000000
-)
-
-func (e encoder) marshalDuration(m protoreflect.Message) error {
- fds := m.Descriptor().Fields()
- fdSeconds := fds.ByNumber(genid.Duration_Seconds_field_number)
- fdNanos := fds.ByNumber(genid.Duration_Nanos_field_number)
-
- secsVal := m.Get(fdSeconds)
- nanosVal := m.Get(fdNanos)
- secs := secsVal.Int()
- nanos := nanosVal.Int()
- if secs < -maxSecondsInDuration || secs > maxSecondsInDuration {
- return errors.New("%s: seconds out of range %v", genid.Duration_message_fullname, secs)
- }
- if nanos < -secondsInNanos || nanos > secondsInNanos {
- return errors.New("%s: nanos out of range %v", genid.Duration_message_fullname, nanos)
- }
- if (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0) {
- return errors.New("%s: signs of seconds and nanos do not match", genid.Duration_message_fullname)
- }
- // Generated output always contains 0, 3, 6, or 9 fractional digits,
- // depending on required precision, followed by the suffix "s".
- var sign string
- if secs < 0 || nanos < 0 {
- sign, secs, nanos = "-", -1*secs, -1*nanos
- }
- x := fmt.Sprintf("%s%d.%09d", sign, secs, nanos)
- x = strings.TrimSuffix(x, "000")
- x = strings.TrimSuffix(x, "000")
- x = strings.TrimSuffix(x, ".000")
- e.WriteString(x + "s")
- return nil
-}
-
-func (d decoder) unmarshalDuration(m protoreflect.Message) error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.String {
- return d.unexpectedTokenError(tok)
- }
-
- secs, nanos, ok := parseDuration(tok.ParsedString())
- if !ok {
- return d.newError(tok.Pos(), "invalid %v value %v", genid.Duration_message_fullname, tok.RawString())
- }
- // Validate seconds. No need to validate nanos because parseDuration would
- // have covered that already.
- if secs < -maxSecondsInDuration || secs > maxSecondsInDuration {
- return d.newError(tok.Pos(), "%v value out of range: %v", genid.Duration_message_fullname, tok.RawString())
- }
-
- fds := m.Descriptor().Fields()
- fdSeconds := fds.ByNumber(genid.Duration_Seconds_field_number)
- fdNanos := fds.ByNumber(genid.Duration_Nanos_field_number)
-
- m.Set(fdSeconds, protoreflect.ValueOfInt64(secs))
- m.Set(fdNanos, protoreflect.ValueOfInt32(nanos))
- return nil
-}
-
-// parseDuration parses the given input string for seconds and nanoseconds value
-// for the Duration JSON format. The format is a decimal number with a suffix
-// 's'. It can have optional plus/minus sign. There needs to be at least an
-// integer or fractional part. Fractional part is limited to 9 digits only for
-// nanoseconds precision, regardless of whether there are trailing zero digits.
-// Example values are 1s, 0.1s, 1.s, .1s, +1s, -1s, -.1s.
-func parseDuration(input string) (int64, int32, bool) {
- b := []byte(input)
- size := len(b)
- if size < 2 {
- return 0, 0, false
- }
- if b[size-1] != 's' {
- return 0, 0, false
- }
- b = b[:size-1]
-
- // Read optional plus/minus symbol.
- var neg bool
- switch b[0] {
- case '-':
- neg = true
- b = b[1:]
- case '+':
- b = b[1:]
- }
- if len(b) == 0 {
- return 0, 0, false
- }
-
- // Read the integer part.
- var intp []byte
- switch {
- case b[0] == '0':
- b = b[1:]
-
- case '1' <= b[0] && b[0] <= '9':
- intp = b[0:]
- b = b[1:]
- n := 1
- for len(b) > 0 && '0' <= b[0] && b[0] <= '9' {
- n++
- b = b[1:]
- }
- intp = intp[:n]
-
- case b[0] == '.':
- // Continue below.
-
- default:
- return 0, 0, false
- }
-
- hasFrac := false
- var frac [9]byte
- if len(b) > 0 {
- if b[0] != '.' {
- return 0, 0, false
- }
- // Read the fractional part.
- b = b[1:]
- n := 0
- for len(b) > 0 && n < 9 && '0' <= b[0] && b[0] <= '9' {
- frac[n] = b[0]
- n++
- b = b[1:]
- }
- // It is not valid if there are more bytes left.
- if len(b) > 0 {
- return 0, 0, false
- }
- // Pad fractional part with 0s.
- for i := n; i < 9; i++ {
- frac[i] = '0'
- }
- hasFrac = true
- }
-
- var secs int64
- if len(intp) > 0 {
- var err error
- secs, err = strconv.ParseInt(string(intp), 10, 64)
- if err != nil {
- return 0, 0, false
- }
- }
-
- var nanos int64
- if hasFrac {
- nanob := bytes.TrimLeft(frac[:], "0")
- if len(nanob) > 0 {
- var err error
- nanos, err = strconv.ParseInt(string(nanob), 10, 32)
- if err != nil {
- return 0, 0, false
- }
- }
- }
-
- if neg {
- if secs > 0 {
- secs = -secs
- }
- if nanos > 0 {
- nanos = -nanos
- }
- }
- return secs, int32(nanos), true
-}
-
-// The JSON representation for a Timestamp is a JSON string in the RFC 3339
-// format, i.e. "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where
-// {year} is always expressed using four digits while {month}, {day}, {hour},
-// {min}, and {sec} are zero-padded to two digits each. The fractional seconds,
-// which can go up to 9 digits, up to 1 nanosecond resolution, is optional. The
-// "Z" suffix indicates the timezone ("UTC"); the timezone is required. Encoding
-// should always use UTC (as indicated by "Z") and a decoder should be able to
-// accept both UTC and other timezones (as indicated by an offset).
-//
-// Timestamp.seconds must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z
-// inclusive.
-// Timestamp.nanos must be from 0 to 999,999,999 inclusive.
-
-const (
- maxTimestampSeconds = 253402300799
- minTimestampSeconds = -62135596800
-)
-
-func (e encoder) marshalTimestamp(m protoreflect.Message) error {
- fds := m.Descriptor().Fields()
- fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number)
- fdNanos := fds.ByNumber(genid.Timestamp_Nanos_field_number)
-
- secsVal := m.Get(fdSeconds)
- nanosVal := m.Get(fdNanos)
- secs := secsVal.Int()
- nanos := nanosVal.Int()
- if secs < minTimestampSeconds || secs > maxTimestampSeconds {
- return errors.New("%s: seconds out of range %v", genid.Timestamp_message_fullname, secs)
- }
- if nanos < 0 || nanos > secondsInNanos {
- return errors.New("%s: nanos out of range %v", genid.Timestamp_message_fullname, nanos)
- }
- // Uses RFC 3339, where generated output will be Z-normalized and uses 0, 3,
- // 6 or 9 fractional digits.
- t := time.Unix(secs, nanos).UTC()
- x := t.Format("2006-01-02T15:04:05.000000000")
- x = strings.TrimSuffix(x, "000")
- x = strings.TrimSuffix(x, "000")
- x = strings.TrimSuffix(x, ".000")
- e.WriteString(x + "Z")
- return nil
-}
-
-func (d decoder) unmarshalTimestamp(m protoreflect.Message) error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.String {
- return d.unexpectedTokenError(tok)
- }
-
- s := tok.ParsedString()
- t, err := time.Parse(time.RFC3339Nano, s)
- if err != nil {
- return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString())
- }
- // Validate seconds.
- secs := t.Unix()
- if secs < minTimestampSeconds || secs > maxTimestampSeconds {
- return d.newError(tok.Pos(), "%v value out of range: %v", genid.Timestamp_message_fullname, tok.RawString())
- }
- // Validate subseconds.
- i := strings.LastIndexByte(s, '.') // start of subsecond field
- j := strings.LastIndexAny(s, "Z-+") // start of timezone field
- if i >= 0 && j >= i && j-i > len(".999999999") {
- return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString())
- }
-
- fds := m.Descriptor().Fields()
- fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number)
- fdNanos := fds.ByNumber(genid.Timestamp_Nanos_field_number)
-
- m.Set(fdSeconds, protoreflect.ValueOfInt64(secs))
- m.Set(fdNanos, protoreflect.ValueOfInt32(int32(t.Nanosecond())))
- return nil
-}
-
-// The JSON representation for a FieldMask is a JSON string where paths are
-// separated by a comma. Fields name in each path are converted to/from
-// lower-camel naming conventions. Encoding should fail if the path name would
-// end up differently after a round-trip.
-
-func (e encoder) marshalFieldMask(m protoreflect.Message) error {
- fd := m.Descriptor().Fields().ByNumber(genid.FieldMask_Paths_field_number)
- list := m.Get(fd).List()
- paths := make([]string, 0, list.Len())
-
- for i := 0; i < list.Len(); i++ {
- s := list.Get(i).String()
- if !protoreflect.FullName(s).IsValid() {
- return errors.New("%s contains invalid path: %q", genid.FieldMask_Paths_field_fullname, s)
- }
- // Return error if conversion to camelCase is not reversible.
- cc := strs.JSONCamelCase(s)
- if s != strs.JSONSnakeCase(cc) {
- return errors.New("%s contains irreversible value %q", genid.FieldMask_Paths_field_fullname, s)
- }
- paths = append(paths, cc)
- }
-
- e.WriteString(strings.Join(paths, ","))
- return nil
-}
-
-func (d decoder) unmarshalFieldMask(m protoreflect.Message) error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if tok.Kind() != json.String {
- return d.unexpectedTokenError(tok)
- }
- str := strings.TrimSpace(tok.ParsedString())
- if str == "" {
- return nil
- }
- paths := strings.Split(str, ",")
-
- fd := m.Descriptor().Fields().ByNumber(genid.FieldMask_Paths_field_number)
- list := m.Mutable(fd).List()
-
- for _, s0 := range paths {
- s := strs.JSONSnakeCase(s0)
- if strings.Contains(s0, "_") || !protoreflect.FullName(s).IsValid() {
- return d.newError(tok.Pos(), "%v contains invalid path: %q", genid.FieldMask_Paths_field_fullname, s0)
- }
- list.Append(protoreflect.ValueOfString(s))
- }
- return nil
-}
diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/decode.go b/vendor/google.golang.org/protobuf/encoding/prototext/decode.go
deleted file mode 100644
index d972a3d98..000000000
--- a/vendor/google.golang.org/protobuf/encoding/prototext/decode.go
+++ /dev/null
@@ -1,772 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package prototext
-
-import (
- "fmt"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/encoding/text"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/internal/set"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// Unmarshal reads the given []byte into the given [proto.Message].
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-func Unmarshal(b []byte, m proto.Message) error {
- return UnmarshalOptions{}.Unmarshal(b, m)
-}
-
-// UnmarshalOptions is a configurable textproto format unmarshaler.
-type UnmarshalOptions struct {
- pragma.NoUnkeyedLiterals
-
- // AllowPartial accepts input for messages that will result in missing
- // required fields. If AllowPartial is false (the default), Unmarshal will
- // return error if there are any missing required fields.
- AllowPartial bool
-
- // DiscardUnknown specifies whether to ignore unknown fields when parsing.
- // An unknown field is any field whose field name or field number does not
- // resolve to any known or extension field in the message.
- // By default, unmarshal rejects unknown fields as an error.
- DiscardUnknown bool
-
- // Resolver is used for looking up types when unmarshaling
- // google.protobuf.Any messages or extension fields.
- // If nil, this defaults to using protoregistry.GlobalTypes.
- Resolver interface {
- protoregistry.MessageTypeResolver
- protoregistry.ExtensionTypeResolver
- }
-}
-
-// Unmarshal reads the given []byte and populates the given [proto.Message]
-// using options in the UnmarshalOptions object.
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error {
- return o.unmarshal(b, m)
-}
-
-// unmarshal is a centralized function that all unmarshal operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for unmarshal that do not go through this.
-func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error {
- proto.Reset(m)
-
- if o.Resolver == nil {
- o.Resolver = protoregistry.GlobalTypes
- }
-
- dec := decoder{text.NewDecoder(b), o}
- if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil {
- return err
- }
- if o.AllowPartial {
- return nil
- }
- return proto.CheckInitialized(m)
-}
-
-type decoder struct {
- *text.Decoder
- opts UnmarshalOptions
-}
-
-// newError returns an error object with position info.
-func (d decoder) newError(pos int, f string, x ...any) error {
- line, column := d.Position(pos)
- head := fmt.Sprintf("(line %d:%d): ", line, column)
- return errors.New(head+f, x...)
-}
-
-// unexpectedTokenError returns a syntax error for the given unexpected token.
-func (d decoder) unexpectedTokenError(tok text.Token) error {
- return d.syntaxError(tok.Pos(), "unexpected token: %s", tok.RawString())
-}
-
-// syntaxError returns a syntax error for given position.
-func (d decoder) syntaxError(pos int, f string, x ...any) error {
- line, column := d.Position(pos)
- head := fmt.Sprintf("syntax error (line %d:%d): ", line, column)
- return errors.New(head+f, x...)
-}
-
-// unmarshalMessage unmarshals into the given protoreflect.Message.
-func (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) error {
- messageDesc := m.Descriptor()
- if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
- return errors.New("no support for proto1 MessageSets")
- }
-
- if messageDesc.FullName() == genid.Any_message_fullname {
- return d.unmarshalAny(m, checkDelims)
- }
-
- if checkDelims {
- tok, err := d.Read()
- if err != nil {
- return err
- }
-
- if tok.Kind() != text.MessageOpen {
- return d.unexpectedTokenError(tok)
- }
- }
-
- var seenNums set.Ints
- var seenOneofs set.Ints
- fieldDescs := messageDesc.Fields()
-
- for {
- // Read field name.
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch typ := tok.Kind(); typ {
- case text.Name:
- // Continue below.
- case text.EOF:
- if checkDelims {
- return text.ErrUnexpectedEOF
- }
- return nil
- default:
- if checkDelims && typ == text.MessageClose {
- return nil
- }
- return d.unexpectedTokenError(tok)
- }
-
- // Resolve the field descriptor.
- var name protoreflect.Name
- var fd protoreflect.FieldDescriptor
- var xt protoreflect.ExtensionType
- var xtErr error
- var isFieldNumberName bool
-
- switch tok.NameKind() {
- case text.IdentName:
- name = protoreflect.Name(tok.IdentName())
- fd = fieldDescs.ByTextName(string(name))
-
- case text.TypeName:
- // Handle extensions only. This code path is not for Any.
- xt, xtErr = d.opts.Resolver.FindExtensionByName(protoreflect.FullName(tok.TypeName()))
-
- case text.FieldNumber:
- isFieldNumberName = true
- num := protoreflect.FieldNumber(tok.FieldNumber())
- if !num.IsValid() {
- return d.newError(tok.Pos(), "invalid field number: %d", num)
- }
- fd = fieldDescs.ByNumber(num)
- if fd == nil {
- xt, xtErr = d.opts.Resolver.FindExtensionByNumber(messageDesc.FullName(), num)
- }
- }
-
- if xt != nil {
- fd = xt.TypeDescriptor()
- if !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() {
- return d.newError(tok.Pos(), "message %v cannot be extended by %v", messageDesc.FullName(), fd.FullName())
- }
- } else if xtErr != nil && xtErr != protoregistry.NotFound {
- return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr)
- }
- if flags.ProtoLegacyWeak {
- if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() {
- fd = nil // reset since the weak reference is not linked in
- }
- }
-
- // Handle unknown fields.
- if fd == nil {
- if d.opts.DiscardUnknown || messageDesc.ReservedNames().Has(name) {
- d.skipValue()
- continue
- }
- return d.newError(tok.Pos(), "unknown field: %v", tok.RawString())
- }
-
- // Handle fields identified by field number.
- if isFieldNumberName {
- // TODO: Add an option to permit parsing field numbers.
- //
- // This requires careful thought as the MarshalOptions.EmitUnknown
- // option allows formatting unknown fields as the field number and the
- // best-effort textual representation of the field value. In that case,
- // it may not be possible to unmarshal the value from a parser that does
- // have information about the unknown field.
- return d.newError(tok.Pos(), "cannot specify field by number: %v", tok.RawString())
- }
-
- switch {
- case fd.IsList():
- kind := fd.Kind()
- if kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() {
- return d.syntaxError(tok.Pos(), "missing field separator :")
- }
-
- list := m.Mutable(fd).List()
- if err := d.unmarshalList(fd, list); err != nil {
- return err
- }
-
- case fd.IsMap():
- mmap := m.Mutable(fd).Map()
- if err := d.unmarshalMap(fd, mmap); err != nil {
- return err
- }
-
- default:
- kind := fd.Kind()
- if kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() {
- return d.syntaxError(tok.Pos(), "missing field separator :")
- }
-
- // If field is a oneof, check if it has already been set.
- if od := fd.ContainingOneof(); od != nil {
- idx := uint64(od.Index())
- if seenOneofs.Has(idx) {
- return d.newError(tok.Pos(), "error parsing %q, oneof %v is already set", tok.RawString(), od.FullName())
- }
- seenOneofs.Set(idx)
- }
-
- num := uint64(fd.Number())
- if seenNums.Has(num) {
- return d.newError(tok.Pos(), "non-repeated field %q is repeated", tok.RawString())
- }
-
- if err := d.unmarshalSingular(fd, m); err != nil {
- return err
- }
- seenNums.Set(num)
- }
- }
-
- return nil
-}
-
-// unmarshalSingular unmarshals a non-repeated field value specified by the
-// given FieldDescriptor.
-func (d decoder) unmarshalSingular(fd protoreflect.FieldDescriptor, m protoreflect.Message) error {
- var val protoreflect.Value
- var err error
- switch fd.Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- val = m.NewField(fd)
- err = d.unmarshalMessage(val.Message(), true)
- default:
- val, err = d.unmarshalScalar(fd)
- }
- if err == nil {
- m.Set(fd, val)
- }
- return err
-}
-
-// unmarshalScalar unmarshals a scalar/enum protoreflect.Value specified by the
-// given FieldDescriptor.
-func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) {
- tok, err := d.Read()
- if err != nil {
- return protoreflect.Value{}, err
- }
-
- if tok.Kind() != text.Scalar {
- return protoreflect.Value{}, d.unexpectedTokenError(tok)
- }
-
- kind := fd.Kind()
- switch kind {
- case protoreflect.BoolKind:
- if b, ok := tok.Bool(); ok {
- return protoreflect.ValueOfBool(b), nil
- }
-
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- if n, ok := tok.Int32(); ok {
- return protoreflect.ValueOfInt32(n), nil
- }
-
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- if n, ok := tok.Int64(); ok {
- return protoreflect.ValueOfInt64(n), nil
- }
-
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- if n, ok := tok.Uint32(); ok {
- return protoreflect.ValueOfUint32(n), nil
- }
-
- case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- if n, ok := tok.Uint64(); ok {
- return protoreflect.ValueOfUint64(n), nil
- }
-
- case protoreflect.FloatKind:
- if n, ok := tok.Float32(); ok {
- return protoreflect.ValueOfFloat32(n), nil
- }
-
- case protoreflect.DoubleKind:
- if n, ok := tok.Float64(); ok {
- return protoreflect.ValueOfFloat64(n), nil
- }
-
- case protoreflect.StringKind:
- if s, ok := tok.String(); ok {
- if strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
- return protoreflect.Value{}, d.newError(tok.Pos(), "contains invalid UTF-8")
- }
- return protoreflect.ValueOfString(s), nil
- }
-
- case protoreflect.BytesKind:
- if b, ok := tok.String(); ok {
- return protoreflect.ValueOfBytes([]byte(b)), nil
- }
-
- case protoreflect.EnumKind:
- if lit, ok := tok.Enum(); ok {
- // Lookup EnumNumber based on name.
- if enumVal := fd.Enum().Values().ByName(protoreflect.Name(lit)); enumVal != nil {
- return protoreflect.ValueOfEnum(enumVal.Number()), nil
- }
- }
- if num, ok := tok.Int32(); ok {
- return protoreflect.ValueOfEnum(protoreflect.EnumNumber(num)), nil
- }
-
- default:
- panic(fmt.Sprintf("invalid scalar kind %v", kind))
- }
-
- return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString())
-}
-
-// unmarshalList unmarshals into given protoreflect.List. A list value can
-// either be in [] syntax or simply just a single scalar/message value.
-func (d decoder) unmarshalList(fd protoreflect.FieldDescriptor, list protoreflect.List) error {
- tok, err := d.Peek()
- if err != nil {
- return err
- }
-
- switch fd.Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- switch tok.Kind() {
- case text.ListOpen:
- d.Read()
- for {
- tok, err := d.Peek()
- if err != nil {
- return err
- }
-
- switch tok.Kind() {
- case text.ListClose:
- d.Read()
- return nil
- case text.MessageOpen:
- pval := list.NewElement()
- if err := d.unmarshalMessage(pval.Message(), true); err != nil {
- return err
- }
- list.Append(pval)
- default:
- return d.unexpectedTokenError(tok)
- }
- }
-
- case text.MessageOpen:
- pval := list.NewElement()
- if err := d.unmarshalMessage(pval.Message(), true); err != nil {
- return err
- }
- list.Append(pval)
- return nil
- }
-
- default:
- switch tok.Kind() {
- case text.ListOpen:
- d.Read()
- for {
- tok, err := d.Peek()
- if err != nil {
- return err
- }
-
- switch tok.Kind() {
- case text.ListClose:
- d.Read()
- return nil
- case text.Scalar:
- pval, err := d.unmarshalScalar(fd)
- if err != nil {
- return err
- }
- list.Append(pval)
- default:
- return d.unexpectedTokenError(tok)
- }
- }
-
- case text.Scalar:
- pval, err := d.unmarshalScalar(fd)
- if err != nil {
- return err
- }
- list.Append(pval)
- return nil
- }
- }
-
- return d.unexpectedTokenError(tok)
-}
-
-// unmarshalMap unmarshals into given protoreflect.Map. A map value is a
-// textproto message containing {key: <kvalue>, value: <mvalue>}.
-func (d decoder) unmarshalMap(fd protoreflect.FieldDescriptor, mmap protoreflect.Map) error {
- // Determine ahead whether map entry is a scalar type or a message type in
- // order to call the appropriate unmarshalMapValue func inside
- // unmarshalMapEntry.
- var unmarshalMapValue func() (protoreflect.Value, error)
- switch fd.MapValue().Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- unmarshalMapValue = func() (protoreflect.Value, error) {
- pval := mmap.NewValue()
- if err := d.unmarshalMessage(pval.Message(), true); err != nil {
- return protoreflect.Value{}, err
- }
- return pval, nil
- }
- default:
- unmarshalMapValue = func() (protoreflect.Value, error) {
- return d.unmarshalScalar(fd.MapValue())
- }
- }
-
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case text.MessageOpen:
- return d.unmarshalMapEntry(fd, mmap, unmarshalMapValue)
-
- case text.ListOpen:
- for {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case text.ListClose:
- return nil
- case text.MessageOpen:
- if err := d.unmarshalMapEntry(fd, mmap, unmarshalMapValue); err != nil {
- return err
- }
- default:
- return d.unexpectedTokenError(tok)
- }
- }
-
- default:
- return d.unexpectedTokenError(tok)
- }
-}
-
-// unmarshalMap unmarshals into given protoreflect.Map. A map value is a
-// textproto message containing {key: <kvalue>, value: <mvalue>}.
-func (d decoder) unmarshalMapEntry(fd protoreflect.FieldDescriptor, mmap protoreflect.Map, unmarshalMapValue func() (protoreflect.Value, error)) error {
- var key protoreflect.MapKey
- var pval protoreflect.Value
-Loop:
- for {
- // Read field name.
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case text.Name:
- if tok.NameKind() != text.IdentName {
- if !d.opts.DiscardUnknown {
- return d.newError(tok.Pos(), "unknown map entry field %q", tok.RawString())
- }
- d.skipValue()
- continue Loop
- }
- // Continue below.
- case text.MessageClose:
- break Loop
- default:
- return d.unexpectedTokenError(tok)
- }
-
- switch name := protoreflect.Name(tok.IdentName()); name {
- case genid.MapEntry_Key_field_name:
- if !tok.HasSeparator() {
- return d.syntaxError(tok.Pos(), "missing field separator :")
- }
- if key.IsValid() {
- return d.newError(tok.Pos(), "map entry %q cannot be repeated", name)
- }
- val, err := d.unmarshalScalar(fd.MapKey())
- if err != nil {
- return err
- }
- key = val.MapKey()
-
- case genid.MapEntry_Value_field_name:
- if kind := fd.MapValue().Kind(); (kind != protoreflect.MessageKind) && (kind != protoreflect.GroupKind) {
- if !tok.HasSeparator() {
- return d.syntaxError(tok.Pos(), "missing field separator :")
- }
- }
- if pval.IsValid() {
- return d.newError(tok.Pos(), "map entry %q cannot be repeated", name)
- }
- pval, err = unmarshalMapValue()
- if err != nil {
- return err
- }
-
- default:
- if !d.opts.DiscardUnknown {
- return d.newError(tok.Pos(), "unknown map entry field %q", name)
- }
- d.skipValue()
- }
- }
-
- if !key.IsValid() {
- key = fd.MapKey().Default().MapKey()
- }
- if !pval.IsValid() {
- switch fd.MapValue().Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind:
- // If value field is not set for message/group types, construct an
- // empty one as default.
- pval = mmap.NewValue()
- default:
- pval = fd.MapValue().Default()
- }
- }
- mmap.Set(key, pval)
- return nil
-}
-
-// unmarshalAny unmarshals an Any textproto. It can either be in expanded form
-// or non-expanded form.
-func (d decoder) unmarshalAny(m protoreflect.Message, checkDelims bool) error {
- var typeURL string
- var bValue []byte
- var seenTypeUrl bool
- var seenValue bool
- var isExpanded bool
-
- if checkDelims {
- tok, err := d.Read()
- if err != nil {
- return err
- }
-
- if tok.Kind() != text.MessageOpen {
- return d.unexpectedTokenError(tok)
- }
- }
-
-Loop:
- for {
- // Read field name. Can only have 3 possible field names, i.e. type_url,
- // value and type URL name inside [].
- tok, err := d.Read()
- if err != nil {
- return err
- }
- if typ := tok.Kind(); typ != text.Name {
- if checkDelims {
- if typ == text.MessageClose {
- break Loop
- }
- } else if typ == text.EOF {
- break Loop
- }
- return d.unexpectedTokenError(tok)
- }
-
- switch tok.NameKind() {
- case text.IdentName:
- // Both type_url and value fields require field separator :.
- if !tok.HasSeparator() {
- return d.syntaxError(tok.Pos(), "missing field separator :")
- }
-
- switch name := protoreflect.Name(tok.IdentName()); name {
- case genid.Any_TypeUrl_field_name:
- if seenTypeUrl {
- return d.newError(tok.Pos(), "duplicate %v field", genid.Any_TypeUrl_field_fullname)
- }
- if isExpanded {
- return d.newError(tok.Pos(), "conflict with [%s] field", typeURL)
- }
- tok, err := d.Read()
- if err != nil {
- return err
- }
- var ok bool
- typeURL, ok = tok.String()
- if !ok {
- return d.newError(tok.Pos(), "invalid %v field value: %v", genid.Any_TypeUrl_field_fullname, tok.RawString())
- }
- seenTypeUrl = true
-
- case genid.Any_Value_field_name:
- if seenValue {
- return d.newError(tok.Pos(), "duplicate %v field", genid.Any_Value_field_fullname)
- }
- if isExpanded {
- return d.newError(tok.Pos(), "conflict with [%s] field", typeURL)
- }
- tok, err := d.Read()
- if err != nil {
- return err
- }
- s, ok := tok.String()
- if !ok {
- return d.newError(tok.Pos(), "invalid %v field value: %v", genid.Any_Value_field_fullname, tok.RawString())
- }
- bValue = []byte(s)
- seenValue = true
-
- default:
- if !d.opts.DiscardUnknown {
- return d.newError(tok.Pos(), "invalid field name %q in %v message", tok.RawString(), genid.Any_message_fullname)
- }
- }
-
- case text.TypeName:
- if isExpanded {
- return d.newError(tok.Pos(), "cannot have more than one type")
- }
- if seenTypeUrl {
- return d.newError(tok.Pos(), "conflict with type_url field")
- }
- typeURL = tok.TypeName()
- var err error
- bValue, err = d.unmarshalExpandedAny(typeURL, tok.Pos())
- if err != nil {
- return err
- }
- isExpanded = true
-
- default:
- if !d.opts.DiscardUnknown {
- return d.newError(tok.Pos(), "invalid field name %q in %v message", tok.RawString(), genid.Any_message_fullname)
- }
- }
- }
-
- fds := m.Descriptor().Fields()
- if len(typeURL) > 0 {
- m.Set(fds.ByNumber(genid.Any_TypeUrl_field_number), protoreflect.ValueOfString(typeURL))
- }
- if len(bValue) > 0 {
- m.Set(fds.ByNumber(genid.Any_Value_field_number), protoreflect.ValueOfBytes(bValue))
- }
- return nil
-}
-
-func (d decoder) unmarshalExpandedAny(typeURL string, pos int) ([]byte, error) {
- mt, err := d.opts.Resolver.FindMessageByURL(typeURL)
- if err != nil {
- return nil, d.newError(pos, "unable to resolve message [%v]: %v", typeURL, err)
- }
- // Create new message for the embedded message type and unmarshal the value
- // field into it.
- m := mt.New()
- if err := d.unmarshalMessage(m, true); err != nil {
- return nil, err
- }
- // Serialize the embedded message and return the resulting bytes.
- b, err := proto.MarshalOptions{
- AllowPartial: true, // Never check required fields inside an Any.
- Deterministic: true,
- }.Marshal(m.Interface())
- if err != nil {
- return nil, d.newError(pos, "error in marshaling message into Any.value: %v", err)
- }
- return b, nil
-}
-
-// skipValue makes the decoder parse a field value in order to advance the read
-// to the next field. It relies on Read returning an error if the types are not
-// in valid sequence.
-func (d decoder) skipValue() error {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- // Only need to continue reading for messages and lists.
- switch tok.Kind() {
- case text.MessageOpen:
- return d.skipMessageValue()
-
- case text.ListOpen:
- for {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case text.ListClose:
- return nil
- case text.MessageOpen:
- if err := d.skipMessageValue(); err != nil {
- return err
- }
- default:
- // Skip items. This will not validate whether skipped values are
- // of the same type or not, same behavior as C++
- // TextFormat::Parser::AllowUnknownField(true) version 3.8.0.
- }
- }
- }
- return nil
-}
-
-// skipMessageValue makes the decoder parse and skip over all fields in a
-// message. It assumes that the previous read type is MessageOpen.
-func (d decoder) skipMessageValue() error {
- for {
- tok, err := d.Read()
- if err != nil {
- return err
- }
- switch tok.Kind() {
- case text.MessageClose:
- return nil
- case text.Name:
- if err := d.skipValue(); err != nil {
- return err
- }
- }
- }
-}
diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/doc.go b/vendor/google.golang.org/protobuf/encoding/prototext/doc.go
deleted file mode 100644
index 162b4f98a..000000000
--- a/vendor/google.golang.org/protobuf/encoding/prototext/doc.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package prototext marshals and unmarshals protocol buffer messages as the
-// textproto format.
-package prototext
diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go
deleted file mode 100644
index 1f57e6610..000000000
--- a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package prototext
-
-import (
- "fmt"
- "strconv"
- "unicode/utf8"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/encoding/text"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/order"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-const defaultIndent = " "
-
-// Format formats the message as a multiline string.
-// This function is only intended for human consumption and ignores errors.
-// Do not depend on the output being stable. Its output will change across
-// different builds of your program, even when using the same version of the
-// protobuf module.
-func Format(m proto.Message) string {
- return MarshalOptions{Multiline: true}.Format(m)
-}
-
-// Marshal writes the given [proto.Message] in textproto format using default
-// options. Do not depend on the output being stable. Its output will change
-// across different builds of your program, even when using the same version of
-// the protobuf module.
-func Marshal(m proto.Message) ([]byte, error) {
- return MarshalOptions{}.Marshal(m)
-}
-
-// MarshalOptions is a configurable text format marshaler.
-type MarshalOptions struct {
- pragma.NoUnkeyedLiterals
-
- // Multiline specifies whether the marshaler should format the output in
- // indented-form with every textual element on a new line.
- // If Indent is an empty string, then an arbitrary indent is chosen.
- Multiline bool
-
- // Indent specifies the set of indentation characters to use in a multiline
- // formatted output such that every entry is preceded by Indent and
- // terminated by a newline. If non-empty, then Multiline is treated as true.
- // Indent can only be composed of space or tab characters.
- Indent string
-
- // EmitASCII specifies whether to format strings and bytes as ASCII only
- // as opposed to using UTF-8 encoding when possible.
- EmitASCII bool
-
- // allowInvalidUTF8 specifies whether to permit the encoding of strings
- // with invalid UTF-8. This is unexported as it is intended to only
- // be specified by the Format method.
- allowInvalidUTF8 bool
-
- // AllowPartial allows messages that have missing required fields to marshal
- // without returning an error. If AllowPartial is false (the default),
- // Marshal will return error if there are any missing required fields.
- AllowPartial bool
-
- // EmitUnknown specifies whether to emit unknown fields in the output.
- // If specified, the unmarshaler may be unable to parse the output.
- // The default is to exclude unknown fields.
- EmitUnknown bool
-
- // Resolver is used for looking up types when expanding google.protobuf.Any
- // messages. If nil, this defaults to using protoregistry.GlobalTypes.
- Resolver interface {
- protoregistry.ExtensionTypeResolver
- protoregistry.MessageTypeResolver
- }
-}
-
-// Format formats the message as a string.
-// This method is only intended for human consumption and ignores errors.
-// Do not depend on the output being stable. Its output will change across
-// different builds of your program, even when using the same version of the
-// protobuf module.
-func (o MarshalOptions) Format(m proto.Message) string {
- if m == nil || !m.ProtoReflect().IsValid() {
- return "<nil>" // invalid syntax, but okay since this is for debugging
- }
- o.allowInvalidUTF8 = true
- o.AllowPartial = true
- o.EmitUnknown = true
- b, _ := o.Marshal(m)
- return string(b)
-}
-
-// Marshal writes the given [proto.Message] in textproto format using options in
-// MarshalOptions object. Do not depend on the output being stable. Its output
-// will change across different builds of your program, even when using the
-// same version of the protobuf module.
-func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) {
- return o.marshal(nil, m)
-}
-
-// MarshalAppend appends the textproto format encoding of m to b,
-// returning the result.
-func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) {
- return o.marshal(b, m)
-}
-
-// marshal is a centralized function that all marshal operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for marshal that do not go through this.
-func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) {
- var delims = [2]byte{'{', '}'}
-
- if o.Multiline && o.Indent == "" {
- o.Indent = defaultIndent
- }
- if o.Resolver == nil {
- o.Resolver = protoregistry.GlobalTypes
- }
-
- internalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII)
- if err != nil {
- return nil, err
- }
-
- // Treat nil message interface as an empty message,
- // in which case there is nothing to output.
- if m == nil {
- return b, nil
- }
-
- enc := encoder{internalEnc, o}
- err = enc.marshalMessage(m.ProtoReflect(), false)
- if err != nil {
- return nil, err
- }
- out := enc.Bytes()
- if len(o.Indent) > 0 && len(out) > 0 {
- out = append(out, '\n')
- }
- if o.AllowPartial {
- return out, nil
- }
- return out, proto.CheckInitialized(m)
-}
-
-type encoder struct {
- *text.Encoder
- opts MarshalOptions
-}
-
-// marshalMessage marshals the given protoreflect.Message.
-func (e encoder) marshalMessage(m protoreflect.Message, inclDelims bool) error {
- messageDesc := m.Descriptor()
- if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {
- return errors.New("no support for proto1 MessageSets")
- }
-
- if inclDelims {
- e.StartMessage()
- defer e.EndMessage()
- }
-
- // Handle Any expansion.
- if messageDesc.FullName() == genid.Any_message_fullname {
- if e.marshalAny(m) {
- return nil
- }
- // If unable to expand, continue on to marshal Any as a regular message.
- }
-
- // Marshal fields.
- var err error
- order.RangeFields(m, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- if err = e.marshalField(fd.TextName(), v, fd); err != nil {
- return false
- }
- return true
- })
- if err != nil {
- return err
- }
-
- // Marshal unknown fields.
- if e.opts.EmitUnknown {
- e.marshalUnknown(m.GetUnknown())
- }
-
- return nil
-}
-
-// marshalField marshals the given field with protoreflect.Value.
-func (e encoder) marshalField(name string, val protoreflect.Value, fd protoreflect.FieldDescriptor) error {
- switch {
- case fd.IsList():
- return e.marshalList(name, val.List(), fd)
- case fd.IsMap():
- return e.marshalMap(name, val.Map(), fd)
- default:
- e.WriteName(name)
- return e.marshalSingular(val, fd)
- }
-}
-
-// marshalSingular marshals the given non-repeated field value. This includes
-// all scalar types, enums, messages, and groups.
-func (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error {
- kind := fd.Kind()
- switch kind {
- case protoreflect.BoolKind:
- e.WriteBool(val.Bool())
-
- case protoreflect.StringKind:
- s := val.String()
- if !e.opts.allowInvalidUTF8 && strs.EnforceUTF8(fd) && !utf8.ValidString(s) {
- return errors.InvalidUTF8(string(fd.FullName()))
- }
- e.WriteString(s)
-
- case protoreflect.Int32Kind, protoreflect.Int64Kind,
- protoreflect.Sint32Kind, protoreflect.Sint64Kind,
- protoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind:
- e.WriteInt(val.Int())
-
- case protoreflect.Uint32Kind, protoreflect.Uint64Kind,
- protoreflect.Fixed32Kind, protoreflect.Fixed64Kind:
- e.WriteUint(val.Uint())
-
- case protoreflect.FloatKind:
- // Encoder.WriteFloat handles the special numbers NaN and infinites.
- e.WriteFloat(val.Float(), 32)
-
- case protoreflect.DoubleKind:
- // Encoder.WriteFloat handles the special numbers NaN and infinites.
- e.WriteFloat(val.Float(), 64)
-
- case protoreflect.BytesKind:
- e.WriteString(string(val.Bytes()))
-
- case protoreflect.EnumKind:
- num := val.Enum()
- if desc := fd.Enum().Values().ByNumber(num); desc != nil {
- e.WriteLiteral(string(desc.Name()))
- } else {
- // Use numeric value if there is no enum description.
- e.WriteInt(int64(num))
- }
-
- case protoreflect.MessageKind, protoreflect.GroupKind:
- return e.marshalMessage(val.Message(), true)
-
- default:
- panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind))
- }
- return nil
-}
-
-// marshalList marshals the given protoreflect.List as multiple name-value fields.
-func (e encoder) marshalList(name string, list protoreflect.List, fd protoreflect.FieldDescriptor) error {
- size := list.Len()
- for i := 0; i < size; i++ {
- e.WriteName(name)
- if err := e.marshalSingular(list.Get(i), fd); err != nil {
- return err
- }
- }
- return nil
-}
-
-// marshalMap marshals the given protoreflect.Map as multiple name-value fields.
-func (e encoder) marshalMap(name string, mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error {
- var err error
- order.RangeEntries(mmap, order.GenericKeyOrder, func(key protoreflect.MapKey, val protoreflect.Value) bool {
- e.WriteName(name)
- e.StartMessage()
- defer e.EndMessage()
-
- e.WriteName(string(genid.MapEntry_Key_field_name))
- err = e.marshalSingular(key.Value(), fd.MapKey())
- if err != nil {
- return false
- }
-
- e.WriteName(string(genid.MapEntry_Value_field_name))
- err = e.marshalSingular(val, fd.MapValue())
- if err != nil {
- return false
- }
- return true
- })
- return err
-}
-
-// marshalUnknown parses the given []byte and marshals fields out.
-// This function assumes proper encoding in the given []byte.
-func (e encoder) marshalUnknown(b []byte) {
- const dec = 10
- const hex = 16
- for len(b) > 0 {
- num, wtype, n := protowire.ConsumeTag(b)
- b = b[n:]
- e.WriteName(strconv.FormatInt(int64(num), dec))
-
- switch wtype {
- case protowire.VarintType:
- var v uint64
- v, n = protowire.ConsumeVarint(b)
- e.WriteUint(v)
- case protowire.Fixed32Type:
- var v uint32
- v, n = protowire.ConsumeFixed32(b)
- e.WriteLiteral("0x" + strconv.FormatUint(uint64(v), hex))
- case protowire.Fixed64Type:
- var v uint64
- v, n = protowire.ConsumeFixed64(b)
- e.WriteLiteral("0x" + strconv.FormatUint(v, hex))
- case protowire.BytesType:
- var v []byte
- v, n = protowire.ConsumeBytes(b)
- e.WriteString(string(v))
- case protowire.StartGroupType:
- e.StartMessage()
- var v []byte
- v, n = protowire.ConsumeGroup(num, b)
- e.marshalUnknown(v)
- e.EndMessage()
- default:
- panic(fmt.Sprintf("prototext: error parsing unknown field wire type: %v", wtype))
- }
-
- b = b[n:]
- }
-}
-
-// marshalAny marshals the given google.protobuf.Any message in expanded form.
-// It returns true if it was able to marshal, else false.
-func (e encoder) marshalAny(any protoreflect.Message) bool {
- // Construct the embedded message.
- fds := any.Descriptor().Fields()
- fdType := fds.ByNumber(genid.Any_TypeUrl_field_number)
- typeURL := any.Get(fdType).String()
- mt, err := e.opts.Resolver.FindMessageByURL(typeURL)
- if err != nil {
- return false
- }
- m := mt.New().Interface()
-
- // Unmarshal bytes into embedded message.
- fdValue := fds.ByNumber(genid.Any_Value_field_number)
- value := any.Get(fdValue)
- err = proto.UnmarshalOptions{
- AllowPartial: true,
- Resolver: e.opts.Resolver,
- }.Unmarshal(value.Bytes(), m)
- if err != nil {
- return false
- }
-
- // Get current encoder position. If marshaling fails, reset encoder output
- // back to this position.
- pos := e.Snapshot()
-
- // Field name is the proto field name enclosed in [].
- e.WriteName("[" + typeURL + "]")
- err = e.marshalMessage(m.ProtoReflect(), true)
- if err != nil {
- e.Reset(pos)
- return false
- }
- return true
-}
diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go
deleted file mode 100644
index e942bc983..000000000
--- a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go
+++ /dev/null
@@ -1,547 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protowire parses and formats the raw wire encoding.
-// See https://protobuf.dev/programming-guides/encoding.
-//
-// For marshaling and unmarshaling entire protobuf messages,
-// use the [google.golang.org/protobuf/proto] package instead.
-package protowire
-
-import (
- "io"
- "math"
- "math/bits"
-
- "google.golang.org/protobuf/internal/errors"
-)
-
-// Number represents the field number.
-type Number int32
-
-const (
- MinValidNumber Number = 1
- FirstReservedNumber Number = 19000
- LastReservedNumber Number = 19999
- MaxValidNumber Number = 1<<29 - 1
- DefaultRecursionLimit = 10000
-)
-
-// IsValid reports whether the field number is semantically valid.
-func (n Number) IsValid() bool {
- return MinValidNumber <= n && n <= MaxValidNumber
-}
-
-// Type represents the wire type.
-type Type int8
-
-const (
- VarintType Type = 0
- Fixed32Type Type = 5
- Fixed64Type Type = 1
- BytesType Type = 2
- StartGroupType Type = 3
- EndGroupType Type = 4
-)
-
-const (
- _ = -iota
- errCodeTruncated
- errCodeFieldNumber
- errCodeOverflow
- errCodeReserved
- errCodeEndGroup
- errCodeRecursionDepth
-)
-
-var (
- errFieldNumber = errors.New("invalid field number")
- errOverflow = errors.New("variable length integer overflow")
- errReserved = errors.New("cannot parse reserved wire type")
- errEndGroup = errors.New("mismatching end group marker")
- errParse = errors.New("parse error")
-)
-
-// ParseError converts an error code into an error value.
-// This returns nil if n is a non-negative number.
-func ParseError(n int) error {
- if n >= 0 {
- return nil
- }
- switch n {
- case errCodeTruncated:
- return io.ErrUnexpectedEOF
- case errCodeFieldNumber:
- return errFieldNumber
- case errCodeOverflow:
- return errOverflow
- case errCodeReserved:
- return errReserved
- case errCodeEndGroup:
- return errEndGroup
- default:
- return errParse
- }
-}
-
-// ConsumeField parses an entire field record (both tag and value) and returns
-// the field number, the wire type, and the total length.
-// This returns a negative length upon an error (see [ParseError]).
-//
-// The total length includes the tag header and the end group marker (if the
-// field is a group).
-func ConsumeField(b []byte) (Number, Type, int) {
- num, typ, n := ConsumeTag(b)
- if n < 0 {
- return 0, 0, n // forward error code
- }
- m := ConsumeFieldValue(num, typ, b[n:])
- if m < 0 {
- return 0, 0, m // forward error code
- }
- return num, typ, n + m
-}
-
-// ConsumeFieldValue parses a field value and returns its length.
-// This assumes that the field [Number] and wire [Type] have already been parsed.
-// This returns a negative length upon an error (see [ParseError]).
-//
-// When parsing a group, the length includes the end group marker and
-// the end group is verified to match the starting field number.
-func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) {
- return consumeFieldValueD(num, typ, b, DefaultRecursionLimit)
-}
-
-func consumeFieldValueD(num Number, typ Type, b []byte, depth int) (n int) {
- switch typ {
- case VarintType:
- _, n = ConsumeVarint(b)
- return n
- case Fixed32Type:
- _, n = ConsumeFixed32(b)
- return n
- case Fixed64Type:
- _, n = ConsumeFixed64(b)
- return n
- case BytesType:
- _, n = ConsumeBytes(b)
- return n
- case StartGroupType:
- if depth < 0 {
- return errCodeRecursionDepth
- }
- n0 := len(b)
- for {
- num2, typ2, n := ConsumeTag(b)
- if n < 0 {
- return n // forward error code
- }
- b = b[n:]
- if typ2 == EndGroupType {
- if num != num2 {
- return errCodeEndGroup
- }
- return n0 - len(b)
- }
-
- n = consumeFieldValueD(num2, typ2, b, depth-1)
- if n < 0 {
- return n // forward error code
- }
- b = b[n:]
- }
- case EndGroupType:
- return errCodeEndGroup
- default:
- return errCodeReserved
- }
-}
-
-// AppendTag encodes num and typ as a varint-encoded tag and appends it to b.
-func AppendTag(b []byte, num Number, typ Type) []byte {
- return AppendVarint(b, EncodeTag(num, typ))
-}
-
-// ConsumeTag parses b as a varint-encoded tag, reporting its length.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeTag(b []byte) (Number, Type, int) {
- v, n := ConsumeVarint(b)
- if n < 0 {
- return 0, 0, n // forward error code
- }
- num, typ := DecodeTag(v)
- if num < MinValidNumber {
- return 0, 0, errCodeFieldNumber
- }
- return num, typ, n
-}
-
-func SizeTag(num Number) int {
- return SizeVarint(EncodeTag(num, 0)) // wire type has no effect on size
-}
-
-// AppendVarint appends v to b as a varint-encoded uint64.
-func AppendVarint(b []byte, v uint64) []byte {
- switch {
- case v < 1<<7:
- b = append(b, byte(v))
- case v < 1<<14:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte(v>>7))
- case v < 1<<21:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte(v>>14))
- case v < 1<<28:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte(v>>21))
- case v < 1<<35:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte((v>>21)&0x7f|0x80),
- byte(v>>28))
- case v < 1<<42:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte((v>>21)&0x7f|0x80),
- byte((v>>28)&0x7f|0x80),
- byte(v>>35))
- case v < 1<<49:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte((v>>21)&0x7f|0x80),
- byte((v>>28)&0x7f|0x80),
- byte((v>>35)&0x7f|0x80),
- byte(v>>42))
- case v < 1<<56:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte((v>>21)&0x7f|0x80),
- byte((v>>28)&0x7f|0x80),
- byte((v>>35)&0x7f|0x80),
- byte((v>>42)&0x7f|0x80),
- byte(v>>49))
- case v < 1<<63:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte((v>>21)&0x7f|0x80),
- byte((v>>28)&0x7f|0x80),
- byte((v>>35)&0x7f|0x80),
- byte((v>>42)&0x7f|0x80),
- byte((v>>49)&0x7f|0x80),
- byte(v>>56))
- default:
- b = append(b,
- byte((v>>0)&0x7f|0x80),
- byte((v>>7)&0x7f|0x80),
- byte((v>>14)&0x7f|0x80),
- byte((v>>21)&0x7f|0x80),
- byte((v>>28)&0x7f|0x80),
- byte((v>>35)&0x7f|0x80),
- byte((v>>42)&0x7f|0x80),
- byte((v>>49)&0x7f|0x80),
- byte((v>>56)&0x7f|0x80),
- 1)
- }
- return b
-}
-
-// ConsumeVarint parses b as a varint-encoded uint64, reporting its length.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeVarint(b []byte) (v uint64, n int) {
- var y uint64
- if len(b) <= 0 {
- return 0, errCodeTruncated
- }
- v = uint64(b[0])
- if v < 0x80 {
- return v, 1
- }
- v -= 0x80
-
- if len(b) <= 1 {
- return 0, errCodeTruncated
- }
- y = uint64(b[1])
- v += y << 7
- if y < 0x80 {
- return v, 2
- }
- v -= 0x80 << 7
-
- if len(b) <= 2 {
- return 0, errCodeTruncated
- }
- y = uint64(b[2])
- v += y << 14
- if y < 0x80 {
- return v, 3
- }
- v -= 0x80 << 14
-
- if len(b) <= 3 {
- return 0, errCodeTruncated
- }
- y = uint64(b[3])
- v += y << 21
- if y < 0x80 {
- return v, 4
- }
- v -= 0x80 << 21
-
- if len(b) <= 4 {
- return 0, errCodeTruncated
- }
- y = uint64(b[4])
- v += y << 28
- if y < 0x80 {
- return v, 5
- }
- v -= 0x80 << 28
-
- if len(b) <= 5 {
- return 0, errCodeTruncated
- }
- y = uint64(b[5])
- v += y << 35
- if y < 0x80 {
- return v, 6
- }
- v -= 0x80 << 35
-
- if len(b) <= 6 {
- return 0, errCodeTruncated
- }
- y = uint64(b[6])
- v += y << 42
- if y < 0x80 {
- return v, 7
- }
- v -= 0x80 << 42
-
- if len(b) <= 7 {
- return 0, errCodeTruncated
- }
- y = uint64(b[7])
- v += y << 49
- if y < 0x80 {
- return v, 8
- }
- v -= 0x80 << 49
-
- if len(b) <= 8 {
- return 0, errCodeTruncated
- }
- y = uint64(b[8])
- v += y << 56
- if y < 0x80 {
- return v, 9
- }
- v -= 0x80 << 56
-
- if len(b) <= 9 {
- return 0, errCodeTruncated
- }
- y = uint64(b[9])
- v += y << 63
- if y < 2 {
- return v, 10
- }
- return 0, errCodeOverflow
-}
-
-// SizeVarint returns the encoded size of a varint.
-// The size is guaranteed to be within 1 and 10, inclusive.
-func SizeVarint(v uint64) int {
- // This computes 1 + (bits.Len64(v)-1)/7.
- // 9/64 is a good enough approximation of 1/7
- return int(9*uint32(bits.Len64(v))+64) / 64
-}
-
-// AppendFixed32 appends v to b as a little-endian uint32.
-func AppendFixed32(b []byte, v uint32) []byte {
- return append(b,
- byte(v>>0),
- byte(v>>8),
- byte(v>>16),
- byte(v>>24))
-}
-
-// ConsumeFixed32 parses b as a little-endian uint32, reporting its length.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeFixed32(b []byte) (v uint32, n int) {
- if len(b) < 4 {
- return 0, errCodeTruncated
- }
- v = uint32(b[0])<<0 | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
- return v, 4
-}
-
-// SizeFixed32 returns the encoded size of a fixed32; which is always 4.
-func SizeFixed32() int {
- return 4
-}
-
-// AppendFixed64 appends v to b as a little-endian uint64.
-func AppendFixed64(b []byte, v uint64) []byte {
- return append(b,
- byte(v>>0),
- byte(v>>8),
- byte(v>>16),
- byte(v>>24),
- byte(v>>32),
- byte(v>>40),
- byte(v>>48),
- byte(v>>56))
-}
-
-// ConsumeFixed64 parses b as a little-endian uint64, reporting its length.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeFixed64(b []byte) (v uint64, n int) {
- if len(b) < 8 {
- return 0, errCodeTruncated
- }
- v = uint64(b[0])<<0 | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
- return v, 8
-}
-
-// SizeFixed64 returns the encoded size of a fixed64; which is always 8.
-func SizeFixed64() int {
- return 8
-}
-
-// AppendBytes appends v to b as a length-prefixed bytes value.
-func AppendBytes(b []byte, v []byte) []byte {
- return append(AppendVarint(b, uint64(len(v))), v...)
-}
-
-// ConsumeBytes parses b as a length-prefixed bytes value, reporting its length.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeBytes(b []byte) (v []byte, n int) {
- m, n := ConsumeVarint(b)
- if n < 0 {
- return nil, n // forward error code
- }
- if m > uint64(len(b[n:])) {
- return nil, errCodeTruncated
- }
- return b[n:][:m], n + int(m)
-}
-
-// SizeBytes returns the encoded size of a length-prefixed bytes value,
-// given only the length.
-func SizeBytes(n int) int {
- return SizeVarint(uint64(n)) + n
-}
-
-// AppendString appends v to b as a length-prefixed bytes value.
-func AppendString(b []byte, v string) []byte {
- return append(AppendVarint(b, uint64(len(v))), v...)
-}
-
-// ConsumeString parses b as a length-prefixed bytes value, reporting its length.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeString(b []byte) (v string, n int) {
- bb, n := ConsumeBytes(b)
- return string(bb), n
-}
-
-// AppendGroup appends v to b as group value, with a trailing end group marker.
-// The value v must not contain the end marker.
-func AppendGroup(b []byte, num Number, v []byte) []byte {
- return AppendVarint(append(b, v...), EncodeTag(num, EndGroupType))
-}
-
-// ConsumeGroup parses b as a group value until the trailing end group marker,
-// and verifies that the end marker matches the provided num. The value v
-// does not contain the end marker, while the length does contain the end marker.
-// This returns a negative length upon an error (see [ParseError]).
-func ConsumeGroup(num Number, b []byte) (v []byte, n int) {
- n = ConsumeFieldValue(num, StartGroupType, b)
- if n < 0 {
- return nil, n // forward error code
- }
- b = b[:n]
-
- // Truncate off end group marker, but need to handle denormalized varints.
- // Assuming end marker is never 0 (which is always the case since
- // EndGroupType is non-zero), we can truncate all trailing bytes where the
- // lower 7 bits are all zero (implying that the varint is denormalized).
- for len(b) > 0 && b[len(b)-1]&0x7f == 0 {
- b = b[:len(b)-1]
- }
- b = b[:len(b)-SizeTag(num)]
- return b, n
-}
-
-// SizeGroup returns the encoded size of a group, given only the length.
-func SizeGroup(num Number, n int) int {
- return n + SizeTag(num)
-}
-
-// DecodeTag decodes the field [Number] and wire [Type] from its unified form.
-// The [Number] is -1 if the decoded field number overflows int32.
-// Other than overflow, this does not check for field number validity.
-func DecodeTag(x uint64) (Number, Type) {
- // NOTE: MessageSet allows for larger field numbers than normal.
- if x>>3 > uint64(math.MaxInt32) {
- return -1, 0
- }
- return Number(x >> 3), Type(x & 7)
-}
-
-// EncodeTag encodes the field [Number] and wire [Type] into its unified form.
-func EncodeTag(num Number, typ Type) uint64 {
- return uint64(num)<<3 | uint64(typ&7)
-}
-
-// DecodeZigZag decodes a zig-zag-encoded uint64 as an int64.
-//
-// Input: {…, 5, 3, 1, 0, 2, 4, 6, …}
-// Output: {…, -3, -2, -1, 0, +1, +2, +3, …}
-func DecodeZigZag(x uint64) int64 {
- return int64(x>>1) ^ int64(x)<<63>>63
-}
-
-// EncodeZigZag encodes an int64 as a zig-zag-encoded uint64.
-//
-// Input: {…, -3, -2, -1, 0, +1, +2, +3, …}
-// Output: {…, 5, 3, 1, 0, 2, 4, 6, …}
-func EncodeZigZag(x int64) uint64 {
- return uint64(x<<1) ^ uint64(x>>63)
-}
-
-// DecodeBool decodes a uint64 as a bool.
-//
-// Input: { 0, 1, 2, …}
-// Output: {false, true, true, …}
-func DecodeBool(x uint64) bool {
- return x != 0
-}
-
-// EncodeBool encodes a bool as a uint64.
-//
-// Input: {false, true}
-// Output: { 0, 1}
-func EncodeBool(x bool) uint64 {
- if x {
- return 1
- }
- return 0
-}
diff --git a/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go b/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go
deleted file mode 100644
index 87e46bd4d..000000000
--- a/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go
+++ /dev/null
@@ -1,414 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package descfmt provides functionality to format descriptors.
-package descfmt
-
-import (
- "fmt"
- "io"
- "reflect"
- "strconv"
- "strings"
-
- "google.golang.org/protobuf/internal/detrand"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type list interface {
- Len() int
- pragma.DoNotImplement
-}
-
-func FormatList(s fmt.State, r rune, vs list) {
- io.WriteString(s, formatListOpt(vs, true, r == 'v' && (s.Flag('+') || s.Flag('#'))))
-}
-func formatListOpt(vs list, isRoot, allowMulti bool) string {
- start, end := "[", "]"
- if isRoot {
- var name string
- switch vs.(type) {
- case protoreflect.Names:
- name = "Names"
- case protoreflect.FieldNumbers:
- name = "FieldNumbers"
- case protoreflect.FieldRanges:
- name = "FieldRanges"
- case protoreflect.EnumRanges:
- name = "EnumRanges"
- case protoreflect.FileImports:
- name = "FileImports"
- case protoreflect.Descriptor:
- name = reflect.ValueOf(vs).MethodByName("Get").Type().Out(0).Name() + "s"
- default:
- name = reflect.ValueOf(vs).Elem().Type().Name()
- }
- start, end = name+"{", "}"
- }
-
- var ss []string
- switch vs := vs.(type) {
- case protoreflect.Names:
- for i := 0; i < vs.Len(); i++ {
- ss = append(ss, fmt.Sprint(vs.Get(i)))
- }
- return start + joinStrings(ss, false) + end
- case protoreflect.FieldNumbers:
- for i := 0; i < vs.Len(); i++ {
- ss = append(ss, fmt.Sprint(vs.Get(i)))
- }
- return start + joinStrings(ss, false) + end
- case protoreflect.FieldRanges:
- for i := 0; i < vs.Len(); i++ {
- r := vs.Get(i)
- if r[0]+1 == r[1] {
- ss = append(ss, fmt.Sprintf("%d", r[0]))
- } else {
- ss = append(ss, fmt.Sprintf("%d:%d", r[0], r[1])) // enum ranges are end exclusive
- }
- }
- return start + joinStrings(ss, false) + end
- case protoreflect.EnumRanges:
- for i := 0; i < vs.Len(); i++ {
- r := vs.Get(i)
- if r[0] == r[1] {
- ss = append(ss, fmt.Sprintf("%d", r[0]))
- } else {
- ss = append(ss, fmt.Sprintf("%d:%d", r[0], int64(r[1])+1)) // enum ranges are end inclusive
- }
- }
- return start + joinStrings(ss, false) + end
- case protoreflect.FileImports:
- for i := 0; i < vs.Len(); i++ {
- var rs records
- rv := reflect.ValueOf(vs.Get(i))
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Path"), "Path"},
- {rv.MethodByName("Package"), "Package"},
- {rv.MethodByName("IsPublic"), "IsPublic"},
- {rv.MethodByName("IsWeak"), "IsWeak"},
- }...)
- ss = append(ss, "{"+rs.Join()+"}")
- }
- return start + joinStrings(ss, allowMulti) + end
- default:
- _, isEnumValue := vs.(protoreflect.EnumValueDescriptors)
- for i := 0; i < vs.Len(); i++ {
- m := reflect.ValueOf(vs).MethodByName("Get")
- v := m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()
- ss = append(ss, formatDescOpt(v.(protoreflect.Descriptor), false, allowMulti && !isEnumValue, nil))
- }
- return start + joinStrings(ss, allowMulti && isEnumValue) + end
- }
-}
-
-type methodAndName struct {
- method reflect.Value
- name string
-}
-
-func FormatDesc(s fmt.State, r rune, t protoreflect.Descriptor) {
- io.WriteString(s, formatDescOpt(t, true, r == 'v' && (s.Flag('+') || s.Flag('#')), nil))
-}
-
-func InternalFormatDescOptForTesting(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string {
- return formatDescOpt(t, isRoot, allowMulti, record)
-}
-
-func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string {
- rv := reflect.ValueOf(t)
- rt := rv.MethodByName("ProtoType").Type().In(0)
-
- start, end := "{", "}"
- if isRoot {
- start = rt.Name() + "{"
- }
-
- _, isFile := t.(protoreflect.FileDescriptor)
- rs := records{
- allowMulti: allowMulti,
- record: record,
- }
- if t.IsPlaceholder() {
- if isFile {
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Path"), "Path"},
- {rv.MethodByName("Package"), "Package"},
- {rv.MethodByName("IsPlaceholder"), "IsPlaceholder"},
- }...)
- } else {
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("FullName"), "FullName"},
- {rv.MethodByName("IsPlaceholder"), "IsPlaceholder"},
- }...)
- }
- } else {
- switch {
- case isFile:
- rs.Append(rv, methodAndName{rv.MethodByName("Syntax"), "Syntax"})
- case isRoot:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Syntax"), "Syntax"},
- {rv.MethodByName("FullName"), "FullName"},
- }...)
- default:
- rs.Append(rv, methodAndName{rv.MethodByName("Name"), "Name"})
- }
- switch t := t.(type) {
- case protoreflect.FieldDescriptor:
- accessors := []methodAndName{
- {rv.MethodByName("Number"), "Number"},
- {rv.MethodByName("Cardinality"), "Cardinality"},
- {rv.MethodByName("Kind"), "Kind"},
- {rv.MethodByName("HasJSONName"), "HasJSONName"},
- {rv.MethodByName("JSONName"), "JSONName"},
- {rv.MethodByName("HasPresence"), "HasPresence"},
- {rv.MethodByName("IsExtension"), "IsExtension"},
- {rv.MethodByName("IsPacked"), "IsPacked"},
- {rv.MethodByName("IsWeak"), "IsWeak"},
- {rv.MethodByName("IsList"), "IsList"},
- {rv.MethodByName("IsMap"), "IsMap"},
- {rv.MethodByName("MapKey"), "MapKey"},
- {rv.MethodByName("MapValue"), "MapValue"},
- {rv.MethodByName("HasDefault"), "HasDefault"},
- {rv.MethodByName("Default"), "Default"},
- {rv.MethodByName("ContainingOneof"), "ContainingOneof"},
- {rv.MethodByName("ContainingMessage"), "ContainingMessage"},
- {rv.MethodByName("Message"), "Message"},
- {rv.MethodByName("Enum"), "Enum"},
- }
- for _, s := range accessors {
- switch s.name {
- case "MapKey":
- if k := t.MapKey(); k != nil {
- rs.recs = append(rs.recs, [2]string{"MapKey", k.Kind().String()})
- }
- case "MapValue":
- if v := t.MapValue(); v != nil {
- switch v.Kind() {
- case protoreflect.EnumKind:
- rs.AppendRecs("MapValue", [2]string{"MapValue", string(v.Enum().FullName())})
- case protoreflect.MessageKind, protoreflect.GroupKind:
- rs.AppendRecs("MapValue", [2]string{"MapValue", string(v.Message().FullName())})
- default:
- rs.AppendRecs("MapValue", [2]string{"MapValue", v.Kind().String()})
- }
- }
- case "ContainingOneof":
- if od := t.ContainingOneof(); od != nil {
- rs.AppendRecs("ContainingOneof", [2]string{"Oneof", string(od.Name())})
- }
- case "ContainingMessage":
- if t.IsExtension() {
- rs.AppendRecs("ContainingMessage", [2]string{"Extendee", string(t.ContainingMessage().FullName())})
- }
- case "Message":
- if !t.IsMap() {
- rs.Append(rv, s)
- }
- default:
- rs.Append(rv, s)
- }
- }
- case protoreflect.OneofDescriptor:
- var ss []string
- fs := t.Fields()
- for i := 0; i < fs.Len(); i++ {
- ss = append(ss, string(fs.Get(i).Name()))
- }
- if len(ss) > 0 {
- rs.AppendRecs("Fields", [2]string{"Fields", "[" + joinStrings(ss, false) + "]"})
- }
-
- case protoreflect.FileDescriptor:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Path"), "Path"},
- {rv.MethodByName("Package"), "Package"},
- {rv.MethodByName("Imports"), "Imports"},
- {rv.MethodByName("Messages"), "Messages"},
- {rv.MethodByName("Enums"), "Enums"},
- {rv.MethodByName("Extensions"), "Extensions"},
- {rv.MethodByName("Services"), "Services"},
- }...)
-
- case protoreflect.MessageDescriptor:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("IsMapEntry"), "IsMapEntry"},
- {rv.MethodByName("Fields"), "Fields"},
- {rv.MethodByName("Oneofs"), "Oneofs"},
- {rv.MethodByName("ReservedNames"), "ReservedNames"},
- {rv.MethodByName("ReservedRanges"), "ReservedRanges"},
- {rv.MethodByName("RequiredNumbers"), "RequiredNumbers"},
- {rv.MethodByName("ExtensionRanges"), "ExtensionRanges"},
- {rv.MethodByName("Messages"), "Messages"},
- {rv.MethodByName("Enums"), "Enums"},
- {rv.MethodByName("Extensions"), "Extensions"},
- }...)
-
- case protoreflect.EnumDescriptor:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Values"), "Values"},
- {rv.MethodByName("ReservedNames"), "ReservedNames"},
- {rv.MethodByName("ReservedRanges"), "ReservedRanges"},
- {rv.MethodByName("IsClosed"), "IsClosed"},
- }...)
-
- case protoreflect.EnumValueDescriptor:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Number"), "Number"},
- }...)
-
- case protoreflect.ServiceDescriptor:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Methods"), "Methods"},
- }...)
-
- case protoreflect.MethodDescriptor:
- rs.Append(rv, []methodAndName{
- {rv.MethodByName("Input"), "Input"},
- {rv.MethodByName("Output"), "Output"},
- {rv.MethodByName("IsStreamingClient"), "IsStreamingClient"},
- {rv.MethodByName("IsStreamingServer"), "IsStreamingServer"},
- }...)
- }
- if m := rv.MethodByName("GoType"); m.IsValid() {
- rs.Append(rv, methodAndName{m, "GoType"})
- }
- }
- return start + rs.Join() + end
-}
-
-type records struct {
- recs [][2]string
- allowMulti bool
-
- // record is a function that will be called for every Append() or
- // AppendRecs() call, to be used for testing with the
- // InternalFormatDescOptForTesting function.
- record func(string)
-}
-
-func (rs *records) AppendRecs(fieldName string, newRecs [2]string) {
- if rs.record != nil {
- rs.record(fieldName)
- }
- rs.recs = append(rs.recs, newRecs)
-}
-
-func (rs *records) Append(v reflect.Value, accessors ...methodAndName) {
- for _, a := range accessors {
- if rs.record != nil {
- rs.record(a.name)
- }
- var rv reflect.Value
- if a.method.IsValid() {
- rv = a.method.Call(nil)[0]
- }
- if v.Kind() == reflect.Struct && !rv.IsValid() {
- rv = v.FieldByName(a.name)
- }
- if !rv.IsValid() {
- panic(fmt.Sprintf("unknown accessor: %v.%s", v.Type(), a.name))
- }
- if _, ok := rv.Interface().(protoreflect.Value); ok {
- rv = rv.MethodByName("Interface").Call(nil)[0]
- if !rv.IsNil() {
- rv = rv.Elem()
- }
- }
-
- // Ignore zero values.
- var isZero bool
- switch rv.Kind() {
- case reflect.Interface, reflect.Slice:
- isZero = rv.IsNil()
- case reflect.Bool:
- isZero = rv.Bool() == false
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- isZero = rv.Int() == 0
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- isZero = rv.Uint() == 0
- case reflect.String:
- isZero = rv.String() == ""
- }
- if n, ok := rv.Interface().(list); ok {
- isZero = n.Len() == 0
- }
- if isZero {
- continue
- }
-
- // Format the value.
- var s string
- v := rv.Interface()
- switch v := v.(type) {
- case list:
- s = formatListOpt(v, false, rs.allowMulti)
- case protoreflect.FieldDescriptor, protoreflect.OneofDescriptor, protoreflect.EnumValueDescriptor, protoreflect.MethodDescriptor:
- s = string(v.(protoreflect.Descriptor).Name())
- case protoreflect.Descriptor:
- s = string(v.FullName())
- case string:
- s = strconv.Quote(v)
- case []byte:
- s = fmt.Sprintf("%q", v)
- default:
- s = fmt.Sprint(v)
- }
- rs.recs = append(rs.recs, [2]string{a.name, s})
- }
-}
-
-func (rs *records) Join() string {
- var ss []string
-
- // In single line mode, simply join all records with commas.
- if !rs.allowMulti {
- for _, r := range rs.recs {
- ss = append(ss, r[0]+formatColon(0)+r[1])
- }
- return joinStrings(ss, false)
- }
-
- // In allowMulti line mode, align single line records for more readable output.
- var maxLen int
- flush := func(i int) {
- for _, r := range rs.recs[len(ss):i] {
- ss = append(ss, r[0]+formatColon(maxLen-len(r[0]))+r[1])
- }
- maxLen = 0
- }
- for i, r := range rs.recs {
- if isMulti := strings.Contains(r[1], "\n"); isMulti {
- flush(i)
- ss = append(ss, r[0]+formatColon(0)+strings.Join(strings.Split(r[1], "\n"), "\n\t"))
- } else if maxLen < len(r[0]) {
- maxLen = len(r[0])
- }
- }
- flush(len(rs.recs))
- return joinStrings(ss, true)
-}
-
-func formatColon(padding int) string {
- // Deliberately introduce instability into the debug output to
- // discourage users from performing string comparisons.
- // This provides us flexibility to change the output in the future.
- if detrand.Bool() {
- return ":" + strings.Repeat(" ", 1+padding) // use non-breaking spaces (U+00a0)
- } else {
- return ":" + strings.Repeat(" ", 1+padding) // use regular spaces (U+0020)
- }
-}
-
-func joinStrings(ss []string, isMulti bool) string {
- if len(ss) == 0 {
- return ""
- }
- if isMulti {
- return "\n\t" + strings.Join(ss, "\n\t") + "\n"
- }
- return strings.Join(ss, ", ")
-}
diff --git a/vendor/google.golang.org/protobuf/internal/descopts/options.go b/vendor/google.golang.org/protobuf/internal/descopts/options.go
deleted file mode 100644
index 024ffebd3..000000000
--- a/vendor/google.golang.org/protobuf/internal/descopts/options.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package descopts contains the nil pointers to concrete descriptor options.
-//
-// This package exists as a form of reverse dependency injection so that certain
-// packages (e.g., internal/filedesc and internal/filetype can avoid a direct
-// dependency on the descriptor proto package).
-package descopts
-
-import "google.golang.org/protobuf/reflect/protoreflect"
-
-// These variables are set by the init function in descriptor.pb.go via logic
-// in internal/filetype. In other words, so long as the descriptor proto package
-// is linked in, these variables will be populated.
-//
-// Each variable is populated with a nil pointer to the options struct.
-var (
- File protoreflect.ProtoMessage
- Enum protoreflect.ProtoMessage
- EnumValue protoreflect.ProtoMessage
- Message protoreflect.ProtoMessage
- Field protoreflect.ProtoMessage
- Oneof protoreflect.ProtoMessage
- ExtensionRange protoreflect.ProtoMessage
- Service protoreflect.ProtoMessage
- Method protoreflect.ProtoMessage
-)
diff --git a/vendor/google.golang.org/protobuf/internal/detrand/rand.go b/vendor/google.golang.org/protobuf/internal/detrand/rand.go
deleted file mode 100644
index 49c8676d4..000000000
--- a/vendor/google.golang.org/protobuf/internal/detrand/rand.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package detrand provides deterministically random functionality.
-//
-// The pseudo-randomness of these functions is seeded by the program binary
-// itself and guarantees that the output does not change within a program,
-// while ensuring that the output is unstable across different builds.
-package detrand
-
-import (
- "encoding/binary"
- "hash/fnv"
- "os"
-)
-
-// Disable disables detrand such that all functions returns the zero value.
-// This function is not concurrent-safe and must be called during program init.
-func Disable() {
- randSeed = 0
-}
-
-// Bool returns a deterministically random boolean.
-func Bool() bool {
- return randSeed%2 == 1
-}
-
-// Intn returns a deterministically random integer between 0 and n-1, inclusive.
-func Intn(n int) int {
- if n <= 0 {
- panic("must be positive")
- }
- return int(randSeed % uint64(n))
-}
-
-// randSeed is a best-effort at an approximate hash of the Go binary.
-var randSeed = binaryHash()
-
-func binaryHash() uint64 {
- // Open the Go binary.
- s, err := os.Executable()
- if err != nil {
- return 0
- }
- f, err := os.Open(s)
- if err != nil {
- return 0
- }
- defer f.Close()
-
- // Hash the size and several samples of the Go binary.
- const numSamples = 8
- var buf [64]byte
- h := fnv.New64()
- fi, err := f.Stat()
- if err != nil {
- return 0
- }
- binary.LittleEndian.PutUint64(buf[:8], uint64(fi.Size()))
- h.Write(buf[:8])
- for i := int64(0); i < numSamples; i++ {
- if _, err := f.ReadAt(buf[:], i*fi.Size()/numSamples); err != nil {
- return 0
- }
- h.Write(buf[:])
- }
- return h.Sum64()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go b/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go
deleted file mode 100644
index 14656b65a..000000000
--- a/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package editiondefaults contains the binary representation of the editions
-// defaults.
-package editiondefaults
-
-import _ "embed"
-
-//go:embed editions_defaults.binpb
-var Defaults []byte
diff --git a/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb b/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb
deleted file mode 100644
index 5a57ef6f3..000000000
--- a/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb
+++ /dev/null
Binary files differ
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go b/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go
deleted file mode 100644
index 328dc733b..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package defval marshals and unmarshals textual forms of default values.
-//
-// This package handles both the form historically used in Go struct field tags
-// and also the form used by google.protobuf.FieldDescriptorProto.default_value
-// since they differ in superficial ways.
-package defval
-
-import (
- "fmt"
- "math"
- "strconv"
-
- ptext "google.golang.org/protobuf/internal/encoding/text"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// Format is the serialization format used to represent the default value.
-type Format int
-
-const (
- _ Format = iota
-
- // Descriptor uses the serialization format that protoc uses with the
- // google.protobuf.FieldDescriptorProto.default_value field.
- Descriptor
-
- // GoTag uses the historical serialization format in Go struct field tags.
- GoTag
-)
-
-// Unmarshal deserializes the default string s according to the given kind k.
-// When k is an enum, a list of enum value descriptors must be provided.
-func Unmarshal(s string, k protoreflect.Kind, evs protoreflect.EnumValueDescriptors, f Format) (protoreflect.Value, protoreflect.EnumValueDescriptor, error) {
- switch k {
- case protoreflect.BoolKind:
- if f == GoTag {
- switch s {
- case "1":
- return protoreflect.ValueOfBool(true), nil, nil
- case "0":
- return protoreflect.ValueOfBool(false), nil, nil
- }
- } else {
- switch s {
- case "true":
- return protoreflect.ValueOfBool(true), nil, nil
- case "false":
- return protoreflect.ValueOfBool(false), nil, nil
- }
- }
- case protoreflect.EnumKind:
- if f == GoTag {
- // Go tags use the numeric form of the enum value.
- if n, err := strconv.ParseInt(s, 10, 32); err == nil {
- if ev := evs.ByNumber(protoreflect.EnumNumber(n)); ev != nil {
- return protoreflect.ValueOfEnum(ev.Number()), ev, nil
- }
- }
- } else {
- // Descriptor default_value use the enum identifier.
- ev := evs.ByName(protoreflect.Name(s))
- if ev != nil {
- return protoreflect.ValueOfEnum(ev.Number()), ev, nil
- }
- }
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- if v, err := strconv.ParseInt(s, 10, 32); err == nil {
- return protoreflect.ValueOfInt32(int32(v)), nil, nil
- }
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- if v, err := strconv.ParseInt(s, 10, 64); err == nil {
- return protoreflect.ValueOfInt64(int64(v)), nil, nil
- }
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- if v, err := strconv.ParseUint(s, 10, 32); err == nil {
- return protoreflect.ValueOfUint32(uint32(v)), nil, nil
- }
- case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- if v, err := strconv.ParseUint(s, 10, 64); err == nil {
- return protoreflect.ValueOfUint64(uint64(v)), nil, nil
- }
- case protoreflect.FloatKind, protoreflect.DoubleKind:
- var v float64
- var err error
- switch s {
- case "-inf":
- v = math.Inf(-1)
- case "inf":
- v = math.Inf(+1)
- case "nan":
- v = math.NaN()
- default:
- v, err = strconv.ParseFloat(s, 64)
- }
- if err == nil {
- if k == protoreflect.FloatKind {
- return protoreflect.ValueOfFloat32(float32(v)), nil, nil
- } else {
- return protoreflect.ValueOfFloat64(float64(v)), nil, nil
- }
- }
- case protoreflect.StringKind:
- // String values are already unescaped and can be used as is.
- return protoreflect.ValueOfString(s), nil, nil
- case protoreflect.BytesKind:
- if b, ok := unmarshalBytes(s); ok {
- return protoreflect.ValueOfBytes(b), nil, nil
- }
- }
- return protoreflect.Value{}, nil, errors.New("could not parse value for %v: %q", k, s)
-}
-
-// Marshal serializes v as the default string according to the given kind k.
-// When specifying the Descriptor format for an enum kind, the associated
-// enum value descriptor must be provided.
-func Marshal(v protoreflect.Value, ev protoreflect.EnumValueDescriptor, k protoreflect.Kind, f Format) (string, error) {
- switch k {
- case protoreflect.BoolKind:
- if f == GoTag {
- if v.Bool() {
- return "1", nil
- } else {
- return "0", nil
- }
- } else {
- if v.Bool() {
- return "true", nil
- } else {
- return "false", nil
- }
- }
- case protoreflect.EnumKind:
- if f == GoTag {
- return strconv.FormatInt(int64(v.Enum()), 10), nil
- } else {
- return string(ev.Name()), nil
- }
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- return strconv.FormatInt(v.Int(), 10), nil
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- return strconv.FormatUint(v.Uint(), 10), nil
- case protoreflect.FloatKind, protoreflect.DoubleKind:
- f := v.Float()
- switch {
- case math.IsInf(f, -1):
- return "-inf", nil
- case math.IsInf(f, +1):
- return "inf", nil
- case math.IsNaN(f):
- return "nan", nil
- default:
- if k == protoreflect.FloatKind {
- return strconv.FormatFloat(f, 'g', -1, 32), nil
- } else {
- return strconv.FormatFloat(f, 'g', -1, 64), nil
- }
- }
- case protoreflect.StringKind:
- // String values are serialized as is without any escaping.
- return v.String(), nil
- case protoreflect.BytesKind:
- if s, ok := marshalBytes(v.Bytes()); ok {
- return s, nil
- }
- }
- return "", errors.New("could not format value for %v: %v", k, v)
-}
-
-// unmarshalBytes deserializes bytes by applying C unescaping.
-func unmarshalBytes(s string) ([]byte, bool) {
- // Bytes values use the same escaping as the text format,
- // however they lack the surrounding double quotes.
- v, err := ptext.UnmarshalString(`"` + s + `"`)
- if err != nil {
- return nil, false
- }
- return []byte(v), true
-}
-
-// marshalBytes serializes bytes by using C escaping.
-// To match the exact output of protoc, this is identical to the
-// CEscape function in strutil.cc of the protoc source code.
-func marshalBytes(b []byte) (string, bool) {
- var s []byte
- for _, c := range b {
- switch c {
- case '\n':
- s = append(s, `\n`...)
- case '\r':
- s = append(s, `\r`...)
- case '\t':
- s = append(s, `\t`...)
- case '"':
- s = append(s, `\"`...)
- case '\'':
- s = append(s, `\'`...)
- case '\\':
- s = append(s, `\\`...)
- default:
- if printableASCII := c >= 0x20 && c <= 0x7e; printableASCII {
- s = append(s, c)
- } else {
- s = append(s, fmt.Sprintf(`\%03o`, c)...)
- }
- }
- }
- return string(s), true
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go
deleted file mode 100644
index ea1d3e65a..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package json
-
-import (
- "bytes"
- "fmt"
- "io"
- "regexp"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/errors"
-)
-
-// call specifies which Decoder method was invoked.
-type call uint8
-
-const (
- readCall call = iota
- peekCall
-)
-
-const unexpectedFmt = "unexpected token %s"
-
-// ErrUnexpectedEOF means that EOF was encountered in the middle of the input.
-var ErrUnexpectedEOF = errors.New("%v", io.ErrUnexpectedEOF)
-
-// Decoder is a token-based JSON decoder.
-type Decoder struct {
- // lastCall is last method called, either readCall or peekCall.
- // Initial value is readCall.
- lastCall call
-
- // lastToken contains the last read token.
- lastToken Token
-
- // lastErr contains the last read error.
- lastErr error
-
- // openStack is a stack containing ObjectOpen and ArrayOpen values. The
- // top of stack represents the object or the array the current value is
- // directly located in.
- openStack []Kind
-
- // orig is used in reporting line and column.
- orig []byte
- // in contains the unconsumed input.
- in []byte
-}
-
-// NewDecoder returns a Decoder to read the given []byte.
-func NewDecoder(b []byte) *Decoder {
- return &Decoder{orig: b, in: b}
-}
-
-// Peek looks ahead and returns the next token kind without advancing a read.
-func (d *Decoder) Peek() (Token, error) {
- defer func() { d.lastCall = peekCall }()
- if d.lastCall == readCall {
- d.lastToken, d.lastErr = d.Read()
- }
- return d.lastToken, d.lastErr
-}
-
-// Read returns the next JSON token.
-// It will return an error if there is no valid token.
-func (d *Decoder) Read() (Token, error) {
- const scalar = Null | Bool | Number | String
-
- defer func() { d.lastCall = readCall }()
- if d.lastCall == peekCall {
- return d.lastToken, d.lastErr
- }
-
- tok, err := d.parseNext()
- if err != nil {
- return Token{}, err
- }
-
- switch tok.kind {
- case EOF:
- if len(d.openStack) != 0 ||
- d.lastToken.kind&scalar|ObjectClose|ArrayClose == 0 {
- return Token{}, ErrUnexpectedEOF
- }
-
- case Null:
- if !d.isValueNext() {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
-
- case Bool, Number:
- if !d.isValueNext() {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
-
- case String:
- if d.isValueNext() {
- break
- }
- // This string token should only be for a field name.
- if d.lastToken.kind&(ObjectOpen|comma) == 0 {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
- if len(d.in) == 0 {
- return Token{}, ErrUnexpectedEOF
- }
- if c := d.in[0]; c != ':' {
- return Token{}, d.newSyntaxError(d.currPos(), `unexpected character %s, missing ":" after field name`, string(c))
- }
- tok.kind = Name
- d.consume(1)
-
- case ObjectOpen, ArrayOpen:
- if !d.isValueNext() {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
- d.openStack = append(d.openStack, tok.kind)
-
- case ObjectClose:
- if len(d.openStack) == 0 ||
- d.lastToken.kind&(Name|comma) != 0 ||
- d.openStack[len(d.openStack)-1] != ObjectOpen {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
- d.openStack = d.openStack[:len(d.openStack)-1]
-
- case ArrayClose:
- if len(d.openStack) == 0 ||
- d.lastToken.kind == comma ||
- d.openStack[len(d.openStack)-1] != ArrayOpen {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
- d.openStack = d.openStack[:len(d.openStack)-1]
-
- case comma:
- if len(d.openStack) == 0 ||
- d.lastToken.kind&(scalar|ObjectClose|ArrayClose) == 0 {
- return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString())
- }
- }
-
- // Update d.lastToken only after validating token to be in the right sequence.
- d.lastToken = tok
-
- if d.lastToken.kind == comma {
- return d.Read()
- }
- return tok, nil
-}
-
-// Any sequence that looks like a non-delimiter (for error reporting).
-var errRegexp = regexp.MustCompile(`^([-+._a-zA-Z0-9]{1,32}|.)`)
-
-// parseNext parses for the next JSON token. It returns a Token object for
-// different types, except for Name. It does not handle whether the next token
-// is in a valid sequence or not.
-func (d *Decoder) parseNext() (Token, error) {
- // Trim leading spaces.
- d.consume(0)
-
- in := d.in
- if len(in) == 0 {
- return d.consumeToken(EOF, 0), nil
- }
-
- switch in[0] {
- case 'n':
- if n := matchWithDelim("null", in); n != 0 {
- return d.consumeToken(Null, n), nil
- }
-
- case 't':
- if n := matchWithDelim("true", in); n != 0 {
- return d.consumeBoolToken(true, n), nil
- }
-
- case 'f':
- if n := matchWithDelim("false", in); n != 0 {
- return d.consumeBoolToken(false, n), nil
- }
-
- case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
- if n, ok := parseNumber(in); ok {
- return d.consumeToken(Number, n), nil
- }
-
- case '"':
- s, n, err := d.parseString(in)
- if err != nil {
- return Token{}, err
- }
- return d.consumeStringToken(s, n), nil
-
- case '{':
- return d.consumeToken(ObjectOpen, 1), nil
-
- case '}':
- return d.consumeToken(ObjectClose, 1), nil
-
- case '[':
- return d.consumeToken(ArrayOpen, 1), nil
-
- case ']':
- return d.consumeToken(ArrayClose, 1), nil
-
- case ',':
- return d.consumeToken(comma, 1), nil
- }
- return Token{}, d.newSyntaxError(d.currPos(), "invalid value %s", errRegexp.Find(in))
-}
-
-// newSyntaxError returns an error with line and column information useful for
-// syntax errors.
-func (d *Decoder) newSyntaxError(pos int, f string, x ...any) error {
- e := errors.New(f, x...)
- line, column := d.Position(pos)
- return errors.New("syntax error (line %d:%d): %v", line, column, e)
-}
-
-// Position returns line and column number of given index of the original input.
-// It will panic if index is out of range.
-func (d *Decoder) Position(idx int) (line int, column int) {
- b := d.orig[:idx]
- line = bytes.Count(b, []byte("\n")) + 1
- if i := bytes.LastIndexByte(b, '\n'); i >= 0 {
- b = b[i+1:]
- }
- column = utf8.RuneCount(b) + 1 // ignore multi-rune characters
- return line, column
-}
-
-// currPos returns the current index position of d.in from d.orig.
-func (d *Decoder) currPos() int {
- return len(d.orig) - len(d.in)
-}
-
-// matchWithDelim matches s with the input b and verifies that the match
-// terminates with a delimiter of some form (e.g., r"[^-+_.a-zA-Z0-9]").
-// As a special case, EOF is considered a delimiter. It returns the length of s
-// if there is a match, else 0.
-func matchWithDelim(s string, b []byte) int {
- if !bytes.HasPrefix(b, []byte(s)) {
- return 0
- }
-
- n := len(s)
- if n < len(b) && isNotDelim(b[n]) {
- return 0
- }
- return n
-}
-
-// isNotDelim returns true if given byte is a not delimiter character.
-func isNotDelim(c byte) bool {
- return (c == '-' || c == '+' || c == '.' || c == '_' ||
- ('a' <= c && c <= 'z') ||
- ('A' <= c && c <= 'Z') ||
- ('0' <= c && c <= '9'))
-}
-
-// consume consumes n bytes of input and any subsequent whitespace.
-func (d *Decoder) consume(n int) {
- d.in = d.in[n:]
- for len(d.in) > 0 {
- switch d.in[0] {
- case ' ', '\n', '\r', '\t':
- d.in = d.in[1:]
- default:
- return
- }
- }
-}
-
-// isValueNext returns true if next type should be a JSON value: Null,
-// Number, String or Bool.
-func (d *Decoder) isValueNext() bool {
- if len(d.openStack) == 0 {
- return d.lastToken.kind == 0
- }
-
- start := d.openStack[len(d.openStack)-1]
- switch start {
- case ObjectOpen:
- return d.lastToken.kind&Name != 0
- case ArrayOpen:
- return d.lastToken.kind&(ArrayOpen|comma) != 0
- }
- panic(fmt.Sprintf(
- "unreachable logic in Decoder.isValueNext, lastToken.kind: %v, openStack: %v",
- d.lastToken.kind, start))
-}
-
-// consumeToken constructs a Token for given Kind with raw value derived from
-// current d.in and given size, and consumes the given size-length of it.
-func (d *Decoder) consumeToken(kind Kind, size int) Token {
- tok := Token{
- kind: kind,
- raw: d.in[:size],
- pos: len(d.orig) - len(d.in),
- }
- d.consume(size)
- return tok
-}
-
-// consumeBoolToken constructs a Token for a Bool kind with raw value derived from
-// current d.in and given size.
-func (d *Decoder) consumeBoolToken(b bool, size int) Token {
- tok := Token{
- kind: Bool,
- raw: d.in[:size],
- pos: len(d.orig) - len(d.in),
- boo: b,
- }
- d.consume(size)
- return tok
-}
-
-// consumeStringToken constructs a Token for a String kind with raw value derived
-// from current d.in and given size.
-func (d *Decoder) consumeStringToken(s string, size int) Token {
- tok := Token{
- kind: String,
- raw: d.in[:size],
- pos: len(d.orig) - len(d.in),
- str: s,
- }
- d.consume(size)
- return tok
-}
-
-// Clone returns a copy of the Decoder for use in reading ahead the next JSON
-// object, array or other values without affecting current Decoder.
-func (d *Decoder) Clone() *Decoder {
- ret := *d
- ret.openStack = append([]Kind(nil), ret.openStack...)
- return &ret
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go
deleted file mode 100644
index 2999d7133..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package json
-
-import (
- "bytes"
- "strconv"
-)
-
-// parseNumber reads the given []byte for a valid JSON number. If it is valid,
-// it returns the number of bytes. Parsing logic follows the definition in
-// https://tools.ietf.org/html/rfc7159#section-6, and is based off
-// encoding/json.isValidNumber function.
-func parseNumber(input []byte) (int, bool) {
- var n int
-
- s := input
- if len(s) == 0 {
- return 0, false
- }
-
- // Optional -
- if s[0] == '-' {
- s = s[1:]
- n++
- if len(s) == 0 {
- return 0, false
- }
- }
-
- // Digits
- switch {
- case s[0] == '0':
- s = s[1:]
- n++
-
- case '1' <= s[0] && s[0] <= '9':
- s = s[1:]
- n++
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
-
- default:
- return 0, false
- }
-
- // . followed by 1 or more digits.
- if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' {
- s = s[2:]
- n += 2
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- }
-
- // e or E followed by an optional - or + and
- // 1 or more digits.
- if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') {
- s = s[1:]
- n++
- if s[0] == '+' || s[0] == '-' {
- s = s[1:]
- n++
- if len(s) == 0 {
- return 0, false
- }
- }
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- }
-
- // Check that next byte is a delimiter or it is at the end.
- if n < len(input) && isNotDelim(input[n]) {
- return 0, false
- }
-
- return n, true
-}
-
-// numberParts is the result of parsing out a valid JSON number. It contains
-// the parts of a number. The parts are used for integer conversion.
-type numberParts struct {
- neg bool
- intp []byte
- frac []byte
- exp []byte
-}
-
-// parseNumber constructs numberParts from given []byte. The logic here is
-// similar to consumeNumber above with the difference of having to construct
-// numberParts. The slice fields in numberParts are subslices of the input.
-func parseNumberParts(input []byte) (numberParts, bool) {
- var neg bool
- var intp []byte
- var frac []byte
- var exp []byte
-
- s := input
- if len(s) == 0 {
- return numberParts{}, false
- }
-
- // Optional -
- if s[0] == '-' {
- neg = true
- s = s[1:]
- if len(s) == 0 {
- return numberParts{}, false
- }
- }
-
- // Digits
- switch {
- case s[0] == '0':
- // Skip first 0 and no need to store.
- s = s[1:]
-
- case '1' <= s[0] && s[0] <= '9':
- intp = s
- n := 1
- s = s[1:]
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- intp = intp[:n]
-
- default:
- return numberParts{}, false
- }
-
- // . followed by 1 or more digits.
- if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' {
- frac = s[1:]
- n := 1
- s = s[2:]
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- frac = frac[:n]
- }
-
- // e or E followed by an optional - or + and
- // 1 or more digits.
- if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') {
- s = s[1:]
- exp = s
- n := 0
- if s[0] == '+' || s[0] == '-' {
- s = s[1:]
- n++
- if len(s) == 0 {
- return numberParts{}, false
- }
- }
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- exp = exp[:n]
- }
-
- return numberParts{
- neg: neg,
- intp: intp,
- frac: bytes.TrimRight(frac, "0"), // Remove unnecessary 0s to the right.
- exp: exp,
- }, true
-}
-
-// normalizeToIntString returns an integer string in normal form without the
-// E-notation for given numberParts. It will return false if it is not an
-// integer or if the exponent exceeds than max/min int value.
-func normalizeToIntString(n numberParts) (string, bool) {
- intpSize := len(n.intp)
- fracSize := len(n.frac)
-
- if intpSize == 0 && fracSize == 0 {
- return "0", true
- }
-
- var exp int
- if len(n.exp) > 0 {
- i, err := strconv.ParseInt(string(n.exp), 10, 32)
- if err != nil {
- return "", false
- }
- exp = int(i)
- }
-
- var num []byte
- if exp >= 0 {
- // For positive E, shift fraction digits into integer part and also pad
- // with zeroes as needed.
-
- // If there are more digits in fraction than the E value, then the
- // number is not an integer.
- if fracSize > exp {
- return "", false
- }
-
- // Make sure resulting digits are within max value limit to avoid
- // unnecessarily constructing a large byte slice that may simply fail
- // later on.
- const maxDigits = 20 // Max uint64 value has 20 decimal digits.
- if intpSize+exp > maxDigits {
- return "", false
- }
-
- // Set cap to make a copy of integer part when appended.
- num = n.intp[:len(n.intp):len(n.intp)]
- num = append(num, n.frac...)
- for i := 0; i < exp-fracSize; i++ {
- num = append(num, '0')
- }
- } else {
- // For negative E, shift digits in integer part out.
-
- // If there are fractions, then the number is not an integer.
- if fracSize > 0 {
- return "", false
- }
-
- // index is where the decimal point will be after adjusting for negative
- // exponent.
- index := intpSize + exp
- if index < 0 {
- return "", false
- }
-
- num = n.intp
- // If any of the digits being shifted to the right of the decimal point
- // is non-zero, then the number is not an integer.
- for i := index; i < intpSize; i++ {
- if num[i] != '0' {
- return "", false
- }
- }
- num = num[:index]
- }
-
- if n.neg {
- return "-" + string(num), true
- }
- return string(num), true
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go
deleted file mode 100644
index f7fea7d8d..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package json
-
-import (
- "strconv"
- "unicode"
- "unicode/utf16"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/strs"
-)
-
-func (d *Decoder) parseString(in []byte) (string, int, error) {
- in0 := in
- if len(in) == 0 {
- return "", 0, ErrUnexpectedEOF
- }
- if in[0] != '"' {
- return "", 0, d.newSyntaxError(d.currPos(), "invalid character %q at start of string", in[0])
- }
- in = in[1:]
- i := indexNeedEscapeInBytes(in)
- in, out := in[i:], in[:i:i] // set cap to prevent mutations
- for len(in) > 0 {
- switch r, n := utf8.DecodeRune(in); {
- case r == utf8.RuneError && n == 1:
- return "", 0, d.newSyntaxError(d.currPos(), "invalid UTF-8 in string")
- case r < ' ':
- return "", 0, d.newSyntaxError(d.currPos(), "invalid character %q in string", r)
- case r == '"':
- in = in[1:]
- n := len(in0) - len(in)
- return string(out), n, nil
- case r == '\\':
- if len(in) < 2 {
- return "", 0, ErrUnexpectedEOF
- }
- switch r := in[1]; r {
- case '"', '\\', '/':
- in, out = in[2:], append(out, r)
- case 'b':
- in, out = in[2:], append(out, '\b')
- case 'f':
- in, out = in[2:], append(out, '\f')
- case 'n':
- in, out = in[2:], append(out, '\n')
- case 'r':
- in, out = in[2:], append(out, '\r')
- case 't':
- in, out = in[2:], append(out, '\t')
- case 'u':
- if len(in) < 6 {
- return "", 0, ErrUnexpectedEOF
- }
- v, err := strconv.ParseUint(string(in[2:6]), 16, 16)
- if err != nil {
- return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:6])
- }
- in = in[6:]
-
- r := rune(v)
- if utf16.IsSurrogate(r) {
- if len(in) < 6 {
- return "", 0, ErrUnexpectedEOF
- }
- v, err := strconv.ParseUint(string(in[2:6]), 16, 16)
- r = utf16.DecodeRune(r, rune(v))
- if in[0] != '\\' || in[1] != 'u' ||
- r == unicode.ReplacementChar || err != nil {
- return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:6])
- }
- in = in[6:]
- }
- out = append(out, string(r)...)
- default:
- return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:2])
- }
- default:
- i := indexNeedEscapeInBytes(in[n:])
- in, out = in[n+i:], append(out, in[:n+i]...)
- }
- }
- return "", 0, ErrUnexpectedEOF
-}
-
-// indexNeedEscapeInBytes returns the index of the character that needs
-// escaping. If no characters need escaping, this returns the input length.
-func indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) }
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go
deleted file mode 100644
index 50578d659..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package json
-
-import (
- "bytes"
- "fmt"
- "strconv"
-)
-
-// Kind represents a token kind expressible in the JSON format.
-type Kind uint16
-
-const (
- Invalid Kind = (1 << iota) / 2
- EOF
- Null
- Bool
- Number
- String
- Name
- ObjectOpen
- ObjectClose
- ArrayOpen
- ArrayClose
-
- // comma is only for parsing in between tokens and
- // does not need to be exported.
- comma
-)
-
-func (k Kind) String() string {
- switch k {
- case EOF:
- return "eof"
- case Null:
- return "null"
- case Bool:
- return "bool"
- case Number:
- return "number"
- case String:
- return "string"
- case ObjectOpen:
- return "{"
- case ObjectClose:
- return "}"
- case Name:
- return "name"
- case ArrayOpen:
- return "["
- case ArrayClose:
- return "]"
- case comma:
- return ","
- }
- return "<invalid>"
-}
-
-// Token provides a parsed token kind and value.
-//
-// Values are provided by the difference accessor methods. The accessor methods
-// Name, Bool, and ParsedString will panic if called on the wrong kind. There
-// are different accessor methods for the Number kind for converting to the
-// appropriate Go numeric type and those methods have the ok return value.
-type Token struct {
- // Token kind.
- kind Kind
- // pos provides the position of the token in the original input.
- pos int
- // raw bytes of the serialized token.
- // This is a subslice into the original input.
- raw []byte
- // boo is parsed boolean value.
- boo bool
- // str is parsed string value.
- str string
-}
-
-// Kind returns the token kind.
-func (t Token) Kind() Kind {
- return t.kind
-}
-
-// RawString returns the read value in string.
-func (t Token) RawString() string {
- return string(t.raw)
-}
-
-// Pos returns the token position from the input.
-func (t Token) Pos() int {
- return t.pos
-}
-
-// Name returns the object name if token is Name, else it panics.
-func (t Token) Name() string {
- if t.kind == Name {
- return t.str
- }
- panic(fmt.Sprintf("Token is not a Name: %v", t.RawString()))
-}
-
-// Bool returns the bool value if token kind is Bool, else it panics.
-func (t Token) Bool() bool {
- if t.kind == Bool {
- return t.boo
- }
- panic(fmt.Sprintf("Token is not a Bool: %v", t.RawString()))
-}
-
-// ParsedString returns the string value for a JSON string token or the read
-// value in string if token is not a string.
-func (t Token) ParsedString() string {
- if t.kind == String {
- return t.str
- }
- panic(fmt.Sprintf("Token is not a String: %v", t.RawString()))
-}
-
-// Float returns the floating-point number if token kind is Number.
-//
-// The floating-point precision is specified by the bitSize parameter: 32 for
-// float32 or 64 for float64. If bitSize=32, the result still has type float64,
-// but it will be convertible to float32 without changing its value. It will
-// return false if the number exceeds the floating point limits for given
-// bitSize.
-func (t Token) Float(bitSize int) (float64, bool) {
- if t.kind != Number {
- return 0, false
- }
- f, err := strconv.ParseFloat(t.RawString(), bitSize)
- if err != nil {
- return 0, false
- }
- return f, true
-}
-
-// Int returns the signed integer number if token is Number.
-//
-// The given bitSize specifies the integer type that the result must fit into.
-// It returns false if the number is not an integer value or if the result
-// exceeds the limits for given bitSize.
-func (t Token) Int(bitSize int) (int64, bool) {
- s, ok := t.getIntStr()
- if !ok {
- return 0, false
- }
- n, err := strconv.ParseInt(s, 10, bitSize)
- if err != nil {
- return 0, false
- }
- return n, true
-}
-
-// Uint returns the signed integer number if token is Number.
-//
-// The given bitSize specifies the unsigned integer type that the result must
-// fit into. It returns false if the number is not an unsigned integer value
-// or if the result exceeds the limits for given bitSize.
-func (t Token) Uint(bitSize int) (uint64, bool) {
- s, ok := t.getIntStr()
- if !ok {
- return 0, false
- }
- n, err := strconv.ParseUint(s, 10, bitSize)
- if err != nil {
- return 0, false
- }
- return n, true
-}
-
-func (t Token) getIntStr() (string, bool) {
- if t.kind != Number {
- return "", false
- }
- parts, ok := parseNumberParts(t.raw)
- if !ok {
- return "", false
- }
- return normalizeToIntString(parts)
-}
-
-// TokenEquals returns true if given Tokens are equal, else false.
-func TokenEquals(x, y Token) bool {
- return x.kind == y.kind &&
- x.pos == y.pos &&
- bytes.Equal(x.raw, y.raw) &&
- x.boo == y.boo &&
- x.str == y.str
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go
deleted file mode 100644
index 934f2dcb3..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package json
-
-import (
- "math"
- "math/bits"
- "strconv"
- "strings"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/detrand"
- "google.golang.org/protobuf/internal/errors"
-)
-
-// kind represents an encoding type.
-type kind uint8
-
-const (
- _ kind = (1 << iota) / 2
- name
- scalar
- objectOpen
- objectClose
- arrayOpen
- arrayClose
-)
-
-// Encoder provides methods to write out JSON constructs and values. The user is
-// responsible for producing valid sequences of JSON constructs and values.
-type Encoder struct {
- indent string
- lastKind kind
- indents []byte
- out []byte
-}
-
-// NewEncoder returns an Encoder.
-//
-// If indent is a non-empty string, it causes every entry for an Array or Object
-// to be preceded by the indent and trailed by a newline.
-func NewEncoder(buf []byte, indent string) (*Encoder, error) {
- e := &Encoder{
- out: buf,
- }
- if len(indent) > 0 {
- if strings.Trim(indent, " \t") != "" {
- return nil, errors.New("indent may only be composed of space or tab characters")
- }
- e.indent = indent
- }
- return e, nil
-}
-
-// Bytes returns the content of the written bytes.
-func (e *Encoder) Bytes() []byte {
- return e.out
-}
-
-// WriteNull writes out the null value.
-func (e *Encoder) WriteNull() {
- e.prepareNext(scalar)
- e.out = append(e.out, "null"...)
-}
-
-// WriteBool writes out the given boolean value.
-func (e *Encoder) WriteBool(b bool) {
- e.prepareNext(scalar)
- if b {
- e.out = append(e.out, "true"...)
- } else {
- e.out = append(e.out, "false"...)
- }
-}
-
-// WriteString writes out the given string in JSON string value. Returns error
-// if input string contains invalid UTF-8.
-func (e *Encoder) WriteString(s string) error {
- e.prepareNext(scalar)
- var err error
- if e.out, err = appendString(e.out, s); err != nil {
- return err
- }
- return nil
-}
-
-// Sentinel error used for indicating invalid UTF-8.
-var errInvalidUTF8 = errors.New("invalid UTF-8")
-
-func appendString(out []byte, in string) ([]byte, error) {
- out = append(out, '"')
- i := indexNeedEscapeInString(in)
- in, out = in[i:], append(out, in[:i]...)
- for len(in) > 0 {
- switch r, n := utf8.DecodeRuneInString(in); {
- case r == utf8.RuneError && n == 1:
- return out, errInvalidUTF8
- case r < ' ' || r == '"' || r == '\\':
- out = append(out, '\\')
- switch r {
- case '"', '\\':
- out = append(out, byte(r))
- case '\b':
- out = append(out, 'b')
- case '\f':
- out = append(out, 'f')
- case '\n':
- out = append(out, 'n')
- case '\r':
- out = append(out, 'r')
- case '\t':
- out = append(out, 't')
- default:
- out = append(out, 'u')
- out = append(out, "0000"[1+(bits.Len32(uint32(r))-1)/4:]...)
- out = strconv.AppendUint(out, uint64(r), 16)
- }
- in = in[n:]
- default:
- i := indexNeedEscapeInString(in[n:])
- in, out = in[n+i:], append(out, in[:n+i]...)
- }
- }
- out = append(out, '"')
- return out, nil
-}
-
-// indexNeedEscapeInString returns the index of the character that needs
-// escaping. If no characters need escaping, this returns the input length.
-func indexNeedEscapeInString(s string) int {
- for i, r := range s {
- if r < ' ' || r == '\\' || r == '"' || r == utf8.RuneError {
- return i
- }
- }
- return len(s)
-}
-
-// WriteFloat writes out the given float and bitSize in JSON number value.
-func (e *Encoder) WriteFloat(n float64, bitSize int) {
- e.prepareNext(scalar)
- e.out = appendFloat(e.out, n, bitSize)
-}
-
-// appendFloat formats given float in bitSize, and appends to the given []byte.
-func appendFloat(out []byte, n float64, bitSize int) []byte {
- switch {
- case math.IsNaN(n):
- return append(out, `"NaN"`...)
- case math.IsInf(n, +1):
- return append(out, `"Infinity"`...)
- case math.IsInf(n, -1):
- return append(out, `"-Infinity"`...)
- }
-
- // JSON number formatting logic based on encoding/json.
- // See floatEncoder.encode for reference.
- fmt := byte('f')
- if abs := math.Abs(n); abs != 0 {
- if bitSize == 64 && (abs < 1e-6 || abs >= 1e21) ||
- bitSize == 32 && (float32(abs) < 1e-6 || float32(abs) >= 1e21) {
- fmt = 'e'
- }
- }
- out = strconv.AppendFloat(out, n, fmt, -1, bitSize)
- if fmt == 'e' {
- n := len(out)
- if n >= 4 && out[n-4] == 'e' && out[n-3] == '-' && out[n-2] == '0' {
- out[n-2] = out[n-1]
- out = out[:n-1]
- }
- }
- return out
-}
-
-// WriteInt writes out the given signed integer in JSON number value.
-func (e *Encoder) WriteInt(n int64) {
- e.prepareNext(scalar)
- e.out = strconv.AppendInt(e.out, n, 10)
-}
-
-// WriteUint writes out the given unsigned integer in JSON number value.
-func (e *Encoder) WriteUint(n uint64) {
- e.prepareNext(scalar)
- e.out = strconv.AppendUint(e.out, n, 10)
-}
-
-// StartObject writes out the '{' symbol.
-func (e *Encoder) StartObject() {
- e.prepareNext(objectOpen)
- e.out = append(e.out, '{')
-}
-
-// EndObject writes out the '}' symbol.
-func (e *Encoder) EndObject() {
- e.prepareNext(objectClose)
- e.out = append(e.out, '}')
-}
-
-// WriteName writes out the given string in JSON string value and the name
-// separator ':'. Returns error if input string contains invalid UTF-8, which
-// should not be likely as protobuf field names should be valid.
-func (e *Encoder) WriteName(s string) error {
- e.prepareNext(name)
- var err error
- // Append to output regardless of error.
- e.out, err = appendString(e.out, s)
- e.out = append(e.out, ':')
- return err
-}
-
-// StartArray writes out the '[' symbol.
-func (e *Encoder) StartArray() {
- e.prepareNext(arrayOpen)
- e.out = append(e.out, '[')
-}
-
-// EndArray writes out the ']' symbol.
-func (e *Encoder) EndArray() {
- e.prepareNext(arrayClose)
- e.out = append(e.out, ']')
-}
-
-// prepareNext adds possible comma and indentation for the next value based
-// on last type and indent option. It also updates lastKind to next.
-func (e *Encoder) prepareNext(next kind) {
- defer func() {
- // Set lastKind to next.
- e.lastKind = next
- }()
-
- if len(e.indent) == 0 {
- // Need to add comma on the following condition.
- if e.lastKind&(scalar|objectClose|arrayClose) != 0 &&
- next&(name|scalar|objectOpen|arrayOpen) != 0 {
- e.out = append(e.out, ',')
- // For single-line output, add a random extra space after each
- // comma to make output unstable.
- if detrand.Bool() {
- e.out = append(e.out, ' ')
- }
- }
- return
- }
-
- switch {
- case e.lastKind&(objectOpen|arrayOpen) != 0:
- // If next type is NOT closing, add indent and newline.
- if next&(objectClose|arrayClose) == 0 {
- e.indents = append(e.indents, e.indent...)
- e.out = append(e.out, '\n')
- e.out = append(e.out, e.indents...)
- }
-
- case e.lastKind&(scalar|objectClose|arrayClose) != 0:
- switch {
- // If next type is either a value or name, add comma and newline.
- case next&(name|scalar|objectOpen|arrayOpen) != 0:
- e.out = append(e.out, ',', '\n')
-
- // If next type is a closing object or array, adjust indentation.
- case next&(objectClose|arrayClose) != 0:
- e.indents = e.indents[:len(e.indents)-len(e.indent)]
- e.out = append(e.out, '\n')
- }
- e.out = append(e.out, e.indents...)
-
- case e.lastKind&name != 0:
- e.out = append(e.out, ' ')
- // For multi-line output, add a random extra space after key: to make
- // output unstable.
- if detrand.Bool() {
- e.out = append(e.out, ' ')
- }
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go b/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go
deleted file mode 100644
index a6693f0a2..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package messageset encodes and decodes the obsolete MessageSet wire format.
-package messageset
-
-import (
- "math"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// The MessageSet wire format is equivalent to a message defined as follows,
-// where each Item defines an extension field with a field number of 'type_id'
-// and content of 'message'. MessageSet extensions must be non-repeated message
-// fields.
-//
-// message MessageSet {
-// repeated group Item = 1 {
-// required int32 type_id = 2;
-// required string message = 3;
-// }
-// }
-const (
- FieldItem = protowire.Number(1)
- FieldTypeID = protowire.Number(2)
- FieldMessage = protowire.Number(3)
-)
-
-// ExtensionName is the field name for extensions of MessageSet.
-//
-// A valid MessageSet extension must be of the form:
-//
-// message MyMessage {
-// extend proto2.bridge.MessageSet {
-// optional MyMessage message_set_extension = 1234;
-// }
-// ...
-// }
-const ExtensionName = "message_set_extension"
-
-// IsMessageSet returns whether the message uses the MessageSet wire format.
-func IsMessageSet(md protoreflect.MessageDescriptor) bool {
- xmd, ok := md.(interface{ IsMessageSet() bool })
- return ok && xmd.IsMessageSet()
-}
-
-// IsMessageSetExtension reports this field properly extends a MessageSet.
-func IsMessageSetExtension(fd protoreflect.FieldDescriptor) bool {
- switch {
- case fd.Name() != ExtensionName:
- return false
- case !IsMessageSet(fd.ContainingMessage()):
- return false
- case fd.FullName().Parent() != fd.Message().FullName():
- return false
- }
- return true
-}
-
-// SizeField returns the size of a MessageSet item field containing an extension
-// with the given field number, not counting the contents of the message subfield.
-func SizeField(num protowire.Number) int {
- return 2*protowire.SizeTag(FieldItem) + protowire.SizeTag(FieldTypeID) + protowire.SizeVarint(uint64(num))
-}
-
-// Unmarshal parses a MessageSet.
-//
-// It calls fn with the type ID and value of each item in the MessageSet.
-// Unknown fields are discarded.
-//
-// If wantLen is true, the item values include the varint length prefix.
-// This is ugly, but simplifies the fast-path decoder in internal/impl.
-func Unmarshal(b []byte, wantLen bool, fn func(typeID protowire.Number, value []byte) error) error {
- for len(b) > 0 {
- num, wtyp, n := protowire.ConsumeTag(b)
- if n < 0 {
- return protowire.ParseError(n)
- }
- b = b[n:]
- if num != FieldItem || wtyp != protowire.StartGroupType {
- n := protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return protowire.ParseError(n)
- }
- b = b[n:]
- continue
- }
- typeID, value, n, err := ConsumeFieldValue(b, wantLen)
- if err != nil {
- return err
- }
- b = b[n:]
- if typeID == 0 {
- continue
- }
- if err := fn(typeID, value); err != nil {
- return err
- }
- }
- return nil
-}
-
-// ConsumeFieldValue parses b as a MessageSet item field value until and including
-// the trailing end group marker. It assumes the start group tag has already been parsed.
-// It returns the contents of the type_id and message subfields and the total
-// item length.
-//
-// If wantLen is true, the returned message value includes the length prefix.
-func ConsumeFieldValue(b []byte, wantLen bool) (typeid protowire.Number, message []byte, n int, err error) {
- ilen := len(b)
- for {
- num, wtyp, n := protowire.ConsumeTag(b)
- if n < 0 {
- return 0, nil, 0, protowire.ParseError(n)
- }
- b = b[n:]
- switch {
- case num == FieldItem && wtyp == protowire.EndGroupType:
- if wantLen && len(message) == 0 {
- // The message field was missing, which should never happen.
- // Be prepared for this case anyway.
- message = protowire.AppendVarint(message, 0)
- }
- return typeid, message, ilen - len(b), nil
- case num == FieldTypeID && wtyp == protowire.VarintType:
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, nil, 0, protowire.ParseError(n)
- }
- b = b[n:]
- if v < 1 || v > math.MaxInt32 {
- return 0, nil, 0, errors.New("invalid type_id in message set")
- }
- typeid = protowire.Number(v)
- case num == FieldMessage && wtyp == protowire.BytesType:
- m, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, nil, 0, protowire.ParseError(n)
- }
- if message == nil {
- if wantLen {
- message = b[:n:n]
- } else {
- message = m[:len(m):len(m)]
- }
- } else {
- // This case should never happen in practice, but handle it for
- // correctness: The MessageSet item contains multiple message
- // fields, which need to be merged.
- //
- // In the case where we're returning the length, this becomes
- // quite inefficient since we need to strip the length off
- // the existing data and reconstruct it with the combined length.
- if wantLen {
- _, nn := protowire.ConsumeVarint(message)
- m0 := message[nn:]
- message = nil
- message = protowire.AppendVarint(message, uint64(len(m0)+len(m)))
- message = append(message, m0...)
- message = append(message, m...)
- } else {
- message = append(message, m...)
- }
- }
- b = b[n:]
- default:
- // We have no place to put it, so we just ignore unknown fields.
- n := protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return 0, nil, 0, protowire.ParseError(n)
- }
- b = b[n:]
- }
- }
-}
-
-// AppendFieldStart appends the start of a MessageSet item field containing
-// an extension with the given number. The caller must add the message
-// subfield (including the tag).
-func AppendFieldStart(b []byte, num protowire.Number) []byte {
- b = protowire.AppendTag(b, FieldItem, protowire.StartGroupType)
- b = protowire.AppendTag(b, FieldTypeID, protowire.VarintType)
- b = protowire.AppendVarint(b, uint64(num))
- return b
-}
-
-// AppendFieldEnd appends the trailing end group marker for a MessageSet item field.
-func AppendFieldEnd(b []byte) []byte {
- return protowire.AppendTag(b, FieldItem, protowire.EndGroupType)
-}
-
-// SizeUnknown returns the size of an unknown fields section in MessageSet format.
-//
-// See AppendUnknown.
-func SizeUnknown(unknown []byte) (size int) {
- for len(unknown) > 0 {
- num, typ, n := protowire.ConsumeTag(unknown)
- if n < 0 || typ != protowire.BytesType {
- return 0
- }
- unknown = unknown[n:]
- _, n = protowire.ConsumeBytes(unknown)
- if n < 0 {
- return 0
- }
- unknown = unknown[n:]
- size += SizeField(num) + protowire.SizeTag(FieldMessage) + n
- }
- return size
-}
-
-// AppendUnknown appends unknown fields to b in MessageSet format.
-//
-// For historic reasons, unresolved items in a MessageSet are stored in a
-// message's unknown fields section in non-MessageSet format. That is, an
-// unknown item with typeID T and value V appears in the unknown fields as
-// a field with number T and value V.
-//
-// This function converts the unknown fields back into MessageSet form.
-func AppendUnknown(b, unknown []byte) ([]byte, error) {
- for len(unknown) > 0 {
- num, typ, n := protowire.ConsumeTag(unknown)
- if n < 0 || typ != protowire.BytesType {
- return nil, errors.New("invalid data in message set unknown fields")
- }
- unknown = unknown[n:]
- _, n = protowire.ConsumeBytes(unknown)
- if n < 0 {
- return nil, errors.New("invalid data in message set unknown fields")
- }
- b = AppendFieldStart(b, num)
- b = protowire.AppendTag(b, FieldMessage, protowire.BytesType)
- b = append(b, unknown[:n]...)
- b = AppendFieldEnd(b)
- unknown = unknown[n:]
- }
- return b, nil
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go b/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go
deleted file mode 100644
index 7e87c7604..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package tag marshals and unmarshals the legacy struct tags as generated
-// by historical versions of protoc-gen-go.
-package tag
-
-import (
- "reflect"
- "strconv"
- "strings"
-
- "google.golang.org/protobuf/internal/encoding/defval"
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-var byteType = reflect.TypeOf(byte(0))
-
-// Unmarshal decodes the tag into a prototype.Field.
-//
-// The goType is needed to determine the original protoreflect.Kind since the
-// tag does not record sufficient information to determine that.
-// The type is the underlying field type (e.g., a repeated field may be
-// represented by []T, but the Go type passed in is just T).
-// A list of enum value descriptors must be provided for enum fields.
-// This does not populate the Enum or Message (except for weak message).
-//
-// This function is a best effort attempt; parsing errors are ignored.
-func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescriptors) protoreflect.FieldDescriptor {
- f := new(filedesc.Field)
- f.L0.ParentFile = filedesc.SurrogateProto2
- f.L1.EditionFeatures = f.L0.ParentFile.L1.EditionFeatures
- for len(tag) > 0 {
- i := strings.IndexByte(tag, ',')
- if i < 0 {
- i = len(tag)
- }
- switch s := tag[:i]; {
- case strings.HasPrefix(s, "name="):
- f.L0.FullName = protoreflect.FullName(s[len("name="):])
- case strings.Trim(s, "0123456789") == "":
- n, _ := strconv.ParseUint(s, 10, 32)
- f.L1.Number = protoreflect.FieldNumber(n)
- case s == "opt":
- f.L1.Cardinality = protoreflect.Optional
- case s == "req":
- f.L1.Cardinality = protoreflect.Required
- case s == "rep":
- f.L1.Cardinality = protoreflect.Repeated
- case s == "varint":
- switch goType.Kind() {
- case reflect.Bool:
- f.L1.Kind = protoreflect.BoolKind
- case reflect.Int32:
- f.L1.Kind = protoreflect.Int32Kind
- case reflect.Int64:
- f.L1.Kind = protoreflect.Int64Kind
- case reflect.Uint32:
- f.L1.Kind = protoreflect.Uint32Kind
- case reflect.Uint64:
- f.L1.Kind = protoreflect.Uint64Kind
- }
- case s == "zigzag32":
- if goType.Kind() == reflect.Int32 {
- f.L1.Kind = protoreflect.Sint32Kind
- }
- case s == "zigzag64":
- if goType.Kind() == reflect.Int64 {
- f.L1.Kind = protoreflect.Sint64Kind
- }
- case s == "fixed32":
- switch goType.Kind() {
- case reflect.Int32:
- f.L1.Kind = protoreflect.Sfixed32Kind
- case reflect.Uint32:
- f.L1.Kind = protoreflect.Fixed32Kind
- case reflect.Float32:
- f.L1.Kind = protoreflect.FloatKind
- }
- case s == "fixed64":
- switch goType.Kind() {
- case reflect.Int64:
- f.L1.Kind = protoreflect.Sfixed64Kind
- case reflect.Uint64:
- f.L1.Kind = protoreflect.Fixed64Kind
- case reflect.Float64:
- f.L1.Kind = protoreflect.DoubleKind
- }
- case s == "bytes":
- switch {
- case goType.Kind() == reflect.String:
- f.L1.Kind = protoreflect.StringKind
- case goType.Kind() == reflect.Slice && goType.Elem() == byteType:
- f.L1.Kind = protoreflect.BytesKind
- default:
- f.L1.Kind = protoreflect.MessageKind
- }
- case s == "group":
- f.L1.Kind = protoreflect.GroupKind
- case strings.HasPrefix(s, "enum="):
- f.L1.Kind = protoreflect.EnumKind
- case strings.HasPrefix(s, "json="):
- jsonName := s[len("json="):]
- if jsonName != strs.JSONCamelCase(string(f.L0.FullName.Name())) {
- f.L1.StringName.InitJSON(jsonName)
- }
- case s == "packed":
- f.L1.EditionFeatures.IsPacked = true
- case strings.HasPrefix(s, "weak="):
- f.L1.IsWeak = true
- f.L1.Message = filedesc.PlaceholderMessage(protoreflect.FullName(s[len("weak="):]))
- case strings.HasPrefix(s, "def="):
- // The default tag is special in that everything afterwards is the
- // default regardless of the presence of commas.
- s, i = tag[len("def="):], len(tag)
- v, ev, _ := defval.Unmarshal(s, f.L1.Kind, evs, defval.GoTag)
- f.L1.Default = filedesc.DefaultValue(v, ev)
- case s == "proto3":
- f.L0.ParentFile = filedesc.SurrogateProto3
- }
- tag = strings.TrimPrefix(tag[i:], ",")
- }
-
- // The generator uses the group message name instead of the field name.
- // We obtain the real field name by lowercasing the group name.
- if f.L1.Kind == protoreflect.GroupKind {
- f.L0.FullName = protoreflect.FullName(strings.ToLower(string(f.L0.FullName)))
- }
- return f
-}
-
-// Marshal encodes the protoreflect.FieldDescriptor as a tag.
-//
-// The enumName must be provided if the kind is an enum.
-// Historically, the formulation of the enum "name" was the proto package
-// dot-concatenated with the generated Go identifier for the enum type.
-// Depending on the context on how Marshal is called, there are different ways
-// through which that information is determined. As such it is the caller's
-// responsibility to provide a function to obtain that information.
-func Marshal(fd protoreflect.FieldDescriptor, enumName string) string {
- var tag []string
- switch fd.Kind() {
- case protoreflect.BoolKind, protoreflect.EnumKind, protoreflect.Int32Kind, protoreflect.Uint32Kind, protoreflect.Int64Kind, protoreflect.Uint64Kind:
- tag = append(tag, "varint")
- case protoreflect.Sint32Kind:
- tag = append(tag, "zigzag32")
- case protoreflect.Sint64Kind:
- tag = append(tag, "zigzag64")
- case protoreflect.Sfixed32Kind, protoreflect.Fixed32Kind, protoreflect.FloatKind:
- tag = append(tag, "fixed32")
- case protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind, protoreflect.DoubleKind:
- tag = append(tag, "fixed64")
- case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind:
- tag = append(tag, "bytes")
- case protoreflect.GroupKind:
- tag = append(tag, "group")
- }
- tag = append(tag, strconv.Itoa(int(fd.Number())))
- switch fd.Cardinality() {
- case protoreflect.Optional:
- tag = append(tag, "opt")
- case protoreflect.Required:
- tag = append(tag, "req")
- case protoreflect.Repeated:
- tag = append(tag, "rep")
- }
- if fd.IsPacked() {
- tag = append(tag, "packed")
- }
- name := string(fd.Name())
- if fd.Kind() == protoreflect.GroupKind {
- // The name of the FieldDescriptor for a group field is
- // lowercased. To find the original capitalization, we
- // look in the field's MessageType.
- name = string(fd.Message().Name())
- }
- tag = append(tag, "name="+name)
- if jsonName := fd.JSONName(); jsonName != "" && jsonName != name && !fd.IsExtension() {
- // NOTE: The jsonName != name condition is suspect, but it preserve
- // the exact same semantics from the previous generator.
- tag = append(tag, "json="+jsonName)
- }
- if fd.IsWeak() {
- tag = append(tag, "weak="+string(fd.Message().FullName()))
- }
- // The previous implementation does not tag extension fields as proto3,
- // even when the field is defined in a proto3 file. Match that behavior
- // for consistency.
- if fd.Syntax() == protoreflect.Proto3 && !fd.IsExtension() {
- tag = append(tag, "proto3")
- }
- if fd.Kind() == protoreflect.EnumKind && enumName != "" {
- tag = append(tag, "enum="+enumName)
- }
- if fd.ContainingOneof() != nil {
- tag = append(tag, "oneof")
- }
- // This must appear last in the tag, since commas in strings aren't escaped.
- if fd.HasDefault() {
- def, _ := defval.Marshal(fd.Default(), fd.DefaultEnumValue(), fd.Kind(), defval.GoTag)
- tag = append(tag, "def="+def)
- }
- return strings.Join(tag, ",")
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go
deleted file mode 100644
index 099b2bf45..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go
+++ /dev/null
@@ -1,686 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package text
-
-import (
- "bytes"
- "fmt"
- "io"
- "strconv"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/errors"
-)
-
-// Decoder is a token-based textproto decoder.
-type Decoder struct {
- // lastCall is last method called, either readCall or peekCall.
- // Initial value is readCall.
- lastCall call
-
- // lastToken contains the last read token.
- lastToken Token
-
- // lastErr contains the last read error.
- lastErr error
-
- // openStack is a stack containing the byte characters for MessageOpen and
- // ListOpen kinds. The top of stack represents the message or the list that
- // the current token is nested in. An empty stack means the current token is
- // at the top level message. The characters '{' and '<' both represent the
- // MessageOpen kind.
- openStack []byte
-
- // orig is used in reporting line and column.
- orig []byte
- // in contains the unconsumed input.
- in []byte
-}
-
-// NewDecoder returns a Decoder to read the given []byte.
-func NewDecoder(b []byte) *Decoder {
- return &Decoder{orig: b, in: b}
-}
-
-// ErrUnexpectedEOF means that EOF was encountered in the middle of the input.
-var ErrUnexpectedEOF = errors.New("%v", io.ErrUnexpectedEOF)
-
-// call specifies which Decoder method was invoked.
-type call uint8
-
-const (
- readCall call = iota
- peekCall
-)
-
-// Peek looks ahead and returns the next token and error without advancing a read.
-func (d *Decoder) Peek() (Token, error) {
- defer func() { d.lastCall = peekCall }()
- if d.lastCall == readCall {
- d.lastToken, d.lastErr = d.Read()
- }
- return d.lastToken, d.lastErr
-}
-
-// Read returns the next token.
-// It will return an error if there is no valid token.
-func (d *Decoder) Read() (Token, error) {
- defer func() { d.lastCall = readCall }()
- if d.lastCall == peekCall {
- return d.lastToken, d.lastErr
- }
-
- tok, err := d.parseNext(d.lastToken.kind)
- if err != nil {
- return Token{}, err
- }
-
- switch tok.kind {
- case comma, semicolon:
- tok, err = d.parseNext(tok.kind)
- if err != nil {
- return Token{}, err
- }
- }
- d.lastToken = tok
- return tok, nil
-}
-
-const (
- mismatchedFmt = "mismatched close character %q"
- unexpectedFmt = "unexpected character %q"
-)
-
-// parseNext parses the next Token based on given last kind.
-func (d *Decoder) parseNext(lastKind Kind) (Token, error) {
- // Trim leading spaces.
- d.consume(0)
- isEOF := false
- if len(d.in) == 0 {
- isEOF = true
- }
-
- switch lastKind {
- case EOF:
- return d.consumeToken(EOF, 0, 0), nil
-
- case bof:
- // Start of top level message. Next token can be EOF or Name.
- if isEOF {
- return d.consumeToken(EOF, 0, 0), nil
- }
- return d.parseFieldName()
-
- case Name:
- // Next token can be MessageOpen, ListOpen or Scalar.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case '{', '<':
- d.pushOpenStack(ch)
- return d.consumeToken(MessageOpen, 1, 0), nil
- case '[':
- d.pushOpenStack(ch)
- return d.consumeToken(ListOpen, 1, 0), nil
- default:
- return d.parseScalar()
- }
-
- case Scalar:
- openKind, closeCh := d.currentOpenKind()
- switch openKind {
- case bof:
- // Top level message.
- // Next token can be EOF, comma, semicolon or Name.
- if isEOF {
- return d.consumeToken(EOF, 0, 0), nil
- }
- switch d.in[0] {
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- case ';':
- return d.consumeToken(semicolon, 1, 0), nil
- default:
- return d.parseFieldName()
- }
-
- case MessageOpen:
- // Next token can be MessageClose, comma, semicolon or Name.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case closeCh:
- d.popOpenStack()
- return d.consumeToken(MessageClose, 1, 0), nil
- case otherCloseChar[closeCh]:
- return Token{}, d.newSyntaxError(mismatchedFmt, ch)
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- case ';':
- return d.consumeToken(semicolon, 1, 0), nil
- default:
- return d.parseFieldName()
- }
-
- case ListOpen:
- // Next token can be ListClose or comma.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case ']':
- d.popOpenStack()
- return d.consumeToken(ListClose, 1, 0), nil
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- default:
- return Token{}, d.newSyntaxError(unexpectedFmt, ch)
- }
- }
-
- case MessageOpen:
- // Next token can be MessageClose or Name.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- _, closeCh := d.currentOpenKind()
- switch ch := d.in[0]; ch {
- case closeCh:
- d.popOpenStack()
- return d.consumeToken(MessageClose, 1, 0), nil
- case otherCloseChar[closeCh]:
- return Token{}, d.newSyntaxError(mismatchedFmt, ch)
- default:
- return d.parseFieldName()
- }
-
- case MessageClose:
- openKind, closeCh := d.currentOpenKind()
- switch openKind {
- case bof:
- // Top level message.
- // Next token can be EOF, comma, semicolon or Name.
- if isEOF {
- return d.consumeToken(EOF, 0, 0), nil
- }
- switch ch := d.in[0]; ch {
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- case ';':
- return d.consumeToken(semicolon, 1, 0), nil
- default:
- return d.parseFieldName()
- }
-
- case MessageOpen:
- // Next token can be MessageClose, comma, semicolon or Name.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case closeCh:
- d.popOpenStack()
- return d.consumeToken(MessageClose, 1, 0), nil
- case otherCloseChar[closeCh]:
- return Token{}, d.newSyntaxError(mismatchedFmt, ch)
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- case ';':
- return d.consumeToken(semicolon, 1, 0), nil
- default:
- return d.parseFieldName()
- }
-
- case ListOpen:
- // Next token can be ListClose or comma
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case closeCh:
- d.popOpenStack()
- return d.consumeToken(ListClose, 1, 0), nil
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- default:
- return Token{}, d.newSyntaxError(unexpectedFmt, ch)
- }
- }
-
- case ListOpen:
- // Next token can be ListClose, MessageStart or Scalar.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case ']':
- d.popOpenStack()
- return d.consumeToken(ListClose, 1, 0), nil
- case '{', '<':
- d.pushOpenStack(ch)
- return d.consumeToken(MessageOpen, 1, 0), nil
- default:
- return d.parseScalar()
- }
-
- case ListClose:
- openKind, closeCh := d.currentOpenKind()
- switch openKind {
- case bof:
- // Top level message.
- // Next token can be EOF, comma, semicolon or Name.
- if isEOF {
- return d.consumeToken(EOF, 0, 0), nil
- }
- switch ch := d.in[0]; ch {
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- case ';':
- return d.consumeToken(semicolon, 1, 0), nil
- default:
- return d.parseFieldName()
- }
-
- case MessageOpen:
- // Next token can be MessageClose, comma, semicolon or Name.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case closeCh:
- d.popOpenStack()
- return d.consumeToken(MessageClose, 1, 0), nil
- case otherCloseChar[closeCh]:
- return Token{}, d.newSyntaxError(mismatchedFmt, ch)
- case ',':
- return d.consumeToken(comma, 1, 0), nil
- case ';':
- return d.consumeToken(semicolon, 1, 0), nil
- default:
- return d.parseFieldName()
- }
-
- default:
- // It is not possible to have this case. Let it panic below.
- }
-
- case comma, semicolon:
- openKind, closeCh := d.currentOpenKind()
- switch openKind {
- case bof:
- // Top level message. Next token can be EOF or Name.
- if isEOF {
- return d.consumeToken(EOF, 0, 0), nil
- }
- return d.parseFieldName()
-
- case MessageOpen:
- // Next token can be MessageClose or Name.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case closeCh:
- d.popOpenStack()
- return d.consumeToken(MessageClose, 1, 0), nil
- case otherCloseChar[closeCh]:
- return Token{}, d.newSyntaxError(mismatchedFmt, ch)
- default:
- return d.parseFieldName()
- }
-
- case ListOpen:
- if lastKind == semicolon {
- // It is not be possible to have this case as logic here
- // should not have produced a semicolon Token when inside a
- // list. Let it panic below.
- break
- }
- // Next token can be MessageOpen or Scalar.
- if isEOF {
- return Token{}, ErrUnexpectedEOF
- }
- switch ch := d.in[0]; ch {
- case '{', '<':
- d.pushOpenStack(ch)
- return d.consumeToken(MessageOpen, 1, 0), nil
- default:
- return d.parseScalar()
- }
- }
- }
-
- line, column := d.Position(len(d.orig) - len(d.in))
- panic(fmt.Sprintf("Decoder.parseNext: bug at handling line %d:%d with lastKind=%v", line, column, lastKind))
-}
-
-var otherCloseChar = map[byte]byte{
- '}': '>',
- '>': '}',
-}
-
-// currentOpenKind indicates whether current position is inside a message, list
-// or top-level message by returning MessageOpen, ListOpen or bof respectively.
-// If the returned kind is either a MessageOpen or ListOpen, it also returns the
-// corresponding closing character.
-func (d *Decoder) currentOpenKind() (Kind, byte) {
- if len(d.openStack) == 0 {
- return bof, 0
- }
- openCh := d.openStack[len(d.openStack)-1]
- switch openCh {
- case '{':
- return MessageOpen, '}'
- case '<':
- return MessageOpen, '>'
- case '[':
- return ListOpen, ']'
- }
- panic(fmt.Sprintf("Decoder: openStack contains invalid byte %c", openCh))
-}
-
-func (d *Decoder) pushOpenStack(ch byte) {
- d.openStack = append(d.openStack, ch)
-}
-
-func (d *Decoder) popOpenStack() {
- d.openStack = d.openStack[:len(d.openStack)-1]
-}
-
-// parseFieldName parses field name and separator.
-func (d *Decoder) parseFieldName() (tok Token, err error) {
- defer func() {
- if err == nil && d.tryConsumeChar(':') {
- tok.attrs |= hasSeparator
- }
- }()
-
- // Extension or Any type URL.
- if d.in[0] == '[' {
- return d.parseTypeName()
- }
-
- // Identifier.
- if size := parseIdent(d.in, false); size > 0 {
- return d.consumeToken(Name, size, uint8(IdentName)), nil
- }
-
- // Field number. Identify if input is a valid number that is not negative
- // and is decimal integer within 32-bit range.
- if num := parseNumber(d.in); num.size > 0 {
- str := num.string(d.in)
- if !num.neg && num.kind == numDec {
- if _, err := strconv.ParseInt(str, 10, 32); err == nil {
- return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil
- }
- }
- return Token{}, d.newSyntaxError("invalid field number: %s", str)
- }
-
- return Token{}, d.newSyntaxError("invalid field name: %s", errId(d.in))
-}
-
-// parseTypeName parses Any type URL or extension field name. The name is
-// enclosed in [ and ] characters. The C++ parser does not handle many legal URL
-// strings. This implementation is more liberal and allows for the pattern
-// ^[-_a-zA-Z0-9]+([./][-_a-zA-Z0-9]+)*`). Whitespaces and comments are allowed
-// in between [ ], '.', '/' and the sub names.
-func (d *Decoder) parseTypeName() (Token, error) {
- startPos := len(d.orig) - len(d.in)
- // Use alias s to advance first in order to use d.in for error handling.
- // Caller already checks for [ as first character.
- s := consume(d.in[1:], 0)
- if len(s) == 0 {
- return Token{}, ErrUnexpectedEOF
- }
-
- var name []byte
- for len(s) > 0 && isTypeNameChar(s[0]) {
- name = append(name, s[0])
- s = s[1:]
- }
- s = consume(s, 0)
-
- var closed bool
- for len(s) > 0 && !closed {
- switch {
- case s[0] == ']':
- s = s[1:]
- closed = true
-
- case s[0] == '/', s[0] == '.':
- if len(name) > 0 && (name[len(name)-1] == '/' || name[len(name)-1] == '.') {
- return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s",
- d.orig[startPos:len(d.orig)-len(s)+1])
- }
- name = append(name, s[0])
- s = s[1:]
- s = consume(s, 0)
- for len(s) > 0 && isTypeNameChar(s[0]) {
- name = append(name, s[0])
- s = s[1:]
- }
- s = consume(s, 0)
-
- default:
- return Token{}, d.newSyntaxError(
- "invalid type URL/extension field name: %s", d.orig[startPos:len(d.orig)-len(s)+1])
- }
- }
-
- if !closed {
- return Token{}, ErrUnexpectedEOF
- }
-
- // First character cannot be '.'. Last character cannot be '.' or '/'.
- size := len(name)
- if size == 0 || name[0] == '.' || name[size-1] == '.' || name[size-1] == '/' {
- return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s",
- d.orig[startPos:len(d.orig)-len(s)])
- }
-
- d.in = s
- endPos := len(d.orig) - len(d.in)
- d.consume(0)
-
- return Token{
- kind: Name,
- attrs: uint8(TypeName),
- pos: startPos,
- raw: d.orig[startPos:endPos],
- str: string(name),
- }, nil
-}
-
-func isTypeNameChar(b byte) bool {
- return (b == '-' || b == '_' ||
- ('0' <= b && b <= '9') ||
- ('a' <= b && b <= 'z') ||
- ('A' <= b && b <= 'Z'))
-}
-
-func isWhiteSpace(b byte) bool {
- switch b {
- case ' ', '\n', '\r', '\t':
- return true
- default:
- return false
- }
-}
-
-// parseIdent parses an unquoted proto identifier and returns size.
-// If allowNeg is true, it allows '-' to be the first character in the
-// identifier. This is used when parsing literal values like -infinity, etc.
-// Regular expression matches an identifier: `^[_a-zA-Z][_a-zA-Z0-9]*`
-func parseIdent(input []byte, allowNeg bool) int {
- var size int
-
- s := input
- if len(s) == 0 {
- return 0
- }
-
- if allowNeg && s[0] == '-' {
- s = s[1:]
- size++
- if len(s) == 0 {
- return 0
- }
- }
-
- switch {
- case s[0] == '_',
- 'a' <= s[0] && s[0] <= 'z',
- 'A' <= s[0] && s[0] <= 'Z':
- s = s[1:]
- size++
- default:
- return 0
- }
-
- for len(s) > 0 && (s[0] == '_' ||
- 'a' <= s[0] && s[0] <= 'z' ||
- 'A' <= s[0] && s[0] <= 'Z' ||
- '0' <= s[0] && s[0] <= '9') {
- s = s[1:]
- size++
- }
-
- if len(s) > 0 && !isDelim(s[0]) {
- return 0
- }
-
- return size
-}
-
-// parseScalar parses for a string, literal or number value.
-func (d *Decoder) parseScalar() (Token, error) {
- if d.in[0] == '"' || d.in[0] == '\'' {
- return d.parseStringValue()
- }
-
- if tok, ok := d.parseLiteralValue(); ok {
- return tok, nil
- }
-
- if tok, ok := d.parseNumberValue(); ok {
- return tok, nil
- }
-
- return Token{}, d.newSyntaxError("invalid scalar value: %s", errId(d.in))
-}
-
-// parseLiteralValue parses a literal value. A literal value is used for
-// bools, special floats and enums. This function simply identifies that the
-// field value is a literal.
-func (d *Decoder) parseLiteralValue() (Token, bool) {
- size := parseIdent(d.in, true)
- if size == 0 {
- return Token{}, false
- }
- return d.consumeToken(Scalar, size, literalValue), true
-}
-
-// consumeToken constructs a Token for given Kind from d.in and consumes given
-// size-length from it.
-func (d *Decoder) consumeToken(kind Kind, size int, attrs uint8) Token {
- // Important to compute raw and pos before consuming.
- tok := Token{
- kind: kind,
- attrs: attrs,
- pos: len(d.orig) - len(d.in),
- raw: d.in[:size],
- }
- d.consume(size)
- return tok
-}
-
-// newSyntaxError returns a syntax error with line and column information for
-// current position.
-func (d *Decoder) newSyntaxError(f string, x ...any) error {
- e := errors.New(f, x...)
- line, column := d.Position(len(d.orig) - len(d.in))
- return errors.New("syntax error (line %d:%d): %v", line, column, e)
-}
-
-// Position returns line and column number of given index of the original input.
-// It will panic if index is out of range.
-func (d *Decoder) Position(idx int) (line int, column int) {
- b := d.orig[:idx]
- line = bytes.Count(b, []byte("\n")) + 1
- if i := bytes.LastIndexByte(b, '\n'); i >= 0 {
- b = b[i+1:]
- }
- column = utf8.RuneCount(b) + 1 // ignore multi-rune characters
- return line, column
-}
-
-func (d *Decoder) tryConsumeChar(c byte) bool {
- if len(d.in) > 0 && d.in[0] == c {
- d.consume(1)
- return true
- }
- return false
-}
-
-// consume consumes n bytes of input and any subsequent whitespace or comments.
-func (d *Decoder) consume(n int) {
- d.in = consume(d.in, n)
- return
-}
-
-// consume consumes n bytes of input and any subsequent whitespace or comments.
-func consume(b []byte, n int) []byte {
- b = b[n:]
- for len(b) > 0 {
- switch b[0] {
- case ' ', '\n', '\r', '\t':
- b = b[1:]
- case '#':
- if i := bytes.IndexByte(b, '\n'); i >= 0 {
- b = b[i+len("\n"):]
- } else {
- b = nil
- }
- default:
- return b
- }
- }
- return b
-}
-
-// errId extracts a byte sequence that looks like an invalid ID
-// (for the purposes of error reporting).
-func errId(seq []byte) []byte {
- const maxLen = 32
- for i := 0; i < len(seq); {
- if i > maxLen {
- return append(seq[:i:i], "…"...)
- }
- r, size := utf8.DecodeRune(seq[i:])
- if r > utf8.RuneSelf || (r != '/' && isDelim(byte(r))) {
- if i == 0 {
- // Either the first byte is invalid UTF-8 or a
- // delimiter, or the first rune is non-ASCII.
- // Return it as-is.
- i = size
- }
- return seq[:i:i]
- }
- i += size
- }
- // No delimiter found.
- return seq
-}
-
-// isDelim returns true if given byte is a delimiter character.
-func isDelim(c byte) bool {
- return !(c == '-' || c == '+' || c == '.' || c == '_' ||
- ('a' <= c && c <= 'z') ||
- ('A' <= c && c <= 'Z') ||
- ('0' <= c && c <= '9'))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go
deleted file mode 100644
index 45c81f029..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package text
-
-// parseNumberValue parses a number from the input and returns a Token object.
-func (d *Decoder) parseNumberValue() (Token, bool) {
- in := d.in
- num := parseNumber(in)
- if num.size == 0 {
- return Token{}, false
- }
- numAttrs := num.kind
- if num.neg {
- numAttrs |= isNegative
- }
- tok := Token{
- kind: Scalar,
- attrs: numberValue,
- pos: len(d.orig) - len(d.in),
- raw: d.in[:num.size],
- str: num.string(d.in),
- numAttrs: numAttrs,
- }
- d.consume(num.size)
- return tok, true
-}
-
-const (
- numDec uint8 = (1 << iota) / 2
- numHex
- numOct
- numFloat
-)
-
-// number is the result of parsing out a valid number from parseNumber. It
-// contains data for doing float or integer conversion via the strconv package
-// in conjunction with the input bytes.
-type number struct {
- kind uint8
- neg bool
- size int
- // if neg, this is the length of whitespace and comments between
- // the minus sign and the rest fo the number literal
- sep int
-}
-
-func (num number) string(data []byte) string {
- strSize := num.size
- last := num.size - 1
- if num.kind == numFloat && (data[last] == 'f' || data[last] == 'F') {
- strSize = last
- }
- if num.neg && num.sep > 0 {
- // strip whitespace/comments between negative sign and the rest
- strLen := strSize - num.sep
- str := make([]byte, strLen)
- str[0] = data[0]
- copy(str[1:], data[num.sep+1:strSize])
- return string(str)
- }
- return string(data[:strSize])
-
-}
-
-// parseNumber constructs a number object from given input. It allows for the
-// following patterns:
-//
-// integer: ^-?([1-9][0-9]*|0[xX][0-9a-fA-F]+|0[0-7]*)
-// float: ^-?((0|[1-9][0-9]*)?([.][0-9]*)?([eE][+-]?[0-9]+)?[fF]?)
-//
-// It also returns the number of parsed bytes for the given number, 0 if it is
-// not a number.
-func parseNumber(input []byte) number {
- kind := numDec
- var size int
- var neg bool
-
- s := input
- if len(s) == 0 {
- return number{}
- }
-
- // Optional -
- var sep int
- if s[0] == '-' {
- neg = true
- s = s[1:]
- size++
- // Consume any whitespace or comments between the
- // negative sign and the rest of the number
- lenBefore := len(s)
- s = consume(s, 0)
- sep = lenBefore - len(s)
- size += sep
- if len(s) == 0 {
- return number{}
- }
- }
-
- switch {
- case s[0] == '0':
- if len(s) > 1 {
- switch {
- case s[1] == 'x' || s[1] == 'X':
- // Parse as hex number.
- kind = numHex
- n := 2
- s = s[2:]
- for len(s) > 0 && (('0' <= s[0] && s[0] <= '9') ||
- ('a' <= s[0] && s[0] <= 'f') ||
- ('A' <= s[0] && s[0] <= 'F')) {
- s = s[1:]
- n++
- }
- if n == 2 {
- return number{}
- }
- size += n
-
- case '0' <= s[1] && s[1] <= '7':
- // Parse as octal number.
- kind = numOct
- n := 2
- s = s[2:]
- for len(s) > 0 && '0' <= s[0] && s[0] <= '7' {
- s = s[1:]
- n++
- }
- size += n
- }
-
- if kind&(numHex|numOct) > 0 {
- if len(s) > 0 && !isDelim(s[0]) {
- return number{}
- }
- return number{kind: kind, neg: neg, size: size, sep: sep}
- }
- }
- s = s[1:]
- size++
-
- case '1' <= s[0] && s[0] <= '9':
- n := 1
- s = s[1:]
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- size += n
-
- case s[0] == '.':
- // Set kind to numFloat to signify the intent to parse as float. And
- // that it needs to have other digits after '.'.
- kind = numFloat
-
- default:
- return number{}
- }
-
- // . followed by 0 or more digits.
- if len(s) > 0 && s[0] == '.' {
- n := 1
- s = s[1:]
- // If decimal point was before any digits, it should be followed by
- // other digits.
- if len(s) == 0 && kind == numFloat {
- return number{}
- }
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- size += n
- kind = numFloat
- }
-
- // e or E followed by an optional - or + and 1 or more digits.
- if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') {
- kind = numFloat
- s = s[1:]
- n := 1
- if s[0] == '+' || s[0] == '-' {
- s = s[1:]
- n++
- if len(s) == 0 {
- return number{}
- }
- }
- for len(s) > 0 && '0' <= s[0] && s[0] <= '9' {
- s = s[1:]
- n++
- }
- size += n
- }
-
- // Optional suffix f or F for floats.
- if len(s) > 0 && (s[0] == 'f' || s[0] == 'F') {
- kind = numFloat
- s = s[1:]
- size++
- }
-
- // Check that next byte is a delimiter or it is at the end.
- if len(s) > 0 && !isDelim(s[0]) {
- return number{}
- }
-
- return number{kind: kind, neg: neg, size: size, sep: sep}
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go
deleted file mode 100644
index d4d349023..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package text
-
-import (
- "bytes"
- "strconv"
- "strings"
- "unicode"
- "unicode/utf16"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/strs"
-)
-
-// parseStringValue parses string field token.
-// This differs from parseString since the text format allows
-// multiple back-to-back string literals where they are semantically treated
-// as a single large string with all values concatenated.
-//
-// E.g., `"foo" "bar" "baz"` => "foobarbaz"
-func (d *Decoder) parseStringValue() (Token, error) {
- // Note that the ending quote is sufficient to unambiguously mark the end
- // of a string. Thus, the text grammar does not require intervening
- // whitespace or control characters in-between strings.
- // Thus, the following is valid:
- // `"foo"'bar'"baz"` => "foobarbaz"
- in0 := d.in
- var ss []string
- for len(d.in) > 0 && (d.in[0] == '"' || d.in[0] == '\'') {
- s, err := d.parseString()
- if err != nil {
- return Token{}, err
- }
- ss = append(ss, s)
- }
- // d.in already points to the end of the value at this point.
- return Token{
- kind: Scalar,
- attrs: stringValue,
- pos: len(d.orig) - len(in0),
- raw: in0[:len(in0)-len(d.in)],
- str: strings.Join(ss, ""),
- }, nil
-}
-
-// parseString parses a string value enclosed in " or '.
-func (d *Decoder) parseString() (string, error) {
- in := d.in
- if len(in) == 0 {
- return "", ErrUnexpectedEOF
- }
- quote := in[0]
- in = in[1:]
- i := indexNeedEscapeInBytes(in)
- in, out := in[i:], in[:i:i] // set cap to prevent mutations
- for len(in) > 0 {
- switch r, n := utf8.DecodeRune(in); {
- case r == utf8.RuneError && n == 1:
- return "", d.newSyntaxError("invalid UTF-8 detected")
- case r == 0 || r == '\n':
- return "", d.newSyntaxError("invalid character %q in string", r)
- case r == rune(quote):
- in = in[1:]
- d.consume(len(d.in) - len(in))
- return string(out), nil
- case r == '\\':
- if len(in) < 2 {
- return "", ErrUnexpectedEOF
- }
- switch r := in[1]; r {
- case '"', '\'', '\\', '?':
- in, out = in[2:], append(out, r)
- case 'a':
- in, out = in[2:], append(out, '\a')
- case 'b':
- in, out = in[2:], append(out, '\b')
- case 'n':
- in, out = in[2:], append(out, '\n')
- case 'r':
- in, out = in[2:], append(out, '\r')
- case 't':
- in, out = in[2:], append(out, '\t')
- case 'v':
- in, out = in[2:], append(out, '\v')
- case 'f':
- in, out = in[2:], append(out, '\f')
- case '0', '1', '2', '3', '4', '5', '6', '7':
- // One, two, or three octal characters.
- n := len(in[1:]) - len(bytes.TrimLeft(in[1:], "01234567"))
- if n > 3 {
- n = 3
- }
- v, err := strconv.ParseUint(string(in[1:1+n]), 8, 8)
- if err != nil {
- return "", d.newSyntaxError("invalid octal escape code %q in string", in[:1+n])
- }
- in, out = in[1+n:], append(out, byte(v))
- case 'x':
- // One or two hexadecimal characters.
- n := len(in[2:]) - len(bytes.TrimLeft(in[2:], "0123456789abcdefABCDEF"))
- if n > 2 {
- n = 2
- }
- v, err := strconv.ParseUint(string(in[2:2+n]), 16, 8)
- if err != nil {
- return "", d.newSyntaxError("invalid hex escape code %q in string", in[:2+n])
- }
- in, out = in[2+n:], append(out, byte(v))
- case 'u', 'U':
- // Four or eight hexadecimal characters
- n := 6
- if r == 'U' {
- n = 10
- }
- if len(in) < n {
- return "", ErrUnexpectedEOF
- }
- v, err := strconv.ParseUint(string(in[2:n]), 16, 32)
- if utf8.MaxRune < v || err != nil {
- return "", d.newSyntaxError("invalid Unicode escape code %q in string", in[:n])
- }
- in = in[n:]
-
- r := rune(v)
- if utf16.IsSurrogate(r) {
- if len(in) < 6 {
- return "", ErrUnexpectedEOF
- }
- v, err := strconv.ParseUint(string(in[2:6]), 16, 16)
- r = utf16.DecodeRune(r, rune(v))
- if in[0] != '\\' || in[1] != 'u' || r == unicode.ReplacementChar || err != nil {
- return "", d.newSyntaxError("invalid Unicode escape code %q in string", in[:6])
- }
- in = in[6:]
- }
- out = append(out, string(r)...)
- default:
- return "", d.newSyntaxError("invalid escape code %q in string", in[:2])
- }
- default:
- i := indexNeedEscapeInBytes(in[n:])
- in, out = in[n+i:], append(out, in[:n+i]...)
- }
- }
- return "", ErrUnexpectedEOF
-}
-
-// indexNeedEscapeInString returns the index of the character that needs
-// escaping. If no characters need escaping, this returns the input length.
-func indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) }
-
-// UnmarshalString returns an unescaped string given a textproto string value.
-// String value needs to contain single or double quotes. This is only used by
-// internal/encoding/defval package for unmarshaling bytes.
-func UnmarshalString(s string) (string, error) {
- d := NewDecoder([]byte(s))
- return d.parseString()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go
deleted file mode 100644
index 83d2b0d5a..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package text
-
-import (
- "bytes"
- "fmt"
- "math"
- "strconv"
- "strings"
-
- "google.golang.org/protobuf/internal/flags"
-)
-
-// Kind represents a token kind expressible in the textproto format.
-type Kind uint8
-
-// Kind values.
-const (
- Invalid Kind = iota
- EOF
- Name // Name indicates the field name.
- Scalar // Scalar are scalar values, e.g. "string", 47, ENUM_LITERAL, true.
- MessageOpen
- MessageClose
- ListOpen
- ListClose
-
- // comma and semi-colon are only for parsing in between values and should not be exposed.
- comma
- semicolon
-
- // bof indicates beginning of file, which is the default token
- // kind at the beginning of parsing.
- bof = Invalid
-)
-
-func (t Kind) String() string {
- switch t {
- case Invalid:
- return "<invalid>"
- case EOF:
- return "eof"
- case Scalar:
- return "scalar"
- case Name:
- return "name"
- case MessageOpen:
- return "{"
- case MessageClose:
- return "}"
- case ListOpen:
- return "["
- case ListClose:
- return "]"
- case comma:
- return ","
- case semicolon:
- return ";"
- default:
- return fmt.Sprintf("<invalid:%v>", uint8(t))
- }
-}
-
-// NameKind represents different types of field names.
-type NameKind uint8
-
-// NameKind values.
-const (
- IdentName NameKind = iota + 1
- TypeName
- FieldNumber
-)
-
-func (t NameKind) String() string {
- switch t {
- case IdentName:
- return "IdentName"
- case TypeName:
- return "TypeName"
- case FieldNumber:
- return "FieldNumber"
- default:
- return fmt.Sprintf("<invalid:%v>", uint8(t))
- }
-}
-
-// Bit mask in Token.attrs to indicate if a Name token is followed by the
-// separator char ':'. The field name separator char is optional for message
-// field or repeated message field, but required for all other types. Decoder
-// simply indicates whether a Name token is followed by separator or not. It is
-// up to the prototext package to validate.
-const hasSeparator = 1 << 7
-
-// Scalar value types.
-const (
- numberValue = iota + 1
- stringValue
- literalValue
-)
-
-// Bit mask in Token.numAttrs to indicate that the number is a negative.
-const isNegative = 1 << 7
-
-// Token provides a parsed token kind and value. Values are provided by the
-// different accessor methods.
-type Token struct {
- // Kind of the Token object.
- kind Kind
- // attrs contains metadata for the following Kinds:
- // Name: hasSeparator bit and one of NameKind.
- // Scalar: one of numberValue, stringValue, literalValue.
- attrs uint8
- // numAttrs contains metadata for numberValue:
- // - highest bit is whether negative or positive.
- // - lower bits indicate one of numDec, numHex, numOct, numFloat.
- numAttrs uint8
- // pos provides the position of the token in the original input.
- pos int
- // raw bytes of the serialized token.
- // This is a subslice into the original input.
- raw []byte
- // str contains parsed string for the following:
- // - stringValue of Scalar kind
- // - numberValue of Scalar kind
- // - TypeName of Name kind
- str string
-}
-
-// Kind returns the token kind.
-func (t Token) Kind() Kind {
- return t.kind
-}
-
-// RawString returns the read value in string.
-func (t Token) RawString() string {
- return string(t.raw)
-}
-
-// Pos returns the token position from the input.
-func (t Token) Pos() int {
- return t.pos
-}
-
-// NameKind returns IdentName, TypeName or FieldNumber.
-// It panics if type is not Name.
-func (t Token) NameKind() NameKind {
- if t.kind == Name {
- return NameKind(t.attrs &^ hasSeparator)
- }
- panic(fmt.Sprintf("Token is not a Name type: %s", t.kind))
-}
-
-// HasSeparator returns true if the field name is followed by the separator char
-// ':', else false. It panics if type is not Name.
-func (t Token) HasSeparator() bool {
- if t.kind == Name {
- return t.attrs&hasSeparator != 0
- }
- panic(fmt.Sprintf("Token is not a Name type: %s", t.kind))
-}
-
-// IdentName returns the value for IdentName type.
-func (t Token) IdentName() string {
- if t.kind == Name && t.attrs&uint8(IdentName) != 0 {
- return string(t.raw)
- }
- panic(fmt.Sprintf("Token is not an IdentName: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator)))
-}
-
-// TypeName returns the value for TypeName type.
-func (t Token) TypeName() string {
- if t.kind == Name && t.attrs&uint8(TypeName) != 0 {
- return t.str
- }
- panic(fmt.Sprintf("Token is not a TypeName: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator)))
-}
-
-// FieldNumber returns the value for FieldNumber type. It returns a
-// non-negative int32 value. Caller will still need to validate for the correct
-// field number range.
-func (t Token) FieldNumber() int32 {
- if t.kind != Name || t.attrs&uint8(FieldNumber) == 0 {
- panic(fmt.Sprintf("Token is not a FieldNumber: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator)))
- }
- // Following should not return an error as it had already been called right
- // before this Token was constructed.
- num, _ := strconv.ParseInt(string(t.raw), 10, 32)
- return int32(num)
-}
-
-// String returns the string value for a Scalar type.
-func (t Token) String() (string, bool) {
- if t.kind != Scalar || t.attrs != stringValue {
- return "", false
- }
- return t.str, true
-}
-
-// Enum returns the literal value for a Scalar type for use as enum literals.
-func (t Token) Enum() (string, bool) {
- if t.kind != Scalar || t.attrs != literalValue || (len(t.raw) > 0 && t.raw[0] == '-') {
- return "", false
- }
- return string(t.raw), true
-}
-
-// Bool returns the bool value for a Scalar type.
-func (t Token) Bool() (bool, bool) {
- if t.kind != Scalar {
- return false, false
- }
- switch t.attrs {
- case literalValue:
- if b, ok := boolLits[string(t.raw)]; ok {
- return b, true
- }
- case numberValue:
- // Unsigned integer representation of 0 or 1 is permitted: 00, 0x0, 01,
- // 0x1, etc.
- n, err := strconv.ParseUint(t.str, 0, 64)
- if err == nil {
- switch n {
- case 0:
- return false, true
- case 1:
- return true, true
- }
- }
- }
- return false, false
-}
-
-// These exact boolean literals are the ones supported in C++.
-var boolLits = map[string]bool{
- "t": true,
- "true": true,
- "True": true,
- "f": false,
- "false": false,
- "False": false,
-}
-
-// Uint64 returns the uint64 value for a Scalar type.
-func (t Token) Uint64() (uint64, bool) {
- if t.kind != Scalar || t.attrs != numberValue ||
- t.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 {
- return 0, false
- }
- n, err := strconv.ParseUint(t.str, 0, 64)
- if err != nil {
- return 0, false
- }
- return n, true
-}
-
-// Uint32 returns the uint32 value for a Scalar type.
-func (t Token) Uint32() (uint32, bool) {
- if t.kind != Scalar || t.attrs != numberValue ||
- t.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 {
- return 0, false
- }
- n, err := strconv.ParseUint(t.str, 0, 32)
- if err != nil {
- return 0, false
- }
- return uint32(n), true
-}
-
-// Int64 returns the int64 value for a Scalar type.
-func (t Token) Int64() (int64, bool) {
- if t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 {
- return 0, false
- }
- if n, err := strconv.ParseInt(t.str, 0, 64); err == nil {
- return n, true
- }
- // C++ accepts large positive hex numbers as negative values.
- // This feature is here for proto1 backwards compatibility purposes.
- if flags.ProtoLegacy && (t.numAttrs == numHex) {
- if n, err := strconv.ParseUint(t.str, 0, 64); err == nil {
- return int64(n), true
- }
- }
- return 0, false
-}
-
-// Int32 returns the int32 value for a Scalar type.
-func (t Token) Int32() (int32, bool) {
- if t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 {
- return 0, false
- }
- if n, err := strconv.ParseInt(t.str, 0, 32); err == nil {
- return int32(n), true
- }
- // C++ accepts large positive hex numbers as negative values.
- // This feature is here for proto1 backwards compatibility purposes.
- if flags.ProtoLegacy && (t.numAttrs == numHex) {
- if n, err := strconv.ParseUint(t.str, 0, 32); err == nil {
- return int32(n), true
- }
- }
- return 0, false
-}
-
-// Float64 returns the float64 value for a Scalar type.
-func (t Token) Float64() (float64, bool) {
- if t.kind != Scalar {
- return 0, false
- }
- switch t.attrs {
- case literalValue:
- if f, ok := floatLits[strings.ToLower(string(t.raw))]; ok {
- return f, true
- }
- case numberValue:
- n, err := strconv.ParseFloat(t.str, 64)
- if err == nil {
- return n, true
- }
- nerr := err.(*strconv.NumError)
- if nerr.Err == strconv.ErrRange {
- return n, true
- }
- }
- return 0, false
-}
-
-// Float32 returns the float32 value for a Scalar type.
-func (t Token) Float32() (float32, bool) {
- if t.kind != Scalar {
- return 0, false
- }
- switch t.attrs {
- case literalValue:
- if f, ok := floatLits[strings.ToLower(string(t.raw))]; ok {
- return float32(f), true
- }
- case numberValue:
- n, err := strconv.ParseFloat(t.str, 64)
- if err == nil {
- // Overflows are treated as (-)infinity.
- return float32(n), true
- }
- nerr := err.(*strconv.NumError)
- if nerr.Err == strconv.ErrRange {
- return float32(n), true
- }
- }
- return 0, false
-}
-
-// These are the supported float literals which C++ permits case-insensitive
-// variants of these.
-var floatLits = map[string]float64{
- "nan": math.NaN(),
- "inf": math.Inf(1),
- "infinity": math.Inf(1),
- "-inf": math.Inf(-1),
- "-infinity": math.Inf(-1),
-}
-
-// TokenEquals returns true if given Tokens are equal, else false.
-func TokenEquals(x, y Token) bool {
- return x.kind == y.kind &&
- x.attrs == y.attrs &&
- x.numAttrs == y.numAttrs &&
- x.pos == y.pos &&
- bytes.Equal(x.raw, y.raw) &&
- x.str == y.str
-}
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go b/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go
deleted file mode 100644
index 7ae6c2a3c..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package text implements the text format for protocol buffers.
-// This package has no semantic understanding for protocol buffers and is only
-// a parser and composer for the format.
-//
-// There is no formal specification for the protobuf text format, as such the
-// C++ implementation (see google::protobuf::TextFormat) is the reference
-// implementation of the text format.
-//
-// This package is neither a superset nor a subset of the C++ implementation.
-// This implementation permits a more liberal grammar in some cases to be
-// backwards compatible with the historical Go implementation.
-// Future parsings unique to Go should not be added.
-// Some grammars allowed by the C++ implementation are deliberately
-// not implemented here because they are considered a bug by the protobuf team
-// and should not be replicated.
-//
-// The Go implementation should implement a sufficient amount of the C++
-// grammar such that the default text serialization by C++ can be parsed by Go.
-// However, just because the C++ parser accepts some input does not mean that
-// the Go implementation should as well.
-//
-// The text format is almost a superset of JSON except:
-// - message keys are not quoted strings, but identifiers
-// - the top-level value must be a message without the delimiters
-package text
diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go
deleted file mode 100644
index cf7aed77b..000000000
--- a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go
+++ /dev/null
@@ -1,272 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package text
-
-import (
- "math"
- "math/bits"
- "strconv"
- "strings"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/detrand"
- "google.golang.org/protobuf/internal/errors"
-)
-
-// encType represents an encoding type.
-type encType uint8
-
-const (
- _ encType = (1 << iota) / 2
- name
- scalar
- messageOpen
- messageClose
-)
-
-// Encoder provides methods to write out textproto constructs and values. The user is
-// responsible for producing valid sequences of constructs and values.
-type Encoder struct {
- encoderState
-
- indent string
- delims [2]byte
- outputASCII bool
-}
-
-type encoderState struct {
- lastType encType
- indents []byte
- out []byte
-}
-
-// NewEncoder returns an Encoder.
-//
-// If indent is a non-empty string, it causes every entry in a List or Message
-// to be preceded by the indent and trailed by a newline.
-//
-// If delims is not the zero value, it controls the delimiter characters used
-// for messages (e.g., "{}" vs "<>").
-//
-// If outputASCII is true, strings will be serialized in such a way that
-// multi-byte UTF-8 sequences are escaped. This property ensures that the
-// overall output is ASCII (as opposed to UTF-8).
-func NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) {
- e := &Encoder{
- encoderState: encoderState{out: buf},
- }
- if len(indent) > 0 {
- if strings.Trim(indent, " \t") != "" {
- return nil, errors.New("indent may only be composed of space and tab characters")
- }
- e.indent = indent
- }
- switch delims {
- case [2]byte{0, 0}:
- e.delims = [2]byte{'{', '}'}
- case [2]byte{'{', '}'}, [2]byte{'<', '>'}:
- e.delims = delims
- default:
- return nil, errors.New("delimiters may only be \"{}\" or \"<>\"")
- }
- e.outputASCII = outputASCII
-
- return e, nil
-}
-
-// Bytes returns the content of the written bytes.
-func (e *Encoder) Bytes() []byte {
- return e.out
-}
-
-// StartMessage writes out the '{' or '<' symbol.
-func (e *Encoder) StartMessage() {
- e.prepareNext(messageOpen)
- e.out = append(e.out, e.delims[0])
-}
-
-// EndMessage writes out the '}' or '>' symbol.
-func (e *Encoder) EndMessage() {
- e.prepareNext(messageClose)
- e.out = append(e.out, e.delims[1])
-}
-
-// WriteName writes out the field name and the separator ':'.
-func (e *Encoder) WriteName(s string) {
- e.prepareNext(name)
- e.out = append(e.out, s...)
- e.out = append(e.out, ':')
-}
-
-// WriteBool writes out the given boolean value.
-func (e *Encoder) WriteBool(b bool) {
- if b {
- e.WriteLiteral("true")
- } else {
- e.WriteLiteral("false")
- }
-}
-
-// WriteString writes out the given string value.
-func (e *Encoder) WriteString(s string) {
- e.prepareNext(scalar)
- e.out = appendString(e.out, s, e.outputASCII)
-}
-
-func appendString(out []byte, in string, outputASCII bool) []byte {
- out = append(out, '"')
- i := indexNeedEscapeInString(in)
- in, out = in[i:], append(out, in[:i]...)
- for len(in) > 0 {
- switch r, n := utf8.DecodeRuneInString(in); {
- case r == utf8.RuneError && n == 1:
- // We do not report invalid UTF-8 because strings in the text format
- // are used to represent both the proto string and bytes type.
- r = rune(in[0])
- fallthrough
- case r < ' ' || r == '"' || r == '\\' || r == 0x7f:
- out = append(out, '\\')
- switch r {
- case '"', '\\':
- out = append(out, byte(r))
- case '\n':
- out = append(out, 'n')
- case '\r':
- out = append(out, 'r')
- case '\t':
- out = append(out, 't')
- default:
- out = append(out, 'x')
- out = append(out, "00"[1+(bits.Len32(uint32(r))-1)/4:]...)
- out = strconv.AppendUint(out, uint64(r), 16)
- }
- in = in[n:]
- case r >= utf8.RuneSelf && (outputASCII || r <= 0x009f):
- out = append(out, '\\')
- if r <= math.MaxUint16 {
- out = append(out, 'u')
- out = append(out, "0000"[1+(bits.Len32(uint32(r))-1)/4:]...)
- out = strconv.AppendUint(out, uint64(r), 16)
- } else {
- out = append(out, 'U')
- out = append(out, "00000000"[1+(bits.Len32(uint32(r))-1)/4:]...)
- out = strconv.AppendUint(out, uint64(r), 16)
- }
- in = in[n:]
- default:
- i := indexNeedEscapeInString(in[n:])
- in, out = in[n+i:], append(out, in[:n+i]...)
- }
- }
- out = append(out, '"')
- return out
-}
-
-// indexNeedEscapeInString returns the index of the character that needs
-// escaping. If no characters need escaping, this returns the input length.
-func indexNeedEscapeInString(s string) int {
- for i := 0; i < len(s); i++ {
- if c := s[i]; c < ' ' || c == '"' || c == '\'' || c == '\\' || c >= 0x7f {
- return i
- }
- }
- return len(s)
-}
-
-// WriteFloat writes out the given float value for given bitSize.
-func (e *Encoder) WriteFloat(n float64, bitSize int) {
- e.prepareNext(scalar)
- e.out = appendFloat(e.out, n, bitSize)
-}
-
-func appendFloat(out []byte, n float64, bitSize int) []byte {
- switch {
- case math.IsNaN(n):
- return append(out, "nan"...)
- case math.IsInf(n, +1):
- return append(out, "inf"...)
- case math.IsInf(n, -1):
- return append(out, "-inf"...)
- default:
- return strconv.AppendFloat(out, n, 'g', -1, bitSize)
- }
-}
-
-// WriteInt writes out the given signed integer value.
-func (e *Encoder) WriteInt(n int64) {
- e.prepareNext(scalar)
- e.out = strconv.AppendInt(e.out, n, 10)
-}
-
-// WriteUint writes out the given unsigned integer value.
-func (e *Encoder) WriteUint(n uint64) {
- e.prepareNext(scalar)
- e.out = strconv.AppendUint(e.out, n, 10)
-}
-
-// WriteLiteral writes out the given string as a literal value without quotes.
-// This is used for writing enum literal strings.
-func (e *Encoder) WriteLiteral(s string) {
- e.prepareNext(scalar)
- e.out = append(e.out, s...)
-}
-
-// prepareNext adds possible space and indentation for the next value based
-// on last encType and indent option. It also updates e.lastType to next.
-func (e *Encoder) prepareNext(next encType) {
- defer func() {
- e.lastType = next
- }()
-
- // Single line.
- if len(e.indent) == 0 {
- // Add space after each field before the next one.
- if e.lastType&(scalar|messageClose) != 0 && next == name {
- e.out = append(e.out, ' ')
- // Add a random extra space to make output unstable.
- if detrand.Bool() {
- e.out = append(e.out, ' ')
- }
- }
- return
- }
-
- // Multi-line.
- switch {
- case e.lastType == name:
- e.out = append(e.out, ' ')
- // Add a random extra space after name: to make output unstable.
- if detrand.Bool() {
- e.out = append(e.out, ' ')
- }
-
- case e.lastType == messageOpen && next != messageClose:
- e.indents = append(e.indents, e.indent...)
- e.out = append(e.out, '\n')
- e.out = append(e.out, e.indents...)
-
- case e.lastType&(scalar|messageClose) != 0:
- if next == messageClose {
- e.indents = e.indents[:len(e.indents)-len(e.indent)]
- }
- e.out = append(e.out, '\n')
- e.out = append(e.out, e.indents...)
- }
-}
-
-// Snapshot returns the current snapshot for use in Reset.
-func (e *Encoder) Snapshot() encoderState {
- return e.encoderState
-}
-
-// Reset resets the Encoder to the given encoderState from a Snapshot.
-func (e *Encoder) Reset(es encoderState) {
- e.encoderState = es
-}
-
-// AppendString appends the escaped form of the input string to b.
-func AppendString(b []byte, s string) []byte {
- return appendString(b, s, false)
-}
diff --git a/vendor/google.golang.org/protobuf/internal/errors/errors.go b/vendor/google.golang.org/protobuf/internal/errors/errors.go
deleted file mode 100644
index c2d6bd526..000000000
--- a/vendor/google.golang.org/protobuf/internal/errors/errors.go
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package errors implements functions to manipulate errors.
-package errors
-
-import (
- "errors"
- "fmt"
-
- "google.golang.org/protobuf/internal/detrand"
-)
-
-// Error is a sentinel matching all errors produced by this package.
-var Error = errors.New("protobuf error")
-
-// New formats a string according to the format specifier and arguments and
-// returns an error that has a "proto" prefix.
-func New(f string, x ...any) error {
- return &prefixError{s: format(f, x...)}
-}
-
-type prefixError struct{ s string }
-
-var prefix = func() string {
- // Deliberately introduce instability into the error message string to
- // discourage users from performing error string comparisons.
- if detrand.Bool() {
- return "proto: " // use non-breaking spaces (U+00a0)
- } else {
- return "proto: " // use regular spaces (U+0020)
- }
-}()
-
-func (e *prefixError) Error() string {
- return prefix + e.s
-}
-
-func (e *prefixError) Unwrap() error {
- return Error
-}
-
-// Wrap returns an error that has a "proto" prefix, the formatted string described
-// by the format specifier and arguments, and a suffix of err. The error wraps err.
-func Wrap(err error, f string, x ...any) error {
- return &wrapError{
- s: format(f, x...),
- err: err,
- }
-}
-
-type wrapError struct {
- s string
- err error
-}
-
-func (e *wrapError) Error() string {
- return format("%v%v: %v", prefix, e.s, e.err)
-}
-
-func (e *wrapError) Unwrap() error {
- return e.err
-}
-
-func (e *wrapError) Is(target error) bool {
- return target == Error
-}
-
-func format(f string, x ...any) string {
- // avoid "proto: " prefix when chaining
- for i := 0; i < len(x); i++ {
- switch e := x[i].(type) {
- case *prefixError:
- x[i] = e.s
- case *wrapError:
- x[i] = format("%v: %v", e.s, e.err)
- }
- }
- return fmt.Sprintf(f, x...)
-}
-
-func InvalidUTF8(name string) error {
- return New("field %v contains invalid UTF-8", name)
-}
-
-func RequiredNotSet(name string) error {
- return New("required field %v not set", name)
-}
-
-type SizeMismatchError struct {
- Calculated, Measured int
-}
-
-func (e *SizeMismatchError) Error() string {
- return fmt.Sprintf("size mismatch (see https://github.com/golang/protobuf/issues/1609): calculated=%d, measured=%d", e.Calculated, e.Measured)
-}
-
-func MismatchedSizeCalculation(calculated, measured int) error {
- return &SizeMismatchError{
- Calculated: calculated,
- Measured: measured,
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/build.go b/vendor/google.golang.org/protobuf/internal/filedesc/build.go
deleted file mode 100644
index 7cac1c190..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/build.go
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package filedesc provides functionality for constructing descriptors.
-//
-// The types in this package implement interfaces in the protoreflect package
-// related to protobuf descripriptors.
-package filedesc
-
-import (
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// Builder construct a protoreflect.FileDescriptor from the raw descriptor.
-type Builder struct {
- // GoPackagePath is the Go package path that is invoking this builder.
- GoPackagePath string
-
- // RawDescriptor is the wire-encoded bytes of FileDescriptorProto
- // and must be populated.
- RawDescriptor []byte
-
- // NumEnums is the total number of enums declared in the file.
- NumEnums int32
- // NumMessages is the total number of messages declared in the file.
- // It includes the implicit message declarations for map entries.
- NumMessages int32
- // NumExtensions is the total number of extensions declared in the file.
- NumExtensions int32
- // NumServices is the total number of services declared in the file.
- NumServices int32
-
- // TypeResolver resolves extension field types for descriptor options.
- // If nil, it uses protoregistry.GlobalTypes.
- TypeResolver interface {
- protoregistry.ExtensionTypeResolver
- }
-
- // FileRegistry is use to lookup file, enum, and message dependencies.
- // Once constructed, the file descriptor is registered here.
- // If nil, it uses protoregistry.GlobalFiles.
- FileRegistry interface {
- FindFileByPath(string) (protoreflect.FileDescriptor, error)
- FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
- RegisterFile(protoreflect.FileDescriptor) error
- }
-}
-
-// resolverByIndex is an interface Builder.FileRegistry may implement.
-// If so, it permits looking up an enum or message dependency based on the
-// sub-list and element index into filetype.Builder.DependencyIndexes.
-type resolverByIndex interface {
- FindEnumByIndex(int32, int32, []Enum, []Message) protoreflect.EnumDescriptor
- FindMessageByIndex(int32, int32, []Enum, []Message) protoreflect.MessageDescriptor
-}
-
-// Indexes of each sub-list in filetype.Builder.DependencyIndexes.
-const (
- listFieldDeps int32 = iota
- listExtTargets
- listExtDeps
- listMethInDeps
- listMethOutDeps
-)
-
-// Out is the output of the Builder.
-type Out struct {
- File protoreflect.FileDescriptor
-
- // Enums is all enum descriptors in "flattened ordering".
- Enums []Enum
- // Messages is all message descriptors in "flattened ordering".
- // It includes the implicit message declarations for map entries.
- Messages []Message
- // Extensions is all extension descriptors in "flattened ordering".
- Extensions []Extension
- // Service is all service descriptors in "flattened ordering".
- Services []Service
-}
-
-// Build constructs a FileDescriptor given the parameters set in Builder.
-// It assumes that the inputs are well-formed and panics if any inconsistencies
-// are encountered.
-//
-// If NumEnums+NumMessages+NumExtensions+NumServices is zero,
-// then Build automatically derives them from the raw descriptor.
-func (db Builder) Build() (out Out) {
- // Populate the counts if uninitialized.
- if db.NumEnums+db.NumMessages+db.NumExtensions+db.NumServices == 0 {
- db.unmarshalCounts(db.RawDescriptor, true)
- }
-
- // Initialize resolvers and registries if unpopulated.
- if db.TypeResolver == nil {
- db.TypeResolver = protoregistry.GlobalTypes
- }
- if db.FileRegistry == nil {
- db.FileRegistry = protoregistry.GlobalFiles
- }
-
- fd := newRawFile(db)
- out.File = fd
- out.Enums = fd.allEnums
- out.Messages = fd.allMessages
- out.Extensions = fd.allExtensions
- out.Services = fd.allServices
-
- if err := db.FileRegistry.RegisterFile(fd); err != nil {
- panic(err)
- }
- return out
-}
-
-// unmarshalCounts counts the number of enum, message, extension, and service
-// declarations in the raw message, which is either a FileDescriptorProto
-// or a MessageDescriptorProto depending on whether isFile is set.
-func (db *Builder) unmarshalCounts(b []byte, isFile bool) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- if isFile {
- switch num {
- case genid.FileDescriptorProto_EnumType_field_number:
- db.NumEnums++
- case genid.FileDescriptorProto_MessageType_field_number:
- db.unmarshalCounts(v, false)
- db.NumMessages++
- case genid.FileDescriptorProto_Extension_field_number:
- db.NumExtensions++
- case genid.FileDescriptorProto_Service_field_number:
- db.NumServices++
- }
- } else {
- switch num {
- case genid.DescriptorProto_EnumType_field_number:
- db.NumEnums++
- case genid.DescriptorProto_NestedType_field_number:
- db.unmarshalCounts(v, false)
- db.NumMessages++
- case genid.DescriptorProto_Extension_field_number:
- db.NumExtensions++
- }
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go
deleted file mode 100644
index 378b826fa..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go
+++ /dev/null
@@ -1,755 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package filedesc
-
-import (
- "bytes"
- "fmt"
- "strings"
- "sync"
- "sync/atomic"
-
- "google.golang.org/protobuf/internal/descfmt"
- "google.golang.org/protobuf/internal/descopts"
- "google.golang.org/protobuf/internal/encoding/defval"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// Edition is an Enum for proto2.Edition
-type Edition int32
-
-// These values align with the value of Enum in descriptor.proto which allows
-// direct conversion between the proto enum and this enum.
-const (
- EditionUnknown Edition = 0
- EditionProto2 Edition = 998
- EditionProto3 Edition = 999
- Edition2023 Edition = 1000
- Edition2024 Edition = 1001
- EditionUnsupported Edition = 100000
-)
-
-// The types in this file may have a suffix:
-// • L0: Contains fields common to all descriptors (except File) and
-// must be initialized up front.
-// • L1: Contains fields specific to a descriptor and
-// must be initialized up front. If the associated proto uses Editions, the
-// Editions features must always be resolved. If not explicitly set, the
-// appropriate default must be resolved and set.
-// • L2: Contains fields that are lazily initialized when constructing
-// from the raw file descriptor. When constructing as a literal, the L2
-// fields must be initialized up front.
-//
-// The types are exported so that packages like reflect/protodesc can
-// directly construct descriptors.
-
-type (
- File struct {
- fileRaw
- L1 FileL1
-
- once uint32 // atomically set if L2 is valid
- mu sync.Mutex // protects L2
- L2 *FileL2
- }
- FileL1 struct {
- Syntax protoreflect.Syntax
- Edition Edition // Only used if Syntax == Editions
- Path string
- Package protoreflect.FullName
-
- Enums Enums
- Messages Messages
- Extensions Extensions
- Services Services
-
- EditionFeatures EditionFeatures
- }
- FileL2 struct {
- Options func() protoreflect.ProtoMessage
- Imports FileImports
- Locations SourceLocations
- }
-
- // EditionFeatures is a frequently-instantiated struct, so please take care
- // to minimize padding when adding new fields to this struct (add them in
- // the right place/order).
- EditionFeatures struct {
- // StripEnumPrefix determines if the plugin generates enum value
- // constants as-is, with their prefix stripped, or both variants.
- StripEnumPrefix int
-
- // IsFieldPresence is true if field_presence is EXPLICIT
- // https://protobuf.dev/editions/features/#field_presence
- IsFieldPresence bool
-
- // IsFieldPresence is true if field_presence is LEGACY_REQUIRED
- // https://protobuf.dev/editions/features/#field_presence
- IsLegacyRequired bool
-
- // IsOpenEnum is true if enum_type is OPEN
- // https://protobuf.dev/editions/features/#enum_type
- IsOpenEnum bool
-
- // IsPacked is true if repeated_field_encoding is PACKED
- // https://protobuf.dev/editions/features/#repeated_field_encoding
- IsPacked bool
-
- // IsUTF8Validated is true if utf_validation is VERIFY
- // https://protobuf.dev/editions/features/#utf8_validation
- IsUTF8Validated bool
-
- // IsDelimitedEncoded is true if message_encoding is DELIMITED
- // https://protobuf.dev/editions/features/#message_encoding
- IsDelimitedEncoded bool
-
- // IsJSONCompliant is true if json_format is ALLOW
- // https://protobuf.dev/editions/features/#json_format
- IsJSONCompliant bool
-
- // GenerateLegacyUnmarshalJSON determines if the plugin generates the
- // UnmarshalJSON([]byte) error method for enums.
- GenerateLegacyUnmarshalJSON bool
- // APILevel controls which API (Open, Hybrid or Opaque) should be used
- // for generated code (.pb.go files).
- APILevel int
- }
-)
-
-func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd }
-func (fd *File) Parent() protoreflect.Descriptor { return nil }
-func (fd *File) Index() int { return 0 }
-func (fd *File) Syntax() protoreflect.Syntax { return fd.L1.Syntax }
-
-// Not exported and just used to reconstruct the original FileDescriptor proto
-func (fd *File) Edition() int32 { return int32(fd.L1.Edition) }
-func (fd *File) Name() protoreflect.Name { return fd.L1.Package.Name() }
-func (fd *File) FullName() protoreflect.FullName { return fd.L1.Package }
-func (fd *File) IsPlaceholder() bool { return false }
-func (fd *File) Options() protoreflect.ProtoMessage {
- if f := fd.lazyInit().Options; f != nil {
- return f()
- }
- return descopts.File
-}
-func (fd *File) Path() string { return fd.L1.Path }
-func (fd *File) Package() protoreflect.FullName { return fd.L1.Package }
-func (fd *File) Imports() protoreflect.FileImports { return &fd.lazyInit().Imports }
-func (fd *File) Enums() protoreflect.EnumDescriptors { return &fd.L1.Enums }
-func (fd *File) Messages() protoreflect.MessageDescriptors { return &fd.L1.Messages }
-func (fd *File) Extensions() protoreflect.ExtensionDescriptors { return &fd.L1.Extensions }
-func (fd *File) Services() protoreflect.ServiceDescriptors { return &fd.L1.Services }
-func (fd *File) SourceLocations() protoreflect.SourceLocations { return &fd.lazyInit().Locations }
-func (fd *File) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
-func (fd *File) ProtoType(protoreflect.FileDescriptor) {}
-func (fd *File) ProtoInternal(pragma.DoNotImplement) {}
-
-func (fd *File) lazyInit() *FileL2 {
- if atomic.LoadUint32(&fd.once) == 0 {
- fd.lazyInitOnce()
- }
- return fd.L2
-}
-
-func (fd *File) lazyInitOnce() {
- fd.mu.Lock()
- if fd.L2 == nil {
- fd.lazyRawInit() // recursively initializes all L2 structures
- }
- atomic.StoreUint32(&fd.once, 1)
- fd.mu.Unlock()
-}
-
-// GoPackagePath is a pseudo-internal API for determining the Go package path
-// that this file descriptor is declared in.
-//
-// WARNING: This method is exempt from the compatibility promise and may be
-// removed in the future without warning.
-func (fd *File) GoPackagePath() string {
- return fd.builder.GoPackagePath
-}
-
-type (
- Enum struct {
- Base
- L1 EnumL1
- L2 *EnumL2 // protected by fileDesc.once
- }
- EnumL1 struct {
- eagerValues bool // controls whether EnumL2.Values is already populated
-
- EditionFeatures EditionFeatures
- }
- EnumL2 struct {
- Options func() protoreflect.ProtoMessage
- Values EnumValues
- ReservedNames Names
- ReservedRanges EnumRanges
- }
-
- EnumValue struct {
- Base
- L1 EnumValueL1
- }
- EnumValueL1 struct {
- Options func() protoreflect.ProtoMessage
- Number protoreflect.EnumNumber
- }
-)
-
-func (ed *Enum) Options() protoreflect.ProtoMessage {
- if f := ed.lazyInit().Options; f != nil {
- return f()
- }
- return descopts.Enum
-}
-func (ed *Enum) Values() protoreflect.EnumValueDescriptors {
- if ed.L1.eagerValues {
- return &ed.L2.Values
- }
- return &ed.lazyInit().Values
-}
-func (ed *Enum) ReservedNames() protoreflect.Names { return &ed.lazyInit().ReservedNames }
-func (ed *Enum) ReservedRanges() protoreflect.EnumRanges { return &ed.lazyInit().ReservedRanges }
-func (ed *Enum) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) }
-func (ed *Enum) ProtoType(protoreflect.EnumDescriptor) {}
-func (ed *Enum) lazyInit() *EnumL2 {
- ed.L0.ParentFile.lazyInit() // implicitly initializes L2
- return ed.L2
-}
-func (ed *Enum) IsClosed() bool {
- return !ed.L1.EditionFeatures.IsOpenEnum
-}
-
-func (ed *EnumValue) Options() protoreflect.ProtoMessage {
- if f := ed.L1.Options; f != nil {
- return f()
- }
- return descopts.EnumValue
-}
-func (ed *EnumValue) Number() protoreflect.EnumNumber { return ed.L1.Number }
-func (ed *EnumValue) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) }
-func (ed *EnumValue) ProtoType(protoreflect.EnumValueDescriptor) {}
-
-type (
- Message struct {
- Base
- L1 MessageL1
- L2 *MessageL2 // protected by fileDesc.once
- }
- MessageL1 struct {
- Enums Enums
- Messages Messages
- Extensions Extensions
- IsMapEntry bool // promoted from google.protobuf.MessageOptions
- IsMessageSet bool // promoted from google.protobuf.MessageOptions
-
- EditionFeatures EditionFeatures
- }
- MessageL2 struct {
- Options func() protoreflect.ProtoMessage
- Fields Fields
- Oneofs Oneofs
- ReservedNames Names
- ReservedRanges FieldRanges
- RequiredNumbers FieldNumbers // must be consistent with Fields.Cardinality
- ExtensionRanges FieldRanges
- ExtensionRangeOptions []func() protoreflect.ProtoMessage // must be same length as ExtensionRanges
- }
-
- Field struct {
- Base
- L1 FieldL1
- }
- FieldL1 struct {
- Options func() protoreflect.ProtoMessage
- Number protoreflect.FieldNumber
- Cardinality protoreflect.Cardinality // must be consistent with Message.RequiredNumbers
- Kind protoreflect.Kind
- StringName stringName
- IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
- IsWeak bool // promoted from google.protobuf.FieldOptions
- IsLazy bool // promoted from google.protobuf.FieldOptions
- Default defaultValue
- ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields
- Enum protoreflect.EnumDescriptor
- Message protoreflect.MessageDescriptor
-
- EditionFeatures EditionFeatures
- }
-
- Oneof struct {
- Base
- L1 OneofL1
- }
- OneofL1 struct {
- Options func() protoreflect.ProtoMessage
- Fields OneofFields // must be consistent with Message.Fields.ContainingOneof
-
- EditionFeatures EditionFeatures
- }
-)
-
-func (md *Message) Options() protoreflect.ProtoMessage {
- if f := md.lazyInit().Options; f != nil {
- return f()
- }
- return descopts.Message
-}
-func (md *Message) IsMapEntry() bool { return md.L1.IsMapEntry }
-func (md *Message) Fields() protoreflect.FieldDescriptors { return &md.lazyInit().Fields }
-func (md *Message) Oneofs() protoreflect.OneofDescriptors { return &md.lazyInit().Oneofs }
-func (md *Message) ReservedNames() protoreflect.Names { return &md.lazyInit().ReservedNames }
-func (md *Message) ReservedRanges() protoreflect.FieldRanges { return &md.lazyInit().ReservedRanges }
-func (md *Message) RequiredNumbers() protoreflect.FieldNumbers { return &md.lazyInit().RequiredNumbers }
-func (md *Message) ExtensionRanges() protoreflect.FieldRanges { return &md.lazyInit().ExtensionRanges }
-func (md *Message) ExtensionRangeOptions(i int) protoreflect.ProtoMessage {
- if f := md.lazyInit().ExtensionRangeOptions[i]; f != nil {
- return f()
- }
- return descopts.ExtensionRange
-}
-func (md *Message) Enums() protoreflect.EnumDescriptors { return &md.L1.Enums }
-func (md *Message) Messages() protoreflect.MessageDescriptors { return &md.L1.Messages }
-func (md *Message) Extensions() protoreflect.ExtensionDescriptors { return &md.L1.Extensions }
-func (md *Message) ProtoType(protoreflect.MessageDescriptor) {}
-func (md *Message) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) }
-func (md *Message) lazyInit() *MessageL2 {
- md.L0.ParentFile.lazyInit() // implicitly initializes L2
- return md.L2
-}
-
-// IsMessageSet is a pseudo-internal API for checking whether a message
-// should serialize in the proto1 message format.
-//
-// WARNING: This method is exempt from the compatibility promise and may be
-// removed in the future without warning.
-func (md *Message) IsMessageSet() bool {
- return md.L1.IsMessageSet
-}
-
-func (fd *Field) Options() protoreflect.ProtoMessage {
- if f := fd.L1.Options; f != nil {
- return f()
- }
- return descopts.Field
-}
-func (fd *Field) Number() protoreflect.FieldNumber { return fd.L1.Number }
-func (fd *Field) Cardinality() protoreflect.Cardinality { return fd.L1.Cardinality }
-func (fd *Field) Kind() protoreflect.Kind {
- return fd.L1.Kind
-}
-func (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON }
-func (fd *Field) JSONName() string { return fd.L1.StringName.getJSON(fd) }
-func (fd *Field) TextName() string { return fd.L1.StringName.getText(fd) }
-func (fd *Field) HasPresence() bool {
- if fd.L1.Cardinality == protoreflect.Repeated {
- return false
- }
- return fd.IsExtension() || fd.L1.EditionFeatures.IsFieldPresence || fd.L1.Message != nil || fd.L1.ContainingOneof != nil
-}
-func (fd *Field) HasOptionalKeyword() bool {
- return (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Optional && fd.L1.ContainingOneof == nil) || fd.L1.IsProto3Optional
-}
-func (fd *Field) IsPacked() bool {
- if fd.L1.Cardinality != protoreflect.Repeated {
- return false
- }
- switch fd.L1.Kind {
- case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind:
- return false
- }
- return fd.L1.EditionFeatures.IsPacked
-}
-func (fd *Field) IsExtension() bool { return false }
-func (fd *Field) IsWeak() bool { return fd.L1.IsWeak }
-func (fd *Field) IsLazy() bool { return fd.L1.IsLazy }
-func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }
-func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() }
-func (fd *Field) MapKey() protoreflect.FieldDescriptor {
- if !fd.IsMap() {
- return nil
- }
- return fd.Message().Fields().ByNumber(genid.MapEntry_Key_field_number)
-}
-func (fd *Field) MapValue() protoreflect.FieldDescriptor {
- if !fd.IsMap() {
- return nil
- }
- return fd.Message().Fields().ByNumber(genid.MapEntry_Value_field_number)
-}
-func (fd *Field) HasDefault() bool { return fd.L1.Default.has }
-func (fd *Field) Default() protoreflect.Value { return fd.L1.Default.get(fd) }
-func (fd *Field) DefaultEnumValue() protoreflect.EnumValueDescriptor { return fd.L1.Default.enum }
-func (fd *Field) ContainingOneof() protoreflect.OneofDescriptor { return fd.L1.ContainingOneof }
-func (fd *Field) ContainingMessage() protoreflect.MessageDescriptor {
- return fd.L0.Parent.(protoreflect.MessageDescriptor)
-}
-func (fd *Field) Enum() protoreflect.EnumDescriptor {
- return fd.L1.Enum
-}
-func (fd *Field) Message() protoreflect.MessageDescriptor {
- if fd.L1.IsWeak {
- if d, _ := protoregistry.GlobalFiles.FindDescriptorByName(fd.L1.Message.FullName()); d != nil {
- return d.(protoreflect.MessageDescriptor)
- }
- }
- return fd.L1.Message
-}
-func (fd *Field) IsMapEntry() bool {
- parent, ok := fd.L0.Parent.(protoreflect.MessageDescriptor)
- return ok && parent.IsMapEntry()
-}
-func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) }
-func (fd *Field) ProtoType(protoreflect.FieldDescriptor) {}
-
-// EnforceUTF8 is a pseudo-internal API to determine whether to enforce UTF-8
-// validation for the string field. This exists for Google-internal use only
-// since proto3 did not enforce UTF-8 validity prior to the open-source release.
-// If this method does not exist, the default is to enforce valid UTF-8.
-//
-// WARNING: This method is exempt from the compatibility promise and may be
-// removed in the future without warning.
-func (fd *Field) EnforceUTF8() bool {
- return fd.L1.EditionFeatures.IsUTF8Validated
-}
-
-func (od *Oneof) IsSynthetic() bool {
- return od.L0.ParentFile.L1.Syntax == protoreflect.Proto3 && len(od.L1.Fields.List) == 1 && od.L1.Fields.List[0].HasOptionalKeyword()
-}
-func (od *Oneof) Options() protoreflect.ProtoMessage {
- if f := od.L1.Options; f != nil {
- return f()
- }
- return descopts.Oneof
-}
-func (od *Oneof) Fields() protoreflect.FieldDescriptors { return &od.L1.Fields }
-func (od *Oneof) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, od) }
-func (od *Oneof) ProtoType(protoreflect.OneofDescriptor) {}
-
-type (
- Extension struct {
- Base
- L1 ExtensionL1
- L2 *ExtensionL2 // protected by fileDesc.once
- }
- ExtensionL1 struct {
- Number protoreflect.FieldNumber
- Extendee protoreflect.MessageDescriptor
- Cardinality protoreflect.Cardinality
- Kind protoreflect.Kind
- IsLazy bool
- EditionFeatures EditionFeatures
- }
- ExtensionL2 struct {
- Options func() protoreflect.ProtoMessage
- StringName stringName
- IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto
- Default defaultValue
- Enum protoreflect.EnumDescriptor
- Message protoreflect.MessageDescriptor
- }
-)
-
-func (xd *Extension) Options() protoreflect.ProtoMessage {
- if f := xd.lazyInit().Options; f != nil {
- return f()
- }
- return descopts.Field
-}
-func (xd *Extension) Number() protoreflect.FieldNumber { return xd.L1.Number }
-func (xd *Extension) Cardinality() protoreflect.Cardinality { return xd.L1.Cardinality }
-func (xd *Extension) Kind() protoreflect.Kind { return xd.L1.Kind }
-func (xd *Extension) HasJSONName() bool { return xd.lazyInit().StringName.hasJSON }
-func (xd *Extension) JSONName() string { return xd.lazyInit().StringName.getJSON(xd) }
-func (xd *Extension) TextName() string { return xd.lazyInit().StringName.getText(xd) }
-func (xd *Extension) HasPresence() bool { return xd.L1.Cardinality != protoreflect.Repeated }
-func (xd *Extension) HasOptionalKeyword() bool {
- return (xd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && xd.L1.Cardinality == protoreflect.Optional) || xd.lazyInit().IsProto3Optional
-}
-func (xd *Extension) IsPacked() bool {
- if xd.L1.Cardinality != protoreflect.Repeated {
- return false
- }
- switch xd.L1.Kind {
- case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind:
- return false
- }
- return xd.L1.EditionFeatures.IsPacked
-}
-func (xd *Extension) IsExtension() bool { return true }
-func (xd *Extension) IsWeak() bool { return false }
-func (xd *Extension) IsLazy() bool { return xd.L1.IsLazy }
-func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated }
-func (xd *Extension) IsMap() bool { return false }
-func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil }
-func (xd *Extension) MapValue() protoreflect.FieldDescriptor { return nil }
-func (xd *Extension) HasDefault() bool { return xd.lazyInit().Default.has }
-func (xd *Extension) Default() protoreflect.Value { return xd.lazyInit().Default.get(xd) }
-func (xd *Extension) DefaultEnumValue() protoreflect.EnumValueDescriptor {
- return xd.lazyInit().Default.enum
-}
-func (xd *Extension) ContainingOneof() protoreflect.OneofDescriptor { return nil }
-func (xd *Extension) ContainingMessage() protoreflect.MessageDescriptor { return xd.L1.Extendee }
-func (xd *Extension) Enum() protoreflect.EnumDescriptor { return xd.lazyInit().Enum }
-func (xd *Extension) Message() protoreflect.MessageDescriptor { return xd.lazyInit().Message }
-func (xd *Extension) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, xd) }
-func (xd *Extension) ProtoType(protoreflect.FieldDescriptor) {}
-func (xd *Extension) ProtoInternal(pragma.DoNotImplement) {}
-func (xd *Extension) lazyInit() *ExtensionL2 {
- xd.L0.ParentFile.lazyInit() // implicitly initializes L2
- return xd.L2
-}
-
-type (
- Service struct {
- Base
- L1 ServiceL1
- L2 *ServiceL2 // protected by fileDesc.once
- }
- ServiceL1 struct{}
- ServiceL2 struct {
- Options func() protoreflect.ProtoMessage
- Methods Methods
- }
-
- Method struct {
- Base
- L1 MethodL1
- }
- MethodL1 struct {
- Options func() protoreflect.ProtoMessage
- Input protoreflect.MessageDescriptor
- Output protoreflect.MessageDescriptor
- IsStreamingClient bool
- IsStreamingServer bool
- }
-)
-
-func (sd *Service) Options() protoreflect.ProtoMessage {
- if f := sd.lazyInit().Options; f != nil {
- return f()
- }
- return descopts.Service
-}
-func (sd *Service) Methods() protoreflect.MethodDescriptors { return &sd.lazyInit().Methods }
-func (sd *Service) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, sd) }
-func (sd *Service) ProtoType(protoreflect.ServiceDescriptor) {}
-func (sd *Service) ProtoInternal(pragma.DoNotImplement) {}
-func (sd *Service) lazyInit() *ServiceL2 {
- sd.L0.ParentFile.lazyInit() // implicitly initializes L2
- return sd.L2
-}
-
-func (md *Method) Options() protoreflect.ProtoMessage {
- if f := md.L1.Options; f != nil {
- return f()
- }
- return descopts.Method
-}
-func (md *Method) Input() protoreflect.MessageDescriptor { return md.L1.Input }
-func (md *Method) Output() protoreflect.MessageDescriptor { return md.L1.Output }
-func (md *Method) IsStreamingClient() bool { return md.L1.IsStreamingClient }
-func (md *Method) IsStreamingServer() bool { return md.L1.IsStreamingServer }
-func (md *Method) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) }
-func (md *Method) ProtoType(protoreflect.MethodDescriptor) {}
-func (md *Method) ProtoInternal(pragma.DoNotImplement) {}
-
-// Surrogate files are can be used to create standalone descriptors
-// where the syntax is only information derived from the parent file.
-var (
- SurrogateProto2 = &File{L1: FileL1{Syntax: protoreflect.Proto2}, L2: &FileL2{}}
- SurrogateProto3 = &File{L1: FileL1{Syntax: protoreflect.Proto3}, L2: &FileL2{}}
- SurrogateEdition2023 = &File{L1: FileL1{Syntax: protoreflect.Editions, Edition: Edition2023}, L2: &FileL2{}}
-)
-
-type (
- Base struct {
- L0 BaseL0
- }
- BaseL0 struct {
- FullName protoreflect.FullName // must be populated
- ParentFile *File // must be populated
- Parent protoreflect.Descriptor
- Index int
- }
-)
-
-func (d *Base) Name() protoreflect.Name { return d.L0.FullName.Name() }
-func (d *Base) FullName() protoreflect.FullName { return d.L0.FullName }
-func (d *Base) ParentFile() protoreflect.FileDescriptor {
- if d.L0.ParentFile == SurrogateProto2 || d.L0.ParentFile == SurrogateProto3 {
- return nil // surrogate files are not real parents
- }
- return d.L0.ParentFile
-}
-func (d *Base) Parent() protoreflect.Descriptor { return d.L0.Parent }
-func (d *Base) Index() int { return d.L0.Index }
-func (d *Base) Syntax() protoreflect.Syntax { return d.L0.ParentFile.Syntax() }
-func (d *Base) IsPlaceholder() bool { return false }
-func (d *Base) ProtoInternal(pragma.DoNotImplement) {}
-
-type stringName struct {
- hasJSON bool
- once sync.Once
- nameJSON string
- nameText string
-}
-
-// InitJSON initializes the name. It is exported for use by other internal packages.
-func (s *stringName) InitJSON(name string) {
- s.hasJSON = true
- s.nameJSON = name
-}
-
-// Returns true if this field is structured like the synthetic field of a proto2
-// group. This allows us to expand our treatment of delimited fields without
-// breaking proto2 files that have been upgraded to editions.
-func isGroupLike(fd protoreflect.FieldDescriptor) bool {
- // Groups are always group types.
- if fd.Kind() != protoreflect.GroupKind {
- return false
- }
-
- // Group fields are always the lowercase type name.
- if strings.ToLower(string(fd.Message().Name())) != string(fd.Name()) {
- return false
- }
-
- // Groups could only be defined in the same file they're used.
- if fd.Message().ParentFile() != fd.ParentFile() {
- return false
- }
-
- // Group messages are always defined in the same scope as the field. File
- // level extensions will compare NULL == NULL here, which is why the file
- // comparison above is necessary to ensure both come from the same file.
- if fd.IsExtension() {
- return fd.Parent() == fd.Message().Parent()
- }
- return fd.ContainingMessage() == fd.Message().Parent()
-}
-
-func (s *stringName) lazyInit(fd protoreflect.FieldDescriptor) *stringName {
- s.once.Do(func() {
- if fd.IsExtension() {
- // For extensions, JSON and text are formatted the same way.
- var name string
- if messageset.IsMessageSetExtension(fd) {
- name = string("[" + fd.FullName().Parent() + "]")
- } else {
- name = string("[" + fd.FullName() + "]")
- }
- s.nameJSON = name
- s.nameText = name
- } else {
- // Format the JSON name.
- if !s.hasJSON {
- s.nameJSON = strs.JSONCamelCase(string(fd.Name()))
- }
-
- // Format the text name.
- s.nameText = string(fd.Name())
- if isGroupLike(fd) {
- s.nameText = string(fd.Message().Name())
- }
- }
- })
- return s
-}
-
-func (s *stringName) getJSON(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameJSON }
-func (s *stringName) getText(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameText }
-
-func DefaultValue(v protoreflect.Value, ev protoreflect.EnumValueDescriptor) defaultValue {
- dv := defaultValue{has: v.IsValid(), val: v, enum: ev}
- if b, ok := v.Interface().([]byte); ok {
- // Store a copy of the default bytes, so that we can detect
- // accidental mutations of the original value.
- dv.bytes = append([]byte(nil), b...)
- }
- return dv
-}
-
-func unmarshalDefault(b []byte, k protoreflect.Kind, pf *File, ed protoreflect.EnumDescriptor) defaultValue {
- var evs protoreflect.EnumValueDescriptors
- if k == protoreflect.EnumKind {
- // If the enum is declared within the same file, be careful not to
- // blindly call the Values method, lest we bind ourselves in a deadlock.
- if e, ok := ed.(*Enum); ok && e.L0.ParentFile == pf {
- evs = &e.L2.Values
- } else {
- evs = ed.Values()
- }
-
- // If we are unable to resolve the enum dependency, use a placeholder
- // enum value since we will not be able to parse the default value.
- if ed.IsPlaceholder() && protoreflect.Name(b).IsValid() {
- v := protoreflect.ValueOfEnum(0)
- ev := PlaceholderEnumValue(ed.FullName().Parent().Append(protoreflect.Name(b)))
- return DefaultValue(v, ev)
- }
- }
-
- v, ev, err := defval.Unmarshal(string(b), k, evs, defval.Descriptor)
- if err != nil {
- panic(err)
- }
- return DefaultValue(v, ev)
-}
-
-type defaultValue struct {
- has bool
- val protoreflect.Value
- enum protoreflect.EnumValueDescriptor
- bytes []byte
-}
-
-func (dv *defaultValue) get(fd protoreflect.FieldDescriptor) protoreflect.Value {
- // Return the zero value as the default if unpopulated.
- if !dv.has {
- if fd.Cardinality() == protoreflect.Repeated {
- return protoreflect.Value{}
- }
- switch fd.Kind() {
- case protoreflect.BoolKind:
- return protoreflect.ValueOfBool(false)
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- return protoreflect.ValueOfInt32(0)
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- return protoreflect.ValueOfInt64(0)
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- return protoreflect.ValueOfUint32(0)
- case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- return protoreflect.ValueOfUint64(0)
- case protoreflect.FloatKind:
- return protoreflect.ValueOfFloat32(0)
- case protoreflect.DoubleKind:
- return protoreflect.ValueOfFloat64(0)
- case protoreflect.StringKind:
- return protoreflect.ValueOfString("")
- case protoreflect.BytesKind:
- return protoreflect.ValueOfBytes(nil)
- case protoreflect.EnumKind:
- if evs := fd.Enum().Values(); evs.Len() > 0 {
- return protoreflect.ValueOfEnum(evs.Get(0).Number())
- }
- return protoreflect.ValueOfEnum(0)
- }
- }
-
- if len(dv.bytes) > 0 && !bytes.Equal(dv.bytes, dv.val.Bytes()) {
- // TODO: Avoid panic if we're running with the race detector
- // and instead spawn a goroutine that periodically resets
- // this value back to the original to induce a race.
- panic(fmt.Sprintf("detected mutation on the default bytes for %v", fd.FullName()))
- }
- return dv.val
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
deleted file mode 100644
index d2f549497..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go
+++ /dev/null
@@ -1,560 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package filedesc
-
-import (
- "fmt"
- "sync"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// fileRaw is a data struct used when initializing a file descriptor from
-// a raw FileDescriptorProto.
-type fileRaw struct {
- builder Builder
- allEnums []Enum
- allMessages []Message
- allExtensions []Extension
- allServices []Service
-}
-
-func newRawFile(db Builder) *File {
- fd := &File{fileRaw: fileRaw{builder: db}}
- fd.initDecls(db.NumEnums, db.NumMessages, db.NumExtensions, db.NumServices)
- fd.unmarshalSeed(db.RawDescriptor)
-
- // Extended message targets are eagerly resolved since registration
- // needs this information at program init time.
- for i := range fd.allExtensions {
- xd := &fd.allExtensions[i]
- xd.L1.Extendee = fd.resolveMessageDependency(xd.L1.Extendee, listExtTargets, int32(i))
- }
-
- fd.checkDecls()
- return fd
-}
-
-// initDecls pre-allocates slices for the exact number of enums, messages
-// (including map entries), extensions, and services declared in the proto file.
-// This is done to avoid regrowing the slice, which would change the address
-// for any previously seen declaration.
-//
-// The alloc methods "allocates" slices by pulling from the capacity.
-func (fd *File) initDecls(numEnums, numMessages, numExtensions, numServices int32) {
- fd.allEnums = make([]Enum, 0, numEnums)
- fd.allMessages = make([]Message, 0, numMessages)
- fd.allExtensions = make([]Extension, 0, numExtensions)
- fd.allServices = make([]Service, 0, numServices)
-}
-
-func (fd *File) allocEnums(n int) []Enum {
- total := len(fd.allEnums)
- es := fd.allEnums[total : total+n]
- fd.allEnums = fd.allEnums[:total+n]
- return es
-}
-func (fd *File) allocMessages(n int) []Message {
- total := len(fd.allMessages)
- ms := fd.allMessages[total : total+n]
- fd.allMessages = fd.allMessages[:total+n]
- return ms
-}
-func (fd *File) allocExtensions(n int) []Extension {
- total := len(fd.allExtensions)
- xs := fd.allExtensions[total : total+n]
- fd.allExtensions = fd.allExtensions[:total+n]
- return xs
-}
-func (fd *File) allocServices(n int) []Service {
- total := len(fd.allServices)
- xs := fd.allServices[total : total+n]
- fd.allServices = fd.allServices[:total+n]
- return xs
-}
-
-// checkDecls performs a sanity check that the expected number of expected
-// declarations matches the number that were found in the descriptor proto.
-func (fd *File) checkDecls() {
- switch {
- case len(fd.allEnums) != cap(fd.allEnums):
- case len(fd.allMessages) != cap(fd.allMessages):
- case len(fd.allExtensions) != cap(fd.allExtensions):
- case len(fd.allServices) != cap(fd.allServices):
- default:
- return
- }
- panic("mismatching cardinality")
-}
-
-func (fd *File) unmarshalSeed(b []byte) {
- sb := getBuilder()
- defer putBuilder(sb)
-
- var prevField protoreflect.FieldNumber
- var numEnums, numMessages, numExtensions, numServices int
- var posEnums, posMessages, posExtensions, posServices int
- var options []byte
- b0 := b
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FileDescriptorProto_Syntax_field_number:
- switch string(v) {
- case "proto2":
- fd.L1.Syntax = protoreflect.Proto2
- fd.L1.Edition = EditionProto2
- case "proto3":
- fd.L1.Syntax = protoreflect.Proto3
- fd.L1.Edition = EditionProto3
- case "editions":
- fd.L1.Syntax = protoreflect.Editions
- default:
- panic("invalid syntax")
- }
- case genid.FileDescriptorProto_Name_field_number:
- fd.L1.Path = sb.MakeString(v)
- case genid.FileDescriptorProto_Package_field_number:
- fd.L1.Package = protoreflect.FullName(sb.MakeString(v))
- case genid.FileDescriptorProto_Options_field_number:
- options = v
- case genid.FileDescriptorProto_EnumType_field_number:
- if prevField != genid.FileDescriptorProto_EnumType_field_number {
- if numEnums > 0 {
- panic("non-contiguous repeated field")
- }
- posEnums = len(b0) - len(b) - n - m
- }
- numEnums++
- case genid.FileDescriptorProto_MessageType_field_number:
- if prevField != genid.FileDescriptorProto_MessageType_field_number {
- if numMessages > 0 {
- panic("non-contiguous repeated field")
- }
- posMessages = len(b0) - len(b) - n - m
- }
- numMessages++
- case genid.FileDescriptorProto_Extension_field_number:
- if prevField != genid.FileDescriptorProto_Extension_field_number {
- if numExtensions > 0 {
- panic("non-contiguous repeated field")
- }
- posExtensions = len(b0) - len(b) - n - m
- }
- numExtensions++
- case genid.FileDescriptorProto_Service_field_number:
- if prevField != genid.FileDescriptorProto_Service_field_number {
- if numServices > 0 {
- panic("non-contiguous repeated field")
- }
- posServices = len(b0) - len(b) - n - m
- }
- numServices++
- }
- prevField = num
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FileDescriptorProto_Edition_field_number:
- fd.L1.Edition = Edition(v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- prevField = -1 // ignore known field numbers of unknown wire type
- }
- }
-
- // If syntax is missing, it is assumed to be proto2.
- if fd.L1.Syntax == 0 {
- fd.L1.Syntax = protoreflect.Proto2
- fd.L1.Edition = EditionProto2
- }
-
- fd.L1.EditionFeatures = getFeaturesFor(fd.L1.Edition)
-
- // Parse editions features from options if any
- if options != nil {
- fd.unmarshalSeedOptions(options)
- }
-
- // Must allocate all declarations before parsing each descriptor type
- // to ensure we handled all descriptors in "flattened ordering".
- if numEnums > 0 {
- fd.L1.Enums.List = fd.allocEnums(numEnums)
- }
- if numMessages > 0 {
- fd.L1.Messages.List = fd.allocMessages(numMessages)
- }
- if numExtensions > 0 {
- fd.L1.Extensions.List = fd.allocExtensions(numExtensions)
- }
- if numServices > 0 {
- fd.L1.Services.List = fd.allocServices(numServices)
- }
-
- if numEnums > 0 {
- b := b0[posEnums:]
- for i := range fd.L1.Enums.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- fd.L1.Enums.List[i].unmarshalSeed(v, sb, fd, fd, i)
- b = b[n+m:]
- }
- }
- if numMessages > 0 {
- b := b0[posMessages:]
- for i := range fd.L1.Messages.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- fd.L1.Messages.List[i].unmarshalSeed(v, sb, fd, fd, i)
- b = b[n+m:]
- }
- }
- if numExtensions > 0 {
- b := b0[posExtensions:]
- for i := range fd.L1.Extensions.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- fd.L1.Extensions.List[i].unmarshalSeed(v, sb, fd, fd, i)
- b = b[n+m:]
- }
- }
- if numServices > 0 {
- b := b0[posServices:]
- for i := range fd.L1.Services.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- fd.L1.Services.List[i].unmarshalSeed(v, sb, fd, fd, i)
- b = b[n+m:]
- }
- }
-}
-
-func (fd *File) unmarshalSeedOptions(b []byte) {
- for b := b; len(b) > 0; {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FileOptions_Features_field_number:
- if fd.Syntax() != protoreflect.Editions {
- panic(fmt.Sprintf("invalid descriptor: using edition features in a proto with syntax %s", fd.Syntax()))
- }
- fd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- ed.L0.ParentFile = pf
- ed.L0.Parent = pd
- ed.L0.Index = i
- ed.L1.EditionFeatures = featuresFromParentDesc(ed.Parent())
-
- var numValues int
- for b := b; len(b) > 0; {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.EnumDescriptorProto_Name_field_number:
- ed.L0.FullName = appendFullName(sb, pd.FullName(), v)
- case genid.EnumDescriptorProto_Value_field_number:
- numValues++
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-
- // Only construct enum value descriptors for top-level enums since
- // they are needed for registration.
- if pd != pf {
- return
- }
- ed.L1.eagerValues = true
- ed.L2 = new(EnumL2)
- ed.L2.Values.List = make([]EnumValue, numValues)
- for i := 0; len(b) > 0; {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.EnumDescriptorProto_Value_field_number:
- ed.L2.Values.List[i].unmarshalFull(v, sb, pf, ed, i)
- i++
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- md.L0.ParentFile = pf
- md.L0.Parent = pd
- md.L0.Index = i
- md.L1.EditionFeatures = featuresFromParentDesc(md.Parent())
-
- var prevField protoreflect.FieldNumber
- var numEnums, numMessages, numExtensions int
- var posEnums, posMessages, posExtensions int
- b0 := b
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.DescriptorProto_Name_field_number:
- md.L0.FullName = appendFullName(sb, pd.FullName(), v)
- case genid.DescriptorProto_EnumType_field_number:
- if prevField != genid.DescriptorProto_EnumType_field_number {
- if numEnums > 0 {
- panic("non-contiguous repeated field")
- }
- posEnums = len(b0) - len(b) - n - m
- }
- numEnums++
- case genid.DescriptorProto_NestedType_field_number:
- if prevField != genid.DescriptorProto_NestedType_field_number {
- if numMessages > 0 {
- panic("non-contiguous repeated field")
- }
- posMessages = len(b0) - len(b) - n - m
- }
- numMessages++
- case genid.DescriptorProto_Extension_field_number:
- if prevField != genid.DescriptorProto_Extension_field_number {
- if numExtensions > 0 {
- panic("non-contiguous repeated field")
- }
- posExtensions = len(b0) - len(b) - n - m
- }
- numExtensions++
- case genid.DescriptorProto_Options_field_number:
- md.unmarshalSeedOptions(v)
- }
- prevField = num
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- prevField = -1 // ignore known field numbers of unknown wire type
- }
- }
-
- // Must allocate all declarations before parsing each descriptor type
- // to ensure we handled all descriptors in "flattened ordering".
- if numEnums > 0 {
- md.L1.Enums.List = pf.allocEnums(numEnums)
- }
- if numMessages > 0 {
- md.L1.Messages.List = pf.allocMessages(numMessages)
- }
- if numExtensions > 0 {
- md.L1.Extensions.List = pf.allocExtensions(numExtensions)
- }
-
- if numEnums > 0 {
- b := b0[posEnums:]
- for i := range md.L1.Enums.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- md.L1.Enums.List[i].unmarshalSeed(v, sb, pf, md, i)
- b = b[n+m:]
- }
- }
- if numMessages > 0 {
- b := b0[posMessages:]
- for i := range md.L1.Messages.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- md.L1.Messages.List[i].unmarshalSeed(v, sb, pf, md, i)
- b = b[n+m:]
- }
- }
- if numExtensions > 0 {
- b := b0[posExtensions:]
- for i := range md.L1.Extensions.List {
- _, n := protowire.ConsumeVarint(b)
- v, m := protowire.ConsumeBytes(b[n:])
- md.L1.Extensions.List[i].unmarshalSeed(v, sb, pf, md, i)
- b = b[n+m:]
- }
- }
-}
-
-func (md *Message) unmarshalSeedOptions(b []byte) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.MessageOptions_MapEntry_field_number:
- md.L1.IsMapEntry = protowire.DecodeBool(v)
- case genid.MessageOptions_MessageSetWireFormat_field_number:
- md.L1.IsMessageSet = protowire.DecodeBool(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.MessageOptions_Features_field_number:
- md.L1.EditionFeatures = unmarshalFeatureSet(v, md.L1.EditionFeatures)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- xd.L0.ParentFile = pf
- xd.L0.Parent = pd
- xd.L0.Index = i
- xd.L1.EditionFeatures = featuresFromParentDesc(pd)
-
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FieldDescriptorProto_Number_field_number:
- xd.L1.Number = protoreflect.FieldNumber(v)
- case genid.FieldDescriptorProto_Label_field_number:
- xd.L1.Cardinality = protoreflect.Cardinality(v)
- case genid.FieldDescriptorProto_Type_field_number:
- xd.L1.Kind = protoreflect.Kind(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FieldDescriptorProto_Name_field_number:
- xd.L0.FullName = appendFullName(sb, pd.FullName(), v)
- case genid.FieldDescriptorProto_Extendee_field_number:
- xd.L1.Extendee = PlaceholderMessage(makeFullName(sb, v))
- case genid.FieldDescriptorProto_Options_field_number:
- xd.unmarshalOptions(v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-
- if xd.L1.Kind == protoreflect.MessageKind && xd.L1.EditionFeatures.IsDelimitedEncoded {
- xd.L1.Kind = protoreflect.GroupKind
- }
-}
-
-func (xd *Extension) unmarshalOptions(b []byte) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FieldOptions_Packed_field_number:
- xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
- case genid.FieldOptions_Lazy_field_number:
- xd.L1.IsLazy = protowire.DecodeBool(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FieldOptions_Features_field_number:
- xd.L1.EditionFeatures = unmarshalFeatureSet(v, xd.L1.EditionFeatures)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-func (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- sd.L0.ParentFile = pf
- sd.L0.Parent = pd
- sd.L0.Index = i
-
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.ServiceDescriptorProto_Name_field_number:
- sd.L0.FullName = appendFullName(sb, pd.FullName(), v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-var nameBuilderPool = sync.Pool{
- New: func() any { return new(strs.Builder) },
-}
-
-func getBuilder() *strs.Builder {
- return nameBuilderPool.Get().(*strs.Builder)
-}
-func putBuilder(b *strs.Builder) {
- nameBuilderPool.Put(b)
-}
-
-// makeFullName converts b to a protoreflect.FullName,
-// where b must start with a leading dot.
-func makeFullName(sb *strs.Builder, b []byte) protoreflect.FullName {
- if len(b) == 0 || b[0] != '.' {
- panic("name reference must be fully qualified")
- }
- return protoreflect.FullName(sb.MakeString(b[1:]))
-}
-
-func appendFullName(sb *strs.Builder, prefix protoreflect.FullName, suffix []byte) protoreflect.FullName {
- return sb.AppendFullName(prefix, protoreflect.Name(strs.UnsafeString(suffix)))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
deleted file mode 100644
index 67a51b327..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
+++ /dev/null
@@ -1,703 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package filedesc
-
-import (
- "reflect"
- "sync"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/descopts"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func (fd *File) lazyRawInit() {
- fd.unmarshalFull(fd.builder.RawDescriptor)
- fd.resolveMessages()
- fd.resolveExtensions()
- fd.resolveServices()
-}
-
-func (file *File) resolveMessages() {
- var depIdx int32
- for i := range file.allMessages {
- md := &file.allMessages[i]
-
- // Resolve message field dependencies.
- for j := range md.L2.Fields.List {
- fd := &md.L2.Fields.List[j]
-
- // Weak fields are resolved upon actual use.
- if fd.L1.IsWeak {
- continue
- }
-
- // Resolve message field dependency.
- switch fd.L1.Kind {
- case protoreflect.EnumKind:
- fd.L1.Enum = file.resolveEnumDependency(fd.L1.Enum, listFieldDeps, depIdx)
- depIdx++
- case protoreflect.MessageKind, protoreflect.GroupKind:
- fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx)
- depIdx++
- if fd.L1.Kind == protoreflect.GroupKind && (fd.IsMap() || fd.IsMapEntry()) {
- // A map field might inherit delimited encoding from a file-wide default feature.
- // But maps never actually use delimited encoding. (At least for now...)
- fd.L1.Kind = protoreflect.MessageKind
- }
- }
-
- // Default is resolved here since it depends on Enum being resolved.
- if v := fd.L1.Default.val; v.IsValid() {
- fd.L1.Default = unmarshalDefault(v.Bytes(), fd.L1.Kind, file, fd.L1.Enum)
- }
- }
- }
-}
-
-func (file *File) resolveExtensions() {
- var depIdx int32
- for i := range file.allExtensions {
- xd := &file.allExtensions[i]
-
- // Resolve extension field dependency.
- switch xd.L1.Kind {
- case protoreflect.EnumKind:
- xd.L2.Enum = file.resolveEnumDependency(xd.L2.Enum, listExtDeps, depIdx)
- depIdx++
- case protoreflect.MessageKind, protoreflect.GroupKind:
- xd.L2.Message = file.resolveMessageDependency(xd.L2.Message, listExtDeps, depIdx)
- depIdx++
- }
-
- // Default is resolved here since it depends on Enum being resolved.
- if v := xd.L2.Default.val; v.IsValid() {
- xd.L2.Default = unmarshalDefault(v.Bytes(), xd.L1.Kind, file, xd.L2.Enum)
- }
- }
-}
-
-func (file *File) resolveServices() {
- var depIdx int32
- for i := range file.allServices {
- sd := &file.allServices[i]
-
- // Resolve method dependencies.
- for j := range sd.L2.Methods.List {
- md := &sd.L2.Methods.List[j]
- md.L1.Input = file.resolveMessageDependency(md.L1.Input, listMethInDeps, depIdx)
- md.L1.Output = file.resolveMessageDependency(md.L1.Output, listMethOutDeps, depIdx)
- depIdx++
- }
- }
-}
-
-func (file *File) resolveEnumDependency(ed protoreflect.EnumDescriptor, i, j int32) protoreflect.EnumDescriptor {
- r := file.builder.FileRegistry
- if r, ok := r.(resolverByIndex); ok {
- if ed2 := r.FindEnumByIndex(i, j, file.allEnums, file.allMessages); ed2 != nil {
- return ed2
- }
- }
- for i := range file.allEnums {
- if ed2 := &file.allEnums[i]; ed2.L0.FullName == ed.FullName() {
- return ed2
- }
- }
- if d, _ := r.FindDescriptorByName(ed.FullName()); d != nil {
- return d.(protoreflect.EnumDescriptor)
- }
- return ed
-}
-
-func (file *File) resolveMessageDependency(md protoreflect.MessageDescriptor, i, j int32) protoreflect.MessageDescriptor {
- r := file.builder.FileRegistry
- if r, ok := r.(resolverByIndex); ok {
- if md2 := r.FindMessageByIndex(i, j, file.allEnums, file.allMessages); md2 != nil {
- return md2
- }
- }
- for i := range file.allMessages {
- if md2 := &file.allMessages[i]; md2.L0.FullName == md.FullName() {
- return md2
- }
- }
- if d, _ := r.FindDescriptorByName(md.FullName()); d != nil {
- return d.(protoreflect.MessageDescriptor)
- }
- return md
-}
-
-func (fd *File) unmarshalFull(b []byte) {
- sb := getBuilder()
- defer putBuilder(sb)
-
- var enumIdx, messageIdx, extensionIdx, serviceIdx int
- var rawOptions []byte
- fd.L2 = new(FileL2)
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FileDescriptorProto_PublicDependency_field_number:
- fd.L2.Imports[v].IsPublic = true
- case genid.FileDescriptorProto_WeakDependency_field_number:
- fd.L2.Imports[v].IsWeak = true
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FileDescriptorProto_Dependency_field_number:
- path := sb.MakeString(v)
- imp, _ := fd.builder.FileRegistry.FindFileByPath(path)
- if imp == nil {
- imp = PlaceholderFile(path)
- }
- fd.L2.Imports = append(fd.L2.Imports, protoreflect.FileImport{FileDescriptor: imp})
- case genid.FileDescriptorProto_EnumType_field_number:
- fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb)
- enumIdx++
- case genid.FileDescriptorProto_MessageType_field_number:
- fd.L1.Messages.List[messageIdx].unmarshalFull(v, sb)
- messageIdx++
- case genid.FileDescriptorProto_Extension_field_number:
- fd.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb)
- extensionIdx++
- case genid.FileDescriptorProto_Service_field_number:
- fd.L1.Services.List[serviceIdx].unmarshalFull(v, sb)
- serviceIdx++
- case genid.FileDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- fd.L2.Options = fd.builder.optionsUnmarshaler(&descopts.File, rawOptions)
-}
-
-func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) {
- var rawValues [][]byte
- var rawOptions []byte
- if !ed.L1.eagerValues {
- ed.L2 = new(EnumL2)
- }
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.EnumDescriptorProto_Value_field_number:
- rawValues = append(rawValues, v)
- case genid.EnumDescriptorProto_ReservedName_field_number:
- ed.L2.ReservedNames.List = append(ed.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v)))
- case genid.EnumDescriptorProto_ReservedRange_field_number:
- ed.L2.ReservedRanges.List = append(ed.L2.ReservedRanges.List, unmarshalEnumReservedRange(v))
- case genid.EnumDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- if !ed.L1.eagerValues && len(rawValues) > 0 {
- ed.L2.Values.List = make([]EnumValue, len(rawValues))
- for i, b := range rawValues {
- ed.L2.Values.List[i].unmarshalFull(b, sb, ed.L0.ParentFile, ed, i)
- }
- }
- ed.L2.Options = ed.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Enum, rawOptions)
-}
-
-func unmarshalEnumReservedRange(b []byte) (r [2]protoreflect.EnumNumber) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.EnumDescriptorProto_EnumReservedRange_Start_field_number:
- r[0] = protoreflect.EnumNumber(v)
- case genid.EnumDescriptorProto_EnumReservedRange_End_field_number:
- r[1] = protoreflect.EnumNumber(v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- return r
-}
-
-func (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- vd.L0.ParentFile = pf
- vd.L0.Parent = pd
- vd.L0.Index = i
-
- var rawOptions []byte
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.EnumValueDescriptorProto_Number_field_number:
- vd.L1.Number = protoreflect.EnumNumber(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.EnumValueDescriptorProto_Name_field_number:
- // NOTE: Enum values are in the same scope as the enum parent.
- vd.L0.FullName = appendFullName(sb, pd.Parent().FullName(), v)
- case genid.EnumValueDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- vd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.EnumValue, rawOptions)
-}
-
-func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) {
- var rawFields, rawOneofs [][]byte
- var enumIdx, messageIdx, extensionIdx int
- var rawOptions []byte
- md.L2 = new(MessageL2)
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.DescriptorProto_Field_field_number:
- rawFields = append(rawFields, v)
- case genid.DescriptorProto_OneofDecl_field_number:
- rawOneofs = append(rawOneofs, v)
- case genid.DescriptorProto_ReservedName_field_number:
- md.L2.ReservedNames.List = append(md.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v)))
- case genid.DescriptorProto_ReservedRange_field_number:
- md.L2.ReservedRanges.List = append(md.L2.ReservedRanges.List, unmarshalMessageReservedRange(v))
- case genid.DescriptorProto_ExtensionRange_field_number:
- r, rawOptions := unmarshalMessageExtensionRange(v)
- opts := md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.ExtensionRange, rawOptions)
- md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, r)
- md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, opts)
- case genid.DescriptorProto_EnumType_field_number:
- md.L1.Enums.List[enumIdx].unmarshalFull(v, sb)
- enumIdx++
- case genid.DescriptorProto_NestedType_field_number:
- md.L1.Messages.List[messageIdx].unmarshalFull(v, sb)
- messageIdx++
- case genid.DescriptorProto_Extension_field_number:
- md.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb)
- extensionIdx++
- case genid.DescriptorProto_Options_field_number:
- md.unmarshalOptions(v)
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- if len(rawFields) > 0 || len(rawOneofs) > 0 {
- md.L2.Fields.List = make([]Field, len(rawFields))
- md.L2.Oneofs.List = make([]Oneof, len(rawOneofs))
- for i, b := range rawFields {
- fd := &md.L2.Fields.List[i]
- fd.unmarshalFull(b, sb, md.L0.ParentFile, md, i)
- if fd.L1.Cardinality == protoreflect.Required {
- md.L2.RequiredNumbers.List = append(md.L2.RequiredNumbers.List, fd.L1.Number)
- }
- }
- for i, b := range rawOneofs {
- od := &md.L2.Oneofs.List[i]
- od.unmarshalFull(b, sb, md.L0.ParentFile, md, i)
- }
- }
- md.L2.Options = md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Message, rawOptions)
-}
-
-func (md *Message) unmarshalOptions(b []byte) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.MessageOptions_MapEntry_field_number:
- md.L1.IsMapEntry = protowire.DecodeBool(v)
- case genid.MessageOptions_MessageSetWireFormat_field_number:
- md.L1.IsMessageSet = protowire.DecodeBool(v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-func unmarshalMessageReservedRange(b []byte) (r [2]protoreflect.FieldNumber) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.DescriptorProto_ReservedRange_Start_field_number:
- r[0] = protoreflect.FieldNumber(v)
- case genid.DescriptorProto_ReservedRange_End_field_number:
- r[1] = protoreflect.FieldNumber(v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- return r
-}
-
-func unmarshalMessageExtensionRange(b []byte) (r [2]protoreflect.FieldNumber, rawOptions []byte) {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.DescriptorProto_ExtensionRange_Start_field_number:
- r[0] = protoreflect.FieldNumber(v)
- case genid.DescriptorProto_ExtensionRange_End_field_number:
- r[1] = protoreflect.FieldNumber(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.DescriptorProto_ExtensionRange_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- return r, rawOptions
-}
-
-func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- fd.L0.ParentFile = pf
- fd.L0.Parent = pd
- fd.L0.Index = i
- fd.L1.EditionFeatures = featuresFromParentDesc(fd.Parent())
-
- var rawTypeName []byte
- var rawOptions []byte
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FieldDescriptorProto_Number_field_number:
- fd.L1.Number = protoreflect.FieldNumber(v)
- case genid.FieldDescriptorProto_Label_field_number:
- fd.L1.Cardinality = protoreflect.Cardinality(v)
- case genid.FieldDescriptorProto_Type_field_number:
- fd.L1.Kind = protoreflect.Kind(v)
- case genid.FieldDescriptorProto_OneofIndex_field_number:
- // In Message.unmarshalFull, we allocate slices for both
- // the field and oneof descriptors before unmarshaling either
- // of them. This ensures pointers to slice elements are stable.
- od := &pd.(*Message).L2.Oneofs.List[v]
- od.L1.Fields.List = append(od.L1.Fields.List, fd)
- if fd.L1.ContainingOneof != nil {
- panic("oneof type already set")
- }
- fd.L1.ContainingOneof = od
- case genid.FieldDescriptorProto_Proto3Optional_field_number:
- fd.L1.IsProto3Optional = protowire.DecodeBool(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FieldDescriptorProto_Name_field_number:
- fd.L0.FullName = appendFullName(sb, pd.FullName(), v)
- case genid.FieldDescriptorProto_JsonName_field_number:
- fd.L1.StringName.InitJSON(sb.MakeString(v))
- case genid.FieldDescriptorProto_DefaultValue_field_number:
- fd.L1.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages
- case genid.FieldDescriptorProto_TypeName_field_number:
- rawTypeName = v
- case genid.FieldDescriptorProto_Options_field_number:
- fd.unmarshalOptions(v)
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- if fd.L1.Kind == protoreflect.MessageKind && fd.L1.EditionFeatures.IsDelimitedEncoded {
- fd.L1.Kind = protoreflect.GroupKind
- }
- if fd.L1.EditionFeatures.IsLegacyRequired {
- fd.L1.Cardinality = protoreflect.Required
- }
- if rawTypeName != nil {
- name := makeFullName(sb, rawTypeName)
- switch fd.L1.Kind {
- case protoreflect.EnumKind:
- fd.L1.Enum = PlaceholderEnum(name)
- case protoreflect.MessageKind, protoreflect.GroupKind:
- fd.L1.Message = PlaceholderMessage(name)
- }
- }
- fd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Field, rawOptions)
-}
-
-func (fd *Field) unmarshalOptions(b []byte) {
- const FieldOptions_EnforceUTF8 = 13
-
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FieldOptions_Packed_field_number:
- fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)
- case genid.FieldOptions_Weak_field_number:
- fd.L1.IsWeak = protowire.DecodeBool(v)
- case genid.FieldOptions_Lazy_field_number:
- fd.L1.IsLazy = protowire.DecodeBool(v)
- case FieldOptions_EnforceUTF8:
- fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FieldOptions_Features_field_number:
- fd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
-}
-
-func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- od.L0.ParentFile = pf
- od.L0.Parent = pd
- od.L0.Index = i
-
- var rawOptions []byte
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.OneofDescriptorProto_Name_field_number:
- od.L0.FullName = appendFullName(sb, pd.FullName(), v)
- case genid.OneofDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- od.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Oneof, rawOptions)
-}
-
-func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) {
- var rawTypeName []byte
- var rawOptions []byte
- xd.L2 = new(ExtensionL2)
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FieldDescriptorProto_Proto3Optional_field_number:
- xd.L2.IsProto3Optional = protowire.DecodeBool(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FieldDescriptorProto_JsonName_field_number:
- xd.L2.StringName.InitJSON(sb.MakeString(v))
- case genid.FieldDescriptorProto_DefaultValue_field_number:
- xd.L2.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions
- case genid.FieldDescriptorProto_TypeName_field_number:
- rawTypeName = v
- case genid.FieldDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- if rawTypeName != nil {
- name := makeFullName(sb, rawTypeName)
- switch xd.L1.Kind {
- case protoreflect.EnumKind:
- xd.L2.Enum = PlaceholderEnum(name)
- case protoreflect.MessageKind, protoreflect.GroupKind:
- xd.L2.Message = PlaceholderMessage(name)
- }
- }
- xd.L2.Options = xd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Field, rawOptions)
-}
-
-func (sd *Service) unmarshalFull(b []byte, sb *strs.Builder) {
- var rawMethods [][]byte
- var rawOptions []byte
- sd.L2 = new(ServiceL2)
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.ServiceDescriptorProto_Method_field_number:
- rawMethods = append(rawMethods, v)
- case genid.ServiceDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- if len(rawMethods) > 0 {
- sd.L2.Methods.List = make([]Method, len(rawMethods))
- for i, b := range rawMethods {
- sd.L2.Methods.List[i].unmarshalFull(b, sb, sd.L0.ParentFile, sd, i)
- }
- }
- sd.L2.Options = sd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Service, rawOptions)
-}
-
-func (md *Method) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {
- md.L0.ParentFile = pf
- md.L0.Parent = pd
- md.L0.Index = i
-
- var rawOptions []byte
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.MethodDescriptorProto_ClientStreaming_field_number:
- md.L1.IsStreamingClient = protowire.DecodeBool(v)
- case genid.MethodDescriptorProto_ServerStreaming_field_number:
- md.L1.IsStreamingServer = protowire.DecodeBool(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.MethodDescriptorProto_Name_field_number:
- md.L0.FullName = appendFullName(sb, pd.FullName(), v)
- case genid.MethodDescriptorProto_InputType_field_number:
- md.L1.Input = PlaceholderMessage(makeFullName(sb, v))
- case genid.MethodDescriptorProto_OutputType_field_number:
- md.L1.Output = PlaceholderMessage(makeFullName(sb, v))
- case genid.MethodDescriptorProto_Options_field_number:
- rawOptions = appendOptions(rawOptions, v)
- }
- default:
- m := protowire.ConsumeFieldValue(num, typ, b)
- b = b[m:]
- }
- }
- md.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Method, rawOptions)
-}
-
-// appendOptions appends src to dst, where the returned slice is never nil.
-// This is necessary to distinguish between empty and unpopulated options.
-func appendOptions(dst, src []byte) []byte {
- if dst == nil {
- dst = []byte{}
- }
- return append(dst, src...)
-}
-
-// optionsUnmarshaler constructs a lazy unmarshal function for an options message.
-//
-// The type of message to unmarshal to is passed as a pointer since the
-// vars in descopts may not yet be populated at the time this function is called.
-func (db *Builder) optionsUnmarshaler(p *protoreflect.ProtoMessage, b []byte) func() protoreflect.ProtoMessage {
- if b == nil {
- return nil
- }
- var opts protoreflect.ProtoMessage
- var once sync.Once
- return func() protoreflect.ProtoMessage {
- once.Do(func() {
- if *p == nil {
- panic("Descriptor.Options called without importing the descriptor package")
- }
- opts = reflect.New(reflect.TypeOf(*p).Elem()).Interface().(protoreflect.ProtoMessage)
- if err := (proto.UnmarshalOptions{
- AllowPartial: true,
- Resolver: db.TypeResolver,
- }).Unmarshal(b, opts); err != nil {
- panic(err)
- }
- })
- return opts
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go
deleted file mode 100644
index e3b6587da..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go
+++ /dev/null
@@ -1,457 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package filedesc
-
-import (
- "fmt"
- "math"
- "sort"
- "sync"
-
- "google.golang.org/protobuf/internal/genid"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/descfmt"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type FileImports []protoreflect.FileImport
-
-func (p *FileImports) Len() int { return len(*p) }
-func (p *FileImports) Get(i int) protoreflect.FileImport { return (*p)[i] }
-func (p *FileImports) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
-func (p *FileImports) ProtoInternal(pragma.DoNotImplement) {}
-
-type Names struct {
- List []protoreflect.Name
- once sync.Once
- has map[protoreflect.Name]int // protected by once
-}
-
-func (p *Names) Len() int { return len(p.List) }
-func (p *Names) Get(i int) protoreflect.Name { return p.List[i] }
-func (p *Names) Has(s protoreflect.Name) bool { return p.lazyInit().has[s] > 0 }
-func (p *Names) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
-func (p *Names) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Names) lazyInit() *Names {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.has = make(map[protoreflect.Name]int, len(p.List))
- for _, s := range p.List {
- p.has[s] = p.has[s] + 1
- }
- }
- })
- return p
-}
-
-// CheckValid reports any errors with the set of names with an error message
-// that completes the sentence: "ranges is invalid because it has ..."
-func (p *Names) CheckValid() error {
- for s, n := range p.lazyInit().has {
- switch {
- case n > 1:
- return errors.New("duplicate name: %q", s)
- case false && !s.IsValid():
- // NOTE: The C++ implementation does not validate the identifier.
- // See https://github.com/protocolbuffers/protobuf/issues/6335.
- return errors.New("invalid name: %q", s)
- }
- }
- return nil
-}
-
-type EnumRanges struct {
- List [][2]protoreflect.EnumNumber // start inclusive; end inclusive
- once sync.Once
- sorted [][2]protoreflect.EnumNumber // protected by once
-}
-
-func (p *EnumRanges) Len() int { return len(p.List) }
-func (p *EnumRanges) Get(i int) [2]protoreflect.EnumNumber { return p.List[i] }
-func (p *EnumRanges) Has(n protoreflect.EnumNumber) bool {
- for ls := p.lazyInit().sorted; len(ls) > 0; {
- i := len(ls) / 2
- switch r := enumRange(ls[i]); {
- case n < r.Start():
- ls = ls[:i] // search lower
- case n > r.End():
- ls = ls[i+1:] // search upper
- default:
- return true
- }
- }
- return false
-}
-func (p *EnumRanges) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
-func (p *EnumRanges) ProtoInternal(pragma.DoNotImplement) {}
-func (p *EnumRanges) lazyInit() *EnumRanges {
- p.once.Do(func() {
- p.sorted = append(p.sorted, p.List...)
- sort.Slice(p.sorted, func(i, j int) bool {
- return p.sorted[i][0] < p.sorted[j][0]
- })
- })
- return p
-}
-
-// CheckValid reports any errors with the set of names with an error message
-// that completes the sentence: "ranges is invalid because it has ..."
-func (p *EnumRanges) CheckValid() error {
- var rp enumRange
- for i, r := range p.lazyInit().sorted {
- r := enumRange(r)
- switch {
- case !(r.Start() <= r.End()):
- return errors.New("invalid range: %v", r)
- case !(rp.End() < r.Start()) && i > 0:
- return errors.New("overlapping ranges: %v with %v", rp, r)
- }
- rp = r
- }
- return nil
-}
-
-type enumRange [2]protoreflect.EnumNumber
-
-func (r enumRange) Start() protoreflect.EnumNumber { return r[0] } // inclusive
-func (r enumRange) End() protoreflect.EnumNumber { return r[1] } // inclusive
-func (r enumRange) String() string {
- if r.Start() == r.End() {
- return fmt.Sprintf("%d", r.Start())
- }
- return fmt.Sprintf("%d to %d", r.Start(), r.End())
-}
-
-type FieldRanges struct {
- List [][2]protoreflect.FieldNumber // start inclusive; end exclusive
- once sync.Once
- sorted [][2]protoreflect.FieldNumber // protected by once
-}
-
-func (p *FieldRanges) Len() int { return len(p.List) }
-func (p *FieldRanges) Get(i int) [2]protoreflect.FieldNumber { return p.List[i] }
-func (p *FieldRanges) Has(n protoreflect.FieldNumber) bool {
- for ls := p.lazyInit().sorted; len(ls) > 0; {
- i := len(ls) / 2
- switch r := fieldRange(ls[i]); {
- case n < r.Start():
- ls = ls[:i] // search lower
- case n > r.End():
- ls = ls[i+1:] // search upper
- default:
- return true
- }
- }
- return false
-}
-func (p *FieldRanges) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
-func (p *FieldRanges) ProtoInternal(pragma.DoNotImplement) {}
-func (p *FieldRanges) lazyInit() *FieldRanges {
- p.once.Do(func() {
- p.sorted = append(p.sorted, p.List...)
- sort.Slice(p.sorted, func(i, j int) bool {
- return p.sorted[i][0] < p.sorted[j][0]
- })
- })
- return p
-}
-
-// CheckValid reports any errors with the set of ranges with an error message
-// that completes the sentence: "ranges is invalid because it has ..."
-func (p *FieldRanges) CheckValid(isMessageSet bool) error {
- var rp fieldRange
- for i, r := range p.lazyInit().sorted {
- r := fieldRange(r)
- switch {
- case !isValidFieldNumber(r.Start(), isMessageSet):
- return errors.New("invalid field number: %d", r.Start())
- case !isValidFieldNumber(r.End(), isMessageSet):
- return errors.New("invalid field number: %d", r.End())
- case !(r.Start() <= r.End()):
- return errors.New("invalid range: %v", r)
- case !(rp.End() < r.Start()) && i > 0:
- return errors.New("overlapping ranges: %v with %v", rp, r)
- }
- rp = r
- }
- return nil
-}
-
-// isValidFieldNumber reports whether the field number is valid.
-// Unlike the FieldNumber.IsValid method, it allows ranges that cover the
-// reserved number range.
-func isValidFieldNumber(n protoreflect.FieldNumber, isMessageSet bool) bool {
- return protowire.MinValidNumber <= n && (n <= protowire.MaxValidNumber || isMessageSet)
-}
-
-// CheckOverlap reports an error if p and q overlap.
-func (p *FieldRanges) CheckOverlap(q *FieldRanges) error {
- rps := p.lazyInit().sorted
- rqs := q.lazyInit().sorted
- for pi, qi := 0, 0; pi < len(rps) && qi < len(rqs); {
- rp := fieldRange(rps[pi])
- rq := fieldRange(rqs[qi])
- if !(rp.End() < rq.Start() || rq.End() < rp.Start()) {
- return errors.New("overlapping ranges: %v with %v", rp, rq)
- }
- if rp.Start() < rq.Start() {
- pi++
- } else {
- qi++
- }
- }
- return nil
-}
-
-type fieldRange [2]protoreflect.FieldNumber
-
-func (r fieldRange) Start() protoreflect.FieldNumber { return r[0] } // inclusive
-func (r fieldRange) End() protoreflect.FieldNumber { return r[1] - 1 } // inclusive
-func (r fieldRange) String() string {
- if r.Start() == r.End() {
- return fmt.Sprintf("%d", r.Start())
- }
- return fmt.Sprintf("%d to %d", r.Start(), r.End())
-}
-
-type FieldNumbers struct {
- List []protoreflect.FieldNumber
- once sync.Once
- has map[protoreflect.FieldNumber]struct{} // protected by once
-}
-
-func (p *FieldNumbers) Len() int { return len(p.List) }
-func (p *FieldNumbers) Get(i int) protoreflect.FieldNumber { return p.List[i] }
-func (p *FieldNumbers) Has(n protoreflect.FieldNumber) bool {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.has = make(map[protoreflect.FieldNumber]struct{}, len(p.List))
- for _, n := range p.List {
- p.has[n] = struct{}{}
- }
- }
- })
- _, ok := p.has[n]
- return ok
-}
-func (p *FieldNumbers) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
-func (p *FieldNumbers) ProtoInternal(pragma.DoNotImplement) {}
-
-type OneofFields struct {
- List []protoreflect.FieldDescriptor
- once sync.Once
- byName map[protoreflect.Name]protoreflect.FieldDescriptor // protected by once
- byJSON map[string]protoreflect.FieldDescriptor // protected by once
- byText map[string]protoreflect.FieldDescriptor // protected by once
- byNum map[protoreflect.FieldNumber]protoreflect.FieldDescriptor // protected by once
-}
-
-func (p *OneofFields) Len() int { return len(p.List) }
-func (p *OneofFields) Get(i int) protoreflect.FieldDescriptor { return p.List[i] }
-func (p *OneofFields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {
- return p.lazyInit().byName[s]
-}
-func (p *OneofFields) ByJSONName(s string) protoreflect.FieldDescriptor {
- return p.lazyInit().byJSON[s]
-}
-func (p *OneofFields) ByTextName(s string) protoreflect.FieldDescriptor {
- return p.lazyInit().byText[s]
-}
-func (p *OneofFields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {
- return p.lazyInit().byNum[n]
-}
-func (p *OneofFields) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) }
-func (p *OneofFields) ProtoInternal(pragma.DoNotImplement) {}
-
-func (p *OneofFields) lazyInit() *OneofFields {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]protoreflect.FieldDescriptor, len(p.List))
- p.byJSON = make(map[string]protoreflect.FieldDescriptor, len(p.List))
- p.byText = make(map[string]protoreflect.FieldDescriptor, len(p.List))
- p.byNum = make(map[protoreflect.FieldNumber]protoreflect.FieldDescriptor, len(p.List))
- for _, f := range p.List {
- // Field names and numbers are guaranteed to be unique.
- p.byName[f.Name()] = f
- p.byJSON[f.JSONName()] = f
- p.byText[f.TextName()] = f
- p.byNum[f.Number()] = f
- }
- }
- })
- return p
-}
-
-type SourceLocations struct {
- // List is a list of SourceLocations.
- // The SourceLocation.Next field does not need to be populated
- // as it will be lazily populated upon first need.
- List []protoreflect.SourceLocation
-
- // File is the parent file descriptor that these locations are relative to.
- // If non-nil, ByDescriptor verifies that the provided descriptor
- // is a child of this file descriptor.
- File protoreflect.FileDescriptor
-
- once sync.Once
- byPath map[pathKey]int
-}
-
-func (p *SourceLocations) Len() int { return len(p.List) }
-func (p *SourceLocations) Get(i int) protoreflect.SourceLocation { return p.lazyInit().List[i] }
-func (p *SourceLocations) byKey(k pathKey) protoreflect.SourceLocation {
- if i, ok := p.lazyInit().byPath[k]; ok {
- return p.List[i]
- }
- return protoreflect.SourceLocation{}
-}
-func (p *SourceLocations) ByPath(path protoreflect.SourcePath) protoreflect.SourceLocation {
- return p.byKey(newPathKey(path))
-}
-func (p *SourceLocations) ByDescriptor(desc protoreflect.Descriptor) protoreflect.SourceLocation {
- if p.File != nil && desc != nil && p.File != desc.ParentFile() {
- return protoreflect.SourceLocation{} // mismatching parent files
- }
- var pathArr [16]int32
- path := pathArr[:0]
- for {
- switch desc.(type) {
- case protoreflect.FileDescriptor:
- // Reverse the path since it was constructed in reverse.
- for i, j := 0, len(path)-1; i < j; i, j = i+1, j-1 {
- path[i], path[j] = path[j], path[i]
- }
- return p.byKey(newPathKey(path))
- case protoreflect.MessageDescriptor:
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- switch desc.(type) {
- case protoreflect.FileDescriptor:
- path = append(path, int32(genid.FileDescriptorProto_MessageType_field_number))
- case protoreflect.MessageDescriptor:
- path = append(path, int32(genid.DescriptorProto_NestedType_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- case protoreflect.FieldDescriptor:
- isExtension := desc.(protoreflect.FieldDescriptor).IsExtension()
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- if isExtension {
- switch desc.(type) {
- case protoreflect.FileDescriptor:
- path = append(path, int32(genid.FileDescriptorProto_Extension_field_number))
- case protoreflect.MessageDescriptor:
- path = append(path, int32(genid.DescriptorProto_Extension_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- } else {
- switch desc.(type) {
- case protoreflect.MessageDescriptor:
- path = append(path, int32(genid.DescriptorProto_Field_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- }
- case protoreflect.OneofDescriptor:
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- switch desc.(type) {
- case protoreflect.MessageDescriptor:
- path = append(path, int32(genid.DescriptorProto_OneofDecl_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- case protoreflect.EnumDescriptor:
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- switch desc.(type) {
- case protoreflect.FileDescriptor:
- path = append(path, int32(genid.FileDescriptorProto_EnumType_field_number))
- case protoreflect.MessageDescriptor:
- path = append(path, int32(genid.DescriptorProto_EnumType_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- case protoreflect.EnumValueDescriptor:
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- switch desc.(type) {
- case protoreflect.EnumDescriptor:
- path = append(path, int32(genid.EnumDescriptorProto_Value_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- case protoreflect.ServiceDescriptor:
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- switch desc.(type) {
- case protoreflect.FileDescriptor:
- path = append(path, int32(genid.FileDescriptorProto_Service_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- case protoreflect.MethodDescriptor:
- path = append(path, int32(desc.Index()))
- desc = desc.Parent()
- switch desc.(type) {
- case protoreflect.ServiceDescriptor:
- path = append(path, int32(genid.ServiceDescriptorProto_Method_field_number))
- default:
- return protoreflect.SourceLocation{}
- }
- default:
- return protoreflect.SourceLocation{}
- }
- }
-}
-func (p *SourceLocations) lazyInit() *SourceLocations {
- p.once.Do(func() {
- if len(p.List) > 0 {
- // Collect all the indexes for a given path.
- pathIdxs := make(map[pathKey][]int, len(p.List))
- for i, l := range p.List {
- k := newPathKey(l.Path)
- pathIdxs[k] = append(pathIdxs[k], i)
- }
-
- // Update the next index for all locations.
- p.byPath = make(map[pathKey]int, len(p.List))
- for k, idxs := range pathIdxs {
- for i := 0; i < len(idxs)-1; i++ {
- p.List[idxs[i]].Next = idxs[i+1]
- }
- p.List[idxs[len(idxs)-1]].Next = 0
- p.byPath[k] = idxs[0] // record the first location for this path
- }
- }
- })
- return p
-}
-func (p *SourceLocations) ProtoInternal(pragma.DoNotImplement) {}
-
-// pathKey is a comparable representation of protoreflect.SourcePath.
-type pathKey struct {
- arr [16]uint8 // first n-1 path segments; last element is the length
- str string // used if the path does not fit in arr
-}
-
-func newPathKey(p protoreflect.SourcePath) (k pathKey) {
- if len(p) < len(k.arr) {
- for i, ps := range p {
- if ps < 0 || math.MaxUint8 <= ps {
- return pathKey{str: p.String()}
- }
- k.arr[i] = uint8(ps)
- }
- k.arr[len(k.arr)-1] = uint8(len(p))
- return k
- }
- return pathKey{str: p.String()}
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go
deleted file mode 100644
index f4107c05f..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go
+++ /dev/null
@@ -1,367 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package filedesc
-
-import (
- "fmt"
- "strings"
- "sync"
-
- "google.golang.org/protobuf/internal/descfmt"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type Enums struct {
- List []Enum
- once sync.Once
- byName map[protoreflect.Name]*Enum // protected by once
-}
-
-func (p *Enums) Len() int {
- return len(p.List)
-}
-func (p *Enums) Get(i int) protoreflect.EnumDescriptor {
- return &p.List[i]
-}
-func (p *Enums) ByName(s protoreflect.Name) protoreflect.EnumDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Enums) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Enums) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Enums) lazyInit() *Enums {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Enum, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- }
- }
- })
- return p
-}
-
-type EnumValues struct {
- List []EnumValue
- once sync.Once
- byName map[protoreflect.Name]*EnumValue // protected by once
- byNum map[protoreflect.EnumNumber]*EnumValue // protected by once
-}
-
-func (p *EnumValues) Len() int {
- return len(p.List)
-}
-func (p *EnumValues) Get(i int) protoreflect.EnumValueDescriptor {
- return &p.List[i]
-}
-func (p *EnumValues) ByName(s protoreflect.Name) protoreflect.EnumValueDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *EnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor {
- if d := p.lazyInit().byNum[n]; d != nil {
- return d
- }
- return nil
-}
-func (p *EnumValues) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *EnumValues) ProtoInternal(pragma.DoNotImplement) {}
-func (p *EnumValues) lazyInit() *EnumValues {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*EnumValue, len(p.List))
- p.byNum = make(map[protoreflect.EnumNumber]*EnumValue, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- if _, ok := p.byNum[d.Number()]; !ok {
- p.byNum[d.Number()] = d
- }
- }
- }
- })
- return p
-}
-
-type Messages struct {
- List []Message
- once sync.Once
- byName map[protoreflect.Name]*Message // protected by once
-}
-
-func (p *Messages) Len() int {
- return len(p.List)
-}
-func (p *Messages) Get(i int) protoreflect.MessageDescriptor {
- return &p.List[i]
-}
-func (p *Messages) ByName(s protoreflect.Name) protoreflect.MessageDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Messages) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Messages) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Messages) lazyInit() *Messages {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Message, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- }
- }
- })
- return p
-}
-
-type Fields struct {
- List []Field
- once sync.Once
- byName map[protoreflect.Name]*Field // protected by once
- byJSON map[string]*Field // protected by once
- byText map[string]*Field // protected by once
- byNum map[protoreflect.FieldNumber]*Field // protected by once
-}
-
-func (p *Fields) Len() int {
- return len(p.List)
-}
-func (p *Fields) Get(i int) protoreflect.FieldDescriptor {
- return &p.List[i]
-}
-func (p *Fields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Fields) ByJSONName(s string) protoreflect.FieldDescriptor {
- if d := p.lazyInit().byJSON[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Fields) ByTextName(s string) protoreflect.FieldDescriptor {
- if d := p.lazyInit().byText[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Fields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {
- if d := p.lazyInit().byNum[n]; d != nil {
- return d
- }
- return nil
-}
-func (p *Fields) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Fields) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Fields) lazyInit() *Fields {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Field, len(p.List))
- p.byJSON = make(map[string]*Field, len(p.List))
- p.byText = make(map[string]*Field, len(p.List))
- p.byNum = make(map[protoreflect.FieldNumber]*Field, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- if _, ok := p.byJSON[d.JSONName()]; !ok {
- p.byJSON[d.JSONName()] = d
- }
- if _, ok := p.byText[d.TextName()]; !ok {
- p.byText[d.TextName()] = d
- }
- if isGroupLike(d) {
- lowerJSONName := strings.ToLower(d.JSONName())
- if _, ok := p.byJSON[lowerJSONName]; !ok {
- p.byJSON[lowerJSONName] = d
- }
- lowerTextName := strings.ToLower(d.TextName())
- if _, ok := p.byText[lowerTextName]; !ok {
- p.byText[lowerTextName] = d
- }
- }
- if _, ok := p.byNum[d.Number()]; !ok {
- p.byNum[d.Number()] = d
- }
- }
- }
- })
- return p
-}
-
-type Oneofs struct {
- List []Oneof
- once sync.Once
- byName map[protoreflect.Name]*Oneof // protected by once
-}
-
-func (p *Oneofs) Len() int {
- return len(p.List)
-}
-func (p *Oneofs) Get(i int) protoreflect.OneofDescriptor {
- return &p.List[i]
-}
-func (p *Oneofs) ByName(s protoreflect.Name) protoreflect.OneofDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Oneofs) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Oneofs) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Oneofs) lazyInit() *Oneofs {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Oneof, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- }
- }
- })
- return p
-}
-
-type Extensions struct {
- List []Extension
- once sync.Once
- byName map[protoreflect.Name]*Extension // protected by once
-}
-
-func (p *Extensions) Len() int {
- return len(p.List)
-}
-func (p *Extensions) Get(i int) protoreflect.ExtensionDescriptor {
- return &p.List[i]
-}
-func (p *Extensions) ByName(s protoreflect.Name) protoreflect.ExtensionDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Extensions) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Extensions) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Extensions) lazyInit() *Extensions {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Extension, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- }
- }
- })
- return p
-}
-
-type Services struct {
- List []Service
- once sync.Once
- byName map[protoreflect.Name]*Service // protected by once
-}
-
-func (p *Services) Len() int {
- return len(p.List)
-}
-func (p *Services) Get(i int) protoreflect.ServiceDescriptor {
- return &p.List[i]
-}
-func (p *Services) ByName(s protoreflect.Name) protoreflect.ServiceDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Services) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Services) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Services) lazyInit() *Services {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Service, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- }
- }
- })
- return p
-}
-
-type Methods struct {
- List []Method
- once sync.Once
- byName map[protoreflect.Name]*Method // protected by once
-}
-
-func (p *Methods) Len() int {
- return len(p.List)
-}
-func (p *Methods) Get(i int) protoreflect.MethodDescriptor {
- return &p.List[i]
-}
-func (p *Methods) ByName(s protoreflect.Name) protoreflect.MethodDescriptor {
- if d := p.lazyInit().byName[s]; d != nil {
- return d
- }
- return nil
-}
-func (p *Methods) Format(s fmt.State, r rune) {
- descfmt.FormatList(s, r, p)
-}
-func (p *Methods) ProtoInternal(pragma.DoNotImplement) {}
-func (p *Methods) lazyInit() *Methods {
- p.once.Do(func() {
- if len(p.List) > 0 {
- p.byName = make(map[protoreflect.Name]*Method, len(p.List))
- for i := range p.List {
- d := &p.List[i]
- if _, ok := p.byName[d.Name()]; !ok {
- p.byName[d.Name()] = d
- }
- }
- }
- })
- return p
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go
deleted file mode 100644
index 10132c9b3..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package filedesc
-
-import (
- "fmt"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/editiondefaults"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-var defaultsCache = make(map[Edition]EditionFeatures)
-var defaultsKeys = []Edition{}
-
-func init() {
- unmarshalEditionDefaults(editiondefaults.Defaults)
- SurrogateProto2.L1.EditionFeatures = getFeaturesFor(EditionProto2)
- SurrogateProto3.L1.EditionFeatures = getFeaturesFor(EditionProto3)
- SurrogateEdition2023.L1.EditionFeatures = getFeaturesFor(Edition2023)
-}
-
-func unmarshalGoFeature(b []byte, parent EditionFeatures) EditionFeatures {
- for len(b) > 0 {
- num, _, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch num {
- case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- parent.GenerateLegacyUnmarshalJSON = protowire.DecodeBool(v)
- case genid.GoFeatures_ApiLevel_field_number:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- parent.APILevel = int(v)
- case genid.GoFeatures_StripEnumPrefix_field_number:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- parent.StripEnumPrefix = int(v)
- default:
- panic(fmt.Sprintf("unkown field number %d while unmarshalling GoFeatures", num))
- }
- }
- return parent
-}
-
-func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures {
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FeatureSet_FieldPresence_field_number:
- parent.IsFieldPresence = v == genid.FeatureSet_EXPLICIT_enum_value || v == genid.FeatureSet_LEGACY_REQUIRED_enum_value
- parent.IsLegacyRequired = v == genid.FeatureSet_LEGACY_REQUIRED_enum_value
- case genid.FeatureSet_EnumType_field_number:
- parent.IsOpenEnum = v == genid.FeatureSet_OPEN_enum_value
- case genid.FeatureSet_RepeatedFieldEncoding_field_number:
- parent.IsPacked = v == genid.FeatureSet_PACKED_enum_value
- case genid.FeatureSet_Utf8Validation_field_number:
- parent.IsUTF8Validated = v == genid.FeatureSet_VERIFY_enum_value
- case genid.FeatureSet_MessageEncoding_field_number:
- parent.IsDelimitedEncoded = v == genid.FeatureSet_DELIMITED_enum_value
- case genid.FeatureSet_JsonFormat_field_number:
- parent.IsJSONCompliant = v == genid.FeatureSet_ALLOW_enum_value
- default:
- panic(fmt.Sprintf("unkown field number %d while unmarshalling FeatureSet", num))
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FeatureSet_Go_ext_number:
- parent = unmarshalGoFeature(v, parent)
- }
- }
- }
-
- return parent
-}
-
-func featuresFromParentDesc(parentDesc protoreflect.Descriptor) EditionFeatures {
- var parentFS EditionFeatures
- switch p := parentDesc.(type) {
- case *File:
- parentFS = p.L1.EditionFeatures
- case *Message:
- parentFS = p.L1.EditionFeatures
- default:
- panic(fmt.Sprintf("unknown parent type %T", parentDesc))
- }
- return parentFS
-}
-
-func unmarshalEditionDefault(b []byte) {
- var ed Edition
- var fs EditionFeatures
- for len(b) > 0 {
- num, typ, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch typ {
- case protowire.VarintType:
- v, m := protowire.ConsumeVarint(b)
- b = b[m:]
- switch num {
- case genid.FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number:
- ed = Edition(v)
- }
- case protowire.BytesType:
- v, m := protowire.ConsumeBytes(b)
- b = b[m:]
- switch num {
- case genid.FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_number:
- fs = unmarshalFeatureSet(v, fs)
- case genid.FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_number:
- fs = unmarshalFeatureSet(v, fs)
- }
- }
- }
- defaultsCache[ed] = fs
- defaultsKeys = append(defaultsKeys, ed)
-}
-
-func unmarshalEditionDefaults(b []byte) {
- for len(b) > 0 {
- num, _, n := protowire.ConsumeTag(b)
- b = b[n:]
- switch num {
- case genid.FeatureSetDefaults_Defaults_field_number:
- def, m := protowire.ConsumeBytes(b)
- b = b[m:]
- unmarshalEditionDefault(def)
- case genid.FeatureSetDefaults_MinimumEdition_field_number,
- genid.FeatureSetDefaults_MaximumEdition_field_number:
- // We don't care about the minimum and maximum editions. If the
- // edition we are looking for later on is not in the cache we know
- // it is outside of the range between minimum and maximum edition.
- _, m := protowire.ConsumeVarint(b)
- b = b[m:]
- default:
- panic(fmt.Sprintf("unkown field number %d while unmarshalling EditionDefault", num))
- }
- }
-}
-
-func getFeaturesFor(ed Edition) EditionFeatures {
- match := EditionUnknown
- for _, key := range defaultsKeys {
- if key > ed {
- break
- }
- match = key
- }
- if match == EditionUnknown {
- panic(fmt.Sprintf("unsupported edition: %v", ed))
- }
- return defaultsCache[match]
-}
diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go b/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go
deleted file mode 100644
index bfb3b8417..000000000
--- a/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package filedesc
-
-import (
- "google.golang.org/protobuf/internal/descopts"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-var (
- emptyNames = new(Names)
- emptyEnumRanges = new(EnumRanges)
- emptyFieldRanges = new(FieldRanges)
- emptyFieldNumbers = new(FieldNumbers)
- emptySourceLocations = new(SourceLocations)
-
- emptyFiles = new(FileImports)
- emptyMessages = new(Messages)
- emptyFields = new(Fields)
- emptyOneofs = new(Oneofs)
- emptyEnums = new(Enums)
- emptyEnumValues = new(EnumValues)
- emptyExtensions = new(Extensions)
- emptyServices = new(Services)
-)
-
-// PlaceholderFile is a placeholder, representing only the file path.
-type PlaceholderFile string
-
-func (f PlaceholderFile) ParentFile() protoreflect.FileDescriptor { return f }
-func (f PlaceholderFile) Parent() protoreflect.Descriptor { return nil }
-func (f PlaceholderFile) Index() int { return 0 }
-func (f PlaceholderFile) Syntax() protoreflect.Syntax { return 0 }
-func (f PlaceholderFile) Name() protoreflect.Name { return "" }
-func (f PlaceholderFile) FullName() protoreflect.FullName { return "" }
-func (f PlaceholderFile) IsPlaceholder() bool { return true }
-func (f PlaceholderFile) Options() protoreflect.ProtoMessage { return descopts.File }
-func (f PlaceholderFile) Path() string { return string(f) }
-func (f PlaceholderFile) Package() protoreflect.FullName { return "" }
-func (f PlaceholderFile) Imports() protoreflect.FileImports { return emptyFiles }
-func (f PlaceholderFile) Messages() protoreflect.MessageDescriptors { return emptyMessages }
-func (f PlaceholderFile) Enums() protoreflect.EnumDescriptors { return emptyEnums }
-func (f PlaceholderFile) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions }
-func (f PlaceholderFile) Services() protoreflect.ServiceDescriptors { return emptyServices }
-func (f PlaceholderFile) SourceLocations() protoreflect.SourceLocations { return emptySourceLocations }
-func (f PlaceholderFile) ProtoType(protoreflect.FileDescriptor) { return }
-func (f PlaceholderFile) ProtoInternal(pragma.DoNotImplement) { return }
-
-// PlaceholderEnum is a placeholder, representing only the full name.
-type PlaceholderEnum protoreflect.FullName
-
-func (e PlaceholderEnum) ParentFile() protoreflect.FileDescriptor { return nil }
-func (e PlaceholderEnum) Parent() protoreflect.Descriptor { return nil }
-func (e PlaceholderEnum) Index() int { return 0 }
-func (e PlaceholderEnum) Syntax() protoreflect.Syntax { return 0 }
-func (e PlaceholderEnum) Name() protoreflect.Name { return protoreflect.FullName(e).Name() }
-func (e PlaceholderEnum) FullName() protoreflect.FullName { return protoreflect.FullName(e) }
-func (e PlaceholderEnum) IsPlaceholder() bool { return true }
-func (e PlaceholderEnum) Options() protoreflect.ProtoMessage { return descopts.Enum }
-func (e PlaceholderEnum) Values() protoreflect.EnumValueDescriptors { return emptyEnumValues }
-func (e PlaceholderEnum) ReservedNames() protoreflect.Names { return emptyNames }
-func (e PlaceholderEnum) ReservedRanges() protoreflect.EnumRanges { return emptyEnumRanges }
-func (e PlaceholderEnum) IsClosed() bool { return false }
-func (e PlaceholderEnum) ProtoType(protoreflect.EnumDescriptor) { return }
-func (e PlaceholderEnum) ProtoInternal(pragma.DoNotImplement) { return }
-
-// PlaceholderEnumValue is a placeholder, representing only the full name.
-type PlaceholderEnumValue protoreflect.FullName
-
-func (e PlaceholderEnumValue) ParentFile() protoreflect.FileDescriptor { return nil }
-func (e PlaceholderEnumValue) Parent() protoreflect.Descriptor { return nil }
-func (e PlaceholderEnumValue) Index() int { return 0 }
-func (e PlaceholderEnumValue) Syntax() protoreflect.Syntax { return 0 }
-func (e PlaceholderEnumValue) Name() protoreflect.Name { return protoreflect.FullName(e).Name() }
-func (e PlaceholderEnumValue) FullName() protoreflect.FullName { return protoreflect.FullName(e) }
-func (e PlaceholderEnumValue) IsPlaceholder() bool { return true }
-func (e PlaceholderEnumValue) Options() protoreflect.ProtoMessage { return descopts.EnumValue }
-func (e PlaceholderEnumValue) Number() protoreflect.EnumNumber { return 0 }
-func (e PlaceholderEnumValue) ProtoType(protoreflect.EnumValueDescriptor) { return }
-func (e PlaceholderEnumValue) ProtoInternal(pragma.DoNotImplement) { return }
-
-// PlaceholderMessage is a placeholder, representing only the full name.
-type PlaceholderMessage protoreflect.FullName
-
-func (m PlaceholderMessage) ParentFile() protoreflect.FileDescriptor { return nil }
-func (m PlaceholderMessage) Parent() protoreflect.Descriptor { return nil }
-func (m PlaceholderMessage) Index() int { return 0 }
-func (m PlaceholderMessage) Syntax() protoreflect.Syntax { return 0 }
-func (m PlaceholderMessage) Name() protoreflect.Name { return protoreflect.FullName(m).Name() }
-func (m PlaceholderMessage) FullName() protoreflect.FullName { return protoreflect.FullName(m) }
-func (m PlaceholderMessage) IsPlaceholder() bool { return true }
-func (m PlaceholderMessage) Options() protoreflect.ProtoMessage { return descopts.Message }
-func (m PlaceholderMessage) IsMapEntry() bool { return false }
-func (m PlaceholderMessage) Fields() protoreflect.FieldDescriptors { return emptyFields }
-func (m PlaceholderMessage) Oneofs() protoreflect.OneofDescriptors { return emptyOneofs }
-func (m PlaceholderMessage) ReservedNames() protoreflect.Names { return emptyNames }
-func (m PlaceholderMessage) ReservedRanges() protoreflect.FieldRanges { return emptyFieldRanges }
-func (m PlaceholderMessage) RequiredNumbers() protoreflect.FieldNumbers { return emptyFieldNumbers }
-func (m PlaceholderMessage) ExtensionRanges() protoreflect.FieldRanges { return emptyFieldRanges }
-func (m PlaceholderMessage) ExtensionRangeOptions(int) protoreflect.ProtoMessage {
- panic("index out of range")
-}
-func (m PlaceholderMessage) Messages() protoreflect.MessageDescriptors { return emptyMessages }
-func (m PlaceholderMessage) Enums() protoreflect.EnumDescriptors { return emptyEnums }
-func (m PlaceholderMessage) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions }
-func (m PlaceholderMessage) ProtoType(protoreflect.MessageDescriptor) { return }
-func (m PlaceholderMessage) ProtoInternal(pragma.DoNotImplement) { return }
diff --git a/vendor/google.golang.org/protobuf/internal/filetype/build.go b/vendor/google.golang.org/protobuf/internal/filetype/build.go
deleted file mode 100644
index ba83fea44..000000000
--- a/vendor/google.golang.org/protobuf/internal/filetype/build.go
+++ /dev/null
@@ -1,296 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package filetype provides functionality for wrapping descriptors
-// with Go type information.
-package filetype
-
-import (
- "reflect"
-
- "google.golang.org/protobuf/internal/descopts"
- "google.golang.org/protobuf/internal/filedesc"
- pimpl "google.golang.org/protobuf/internal/impl"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// Builder constructs type descriptors from a raw file descriptor
-// and associated Go types for each enum and message declaration.
-//
-// # Flattened Ordering
-//
-// The protobuf type system represents declarations as a tree. Certain nodes in
-// the tree require us to either associate it with a concrete Go type or to
-// resolve a dependency, which is information that must be provided separately
-// since it cannot be derived from the file descriptor alone.
-//
-// However, representing a tree as Go literals is difficult to simply do in a
-// space and time efficient way. Thus, we store them as a flattened list of
-// objects where the serialization order from the tree-based form is important.
-//
-// The "flattened ordering" is defined as a tree traversal of all enum, message,
-// extension, and service declarations using the following algorithm:
-//
-// def VisitFileDecls(fd):
-// for e in fd.Enums: yield e
-// for m in fd.Messages: yield m
-// for x in fd.Extensions: yield x
-// for s in fd.Services: yield s
-// for m in fd.Messages: yield from VisitMessageDecls(m)
-//
-// def VisitMessageDecls(md):
-// for e in md.Enums: yield e
-// for m in md.Messages: yield m
-// for x in md.Extensions: yield x
-// for m in md.Messages: yield from VisitMessageDecls(m)
-//
-// The traversal starts at the root file descriptor and yields each direct
-// declaration within each node before traversing into sub-declarations
-// that children themselves may have.
-type Builder struct {
- // File is the underlying file descriptor builder.
- File filedesc.Builder
-
- // GoTypes is a unique set of the Go types for all declarations and
- // dependencies. Each type is represented as a zero value of the Go type.
- //
- // Declarations are Go types generated for enums and messages directly
- // declared (not publicly imported) in the proto source file.
- // Messages for map entries are accounted for, but represented by nil.
- // Enum declarations in "flattened ordering" come first, followed by
- // message declarations in "flattened ordering".
- //
- // Dependencies are Go types for enums or messages referenced by
- // message fields (excluding weak fields), for parent extended messages of
- // extension fields, for enums or messages referenced by extension fields,
- // and for input and output messages referenced by service methods.
- // Dependencies must come after declarations, but the ordering of
- // dependencies themselves is unspecified.
- GoTypes []any
-
- // DependencyIndexes is an ordered list of indexes into GoTypes for the
- // dependencies of messages, extensions, or services.
- //
- // There are 5 sub-lists in "flattened ordering" concatenated back-to-back:
- // 0. Message field dependencies: list of the enum or message type
- // referred to by every message field.
- // 1. Extension field targets: list of the extended parent message of
- // every extension.
- // 2. Extension field dependencies: list of the enum or message type
- // referred to by every extension field.
- // 3. Service method inputs: list of the input message type
- // referred to by every service method.
- // 4. Service method outputs: list of the output message type
- // referred to by every service method.
- //
- // The offset into DependencyIndexes for the start of each sub-list
- // is appended to the end in reverse order.
- DependencyIndexes []int32
-
- // EnumInfos is a list of enum infos in "flattened ordering".
- EnumInfos []pimpl.EnumInfo
-
- // MessageInfos is a list of message infos in "flattened ordering".
- // If provided, the GoType and PBType for each element is populated.
- //
- // Requirement: len(MessageInfos) == len(Build.Messages)
- MessageInfos []pimpl.MessageInfo
-
- // ExtensionInfos is a list of extension infos in "flattened ordering".
- // Each element is initialized and registered with the protoregistry package.
- //
- // Requirement: len(LegacyExtensions) == len(Build.Extensions)
- ExtensionInfos []pimpl.ExtensionInfo
-
- // TypeRegistry is the registry to register each type descriptor.
- // If nil, it uses protoregistry.GlobalTypes.
- TypeRegistry interface {
- RegisterMessage(protoreflect.MessageType) error
- RegisterEnum(protoreflect.EnumType) error
- RegisterExtension(protoreflect.ExtensionType) error
- }
-}
-
-// Out is the output of the builder.
-type Out struct {
- File protoreflect.FileDescriptor
-}
-
-func (tb Builder) Build() (out Out) {
- // Replace the resolver with one that resolves dependencies by index,
- // which is faster and more reliable than relying on the global registry.
- if tb.File.FileRegistry == nil {
- tb.File.FileRegistry = protoregistry.GlobalFiles
- }
- tb.File.FileRegistry = &resolverByIndex{
- goTypes: tb.GoTypes,
- depIdxs: tb.DependencyIndexes,
- fileRegistry: tb.File.FileRegistry,
- }
-
- // Initialize registry if unpopulated.
- if tb.TypeRegistry == nil {
- tb.TypeRegistry = protoregistry.GlobalTypes
- }
-
- fbOut := tb.File.Build()
- out.File = fbOut.File
-
- // Process enums.
- enumGoTypes := tb.GoTypes[:len(fbOut.Enums)]
- if len(tb.EnumInfos) != len(fbOut.Enums) {
- panic("mismatching enum lengths")
- }
- if len(fbOut.Enums) > 0 {
- for i := range fbOut.Enums {
- tb.EnumInfos[i] = pimpl.EnumInfo{
- GoReflectType: reflect.TypeOf(enumGoTypes[i]),
- Desc: &fbOut.Enums[i],
- }
- // Register enum types.
- if err := tb.TypeRegistry.RegisterEnum(&tb.EnumInfos[i]); err != nil {
- panic(err)
- }
- }
- }
-
- // Process messages.
- messageGoTypes := tb.GoTypes[len(fbOut.Enums):][:len(fbOut.Messages)]
- if len(tb.MessageInfos) != len(fbOut.Messages) {
- panic("mismatching message lengths")
- }
- if len(fbOut.Messages) > 0 {
- for i := range fbOut.Messages {
- if messageGoTypes[i] == nil {
- continue // skip map entry
- }
-
- tb.MessageInfos[i].GoReflectType = reflect.TypeOf(messageGoTypes[i])
- tb.MessageInfos[i].Desc = &fbOut.Messages[i]
-
- // Register message types.
- if err := tb.TypeRegistry.RegisterMessage(&tb.MessageInfos[i]); err != nil {
- panic(err)
- }
- }
-
- // As a special-case for descriptor.proto,
- // locally register concrete message type for the options.
- if out.File.Path() == "google/protobuf/descriptor.proto" && out.File.Package() == "google.protobuf" {
- for i := range fbOut.Messages {
- switch fbOut.Messages[i].Name() {
- case "FileOptions":
- descopts.File = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "EnumOptions":
- descopts.Enum = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "EnumValueOptions":
- descopts.EnumValue = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "MessageOptions":
- descopts.Message = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "FieldOptions":
- descopts.Field = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "OneofOptions":
- descopts.Oneof = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "ExtensionRangeOptions":
- descopts.ExtensionRange = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "ServiceOptions":
- descopts.Service = messageGoTypes[i].(protoreflect.ProtoMessage)
- case "MethodOptions":
- descopts.Method = messageGoTypes[i].(protoreflect.ProtoMessage)
- }
- }
- }
- }
-
- // Process extensions.
- if len(tb.ExtensionInfos) != len(fbOut.Extensions) {
- panic("mismatching extension lengths")
- }
- var depIdx int32
- for i := range fbOut.Extensions {
- // For enum and message kinds, determine the referent Go type so
- // that we can construct their constructors.
- const listExtDeps = 2
- var goType reflect.Type
- switch fbOut.Extensions[i].L1.Kind {
- case protoreflect.EnumKind:
- j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)
- goType = reflect.TypeOf(tb.GoTypes[j])
- depIdx++
- case protoreflect.MessageKind, protoreflect.GroupKind:
- j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)
- goType = reflect.TypeOf(tb.GoTypes[j])
- depIdx++
- default:
- goType = goTypeForPBKind[fbOut.Extensions[i].L1.Kind]
- }
- if fbOut.Extensions[i].IsList() {
- goType = reflect.SliceOf(goType)
- }
-
- pimpl.InitExtensionInfo(&tb.ExtensionInfos[i], &fbOut.Extensions[i], goType)
-
- // Register extension types.
- if err := tb.TypeRegistry.RegisterExtension(&tb.ExtensionInfos[i]); err != nil {
- panic(err)
- }
- }
-
- return out
-}
-
-var goTypeForPBKind = map[protoreflect.Kind]reflect.Type{
- protoreflect.BoolKind: reflect.TypeOf(bool(false)),
- protoreflect.Int32Kind: reflect.TypeOf(int32(0)),
- protoreflect.Sint32Kind: reflect.TypeOf(int32(0)),
- protoreflect.Sfixed32Kind: reflect.TypeOf(int32(0)),
- protoreflect.Int64Kind: reflect.TypeOf(int64(0)),
- protoreflect.Sint64Kind: reflect.TypeOf(int64(0)),
- protoreflect.Sfixed64Kind: reflect.TypeOf(int64(0)),
- protoreflect.Uint32Kind: reflect.TypeOf(uint32(0)),
- protoreflect.Fixed32Kind: reflect.TypeOf(uint32(0)),
- protoreflect.Uint64Kind: reflect.TypeOf(uint64(0)),
- protoreflect.Fixed64Kind: reflect.TypeOf(uint64(0)),
- protoreflect.FloatKind: reflect.TypeOf(float32(0)),
- protoreflect.DoubleKind: reflect.TypeOf(float64(0)),
- protoreflect.StringKind: reflect.TypeOf(string("")),
- protoreflect.BytesKind: reflect.TypeOf([]byte(nil)),
-}
-
-type depIdxs []int32
-
-// Get retrieves the jth element of the ith sub-list.
-func (x depIdxs) Get(i, j int32) int32 {
- return x[x[int32(len(x))-i-1]+j]
-}
-
-type (
- resolverByIndex struct {
- goTypes []any
- depIdxs depIdxs
- fileRegistry
- }
- fileRegistry interface {
- FindFileByPath(string) (protoreflect.FileDescriptor, error)
- FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
- RegisterFile(protoreflect.FileDescriptor) error
- }
-)
-
-func (r *resolverByIndex) FindEnumByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.EnumDescriptor {
- if depIdx := int(r.depIdxs.Get(i, j)); int(depIdx) < len(es)+len(ms) {
- return &es[depIdx]
- } else {
- return pimpl.Export{}.EnumDescriptorOf(r.goTypes[depIdx])
- }
-}
-
-func (r *resolverByIndex) FindMessageByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.MessageDescriptor {
- if depIdx := int(r.depIdxs.Get(i, j)); depIdx < len(es)+len(ms) {
- return &ms[depIdx-len(es)]
- } else {
- return pimpl.Export{}.MessageDescriptorOf(r.goTypes[depIdx])
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/flags/flags.go b/vendor/google.golang.org/protobuf/internal/flags/flags.go
deleted file mode 100644
index 5cb3ee70f..000000000
--- a/vendor/google.golang.org/protobuf/internal/flags/flags.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package flags provides a set of flags controlled by build tags.
-package flags
-
-// ProtoLegacy specifies whether to enable support for legacy functionality
-// such as MessageSets, weak fields, and various other obscure behavior
-// that is necessary to maintain backwards compatibility with proto1 or
-// the pre-release variants of proto2 and proto3.
-//
-// This is disabled by default unless built with the "protolegacy" tag.
-//
-// WARNING: The compatibility agreement covers nothing provided by this flag.
-// As such, functionality may suddenly be removed or changed at our discretion.
-const ProtoLegacy = protoLegacy
-
-// LazyUnmarshalExtensions specifies whether to lazily unmarshal extensions.
-//
-// Lazy extension unmarshaling validates the contents of message-valued
-// extension fields at unmarshal time, but defers creating the message
-// structure until the extension is first accessed.
-const LazyUnmarshalExtensions = ProtoLegacy
-
-// ProtoLegacyWeak specifies whether to enable support for weak fields.
-// This flag was split out of ProtoLegacy in preparation for removing
-// support for weak fields (independent of the other protolegacy features).
-const ProtoLegacyWeak = ProtoLegacy
diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go
deleted file mode 100644
index bda8e8cf3..000000000
--- a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !protolegacy
-// +build !protolegacy
-
-package flags
-
-const protoLegacy = false
diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go
deleted file mode 100644
index 6d8d9bd6b..000000000
--- a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build protolegacy
-// +build protolegacy
-
-package flags
-
-const protoLegacy = true
diff --git a/vendor/google.golang.org/protobuf/internal/genid/any_gen.go b/vendor/google.golang.org/protobuf/internal/genid/any_gen.go
deleted file mode 100644
index e6f7d47ab..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/any_gen.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_any_proto = "google/protobuf/any.proto"
-
-// Names for google.protobuf.Any.
-const (
- Any_message_name protoreflect.Name = "Any"
- Any_message_fullname protoreflect.FullName = "google.protobuf.Any"
-)
-
-// Field names for google.protobuf.Any.
-const (
- Any_TypeUrl_field_name protoreflect.Name = "type_url"
- Any_Value_field_name protoreflect.Name = "value"
-
- Any_TypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Any.type_url"
- Any_Value_field_fullname protoreflect.FullName = "google.protobuf.Any.value"
-)
-
-// Field numbers for google.protobuf.Any.
-const (
- Any_TypeUrl_field_number protoreflect.FieldNumber = 1
- Any_Value_field_number protoreflect.FieldNumber = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go b/vendor/google.golang.org/protobuf/internal/genid/api_gen.go
deleted file mode 100644
index df8f91850..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_api_proto = "google/protobuf/api.proto"
-
-// Names for google.protobuf.Api.
-const (
- Api_message_name protoreflect.Name = "Api"
- Api_message_fullname protoreflect.FullName = "google.protobuf.Api"
-)
-
-// Field names for google.protobuf.Api.
-const (
- Api_Name_field_name protoreflect.Name = "name"
- Api_Methods_field_name protoreflect.Name = "methods"
- Api_Options_field_name protoreflect.Name = "options"
- Api_Version_field_name protoreflect.Name = "version"
- Api_SourceContext_field_name protoreflect.Name = "source_context"
- Api_Mixins_field_name protoreflect.Name = "mixins"
- Api_Syntax_field_name protoreflect.Name = "syntax"
-
- Api_Name_field_fullname protoreflect.FullName = "google.protobuf.Api.name"
- Api_Methods_field_fullname protoreflect.FullName = "google.protobuf.Api.methods"
- Api_Options_field_fullname protoreflect.FullName = "google.protobuf.Api.options"
- Api_Version_field_fullname protoreflect.FullName = "google.protobuf.Api.version"
- Api_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Api.source_context"
- Api_Mixins_field_fullname protoreflect.FullName = "google.protobuf.Api.mixins"
- Api_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Api.syntax"
-)
-
-// Field numbers for google.protobuf.Api.
-const (
- Api_Name_field_number protoreflect.FieldNumber = 1
- Api_Methods_field_number protoreflect.FieldNumber = 2
- Api_Options_field_number protoreflect.FieldNumber = 3
- Api_Version_field_number protoreflect.FieldNumber = 4
- Api_SourceContext_field_number protoreflect.FieldNumber = 5
- Api_Mixins_field_number protoreflect.FieldNumber = 6
- Api_Syntax_field_number protoreflect.FieldNumber = 7
-)
-
-// Names for google.protobuf.Method.
-const (
- Method_message_name protoreflect.Name = "Method"
- Method_message_fullname protoreflect.FullName = "google.protobuf.Method"
-)
-
-// Field names for google.protobuf.Method.
-const (
- Method_Name_field_name protoreflect.Name = "name"
- Method_RequestTypeUrl_field_name protoreflect.Name = "request_type_url"
- Method_RequestStreaming_field_name protoreflect.Name = "request_streaming"
- Method_ResponseTypeUrl_field_name protoreflect.Name = "response_type_url"
- Method_ResponseStreaming_field_name protoreflect.Name = "response_streaming"
- Method_Options_field_name protoreflect.Name = "options"
- Method_Syntax_field_name protoreflect.Name = "syntax"
-
- Method_Name_field_fullname protoreflect.FullName = "google.protobuf.Method.name"
- Method_RequestTypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Method.request_type_url"
- Method_RequestStreaming_field_fullname protoreflect.FullName = "google.protobuf.Method.request_streaming"
- Method_ResponseTypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Method.response_type_url"
- Method_ResponseStreaming_field_fullname protoreflect.FullName = "google.protobuf.Method.response_streaming"
- Method_Options_field_fullname protoreflect.FullName = "google.protobuf.Method.options"
- Method_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Method.syntax"
-)
-
-// Field numbers for google.protobuf.Method.
-const (
- Method_Name_field_number protoreflect.FieldNumber = 1
- Method_RequestTypeUrl_field_number protoreflect.FieldNumber = 2
- Method_RequestStreaming_field_number protoreflect.FieldNumber = 3
- Method_ResponseTypeUrl_field_number protoreflect.FieldNumber = 4
- Method_ResponseStreaming_field_number protoreflect.FieldNumber = 5
- Method_Options_field_number protoreflect.FieldNumber = 6
- Method_Syntax_field_number protoreflect.FieldNumber = 7
-)
-
-// Names for google.protobuf.Mixin.
-const (
- Mixin_message_name protoreflect.Name = "Mixin"
- Mixin_message_fullname protoreflect.FullName = "google.protobuf.Mixin"
-)
-
-// Field names for google.protobuf.Mixin.
-const (
- Mixin_Name_field_name protoreflect.Name = "name"
- Mixin_Root_field_name protoreflect.Name = "root"
-
- Mixin_Name_field_fullname protoreflect.FullName = "google.protobuf.Mixin.name"
- Mixin_Root_field_fullname protoreflect.FullName = "google.protobuf.Mixin.root"
-)
-
-// Field numbers for google.protobuf.Mixin.
-const (
- Mixin_Name_field_number protoreflect.FieldNumber = 1
- Mixin_Root_field_number protoreflect.FieldNumber = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go
deleted file mode 100644
index f30ab6b58..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go
+++ /dev/null
@@ -1,1270 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_descriptor_proto = "google/protobuf/descriptor.proto"
-
-// Full and short names for google.protobuf.Edition.
-const (
- Edition_enum_fullname = "google.protobuf.Edition"
- Edition_enum_name = "Edition"
-)
-
-// Enum values for google.protobuf.Edition.
-const (
- Edition_EDITION_UNKNOWN_enum_value = 0
- Edition_EDITION_LEGACY_enum_value = 900
- Edition_EDITION_PROTO2_enum_value = 998
- Edition_EDITION_PROTO3_enum_value = 999
- Edition_EDITION_2023_enum_value = 1000
- Edition_EDITION_2024_enum_value = 1001
- Edition_EDITION_1_TEST_ONLY_enum_value = 1
- Edition_EDITION_2_TEST_ONLY_enum_value = 2
- Edition_EDITION_99997_TEST_ONLY_enum_value = 99997
- Edition_EDITION_99998_TEST_ONLY_enum_value = 99998
- Edition_EDITION_99999_TEST_ONLY_enum_value = 99999
- Edition_EDITION_MAX_enum_value = 2147483647
-)
-
-// Names for google.protobuf.FileDescriptorSet.
-const (
- FileDescriptorSet_message_name protoreflect.Name = "FileDescriptorSet"
- FileDescriptorSet_message_fullname protoreflect.FullName = "google.protobuf.FileDescriptorSet"
-)
-
-// Field names for google.protobuf.FileDescriptorSet.
-const (
- FileDescriptorSet_File_field_name protoreflect.Name = "file"
-
- FileDescriptorSet_File_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorSet.file"
-)
-
-// Field numbers for google.protobuf.FileDescriptorSet.
-const (
- FileDescriptorSet_File_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.FileDescriptorProto.
-const (
- FileDescriptorProto_message_name protoreflect.Name = "FileDescriptorProto"
- FileDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto"
-)
-
-// Field names for google.protobuf.FileDescriptorProto.
-const (
- FileDescriptorProto_Name_field_name protoreflect.Name = "name"
- FileDescriptorProto_Package_field_name protoreflect.Name = "package"
- FileDescriptorProto_Dependency_field_name protoreflect.Name = "dependency"
- FileDescriptorProto_PublicDependency_field_name protoreflect.Name = "public_dependency"
- FileDescriptorProto_WeakDependency_field_name protoreflect.Name = "weak_dependency"
- FileDescriptorProto_MessageType_field_name protoreflect.Name = "message_type"
- FileDescriptorProto_EnumType_field_name protoreflect.Name = "enum_type"
- FileDescriptorProto_Service_field_name protoreflect.Name = "service"
- FileDescriptorProto_Extension_field_name protoreflect.Name = "extension"
- FileDescriptorProto_Options_field_name protoreflect.Name = "options"
- FileDescriptorProto_SourceCodeInfo_field_name protoreflect.Name = "source_code_info"
- FileDescriptorProto_Syntax_field_name protoreflect.Name = "syntax"
- FileDescriptorProto_Edition_field_name protoreflect.Name = "edition"
-
- FileDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.name"
- FileDescriptorProto_Package_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.package"
- FileDescriptorProto_Dependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.dependency"
- FileDescriptorProto_PublicDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.public_dependency"
- FileDescriptorProto_WeakDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.weak_dependency"
- FileDescriptorProto_MessageType_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.message_type"
- FileDescriptorProto_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.enum_type"
- FileDescriptorProto_Service_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.service"
- FileDescriptorProto_Extension_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.extension"
- FileDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.options"
- FileDescriptorProto_SourceCodeInfo_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.source_code_info"
- FileDescriptorProto_Syntax_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.syntax"
- FileDescriptorProto_Edition_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.edition"
-)
-
-// Field numbers for google.protobuf.FileDescriptorProto.
-const (
- FileDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- FileDescriptorProto_Package_field_number protoreflect.FieldNumber = 2
- FileDescriptorProto_Dependency_field_number protoreflect.FieldNumber = 3
- FileDescriptorProto_PublicDependency_field_number protoreflect.FieldNumber = 10
- FileDescriptorProto_WeakDependency_field_number protoreflect.FieldNumber = 11
- FileDescriptorProto_MessageType_field_number protoreflect.FieldNumber = 4
- FileDescriptorProto_EnumType_field_number protoreflect.FieldNumber = 5
- FileDescriptorProto_Service_field_number protoreflect.FieldNumber = 6
- FileDescriptorProto_Extension_field_number protoreflect.FieldNumber = 7
- FileDescriptorProto_Options_field_number protoreflect.FieldNumber = 8
- FileDescriptorProto_SourceCodeInfo_field_number protoreflect.FieldNumber = 9
- FileDescriptorProto_Syntax_field_number protoreflect.FieldNumber = 12
- FileDescriptorProto_Edition_field_number protoreflect.FieldNumber = 14
-)
-
-// Names for google.protobuf.DescriptorProto.
-const (
- DescriptorProto_message_name protoreflect.Name = "DescriptorProto"
- DescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.DescriptorProto"
-)
-
-// Field names for google.protobuf.DescriptorProto.
-const (
- DescriptorProto_Name_field_name protoreflect.Name = "name"
- DescriptorProto_Field_field_name protoreflect.Name = "field"
- DescriptorProto_Extension_field_name protoreflect.Name = "extension"
- DescriptorProto_NestedType_field_name protoreflect.Name = "nested_type"
- DescriptorProto_EnumType_field_name protoreflect.Name = "enum_type"
- DescriptorProto_ExtensionRange_field_name protoreflect.Name = "extension_range"
- DescriptorProto_OneofDecl_field_name protoreflect.Name = "oneof_decl"
- DescriptorProto_Options_field_name protoreflect.Name = "options"
- DescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range"
- DescriptorProto_ReservedName_field_name protoreflect.Name = "reserved_name"
-
- DescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.name"
- DescriptorProto_Field_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.field"
- DescriptorProto_Extension_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.extension"
- DescriptorProto_NestedType_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.nested_type"
- DescriptorProto_EnumType_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.enum_type"
- DescriptorProto_ExtensionRange_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.extension_range"
- DescriptorProto_OneofDecl_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.oneof_decl"
- DescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.options"
- DescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_range"
- DescriptorProto_ReservedName_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_name"
-)
-
-// Field numbers for google.protobuf.DescriptorProto.
-const (
- DescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- DescriptorProto_Field_field_number protoreflect.FieldNumber = 2
- DescriptorProto_Extension_field_number protoreflect.FieldNumber = 6
- DescriptorProto_NestedType_field_number protoreflect.FieldNumber = 3
- DescriptorProto_EnumType_field_number protoreflect.FieldNumber = 4
- DescriptorProto_ExtensionRange_field_number protoreflect.FieldNumber = 5
- DescriptorProto_OneofDecl_field_number protoreflect.FieldNumber = 8
- DescriptorProto_Options_field_number protoreflect.FieldNumber = 7
- DescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 9
- DescriptorProto_ReservedName_field_number protoreflect.FieldNumber = 10
-)
-
-// Names for google.protobuf.DescriptorProto.ExtensionRange.
-const (
- DescriptorProto_ExtensionRange_message_name protoreflect.Name = "ExtensionRange"
- DescriptorProto_ExtensionRange_message_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange"
-)
-
-// Field names for google.protobuf.DescriptorProto.ExtensionRange.
-const (
- DescriptorProto_ExtensionRange_Start_field_name protoreflect.Name = "start"
- DescriptorProto_ExtensionRange_End_field_name protoreflect.Name = "end"
- DescriptorProto_ExtensionRange_Options_field_name protoreflect.Name = "options"
-
- DescriptorProto_ExtensionRange_Start_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange.start"
- DescriptorProto_ExtensionRange_End_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange.end"
- DescriptorProto_ExtensionRange_Options_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange.options"
-)
-
-// Field numbers for google.protobuf.DescriptorProto.ExtensionRange.
-const (
- DescriptorProto_ExtensionRange_Start_field_number protoreflect.FieldNumber = 1
- DescriptorProto_ExtensionRange_End_field_number protoreflect.FieldNumber = 2
- DescriptorProto_ExtensionRange_Options_field_number protoreflect.FieldNumber = 3
-)
-
-// Names for google.protobuf.DescriptorProto.ReservedRange.
-const (
- DescriptorProto_ReservedRange_message_name protoreflect.Name = "ReservedRange"
- DescriptorProto_ReservedRange_message_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ReservedRange"
-)
-
-// Field names for google.protobuf.DescriptorProto.ReservedRange.
-const (
- DescriptorProto_ReservedRange_Start_field_name protoreflect.Name = "start"
- DescriptorProto_ReservedRange_End_field_name protoreflect.Name = "end"
-
- DescriptorProto_ReservedRange_Start_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ReservedRange.start"
- DescriptorProto_ReservedRange_End_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ReservedRange.end"
-)
-
-// Field numbers for google.protobuf.DescriptorProto.ReservedRange.
-const (
- DescriptorProto_ReservedRange_Start_field_number protoreflect.FieldNumber = 1
- DescriptorProto_ReservedRange_End_field_number protoreflect.FieldNumber = 2
-)
-
-// Names for google.protobuf.ExtensionRangeOptions.
-const (
- ExtensionRangeOptions_message_name protoreflect.Name = "ExtensionRangeOptions"
- ExtensionRangeOptions_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions"
-)
-
-// Field names for google.protobuf.ExtensionRangeOptions.
-const (
- ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
- ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration"
- ExtensionRangeOptions_Features_field_name protoreflect.Name = "features"
- ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification"
-
- ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option"
- ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration"
- ExtensionRangeOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.features"
- ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification"
-)
-
-// Field numbers for google.protobuf.ExtensionRangeOptions.
-const (
- ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
- ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2
- ExtensionRangeOptions_Features_field_number protoreflect.FieldNumber = 50
- ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3
-)
-
-// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState.
-const (
- ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState"
- ExtensionRangeOptions_VerificationState_enum_name = "VerificationState"
-)
-
-// Enum values for google.protobuf.ExtensionRangeOptions.VerificationState.
-const (
- ExtensionRangeOptions_DECLARATION_enum_value = 0
- ExtensionRangeOptions_UNVERIFIED_enum_value = 1
-)
-
-// Names for google.protobuf.ExtensionRangeOptions.Declaration.
-const (
- ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration"
- ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration"
-)
-
-// Field names for google.protobuf.ExtensionRangeOptions.Declaration.
-const (
- ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number"
- ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name"
- ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type"
- ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved"
- ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated"
-
- ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number"
- ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name"
- ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type"
- ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved"
- ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated"
-)
-
-// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration.
-const (
- ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1
- ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2
- ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3
- ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5
- ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6
-)
-
-// Names for google.protobuf.FieldDescriptorProto.
-const (
- FieldDescriptorProto_message_name protoreflect.Name = "FieldDescriptorProto"
- FieldDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto"
-)
-
-// Field names for google.protobuf.FieldDescriptorProto.
-const (
- FieldDescriptorProto_Name_field_name protoreflect.Name = "name"
- FieldDescriptorProto_Number_field_name protoreflect.Name = "number"
- FieldDescriptorProto_Label_field_name protoreflect.Name = "label"
- FieldDescriptorProto_Type_field_name protoreflect.Name = "type"
- FieldDescriptorProto_TypeName_field_name protoreflect.Name = "type_name"
- FieldDescriptorProto_Extendee_field_name protoreflect.Name = "extendee"
- FieldDescriptorProto_DefaultValue_field_name protoreflect.Name = "default_value"
- FieldDescriptorProto_OneofIndex_field_name protoreflect.Name = "oneof_index"
- FieldDescriptorProto_JsonName_field_name protoreflect.Name = "json_name"
- FieldDescriptorProto_Options_field_name protoreflect.Name = "options"
- FieldDescriptorProto_Proto3Optional_field_name protoreflect.Name = "proto3_optional"
-
- FieldDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.name"
- FieldDescriptorProto_Number_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.number"
- FieldDescriptorProto_Label_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.label"
- FieldDescriptorProto_Type_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.type"
- FieldDescriptorProto_TypeName_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.type_name"
- FieldDescriptorProto_Extendee_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.extendee"
- FieldDescriptorProto_DefaultValue_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.default_value"
- FieldDescriptorProto_OneofIndex_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.oneof_index"
- FieldDescriptorProto_JsonName_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.json_name"
- FieldDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.options"
- FieldDescriptorProto_Proto3Optional_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.proto3_optional"
-)
-
-// Field numbers for google.protobuf.FieldDescriptorProto.
-const (
- FieldDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- FieldDescriptorProto_Number_field_number protoreflect.FieldNumber = 3
- FieldDescriptorProto_Label_field_number protoreflect.FieldNumber = 4
- FieldDescriptorProto_Type_field_number protoreflect.FieldNumber = 5
- FieldDescriptorProto_TypeName_field_number protoreflect.FieldNumber = 6
- FieldDescriptorProto_Extendee_field_number protoreflect.FieldNumber = 2
- FieldDescriptorProto_DefaultValue_field_number protoreflect.FieldNumber = 7
- FieldDescriptorProto_OneofIndex_field_number protoreflect.FieldNumber = 9
- FieldDescriptorProto_JsonName_field_number protoreflect.FieldNumber = 10
- FieldDescriptorProto_Options_field_number protoreflect.FieldNumber = 8
- FieldDescriptorProto_Proto3Optional_field_number protoreflect.FieldNumber = 17
-)
-
-// Full and short names for google.protobuf.FieldDescriptorProto.Type.
-const (
- FieldDescriptorProto_Type_enum_fullname = "google.protobuf.FieldDescriptorProto.Type"
- FieldDescriptorProto_Type_enum_name = "Type"
-)
-
-// Enum values for google.protobuf.FieldDescriptorProto.Type.
-const (
- FieldDescriptorProto_TYPE_DOUBLE_enum_value = 1
- FieldDescriptorProto_TYPE_FLOAT_enum_value = 2
- FieldDescriptorProto_TYPE_INT64_enum_value = 3
- FieldDescriptorProto_TYPE_UINT64_enum_value = 4
- FieldDescriptorProto_TYPE_INT32_enum_value = 5
- FieldDescriptorProto_TYPE_FIXED64_enum_value = 6
- FieldDescriptorProto_TYPE_FIXED32_enum_value = 7
- FieldDescriptorProto_TYPE_BOOL_enum_value = 8
- FieldDescriptorProto_TYPE_STRING_enum_value = 9
- FieldDescriptorProto_TYPE_GROUP_enum_value = 10
- FieldDescriptorProto_TYPE_MESSAGE_enum_value = 11
- FieldDescriptorProto_TYPE_BYTES_enum_value = 12
- FieldDescriptorProto_TYPE_UINT32_enum_value = 13
- FieldDescriptorProto_TYPE_ENUM_enum_value = 14
- FieldDescriptorProto_TYPE_SFIXED32_enum_value = 15
- FieldDescriptorProto_TYPE_SFIXED64_enum_value = 16
- FieldDescriptorProto_TYPE_SINT32_enum_value = 17
- FieldDescriptorProto_TYPE_SINT64_enum_value = 18
-)
-
-// Full and short names for google.protobuf.FieldDescriptorProto.Label.
-const (
- FieldDescriptorProto_Label_enum_fullname = "google.protobuf.FieldDescriptorProto.Label"
- FieldDescriptorProto_Label_enum_name = "Label"
-)
-
-// Enum values for google.protobuf.FieldDescriptorProto.Label.
-const (
- FieldDescriptorProto_LABEL_OPTIONAL_enum_value = 1
- FieldDescriptorProto_LABEL_REPEATED_enum_value = 3
- FieldDescriptorProto_LABEL_REQUIRED_enum_value = 2
-)
-
-// Names for google.protobuf.OneofDescriptorProto.
-const (
- OneofDescriptorProto_message_name protoreflect.Name = "OneofDescriptorProto"
- OneofDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.OneofDescriptorProto"
-)
-
-// Field names for google.protobuf.OneofDescriptorProto.
-const (
- OneofDescriptorProto_Name_field_name protoreflect.Name = "name"
- OneofDescriptorProto_Options_field_name protoreflect.Name = "options"
-
- OneofDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.OneofDescriptorProto.name"
- OneofDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.OneofDescriptorProto.options"
-)
-
-// Field numbers for google.protobuf.OneofDescriptorProto.
-const (
- OneofDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- OneofDescriptorProto_Options_field_number protoreflect.FieldNumber = 2
-)
-
-// Names for google.protobuf.EnumDescriptorProto.
-const (
- EnumDescriptorProto_message_name protoreflect.Name = "EnumDescriptorProto"
- EnumDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto"
-)
-
-// Field names for google.protobuf.EnumDescriptorProto.
-const (
- EnumDescriptorProto_Name_field_name protoreflect.Name = "name"
- EnumDescriptorProto_Value_field_name protoreflect.Name = "value"
- EnumDescriptorProto_Options_field_name protoreflect.Name = "options"
- EnumDescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range"
- EnumDescriptorProto_ReservedName_field_name protoreflect.Name = "reserved_name"
-
- EnumDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.name"
- EnumDescriptorProto_Value_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.value"
- EnumDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.options"
- EnumDescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_range"
- EnumDescriptorProto_ReservedName_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_name"
-)
-
-// Field numbers for google.protobuf.EnumDescriptorProto.
-const (
- EnumDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- EnumDescriptorProto_Value_field_number protoreflect.FieldNumber = 2
- EnumDescriptorProto_Options_field_number protoreflect.FieldNumber = 3
- EnumDescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 4
- EnumDescriptorProto_ReservedName_field_number protoreflect.FieldNumber = 5
-)
-
-// Names for google.protobuf.EnumDescriptorProto.EnumReservedRange.
-const (
- EnumDescriptorProto_EnumReservedRange_message_name protoreflect.Name = "EnumReservedRange"
- EnumDescriptorProto_EnumReservedRange_message_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.EnumReservedRange"
-)
-
-// Field names for google.protobuf.EnumDescriptorProto.EnumReservedRange.
-const (
- EnumDescriptorProto_EnumReservedRange_Start_field_name protoreflect.Name = "start"
- EnumDescriptorProto_EnumReservedRange_End_field_name protoreflect.Name = "end"
-
- EnumDescriptorProto_EnumReservedRange_Start_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.EnumReservedRange.start"
- EnumDescriptorProto_EnumReservedRange_End_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.EnumReservedRange.end"
-)
-
-// Field numbers for google.protobuf.EnumDescriptorProto.EnumReservedRange.
-const (
- EnumDescriptorProto_EnumReservedRange_Start_field_number protoreflect.FieldNumber = 1
- EnumDescriptorProto_EnumReservedRange_End_field_number protoreflect.FieldNumber = 2
-)
-
-// Names for google.protobuf.EnumValueDescriptorProto.
-const (
- EnumValueDescriptorProto_message_name protoreflect.Name = "EnumValueDescriptorProto"
- EnumValueDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto"
-)
-
-// Field names for google.protobuf.EnumValueDescriptorProto.
-const (
- EnumValueDescriptorProto_Name_field_name protoreflect.Name = "name"
- EnumValueDescriptorProto_Number_field_name protoreflect.Name = "number"
- EnumValueDescriptorProto_Options_field_name protoreflect.Name = "options"
-
- EnumValueDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto.name"
- EnumValueDescriptorProto_Number_field_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto.number"
- EnumValueDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto.options"
-)
-
-// Field numbers for google.protobuf.EnumValueDescriptorProto.
-const (
- EnumValueDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- EnumValueDescriptorProto_Number_field_number protoreflect.FieldNumber = 2
- EnumValueDescriptorProto_Options_field_number protoreflect.FieldNumber = 3
-)
-
-// Names for google.protobuf.ServiceDescriptorProto.
-const (
- ServiceDescriptorProto_message_name protoreflect.Name = "ServiceDescriptorProto"
- ServiceDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto"
-)
-
-// Field names for google.protobuf.ServiceDescriptorProto.
-const (
- ServiceDescriptorProto_Name_field_name protoreflect.Name = "name"
- ServiceDescriptorProto_Method_field_name protoreflect.Name = "method"
- ServiceDescriptorProto_Options_field_name protoreflect.Name = "options"
-
- ServiceDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto.name"
- ServiceDescriptorProto_Method_field_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto.method"
- ServiceDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto.options"
-)
-
-// Field numbers for google.protobuf.ServiceDescriptorProto.
-const (
- ServiceDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- ServiceDescriptorProto_Method_field_number protoreflect.FieldNumber = 2
- ServiceDescriptorProto_Options_field_number protoreflect.FieldNumber = 3
-)
-
-// Names for google.protobuf.MethodDescriptorProto.
-const (
- MethodDescriptorProto_message_name protoreflect.Name = "MethodDescriptorProto"
- MethodDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto"
-)
-
-// Field names for google.protobuf.MethodDescriptorProto.
-const (
- MethodDescriptorProto_Name_field_name protoreflect.Name = "name"
- MethodDescriptorProto_InputType_field_name protoreflect.Name = "input_type"
- MethodDescriptorProto_OutputType_field_name protoreflect.Name = "output_type"
- MethodDescriptorProto_Options_field_name protoreflect.Name = "options"
- MethodDescriptorProto_ClientStreaming_field_name protoreflect.Name = "client_streaming"
- MethodDescriptorProto_ServerStreaming_field_name protoreflect.Name = "server_streaming"
-
- MethodDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.name"
- MethodDescriptorProto_InputType_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.input_type"
- MethodDescriptorProto_OutputType_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.output_type"
- MethodDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.options"
- MethodDescriptorProto_ClientStreaming_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.client_streaming"
- MethodDescriptorProto_ServerStreaming_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.server_streaming"
-)
-
-// Field numbers for google.protobuf.MethodDescriptorProto.
-const (
- MethodDescriptorProto_Name_field_number protoreflect.FieldNumber = 1
- MethodDescriptorProto_InputType_field_number protoreflect.FieldNumber = 2
- MethodDescriptorProto_OutputType_field_number protoreflect.FieldNumber = 3
- MethodDescriptorProto_Options_field_number protoreflect.FieldNumber = 4
- MethodDescriptorProto_ClientStreaming_field_number protoreflect.FieldNumber = 5
- MethodDescriptorProto_ServerStreaming_field_number protoreflect.FieldNumber = 6
-)
-
-// Names for google.protobuf.FileOptions.
-const (
- FileOptions_message_name protoreflect.Name = "FileOptions"
- FileOptions_message_fullname protoreflect.FullName = "google.protobuf.FileOptions"
-)
-
-// Field names for google.protobuf.FileOptions.
-const (
- FileOptions_JavaPackage_field_name protoreflect.Name = "java_package"
- FileOptions_JavaOuterClassname_field_name protoreflect.Name = "java_outer_classname"
- FileOptions_JavaMultipleFiles_field_name protoreflect.Name = "java_multiple_files"
- FileOptions_JavaGenerateEqualsAndHash_field_name protoreflect.Name = "java_generate_equals_and_hash"
- FileOptions_JavaStringCheckUtf8_field_name protoreflect.Name = "java_string_check_utf8"
- FileOptions_OptimizeFor_field_name protoreflect.Name = "optimize_for"
- FileOptions_GoPackage_field_name protoreflect.Name = "go_package"
- FileOptions_CcGenericServices_field_name protoreflect.Name = "cc_generic_services"
- FileOptions_JavaGenericServices_field_name protoreflect.Name = "java_generic_services"
- FileOptions_PyGenericServices_field_name protoreflect.Name = "py_generic_services"
- FileOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- FileOptions_CcEnableArenas_field_name protoreflect.Name = "cc_enable_arenas"
- FileOptions_ObjcClassPrefix_field_name protoreflect.Name = "objc_class_prefix"
- FileOptions_CsharpNamespace_field_name protoreflect.Name = "csharp_namespace"
- FileOptions_SwiftPrefix_field_name protoreflect.Name = "swift_prefix"
- FileOptions_PhpClassPrefix_field_name protoreflect.Name = "php_class_prefix"
- FileOptions_PhpNamespace_field_name protoreflect.Name = "php_namespace"
- FileOptions_PhpMetadataNamespace_field_name protoreflect.Name = "php_metadata_namespace"
- FileOptions_RubyPackage_field_name protoreflect.Name = "ruby_package"
- FileOptions_Features_field_name protoreflect.Name = "features"
- FileOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- FileOptions_JavaPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_package"
- FileOptions_JavaOuterClassname_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_outer_classname"
- FileOptions_JavaMultipleFiles_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_multiple_files"
- FileOptions_JavaGenerateEqualsAndHash_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_generate_equals_and_hash"
- FileOptions_JavaStringCheckUtf8_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_string_check_utf8"
- FileOptions_OptimizeFor_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.optimize_for"
- FileOptions_GoPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.go_package"
- FileOptions_CcGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.cc_generic_services"
- FileOptions_JavaGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_generic_services"
- FileOptions_PyGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.py_generic_services"
- FileOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.deprecated"
- FileOptions_CcEnableArenas_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.cc_enable_arenas"
- FileOptions_ObjcClassPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.objc_class_prefix"
- FileOptions_CsharpNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.csharp_namespace"
- FileOptions_SwiftPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.swift_prefix"
- FileOptions_PhpClassPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_class_prefix"
- FileOptions_PhpNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_namespace"
- FileOptions_PhpMetadataNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_metadata_namespace"
- FileOptions_RubyPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.ruby_package"
- FileOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.features"
- FileOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.FileOptions.
-const (
- FileOptions_JavaPackage_field_number protoreflect.FieldNumber = 1
- FileOptions_JavaOuterClassname_field_number protoreflect.FieldNumber = 8
- FileOptions_JavaMultipleFiles_field_number protoreflect.FieldNumber = 10
- FileOptions_JavaGenerateEqualsAndHash_field_number protoreflect.FieldNumber = 20
- FileOptions_JavaStringCheckUtf8_field_number protoreflect.FieldNumber = 27
- FileOptions_OptimizeFor_field_number protoreflect.FieldNumber = 9
- FileOptions_GoPackage_field_number protoreflect.FieldNumber = 11
- FileOptions_CcGenericServices_field_number protoreflect.FieldNumber = 16
- FileOptions_JavaGenericServices_field_number protoreflect.FieldNumber = 17
- FileOptions_PyGenericServices_field_number protoreflect.FieldNumber = 18
- FileOptions_Deprecated_field_number protoreflect.FieldNumber = 23
- FileOptions_CcEnableArenas_field_number protoreflect.FieldNumber = 31
- FileOptions_ObjcClassPrefix_field_number protoreflect.FieldNumber = 36
- FileOptions_CsharpNamespace_field_number protoreflect.FieldNumber = 37
- FileOptions_SwiftPrefix_field_number protoreflect.FieldNumber = 39
- FileOptions_PhpClassPrefix_field_number protoreflect.FieldNumber = 40
- FileOptions_PhpNamespace_field_number protoreflect.FieldNumber = 41
- FileOptions_PhpMetadataNamespace_field_number protoreflect.FieldNumber = 44
- FileOptions_RubyPackage_field_number protoreflect.FieldNumber = 45
- FileOptions_Features_field_number protoreflect.FieldNumber = 50
- FileOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Full and short names for google.protobuf.FileOptions.OptimizeMode.
-const (
- FileOptions_OptimizeMode_enum_fullname = "google.protobuf.FileOptions.OptimizeMode"
- FileOptions_OptimizeMode_enum_name = "OptimizeMode"
-)
-
-// Enum values for google.protobuf.FileOptions.OptimizeMode.
-const (
- FileOptions_SPEED_enum_value = 1
- FileOptions_CODE_SIZE_enum_value = 2
- FileOptions_LITE_RUNTIME_enum_value = 3
-)
-
-// Names for google.protobuf.MessageOptions.
-const (
- MessageOptions_message_name protoreflect.Name = "MessageOptions"
- MessageOptions_message_fullname protoreflect.FullName = "google.protobuf.MessageOptions"
-)
-
-// Field names for google.protobuf.MessageOptions.
-const (
- MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format"
- MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor"
- MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry"
- MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
- MessageOptions_Features_field_name protoreflect.Name = "features"
- MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format"
- MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor"
- MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated"
- MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry"
- MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts"
- MessageOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.features"
- MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.MessageOptions.
-const (
- MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1
- MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2
- MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3
- MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7
- MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11
- MessageOptions_Features_field_number protoreflect.FieldNumber = 12
- MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Names for google.protobuf.FieldOptions.
-const (
- FieldOptions_message_name protoreflect.Name = "FieldOptions"
- FieldOptions_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions"
-)
-
-// Field names for google.protobuf.FieldOptions.
-const (
- FieldOptions_Ctype_field_name protoreflect.Name = "ctype"
- FieldOptions_Packed_field_name protoreflect.Name = "packed"
- FieldOptions_Jstype_field_name protoreflect.Name = "jstype"
- FieldOptions_Lazy_field_name protoreflect.Name = "lazy"
- FieldOptions_UnverifiedLazy_field_name protoreflect.Name = "unverified_lazy"
- FieldOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- FieldOptions_Weak_field_name protoreflect.Name = "weak"
- FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
- FieldOptions_Retention_field_name protoreflect.Name = "retention"
- FieldOptions_Targets_field_name protoreflect.Name = "targets"
- FieldOptions_EditionDefaults_field_name protoreflect.Name = "edition_defaults"
- FieldOptions_Features_field_name protoreflect.Name = "features"
- FieldOptions_FeatureSupport_field_name protoreflect.Name = "feature_support"
- FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype"
- FieldOptions_Packed_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.packed"
- FieldOptions_Jstype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.jstype"
- FieldOptions_Lazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.lazy"
- FieldOptions_UnverifiedLazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.unverified_lazy"
- FieldOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.deprecated"
- FieldOptions_Weak_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.weak"
- FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact"
- FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention"
- FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets"
- FieldOptions_EditionDefaults_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.edition_defaults"
- FieldOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.features"
- FieldOptions_FeatureSupport_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.feature_support"
- FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.FieldOptions.
-const (
- FieldOptions_Ctype_field_number protoreflect.FieldNumber = 1
- FieldOptions_Packed_field_number protoreflect.FieldNumber = 2
- FieldOptions_Jstype_field_number protoreflect.FieldNumber = 6
- FieldOptions_Lazy_field_number protoreflect.FieldNumber = 5
- FieldOptions_UnverifiedLazy_field_number protoreflect.FieldNumber = 15
- FieldOptions_Deprecated_field_number protoreflect.FieldNumber = 3
- FieldOptions_Weak_field_number protoreflect.FieldNumber = 10
- FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16
- FieldOptions_Retention_field_number protoreflect.FieldNumber = 17
- FieldOptions_Targets_field_number protoreflect.FieldNumber = 19
- FieldOptions_EditionDefaults_field_number protoreflect.FieldNumber = 20
- FieldOptions_Features_field_number protoreflect.FieldNumber = 21
- FieldOptions_FeatureSupport_field_number protoreflect.FieldNumber = 22
- FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Full and short names for google.protobuf.FieldOptions.CType.
-const (
- FieldOptions_CType_enum_fullname = "google.protobuf.FieldOptions.CType"
- FieldOptions_CType_enum_name = "CType"
-)
-
-// Enum values for google.protobuf.FieldOptions.CType.
-const (
- FieldOptions_STRING_enum_value = 0
- FieldOptions_CORD_enum_value = 1
- FieldOptions_STRING_PIECE_enum_value = 2
-)
-
-// Full and short names for google.protobuf.FieldOptions.JSType.
-const (
- FieldOptions_JSType_enum_fullname = "google.protobuf.FieldOptions.JSType"
- FieldOptions_JSType_enum_name = "JSType"
-)
-
-// Enum values for google.protobuf.FieldOptions.JSType.
-const (
- FieldOptions_JS_NORMAL_enum_value = 0
- FieldOptions_JS_STRING_enum_value = 1
- FieldOptions_JS_NUMBER_enum_value = 2
-)
-
-// Full and short names for google.protobuf.FieldOptions.OptionRetention.
-const (
- FieldOptions_OptionRetention_enum_fullname = "google.protobuf.FieldOptions.OptionRetention"
- FieldOptions_OptionRetention_enum_name = "OptionRetention"
-)
-
-// Enum values for google.protobuf.FieldOptions.OptionRetention.
-const (
- FieldOptions_RETENTION_UNKNOWN_enum_value = 0
- FieldOptions_RETENTION_RUNTIME_enum_value = 1
- FieldOptions_RETENTION_SOURCE_enum_value = 2
-)
-
-// Full and short names for google.protobuf.FieldOptions.OptionTargetType.
-const (
- FieldOptions_OptionTargetType_enum_fullname = "google.protobuf.FieldOptions.OptionTargetType"
- FieldOptions_OptionTargetType_enum_name = "OptionTargetType"
-)
-
-// Enum values for google.protobuf.FieldOptions.OptionTargetType.
-const (
- FieldOptions_TARGET_TYPE_UNKNOWN_enum_value = 0
- FieldOptions_TARGET_TYPE_FILE_enum_value = 1
- FieldOptions_TARGET_TYPE_EXTENSION_RANGE_enum_value = 2
- FieldOptions_TARGET_TYPE_MESSAGE_enum_value = 3
- FieldOptions_TARGET_TYPE_FIELD_enum_value = 4
- FieldOptions_TARGET_TYPE_ONEOF_enum_value = 5
- FieldOptions_TARGET_TYPE_ENUM_enum_value = 6
- FieldOptions_TARGET_TYPE_ENUM_ENTRY_enum_value = 7
- FieldOptions_TARGET_TYPE_SERVICE_enum_value = 8
- FieldOptions_TARGET_TYPE_METHOD_enum_value = 9
-)
-
-// Names for google.protobuf.FieldOptions.EditionDefault.
-const (
- FieldOptions_EditionDefault_message_name protoreflect.Name = "EditionDefault"
- FieldOptions_EditionDefault_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault"
-)
-
-// Field names for google.protobuf.FieldOptions.EditionDefault.
-const (
- FieldOptions_EditionDefault_Edition_field_name protoreflect.Name = "edition"
- FieldOptions_EditionDefault_Value_field_name protoreflect.Name = "value"
-
- FieldOptions_EditionDefault_Edition_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault.edition"
- FieldOptions_EditionDefault_Value_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault.value"
-)
-
-// Field numbers for google.protobuf.FieldOptions.EditionDefault.
-const (
- FieldOptions_EditionDefault_Edition_field_number protoreflect.FieldNumber = 3
- FieldOptions_EditionDefault_Value_field_number protoreflect.FieldNumber = 2
-)
-
-// Names for google.protobuf.FieldOptions.FeatureSupport.
-const (
- FieldOptions_FeatureSupport_message_name protoreflect.Name = "FeatureSupport"
- FieldOptions_FeatureSupport_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport"
-)
-
-// Field names for google.protobuf.FieldOptions.FeatureSupport.
-const (
- FieldOptions_FeatureSupport_EditionIntroduced_field_name protoreflect.Name = "edition_introduced"
- FieldOptions_FeatureSupport_EditionDeprecated_field_name protoreflect.Name = "edition_deprecated"
- FieldOptions_FeatureSupport_DeprecationWarning_field_name protoreflect.Name = "deprecation_warning"
- FieldOptions_FeatureSupport_EditionRemoved_field_name protoreflect.Name = "edition_removed"
-
- FieldOptions_FeatureSupport_EditionIntroduced_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.edition_introduced"
- FieldOptions_FeatureSupport_EditionDeprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.edition_deprecated"
- FieldOptions_FeatureSupport_DeprecationWarning_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.deprecation_warning"
- FieldOptions_FeatureSupport_EditionRemoved_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.edition_removed"
-)
-
-// Field numbers for google.protobuf.FieldOptions.FeatureSupport.
-const (
- FieldOptions_FeatureSupport_EditionIntroduced_field_number protoreflect.FieldNumber = 1
- FieldOptions_FeatureSupport_EditionDeprecated_field_number protoreflect.FieldNumber = 2
- FieldOptions_FeatureSupport_DeprecationWarning_field_number protoreflect.FieldNumber = 3
- FieldOptions_FeatureSupport_EditionRemoved_field_number protoreflect.FieldNumber = 4
-)
-
-// Names for google.protobuf.OneofOptions.
-const (
- OneofOptions_message_name protoreflect.Name = "OneofOptions"
- OneofOptions_message_fullname protoreflect.FullName = "google.protobuf.OneofOptions"
-)
-
-// Field names for google.protobuf.OneofOptions.
-const (
- OneofOptions_Features_field_name protoreflect.Name = "features"
- OneofOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- OneofOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.features"
- OneofOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.OneofOptions.
-const (
- OneofOptions_Features_field_number protoreflect.FieldNumber = 1
- OneofOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Names for google.protobuf.EnumOptions.
-const (
- EnumOptions_message_name protoreflect.Name = "EnumOptions"
- EnumOptions_message_fullname protoreflect.FullName = "google.protobuf.EnumOptions"
-)
-
-// Field names for google.protobuf.EnumOptions.
-const (
- EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias"
- EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts"
- EnumOptions_Features_field_name protoreflect.Name = "features"
- EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias"
- EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated"
- EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts"
- EnumOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.features"
- EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.EnumOptions.
-const (
- EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2
- EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3
- EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6
- EnumOptions_Features_field_number protoreflect.FieldNumber = 7
- EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Names for google.protobuf.EnumValueOptions.
-const (
- EnumValueOptions_message_name protoreflect.Name = "EnumValueOptions"
- EnumValueOptions_message_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions"
-)
-
-// Field names for google.protobuf.EnumValueOptions.
-const (
- EnumValueOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- EnumValueOptions_Features_field_name protoreflect.Name = "features"
- EnumValueOptions_DebugRedact_field_name protoreflect.Name = "debug_redact"
- EnumValueOptions_FeatureSupport_field_name protoreflect.Name = "feature_support"
- EnumValueOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- EnumValueOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.deprecated"
- EnumValueOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.features"
- EnumValueOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.debug_redact"
- EnumValueOptions_FeatureSupport_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.feature_support"
- EnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.EnumValueOptions.
-const (
- EnumValueOptions_Deprecated_field_number protoreflect.FieldNumber = 1
- EnumValueOptions_Features_field_number protoreflect.FieldNumber = 2
- EnumValueOptions_DebugRedact_field_number protoreflect.FieldNumber = 3
- EnumValueOptions_FeatureSupport_field_number protoreflect.FieldNumber = 4
- EnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Names for google.protobuf.ServiceOptions.
-const (
- ServiceOptions_message_name protoreflect.Name = "ServiceOptions"
- ServiceOptions_message_fullname protoreflect.FullName = "google.protobuf.ServiceOptions"
-)
-
-// Field names for google.protobuf.ServiceOptions.
-const (
- ServiceOptions_Features_field_name protoreflect.Name = "features"
- ServiceOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- ServiceOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- ServiceOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.features"
- ServiceOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.deprecated"
- ServiceOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.ServiceOptions.
-const (
- ServiceOptions_Features_field_number protoreflect.FieldNumber = 34
- ServiceOptions_Deprecated_field_number protoreflect.FieldNumber = 33
- ServiceOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Names for google.protobuf.MethodOptions.
-const (
- MethodOptions_message_name protoreflect.Name = "MethodOptions"
- MethodOptions_message_fullname protoreflect.FullName = "google.protobuf.MethodOptions"
-)
-
-// Field names for google.protobuf.MethodOptions.
-const (
- MethodOptions_Deprecated_field_name protoreflect.Name = "deprecated"
- MethodOptions_IdempotencyLevel_field_name protoreflect.Name = "idempotency_level"
- MethodOptions_Features_field_name protoreflect.Name = "features"
- MethodOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option"
-
- MethodOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.deprecated"
- MethodOptions_IdempotencyLevel_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.idempotency_level"
- MethodOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.features"
- MethodOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.uninterpreted_option"
-)
-
-// Field numbers for google.protobuf.MethodOptions.
-const (
- MethodOptions_Deprecated_field_number protoreflect.FieldNumber = 33
- MethodOptions_IdempotencyLevel_field_number protoreflect.FieldNumber = 34
- MethodOptions_Features_field_number protoreflect.FieldNumber = 35
- MethodOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999
-)
-
-// Full and short names for google.protobuf.MethodOptions.IdempotencyLevel.
-const (
- MethodOptions_IdempotencyLevel_enum_fullname = "google.protobuf.MethodOptions.IdempotencyLevel"
- MethodOptions_IdempotencyLevel_enum_name = "IdempotencyLevel"
-)
-
-// Enum values for google.protobuf.MethodOptions.IdempotencyLevel.
-const (
- MethodOptions_IDEMPOTENCY_UNKNOWN_enum_value = 0
- MethodOptions_NO_SIDE_EFFECTS_enum_value = 1
- MethodOptions_IDEMPOTENT_enum_value = 2
-)
-
-// Names for google.protobuf.UninterpretedOption.
-const (
- UninterpretedOption_message_name protoreflect.Name = "UninterpretedOption"
- UninterpretedOption_message_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption"
-)
-
-// Field names for google.protobuf.UninterpretedOption.
-const (
- UninterpretedOption_Name_field_name protoreflect.Name = "name"
- UninterpretedOption_IdentifierValue_field_name protoreflect.Name = "identifier_value"
- UninterpretedOption_PositiveIntValue_field_name protoreflect.Name = "positive_int_value"
- UninterpretedOption_NegativeIntValue_field_name protoreflect.Name = "negative_int_value"
- UninterpretedOption_DoubleValue_field_name protoreflect.Name = "double_value"
- UninterpretedOption_StringValue_field_name protoreflect.Name = "string_value"
- UninterpretedOption_AggregateValue_field_name protoreflect.Name = "aggregate_value"
-
- UninterpretedOption_Name_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.name"
- UninterpretedOption_IdentifierValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.identifier_value"
- UninterpretedOption_PositiveIntValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.positive_int_value"
- UninterpretedOption_NegativeIntValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.negative_int_value"
- UninterpretedOption_DoubleValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.double_value"
- UninterpretedOption_StringValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.string_value"
- UninterpretedOption_AggregateValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.aggregate_value"
-)
-
-// Field numbers for google.protobuf.UninterpretedOption.
-const (
- UninterpretedOption_Name_field_number protoreflect.FieldNumber = 2
- UninterpretedOption_IdentifierValue_field_number protoreflect.FieldNumber = 3
- UninterpretedOption_PositiveIntValue_field_number protoreflect.FieldNumber = 4
- UninterpretedOption_NegativeIntValue_field_number protoreflect.FieldNumber = 5
- UninterpretedOption_DoubleValue_field_number protoreflect.FieldNumber = 6
- UninterpretedOption_StringValue_field_number protoreflect.FieldNumber = 7
- UninterpretedOption_AggregateValue_field_number protoreflect.FieldNumber = 8
-)
-
-// Names for google.protobuf.UninterpretedOption.NamePart.
-const (
- UninterpretedOption_NamePart_message_name protoreflect.Name = "NamePart"
- UninterpretedOption_NamePart_message_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.NamePart"
-)
-
-// Field names for google.protobuf.UninterpretedOption.NamePart.
-const (
- UninterpretedOption_NamePart_NamePart_field_name protoreflect.Name = "name_part"
- UninterpretedOption_NamePart_IsExtension_field_name protoreflect.Name = "is_extension"
-
- UninterpretedOption_NamePart_NamePart_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.NamePart.name_part"
- UninterpretedOption_NamePart_IsExtension_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.NamePart.is_extension"
-)
-
-// Field numbers for google.protobuf.UninterpretedOption.NamePart.
-const (
- UninterpretedOption_NamePart_NamePart_field_number protoreflect.FieldNumber = 1
- UninterpretedOption_NamePart_IsExtension_field_number protoreflect.FieldNumber = 2
-)
-
-// Names for google.protobuf.FeatureSet.
-const (
- FeatureSet_message_name protoreflect.Name = "FeatureSet"
- FeatureSet_message_fullname protoreflect.FullName = "google.protobuf.FeatureSet"
-)
-
-// Field names for google.protobuf.FeatureSet.
-const (
- FeatureSet_FieldPresence_field_name protoreflect.Name = "field_presence"
- FeatureSet_EnumType_field_name protoreflect.Name = "enum_type"
- FeatureSet_RepeatedFieldEncoding_field_name protoreflect.Name = "repeated_field_encoding"
- FeatureSet_Utf8Validation_field_name protoreflect.Name = "utf8_validation"
- FeatureSet_MessageEncoding_field_name protoreflect.Name = "message_encoding"
- FeatureSet_JsonFormat_field_name protoreflect.Name = "json_format"
-
- FeatureSet_FieldPresence_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.field_presence"
- FeatureSet_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enum_type"
- FeatureSet_RepeatedFieldEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding"
- FeatureSet_Utf8Validation_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation"
- FeatureSet_MessageEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding"
- FeatureSet_JsonFormat_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.json_format"
-)
-
-// Field numbers for google.protobuf.FeatureSet.
-const (
- FeatureSet_FieldPresence_field_number protoreflect.FieldNumber = 1
- FeatureSet_EnumType_field_number protoreflect.FieldNumber = 2
- FeatureSet_RepeatedFieldEncoding_field_number protoreflect.FieldNumber = 3
- FeatureSet_Utf8Validation_field_number protoreflect.FieldNumber = 4
- FeatureSet_MessageEncoding_field_number protoreflect.FieldNumber = 5
- FeatureSet_JsonFormat_field_number protoreflect.FieldNumber = 6
-)
-
-// Full and short names for google.protobuf.FeatureSet.FieldPresence.
-const (
- FeatureSet_FieldPresence_enum_fullname = "google.protobuf.FeatureSet.FieldPresence"
- FeatureSet_FieldPresence_enum_name = "FieldPresence"
-)
-
-// Enum values for google.protobuf.FeatureSet.FieldPresence.
-const (
- FeatureSet_FIELD_PRESENCE_UNKNOWN_enum_value = 0
- FeatureSet_EXPLICIT_enum_value = 1
- FeatureSet_IMPLICIT_enum_value = 2
- FeatureSet_LEGACY_REQUIRED_enum_value = 3
-)
-
-// Full and short names for google.protobuf.FeatureSet.EnumType.
-const (
- FeatureSet_EnumType_enum_fullname = "google.protobuf.FeatureSet.EnumType"
- FeatureSet_EnumType_enum_name = "EnumType"
-)
-
-// Enum values for google.protobuf.FeatureSet.EnumType.
-const (
- FeatureSet_ENUM_TYPE_UNKNOWN_enum_value = 0
- FeatureSet_OPEN_enum_value = 1
- FeatureSet_CLOSED_enum_value = 2
-)
-
-// Full and short names for google.protobuf.FeatureSet.RepeatedFieldEncoding.
-const (
- FeatureSet_RepeatedFieldEncoding_enum_fullname = "google.protobuf.FeatureSet.RepeatedFieldEncoding"
- FeatureSet_RepeatedFieldEncoding_enum_name = "RepeatedFieldEncoding"
-)
-
-// Enum values for google.protobuf.FeatureSet.RepeatedFieldEncoding.
-const (
- FeatureSet_REPEATED_FIELD_ENCODING_UNKNOWN_enum_value = 0
- FeatureSet_PACKED_enum_value = 1
- FeatureSet_EXPANDED_enum_value = 2
-)
-
-// Full and short names for google.protobuf.FeatureSet.Utf8Validation.
-const (
- FeatureSet_Utf8Validation_enum_fullname = "google.protobuf.FeatureSet.Utf8Validation"
- FeatureSet_Utf8Validation_enum_name = "Utf8Validation"
-)
-
-// Enum values for google.protobuf.FeatureSet.Utf8Validation.
-const (
- FeatureSet_UTF8_VALIDATION_UNKNOWN_enum_value = 0
- FeatureSet_VERIFY_enum_value = 2
- FeatureSet_NONE_enum_value = 3
-)
-
-// Full and short names for google.protobuf.FeatureSet.MessageEncoding.
-const (
- FeatureSet_MessageEncoding_enum_fullname = "google.protobuf.FeatureSet.MessageEncoding"
- FeatureSet_MessageEncoding_enum_name = "MessageEncoding"
-)
-
-// Enum values for google.protobuf.FeatureSet.MessageEncoding.
-const (
- FeatureSet_MESSAGE_ENCODING_UNKNOWN_enum_value = 0
- FeatureSet_LENGTH_PREFIXED_enum_value = 1
- FeatureSet_DELIMITED_enum_value = 2
-)
-
-// Full and short names for google.protobuf.FeatureSet.JsonFormat.
-const (
- FeatureSet_JsonFormat_enum_fullname = "google.protobuf.FeatureSet.JsonFormat"
- FeatureSet_JsonFormat_enum_name = "JsonFormat"
-)
-
-// Enum values for google.protobuf.FeatureSet.JsonFormat.
-const (
- FeatureSet_JSON_FORMAT_UNKNOWN_enum_value = 0
- FeatureSet_ALLOW_enum_value = 1
- FeatureSet_LEGACY_BEST_EFFORT_enum_value = 2
-)
-
-// Names for google.protobuf.FeatureSetDefaults.
-const (
- FeatureSetDefaults_message_name protoreflect.Name = "FeatureSetDefaults"
- FeatureSetDefaults_message_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults"
-)
-
-// Field names for google.protobuf.FeatureSetDefaults.
-const (
- FeatureSetDefaults_Defaults_field_name protoreflect.Name = "defaults"
- FeatureSetDefaults_MinimumEdition_field_name protoreflect.Name = "minimum_edition"
- FeatureSetDefaults_MaximumEdition_field_name protoreflect.Name = "maximum_edition"
-
- FeatureSetDefaults_Defaults_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.defaults"
- FeatureSetDefaults_MinimumEdition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.minimum_edition"
- FeatureSetDefaults_MaximumEdition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.maximum_edition"
-)
-
-// Field numbers for google.protobuf.FeatureSetDefaults.
-const (
- FeatureSetDefaults_Defaults_field_number protoreflect.FieldNumber = 1
- FeatureSetDefaults_MinimumEdition_field_number protoreflect.FieldNumber = 4
- FeatureSetDefaults_MaximumEdition_field_number protoreflect.FieldNumber = 5
-)
-
-// Names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.
-const (
- FeatureSetDefaults_FeatureSetEditionDefault_message_name protoreflect.Name = "FeatureSetEditionDefault"
- FeatureSetDefaults_FeatureSetEditionDefault_message_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault"
-)
-
-// Field names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.
-const (
- FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_name protoreflect.Name = "edition"
- FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_name protoreflect.Name = "overridable_features"
- FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_name protoreflect.Name = "fixed_features"
-
- FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition"
- FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features"
- FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features"
-)
-
-// Field numbers for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.
-const (
- FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number protoreflect.FieldNumber = 3
- FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_number protoreflect.FieldNumber = 4
- FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_number protoreflect.FieldNumber = 5
-)
-
-// Names for google.protobuf.SourceCodeInfo.
-const (
- SourceCodeInfo_message_name protoreflect.Name = "SourceCodeInfo"
- SourceCodeInfo_message_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo"
-)
-
-// Field names for google.protobuf.SourceCodeInfo.
-const (
- SourceCodeInfo_Location_field_name protoreflect.Name = "location"
-
- SourceCodeInfo_Location_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.location"
-)
-
-// Field numbers for google.protobuf.SourceCodeInfo.
-const (
- SourceCodeInfo_Location_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.SourceCodeInfo.Location.
-const (
- SourceCodeInfo_Location_message_name protoreflect.Name = "Location"
- SourceCodeInfo_Location_message_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location"
-)
-
-// Field names for google.protobuf.SourceCodeInfo.Location.
-const (
- SourceCodeInfo_Location_Path_field_name protoreflect.Name = "path"
- SourceCodeInfo_Location_Span_field_name protoreflect.Name = "span"
- SourceCodeInfo_Location_LeadingComments_field_name protoreflect.Name = "leading_comments"
- SourceCodeInfo_Location_TrailingComments_field_name protoreflect.Name = "trailing_comments"
- SourceCodeInfo_Location_LeadingDetachedComments_field_name protoreflect.Name = "leading_detached_comments"
-
- SourceCodeInfo_Location_Path_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.path"
- SourceCodeInfo_Location_Span_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.span"
- SourceCodeInfo_Location_LeadingComments_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.leading_comments"
- SourceCodeInfo_Location_TrailingComments_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.trailing_comments"
- SourceCodeInfo_Location_LeadingDetachedComments_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.leading_detached_comments"
-)
-
-// Field numbers for google.protobuf.SourceCodeInfo.Location.
-const (
- SourceCodeInfo_Location_Path_field_number protoreflect.FieldNumber = 1
- SourceCodeInfo_Location_Span_field_number protoreflect.FieldNumber = 2
- SourceCodeInfo_Location_LeadingComments_field_number protoreflect.FieldNumber = 3
- SourceCodeInfo_Location_TrailingComments_field_number protoreflect.FieldNumber = 4
- SourceCodeInfo_Location_LeadingDetachedComments_field_number protoreflect.FieldNumber = 6
-)
-
-// Names for google.protobuf.GeneratedCodeInfo.
-const (
- GeneratedCodeInfo_message_name protoreflect.Name = "GeneratedCodeInfo"
- GeneratedCodeInfo_message_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo"
-)
-
-// Field names for google.protobuf.GeneratedCodeInfo.
-const (
- GeneratedCodeInfo_Annotation_field_name protoreflect.Name = "annotation"
-
- GeneratedCodeInfo_Annotation_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.annotation"
-)
-
-// Field numbers for google.protobuf.GeneratedCodeInfo.
-const (
- GeneratedCodeInfo_Annotation_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.GeneratedCodeInfo.Annotation.
-const (
- GeneratedCodeInfo_Annotation_message_name protoreflect.Name = "Annotation"
- GeneratedCodeInfo_Annotation_message_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation"
-)
-
-// Field names for google.protobuf.GeneratedCodeInfo.Annotation.
-const (
- GeneratedCodeInfo_Annotation_Path_field_name protoreflect.Name = "path"
- GeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = "source_file"
- GeneratedCodeInfo_Annotation_Begin_field_name protoreflect.Name = "begin"
- GeneratedCodeInfo_Annotation_End_field_name protoreflect.Name = "end"
- GeneratedCodeInfo_Annotation_Semantic_field_name protoreflect.Name = "semantic"
-
- GeneratedCodeInfo_Annotation_Path_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.path"
- GeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.source_file"
- GeneratedCodeInfo_Annotation_Begin_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.begin"
- GeneratedCodeInfo_Annotation_End_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.end"
- GeneratedCodeInfo_Annotation_Semantic_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.semantic"
-)
-
-// Field numbers for google.protobuf.GeneratedCodeInfo.Annotation.
-const (
- GeneratedCodeInfo_Annotation_Path_field_number protoreflect.FieldNumber = 1
- GeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2
- GeneratedCodeInfo_Annotation_Begin_field_number protoreflect.FieldNumber = 3
- GeneratedCodeInfo_Annotation_End_field_number protoreflect.FieldNumber = 4
- GeneratedCodeInfo_Annotation_Semantic_field_number protoreflect.FieldNumber = 5
-)
-
-// Full and short names for google.protobuf.GeneratedCodeInfo.Annotation.Semantic.
-const (
- GeneratedCodeInfo_Annotation_Semantic_enum_fullname = "google.protobuf.GeneratedCodeInfo.Annotation.Semantic"
- GeneratedCodeInfo_Annotation_Semantic_enum_name = "Semantic"
-)
-
-// Enum values for google.protobuf.GeneratedCodeInfo.Annotation.Semantic.
-const (
- GeneratedCodeInfo_Annotation_NONE_enum_value = 0
- GeneratedCodeInfo_Annotation_SET_enum_value = 1
- GeneratedCodeInfo_Annotation_ALIAS_enum_value = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/doc.go b/vendor/google.golang.org/protobuf/internal/genid/doc.go
deleted file mode 100644
index d9b9d916a..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/doc.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package genid contains constants for declarations in descriptor.proto
-// and the well-known types.
-package genid
-
-import "google.golang.org/protobuf/reflect/protoreflect"
-
-const GoogleProtobuf_package protoreflect.FullName = "google.protobuf"
diff --git a/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go b/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go
deleted file mode 100644
index b070ef4fd..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_duration_proto = "google/protobuf/duration.proto"
-
-// Names for google.protobuf.Duration.
-const (
- Duration_message_name protoreflect.Name = "Duration"
- Duration_message_fullname protoreflect.FullName = "google.protobuf.Duration"
-)
-
-// Field names for google.protobuf.Duration.
-const (
- Duration_Seconds_field_name protoreflect.Name = "seconds"
- Duration_Nanos_field_name protoreflect.Name = "nanos"
-
- Duration_Seconds_field_fullname protoreflect.FullName = "google.protobuf.Duration.seconds"
- Duration_Nanos_field_fullname protoreflect.FullName = "google.protobuf.Duration.nanos"
-)
-
-// Field numbers for google.protobuf.Duration.
-const (
- Duration_Seconds_field_number protoreflect.FieldNumber = 1
- Duration_Nanos_field_number protoreflect.FieldNumber = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go b/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go
deleted file mode 100644
index 762abb34a..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_empty_proto = "google/protobuf/empty.proto"
-
-// Names for google.protobuf.Empty.
-const (
- Empty_message_name protoreflect.Name = "Empty"
- Empty_message_fullname protoreflect.FullName = "google.protobuf.Empty"
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go b/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go
deleted file mode 100644
index 70bed453f..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_field_mask_proto = "google/protobuf/field_mask.proto"
-
-// Names for google.protobuf.FieldMask.
-const (
- FieldMask_message_name protoreflect.Name = "FieldMask"
- FieldMask_message_fullname protoreflect.FullName = "google.protobuf.FieldMask"
-)
-
-// Field names for google.protobuf.FieldMask.
-const (
- FieldMask_Paths_field_name protoreflect.Name = "paths"
-
- FieldMask_Paths_field_fullname protoreflect.FullName = "google.protobuf.FieldMask.paths"
-)
-
-// Field numbers for google.protobuf.FieldMask.
-const (
- FieldMask_Paths_field_number protoreflect.FieldNumber = 1
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
deleted file mode 100644
index f5ee7f5c2..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto"
-
-// Names for pb.GoFeatures.
-const (
- GoFeatures_message_name protoreflect.Name = "GoFeatures"
- GoFeatures_message_fullname protoreflect.FullName = "pb.GoFeatures"
-)
-
-// Field names for pb.GoFeatures.
-const (
- GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum"
- GoFeatures_ApiLevel_field_name protoreflect.Name = "api_level"
- GoFeatures_StripEnumPrefix_field_name protoreflect.Name = "strip_enum_prefix"
-
- GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "pb.GoFeatures.legacy_unmarshal_json_enum"
- GoFeatures_ApiLevel_field_fullname protoreflect.FullName = "pb.GoFeatures.api_level"
- GoFeatures_StripEnumPrefix_field_fullname protoreflect.FullName = "pb.GoFeatures.strip_enum_prefix"
-)
-
-// Field numbers for pb.GoFeatures.
-const (
- GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
- GoFeatures_ApiLevel_field_number protoreflect.FieldNumber = 2
- GoFeatures_StripEnumPrefix_field_number protoreflect.FieldNumber = 3
-)
-
-// Full and short names for pb.GoFeatures.APILevel.
-const (
- GoFeatures_APILevel_enum_fullname = "pb.GoFeatures.APILevel"
- GoFeatures_APILevel_enum_name = "APILevel"
-)
-
-// Enum values for pb.GoFeatures.APILevel.
-const (
- GoFeatures_API_LEVEL_UNSPECIFIED_enum_value = 0
- GoFeatures_API_OPEN_enum_value = 1
- GoFeatures_API_HYBRID_enum_value = 2
- GoFeatures_API_OPAQUE_enum_value = 3
-)
-
-// Full and short names for pb.GoFeatures.StripEnumPrefix.
-const (
- GoFeatures_StripEnumPrefix_enum_fullname = "pb.GoFeatures.StripEnumPrefix"
- GoFeatures_StripEnumPrefix_enum_name = "StripEnumPrefix"
-)
-
-// Enum values for pb.GoFeatures.StripEnumPrefix.
-const (
- GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED_enum_value = 0
- GoFeatures_STRIP_ENUM_PREFIX_KEEP_enum_value = 1
- GoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH_enum_value = 2
- GoFeatures_STRIP_ENUM_PREFIX_STRIP_enum_value = 3
-)
-
-// Extension numbers
-const (
- FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/goname.go b/vendor/google.golang.org/protobuf/internal/genid/goname.go
deleted file mode 100644
index 693d2e9e1..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/goname.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package genid
-
-// Go names of implementation-specific struct fields in generated messages.
-const (
- State_goname = "state"
-
- SizeCache_goname = "sizeCache"
- SizeCacheA_goname = "XXX_sizecache"
-
- WeakFields_goname = "weakFields"
- WeakFieldsA_goname = "XXX_weak"
-
- UnknownFields_goname = "unknownFields"
- UnknownFieldsA_goname = "XXX_unrecognized"
-
- ExtensionFields_goname = "extensionFields"
- ExtensionFieldsA_goname = "XXX_InternalExtensions"
- ExtensionFieldsB_goname = "XXX_extensions"
-
- WeakFieldPrefix_goname = "XXX_weak_"
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go b/vendor/google.golang.org/protobuf/internal/genid/map_entry.go
deleted file mode 100644
index bef5a25fb..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package genid
-
-import "google.golang.org/protobuf/reflect/protoreflect"
-
-// Generic field names and numbers for synthetic map entry messages.
-const (
- MapEntry_Key_field_name protoreflect.Name = "key"
- MapEntry_Value_field_name protoreflect.Name = "value"
-
- MapEntry_Key_field_number protoreflect.FieldNumber = 1
- MapEntry_Value_field_number protoreflect.FieldNumber = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/name.go b/vendor/google.golang.org/protobuf/internal/genid/name.go
deleted file mode 100644
index 224f33930..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/name.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package genid
-
-const (
- NoUnkeyedLiteral_goname = "noUnkeyedLiteral"
- NoUnkeyedLiteralA_goname = "XXX_NoUnkeyedLiteral"
-
- BuilderSuffix_goname = "_builder"
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go b/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go
deleted file mode 100644
index 3e99ae16c..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_source_context_proto = "google/protobuf/source_context.proto"
-
-// Names for google.protobuf.SourceContext.
-const (
- SourceContext_message_name protoreflect.Name = "SourceContext"
- SourceContext_message_fullname protoreflect.FullName = "google.protobuf.SourceContext"
-)
-
-// Field names for google.protobuf.SourceContext.
-const (
- SourceContext_FileName_field_name protoreflect.Name = "file_name"
-
- SourceContext_FileName_field_fullname protoreflect.FullName = "google.protobuf.SourceContext.file_name"
-)
-
-// Field numbers for google.protobuf.SourceContext.
-const (
- SourceContext_FileName_field_number protoreflect.FieldNumber = 1
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go b/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go
deleted file mode 100644
index ad6f80c46..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_struct_proto = "google/protobuf/struct.proto"
-
-// Full and short names for google.protobuf.NullValue.
-const (
- NullValue_enum_fullname = "google.protobuf.NullValue"
- NullValue_enum_name = "NullValue"
-)
-
-// Enum values for google.protobuf.NullValue.
-const (
- NullValue_NULL_VALUE_enum_value = 0
-)
-
-// Names for google.protobuf.Struct.
-const (
- Struct_message_name protoreflect.Name = "Struct"
- Struct_message_fullname protoreflect.FullName = "google.protobuf.Struct"
-)
-
-// Field names for google.protobuf.Struct.
-const (
- Struct_Fields_field_name protoreflect.Name = "fields"
-
- Struct_Fields_field_fullname protoreflect.FullName = "google.protobuf.Struct.fields"
-)
-
-// Field numbers for google.protobuf.Struct.
-const (
- Struct_Fields_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.Struct.FieldsEntry.
-const (
- Struct_FieldsEntry_message_name protoreflect.Name = "FieldsEntry"
- Struct_FieldsEntry_message_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry"
-)
-
-// Field names for google.protobuf.Struct.FieldsEntry.
-const (
- Struct_FieldsEntry_Key_field_name protoreflect.Name = "key"
- Struct_FieldsEntry_Value_field_name protoreflect.Name = "value"
-
- Struct_FieldsEntry_Key_field_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry.key"
- Struct_FieldsEntry_Value_field_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry.value"
-)
-
-// Field numbers for google.protobuf.Struct.FieldsEntry.
-const (
- Struct_FieldsEntry_Key_field_number protoreflect.FieldNumber = 1
- Struct_FieldsEntry_Value_field_number protoreflect.FieldNumber = 2
-)
-
-// Names for google.protobuf.Value.
-const (
- Value_message_name protoreflect.Name = "Value"
- Value_message_fullname protoreflect.FullName = "google.protobuf.Value"
-)
-
-// Field names for google.protobuf.Value.
-const (
- Value_NullValue_field_name protoreflect.Name = "null_value"
- Value_NumberValue_field_name protoreflect.Name = "number_value"
- Value_StringValue_field_name protoreflect.Name = "string_value"
- Value_BoolValue_field_name protoreflect.Name = "bool_value"
- Value_StructValue_field_name protoreflect.Name = "struct_value"
- Value_ListValue_field_name protoreflect.Name = "list_value"
-
- Value_NullValue_field_fullname protoreflect.FullName = "google.protobuf.Value.null_value"
- Value_NumberValue_field_fullname protoreflect.FullName = "google.protobuf.Value.number_value"
- Value_StringValue_field_fullname protoreflect.FullName = "google.protobuf.Value.string_value"
- Value_BoolValue_field_fullname protoreflect.FullName = "google.protobuf.Value.bool_value"
- Value_StructValue_field_fullname protoreflect.FullName = "google.protobuf.Value.struct_value"
- Value_ListValue_field_fullname protoreflect.FullName = "google.protobuf.Value.list_value"
-)
-
-// Field numbers for google.protobuf.Value.
-const (
- Value_NullValue_field_number protoreflect.FieldNumber = 1
- Value_NumberValue_field_number protoreflect.FieldNumber = 2
- Value_StringValue_field_number protoreflect.FieldNumber = 3
- Value_BoolValue_field_number protoreflect.FieldNumber = 4
- Value_StructValue_field_number protoreflect.FieldNumber = 5
- Value_ListValue_field_number protoreflect.FieldNumber = 6
-)
-
-// Oneof names for google.protobuf.Value.
-const (
- Value_Kind_oneof_name protoreflect.Name = "kind"
-
- Value_Kind_oneof_fullname protoreflect.FullName = "google.protobuf.Value.kind"
-)
-
-// Names for google.protobuf.ListValue.
-const (
- ListValue_message_name protoreflect.Name = "ListValue"
- ListValue_message_fullname protoreflect.FullName = "google.protobuf.ListValue"
-)
-
-// Field names for google.protobuf.ListValue.
-const (
- ListValue_Values_field_name protoreflect.Name = "values"
-
- ListValue_Values_field_fullname protoreflect.FullName = "google.protobuf.ListValue.values"
-)
-
-// Field numbers for google.protobuf.ListValue.
-const (
- ListValue_Values_field_number protoreflect.FieldNumber = 1
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go b/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go
deleted file mode 100644
index f5cd5634c..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_timestamp_proto = "google/protobuf/timestamp.proto"
-
-// Names for google.protobuf.Timestamp.
-const (
- Timestamp_message_name protoreflect.Name = "Timestamp"
- Timestamp_message_fullname protoreflect.FullName = "google.protobuf.Timestamp"
-)
-
-// Field names for google.protobuf.Timestamp.
-const (
- Timestamp_Seconds_field_name protoreflect.Name = "seconds"
- Timestamp_Nanos_field_name protoreflect.Name = "nanos"
-
- Timestamp_Seconds_field_fullname protoreflect.FullName = "google.protobuf.Timestamp.seconds"
- Timestamp_Nanos_field_fullname protoreflect.FullName = "google.protobuf.Timestamp.nanos"
-)
-
-// Field numbers for google.protobuf.Timestamp.
-const (
- Timestamp_Seconds_field_number protoreflect.FieldNumber = 1
- Timestamp_Nanos_field_number protoreflect.FieldNumber = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go
deleted file mode 100644
index 49bc73e25..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_type_proto = "google/protobuf/type.proto"
-
-// Full and short names for google.protobuf.Syntax.
-const (
- Syntax_enum_fullname = "google.protobuf.Syntax"
- Syntax_enum_name = "Syntax"
-)
-
-// Enum values for google.protobuf.Syntax.
-const (
- Syntax_SYNTAX_PROTO2_enum_value = 0
- Syntax_SYNTAX_PROTO3_enum_value = 1
- Syntax_SYNTAX_EDITIONS_enum_value = 2
-)
-
-// Names for google.protobuf.Type.
-const (
- Type_message_name protoreflect.Name = "Type"
- Type_message_fullname protoreflect.FullName = "google.protobuf.Type"
-)
-
-// Field names for google.protobuf.Type.
-const (
- Type_Name_field_name protoreflect.Name = "name"
- Type_Fields_field_name protoreflect.Name = "fields"
- Type_Oneofs_field_name protoreflect.Name = "oneofs"
- Type_Options_field_name protoreflect.Name = "options"
- Type_SourceContext_field_name protoreflect.Name = "source_context"
- Type_Syntax_field_name protoreflect.Name = "syntax"
- Type_Edition_field_name protoreflect.Name = "edition"
-
- Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name"
- Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields"
- Type_Oneofs_field_fullname protoreflect.FullName = "google.protobuf.Type.oneofs"
- Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options"
- Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context"
- Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax"
- Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition"
-)
-
-// Field numbers for google.protobuf.Type.
-const (
- Type_Name_field_number protoreflect.FieldNumber = 1
- Type_Fields_field_number protoreflect.FieldNumber = 2
- Type_Oneofs_field_number protoreflect.FieldNumber = 3
- Type_Options_field_number protoreflect.FieldNumber = 4
- Type_SourceContext_field_number protoreflect.FieldNumber = 5
- Type_Syntax_field_number protoreflect.FieldNumber = 6
- Type_Edition_field_number protoreflect.FieldNumber = 7
-)
-
-// Names for google.protobuf.Field.
-const (
- Field_message_name protoreflect.Name = "Field"
- Field_message_fullname protoreflect.FullName = "google.protobuf.Field"
-)
-
-// Field names for google.protobuf.Field.
-const (
- Field_Kind_field_name protoreflect.Name = "kind"
- Field_Cardinality_field_name protoreflect.Name = "cardinality"
- Field_Number_field_name protoreflect.Name = "number"
- Field_Name_field_name protoreflect.Name = "name"
- Field_TypeUrl_field_name protoreflect.Name = "type_url"
- Field_OneofIndex_field_name protoreflect.Name = "oneof_index"
- Field_Packed_field_name protoreflect.Name = "packed"
- Field_Options_field_name protoreflect.Name = "options"
- Field_JsonName_field_name protoreflect.Name = "json_name"
- Field_DefaultValue_field_name protoreflect.Name = "default_value"
-
- Field_Kind_field_fullname protoreflect.FullName = "google.protobuf.Field.kind"
- Field_Cardinality_field_fullname protoreflect.FullName = "google.protobuf.Field.cardinality"
- Field_Number_field_fullname protoreflect.FullName = "google.protobuf.Field.number"
- Field_Name_field_fullname protoreflect.FullName = "google.protobuf.Field.name"
- Field_TypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Field.type_url"
- Field_OneofIndex_field_fullname protoreflect.FullName = "google.protobuf.Field.oneof_index"
- Field_Packed_field_fullname protoreflect.FullName = "google.protobuf.Field.packed"
- Field_Options_field_fullname protoreflect.FullName = "google.protobuf.Field.options"
- Field_JsonName_field_fullname protoreflect.FullName = "google.protobuf.Field.json_name"
- Field_DefaultValue_field_fullname protoreflect.FullName = "google.protobuf.Field.default_value"
-)
-
-// Field numbers for google.protobuf.Field.
-const (
- Field_Kind_field_number protoreflect.FieldNumber = 1
- Field_Cardinality_field_number protoreflect.FieldNumber = 2
- Field_Number_field_number protoreflect.FieldNumber = 3
- Field_Name_field_number protoreflect.FieldNumber = 4
- Field_TypeUrl_field_number protoreflect.FieldNumber = 6
- Field_OneofIndex_field_number protoreflect.FieldNumber = 7
- Field_Packed_field_number protoreflect.FieldNumber = 8
- Field_Options_field_number protoreflect.FieldNumber = 9
- Field_JsonName_field_number protoreflect.FieldNumber = 10
- Field_DefaultValue_field_number protoreflect.FieldNumber = 11
-)
-
-// Full and short names for google.protobuf.Field.Kind.
-const (
- Field_Kind_enum_fullname = "google.protobuf.Field.Kind"
- Field_Kind_enum_name = "Kind"
-)
-
-// Enum values for google.protobuf.Field.Kind.
-const (
- Field_TYPE_UNKNOWN_enum_value = 0
- Field_TYPE_DOUBLE_enum_value = 1
- Field_TYPE_FLOAT_enum_value = 2
- Field_TYPE_INT64_enum_value = 3
- Field_TYPE_UINT64_enum_value = 4
- Field_TYPE_INT32_enum_value = 5
- Field_TYPE_FIXED64_enum_value = 6
- Field_TYPE_FIXED32_enum_value = 7
- Field_TYPE_BOOL_enum_value = 8
- Field_TYPE_STRING_enum_value = 9
- Field_TYPE_GROUP_enum_value = 10
- Field_TYPE_MESSAGE_enum_value = 11
- Field_TYPE_BYTES_enum_value = 12
- Field_TYPE_UINT32_enum_value = 13
- Field_TYPE_ENUM_enum_value = 14
- Field_TYPE_SFIXED32_enum_value = 15
- Field_TYPE_SFIXED64_enum_value = 16
- Field_TYPE_SINT32_enum_value = 17
- Field_TYPE_SINT64_enum_value = 18
-)
-
-// Full and short names for google.protobuf.Field.Cardinality.
-const (
- Field_Cardinality_enum_fullname = "google.protobuf.Field.Cardinality"
- Field_Cardinality_enum_name = "Cardinality"
-)
-
-// Enum values for google.protobuf.Field.Cardinality.
-const (
- Field_CARDINALITY_UNKNOWN_enum_value = 0
- Field_CARDINALITY_OPTIONAL_enum_value = 1
- Field_CARDINALITY_REQUIRED_enum_value = 2
- Field_CARDINALITY_REPEATED_enum_value = 3
-)
-
-// Names for google.protobuf.Enum.
-const (
- Enum_message_name protoreflect.Name = "Enum"
- Enum_message_fullname protoreflect.FullName = "google.protobuf.Enum"
-)
-
-// Field names for google.protobuf.Enum.
-const (
- Enum_Name_field_name protoreflect.Name = "name"
- Enum_Enumvalue_field_name protoreflect.Name = "enumvalue"
- Enum_Options_field_name protoreflect.Name = "options"
- Enum_SourceContext_field_name protoreflect.Name = "source_context"
- Enum_Syntax_field_name protoreflect.Name = "syntax"
- Enum_Edition_field_name protoreflect.Name = "edition"
-
- Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name"
- Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue"
- Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options"
- Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context"
- Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax"
- Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition"
-)
-
-// Field numbers for google.protobuf.Enum.
-const (
- Enum_Name_field_number protoreflect.FieldNumber = 1
- Enum_Enumvalue_field_number protoreflect.FieldNumber = 2
- Enum_Options_field_number protoreflect.FieldNumber = 3
- Enum_SourceContext_field_number protoreflect.FieldNumber = 4
- Enum_Syntax_field_number protoreflect.FieldNumber = 5
- Enum_Edition_field_number protoreflect.FieldNumber = 6
-)
-
-// Names for google.protobuf.EnumValue.
-const (
- EnumValue_message_name protoreflect.Name = "EnumValue"
- EnumValue_message_fullname protoreflect.FullName = "google.protobuf.EnumValue"
-)
-
-// Field names for google.protobuf.EnumValue.
-const (
- EnumValue_Name_field_name protoreflect.Name = "name"
- EnumValue_Number_field_name protoreflect.Name = "number"
- EnumValue_Options_field_name protoreflect.Name = "options"
-
- EnumValue_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumValue.name"
- EnumValue_Number_field_fullname protoreflect.FullName = "google.protobuf.EnumValue.number"
- EnumValue_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumValue.options"
-)
-
-// Field numbers for google.protobuf.EnumValue.
-const (
- EnumValue_Name_field_number protoreflect.FieldNumber = 1
- EnumValue_Number_field_number protoreflect.FieldNumber = 2
- EnumValue_Options_field_number protoreflect.FieldNumber = 3
-)
-
-// Names for google.protobuf.Option.
-const (
- Option_message_name protoreflect.Name = "Option"
- Option_message_fullname protoreflect.FullName = "google.protobuf.Option"
-)
-
-// Field names for google.protobuf.Option.
-const (
- Option_Name_field_name protoreflect.Name = "name"
- Option_Value_field_name protoreflect.Name = "value"
-
- Option_Name_field_fullname protoreflect.FullName = "google.protobuf.Option.name"
- Option_Value_field_fullname protoreflect.FullName = "google.protobuf.Option.value"
-)
-
-// Field numbers for google.protobuf.Option.
-const (
- Option_Name_field_number protoreflect.FieldNumber = 1
- Option_Value_field_number protoreflect.FieldNumber = 2
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go b/vendor/google.golang.org/protobuf/internal/genid/wrappers.go
deleted file mode 100644
index 9404270de..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package genid
-
-import "google.golang.org/protobuf/reflect/protoreflect"
-
-// Generic field name and number for messages in wrappers.proto.
-const (
- WrapperValue_Value_field_name protoreflect.Name = "value"
- WrapperValue_Value_field_number protoreflect.FieldNumber = 1
-)
diff --git a/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go b/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go
deleted file mode 100644
index 72527d2ab..000000000
--- a/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package genid
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-const File_google_protobuf_wrappers_proto = "google/protobuf/wrappers.proto"
-
-// Names for google.protobuf.DoubleValue.
-const (
- DoubleValue_message_name protoreflect.Name = "DoubleValue"
- DoubleValue_message_fullname protoreflect.FullName = "google.protobuf.DoubleValue"
-)
-
-// Field names for google.protobuf.DoubleValue.
-const (
- DoubleValue_Value_field_name protoreflect.Name = "value"
-
- DoubleValue_Value_field_fullname protoreflect.FullName = "google.protobuf.DoubleValue.value"
-)
-
-// Field numbers for google.protobuf.DoubleValue.
-const (
- DoubleValue_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.FloatValue.
-const (
- FloatValue_message_name protoreflect.Name = "FloatValue"
- FloatValue_message_fullname protoreflect.FullName = "google.protobuf.FloatValue"
-)
-
-// Field names for google.protobuf.FloatValue.
-const (
- FloatValue_Value_field_name protoreflect.Name = "value"
-
- FloatValue_Value_field_fullname protoreflect.FullName = "google.protobuf.FloatValue.value"
-)
-
-// Field numbers for google.protobuf.FloatValue.
-const (
- FloatValue_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.Int64Value.
-const (
- Int64Value_message_name protoreflect.Name = "Int64Value"
- Int64Value_message_fullname protoreflect.FullName = "google.protobuf.Int64Value"
-)
-
-// Field names for google.protobuf.Int64Value.
-const (
- Int64Value_Value_field_name protoreflect.Name = "value"
-
- Int64Value_Value_field_fullname protoreflect.FullName = "google.protobuf.Int64Value.value"
-)
-
-// Field numbers for google.protobuf.Int64Value.
-const (
- Int64Value_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.UInt64Value.
-const (
- UInt64Value_message_name protoreflect.Name = "UInt64Value"
- UInt64Value_message_fullname protoreflect.FullName = "google.protobuf.UInt64Value"
-)
-
-// Field names for google.protobuf.UInt64Value.
-const (
- UInt64Value_Value_field_name protoreflect.Name = "value"
-
- UInt64Value_Value_field_fullname protoreflect.FullName = "google.protobuf.UInt64Value.value"
-)
-
-// Field numbers for google.protobuf.UInt64Value.
-const (
- UInt64Value_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.Int32Value.
-const (
- Int32Value_message_name protoreflect.Name = "Int32Value"
- Int32Value_message_fullname protoreflect.FullName = "google.protobuf.Int32Value"
-)
-
-// Field names for google.protobuf.Int32Value.
-const (
- Int32Value_Value_field_name protoreflect.Name = "value"
-
- Int32Value_Value_field_fullname protoreflect.FullName = "google.protobuf.Int32Value.value"
-)
-
-// Field numbers for google.protobuf.Int32Value.
-const (
- Int32Value_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.UInt32Value.
-const (
- UInt32Value_message_name protoreflect.Name = "UInt32Value"
- UInt32Value_message_fullname protoreflect.FullName = "google.protobuf.UInt32Value"
-)
-
-// Field names for google.protobuf.UInt32Value.
-const (
- UInt32Value_Value_field_name protoreflect.Name = "value"
-
- UInt32Value_Value_field_fullname protoreflect.FullName = "google.protobuf.UInt32Value.value"
-)
-
-// Field numbers for google.protobuf.UInt32Value.
-const (
- UInt32Value_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.BoolValue.
-const (
- BoolValue_message_name protoreflect.Name = "BoolValue"
- BoolValue_message_fullname protoreflect.FullName = "google.protobuf.BoolValue"
-)
-
-// Field names for google.protobuf.BoolValue.
-const (
- BoolValue_Value_field_name protoreflect.Name = "value"
-
- BoolValue_Value_field_fullname protoreflect.FullName = "google.protobuf.BoolValue.value"
-)
-
-// Field numbers for google.protobuf.BoolValue.
-const (
- BoolValue_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.StringValue.
-const (
- StringValue_message_name protoreflect.Name = "StringValue"
- StringValue_message_fullname protoreflect.FullName = "google.protobuf.StringValue"
-)
-
-// Field names for google.protobuf.StringValue.
-const (
- StringValue_Value_field_name protoreflect.Name = "value"
-
- StringValue_Value_field_fullname protoreflect.FullName = "google.protobuf.StringValue.value"
-)
-
-// Field numbers for google.protobuf.StringValue.
-const (
- StringValue_Value_field_number protoreflect.FieldNumber = 1
-)
-
-// Names for google.protobuf.BytesValue.
-const (
- BytesValue_message_name protoreflect.Name = "BytesValue"
- BytesValue_message_fullname protoreflect.FullName = "google.protobuf.BytesValue"
-)
-
-// Field names for google.protobuf.BytesValue.
-const (
- BytesValue_Value_field_name protoreflect.Name = "value"
-
- BytesValue_Value_field_fullname protoreflect.FullName = "google.protobuf.BytesValue.value"
-)
-
-// Field numbers for google.protobuf.BytesValue.
-const (
- BytesValue_Value_field_number protoreflect.FieldNumber = 1
-)
diff --git a/vendor/google.golang.org/protobuf/internal/impl/api_export.go b/vendor/google.golang.org/protobuf/internal/impl/api_export.go
deleted file mode 100644
index 5d5771c2e..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/api_export.go
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "strconv"
-
- "google.golang.org/protobuf/encoding/prototext"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// Export is a zero-length named type that exists only to export a set of
-// functions that we do not want to appear in godoc.
-type Export struct{}
-
-// NewError formats a string according to the format specifier and arguments and
-// returns an error that has a "proto" prefix.
-func (Export) NewError(f string, x ...any) error {
- return errors.New(f, x...)
-}
-
-// enum is any enum type generated by protoc-gen-go
-// and must be a named int32 type.
-type enum = any
-
-// EnumOf returns the protoreflect.Enum interface over e.
-// It returns nil if e is nil.
-func (Export) EnumOf(e enum) protoreflect.Enum {
- switch e := e.(type) {
- case nil:
- return nil
- case protoreflect.Enum:
- return e
- default:
- return legacyWrapEnum(reflect.ValueOf(e))
- }
-}
-
-// EnumDescriptorOf returns the protoreflect.EnumDescriptor for e.
-// It returns nil if e is nil.
-func (Export) EnumDescriptorOf(e enum) protoreflect.EnumDescriptor {
- switch e := e.(type) {
- case nil:
- return nil
- case protoreflect.Enum:
- return e.Descriptor()
- default:
- return LegacyLoadEnumDesc(reflect.TypeOf(e))
- }
-}
-
-// EnumTypeOf returns the protoreflect.EnumType for e.
-// It returns nil if e is nil.
-func (Export) EnumTypeOf(e enum) protoreflect.EnumType {
- switch e := e.(type) {
- case nil:
- return nil
- case protoreflect.Enum:
- return e.Type()
- default:
- return legacyLoadEnumType(reflect.TypeOf(e))
- }
-}
-
-// EnumStringOf returns the enum value as a string, either as the name if
-// the number is resolvable, or the number formatted as a string.
-func (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNumber) string {
- ev := ed.Values().ByNumber(n)
- if ev != nil {
- return string(ev.Name())
- }
- return strconv.Itoa(int(n))
-}
-
-// message is any message type generated by protoc-gen-go
-// and must be a pointer to a named struct type.
-type message = any
-
-// legacyMessageWrapper wraps a v2 message as a v1 message.
-type legacyMessageWrapper struct{ m protoreflect.ProtoMessage }
-
-func (m legacyMessageWrapper) Reset() { proto.Reset(m.m) }
-func (m legacyMessageWrapper) String() string { return Export{}.MessageStringOf(m.m) }
-func (m legacyMessageWrapper) ProtoMessage() {}
-
-// ProtoMessageV1Of converts either a v1 or v2 message to a v1 message.
-// It returns nil if m is nil.
-func (Export) ProtoMessageV1Of(m message) protoiface.MessageV1 {
- switch mv := m.(type) {
- case nil:
- return nil
- case protoiface.MessageV1:
- return mv
- case unwrapper:
- return Export{}.ProtoMessageV1Of(mv.protoUnwrap())
- case protoreflect.ProtoMessage:
- return legacyMessageWrapper{mv}
- default:
- panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m))
- }
-}
-
-func (Export) protoMessageV2Of(m message) protoreflect.ProtoMessage {
- switch mv := m.(type) {
- case nil:
- return nil
- case protoreflect.ProtoMessage:
- return mv
- case legacyMessageWrapper:
- return mv.m
- case protoiface.MessageV1:
- return nil
- default:
- panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m))
- }
-}
-
-// ProtoMessageV2Of converts either a v1 or v2 message to a v2 message.
-// It returns nil if m is nil.
-func (Export) ProtoMessageV2Of(m message) protoreflect.ProtoMessage {
- if m == nil {
- return nil
- }
- if mv := (Export{}).protoMessageV2Of(m); mv != nil {
- return mv
- }
- return legacyWrapMessage(reflect.ValueOf(m)).Interface()
-}
-
-// MessageOf returns the protoreflect.Message interface over m.
-// It returns nil if m is nil.
-func (Export) MessageOf(m message) protoreflect.Message {
- if m == nil {
- return nil
- }
- if mv := (Export{}).protoMessageV2Of(m); mv != nil {
- return mv.ProtoReflect()
- }
- return legacyWrapMessage(reflect.ValueOf(m))
-}
-
-// MessageDescriptorOf returns the protoreflect.MessageDescriptor for m.
-// It returns nil if m is nil.
-func (Export) MessageDescriptorOf(m message) protoreflect.MessageDescriptor {
- if m == nil {
- return nil
- }
- if mv := (Export{}).protoMessageV2Of(m); mv != nil {
- return mv.ProtoReflect().Descriptor()
- }
- return LegacyLoadMessageDesc(reflect.TypeOf(m))
-}
-
-// MessageTypeOf returns the protoreflect.MessageType for m.
-// It returns nil if m is nil.
-func (Export) MessageTypeOf(m message) protoreflect.MessageType {
- if m == nil {
- return nil
- }
- if mv := (Export{}).protoMessageV2Of(m); mv != nil {
- return mv.ProtoReflect().Type()
- }
- return legacyLoadMessageType(reflect.TypeOf(m), "")
-}
-
-// MessageStringOf returns the message value as a string,
-// which is the message serialized in the protobuf text format.
-func (Export) MessageStringOf(m protoreflect.ProtoMessage) string {
- return prototext.MarshalOptions{Multiline: false}.Format(m)
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go
deleted file mode 100644
index 6075d6f69..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "strconv"
- "sync/atomic"
- "unsafe"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func (Export) UnmarshalField(msg any, fieldNum int32) {
- UnmarshalField(msg.(protoreflect.ProtoMessage).ProtoReflect(), protoreflect.FieldNumber(fieldNum))
-}
-
-// Present checks the presence set for a certain field number (zero
-// based, ordered by appearance in original proto file). part is
-// a pointer to the correct element in the bitmask array, num is the
-// field number unaltered. Example (field number 70 -> part =
-// &m.XXX_presence[1], num = 70)
-func (Export) Present(part *uint32, num uint32) bool {
- // This hook will read an unprotected shadow presence set if
- // we're unning under the race detector
- raceDetectHookPresent(part, num)
- return atomic.LoadUint32(part)&(1<<(num%32)) > 0
-}
-
-// SetPresent adds a field to the presence set. part is a pointer to
-// the relevant element in the array and num is the field number
-// unaltered. size is the number of fields in the protocol
-// buffer.
-func (Export) SetPresent(part *uint32, num uint32, size uint32) {
- // This hook will mutate an unprotected shadow presence set if
- // we're running under the race detector
- raceDetectHookSetPresent(part, num, presenceSize(size))
- for {
- old := atomic.LoadUint32(part)
- if atomic.CompareAndSwapUint32(part, old, old|(1<<(num%32))) {
- return
- }
- }
-}
-
-// SetPresentNonAtomic is like SetPresent, but operates non-atomically.
-// It is meant for use by builder methods, where the message is known not
-// to be accessible yet by other goroutines.
-func (Export) SetPresentNonAtomic(part *uint32, num uint32, size uint32) {
- // This hook will mutate an unprotected shadow presence set if
- // we're running under the race detector
- raceDetectHookSetPresent(part, num, presenceSize(size))
- *part |= 1 << (num % 32)
-}
-
-// ClearPresence removes a field from the presence set. part is a
-// pointer to the relevant element in the presence array and num is
-// the field number unaltered.
-func (Export) ClearPresent(part *uint32, num uint32) {
- // This hook will mutate an unprotected shadow presence set if
- // we're running under the race detector
- raceDetectHookClearPresent(part, num)
- for {
- old := atomic.LoadUint32(part)
- if atomic.CompareAndSwapUint32(part, old, old&^(1<<(num%32))) {
- return
- }
- }
-}
-
-// interfaceToPointer takes a pointer to an empty interface whose value is a
-// pointer type, and converts it into a "pointer" that points to the same
-// target
-func interfaceToPointer(i *any) pointer {
- return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
-}
-
-func (p pointer) atomicGetPointer() pointer {
- return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))}
-}
-
-func (p pointer) atomicSetPointer(q pointer) {
- atomic.StorePointer((*unsafe.Pointer)(p.p), q.p)
-}
-
-// AtomicCheckPointerIsNil takes an interface (which is a pointer to a
-// pointer) and returns true if the pointed-to pointer is nil (using an
-// atomic load). This function is inlineable and, on x86, just becomes a
-// simple load and compare.
-func (Export) AtomicCheckPointerIsNil(ptr any) bool {
- return interfaceToPointer(&ptr).atomicGetPointer().IsNil()
-}
-
-// AtomicSetPointer takes two interfaces (first is a pointer to a pointer,
-// second is a pointer) and atomically sets the second pointer into location
-// referenced by first pointer. Unfortunately, atomicSetPointer() does not inline
-// (even on x86), so this does not become a simple store on x86.
-func (Export) AtomicSetPointer(dstPtr, valPtr any) {
- interfaceToPointer(&dstPtr).atomicSetPointer(interfaceToPointer(&valPtr))
-}
-
-// AtomicLoadPointer loads the pointer at the location pointed at by src,
-// and stores that pointer value into the location pointed at by dst.
-func (Export) AtomicLoadPointer(ptr Pointer, dst Pointer) {
- *(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr)))
-}
-
-// AtomicInitializePointer makes ptr and dst point to the same value.
-//
-// If *ptr is a nil pointer, it sets *ptr = *dst.
-//
-// If *ptr is a non-nil pointer, it sets *dst = *ptr.
-func (Export) AtomicInitializePointer(ptr Pointer, dst Pointer) {
- if !atomic.CompareAndSwapPointer((*unsafe.Pointer)(ptr), unsafe.Pointer(nil), *(*unsafe.Pointer)(dst)) {
- *(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr)))
- }
-}
-
-// MessageFieldStringOf returns the field formatted as a string,
-// either as the field name if resolvable otherwise as a decimal string.
-func (Export) MessageFieldStringOf(md protoreflect.MessageDescriptor, n protoreflect.FieldNumber) string {
- fd := md.Fields().ByNumber(n)
- if fd != nil {
- return string(fd.Name())
- }
- return strconv.Itoa(int(n))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/bitmap.go b/vendor/google.golang.org/protobuf/internal/impl/bitmap.go
deleted file mode 100644
index ea276547c..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/bitmap.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !race
-
-package impl
-
-// There is no additional data as we're not running under race detector.
-type RaceDetectHookData struct{}
-
-// Empty stubs for when not using the race detector. Calls to these from index.go should be optimized away.
-func (presence) raceDetectHookPresent(num uint32) {}
-func (presence) raceDetectHookSetPresent(num uint32, size presenceSize) {}
-func (presence) raceDetectHookClearPresent(num uint32) {}
-func (presence) raceDetectHookAllocAndCopy(src presence) {}
-
-// raceDetectHookPresent is called by the generated file interface
-// (*proto.internalFuncs) Present to optionally read an unprotected
-// shadow bitmap when race detection is enabled. In regular code it is
-// a noop.
-func raceDetectHookPresent(field *uint32, num uint32) {}
-
-// raceDetectHookSetPresent is called by the generated file interface
-// (*proto.internalFuncs) SetPresent to optionally write an unprotected
-// shadow bitmap when race detection is enabled. In regular code it is
-// a noop.
-func raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) {}
-
-// raceDetectHookClearPresent is called by the generated file interface
-// (*proto.internalFuncs) ClearPresent to optionally write an unprotected
-// shadow bitmap when race detection is enabled. In regular code it is
-// a noop.
-func raceDetectHookClearPresent(field *uint32, num uint32) {}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go b/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go
deleted file mode 100644
index e9a27583a..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build race
-
-package impl
-
-// When running under race detector, we add a presence map of bytes, that we can access
-// in the hook functions so that we trigger the race detection whenever we have concurrent
-// Read-Writes or Write-Writes. The race detector does not otherwise detect invalid concurrent
-// access to lazy fields as all updates of bitmaps and pointers are done using atomic operations.
-type RaceDetectHookData struct {
- shadowPresence *[]byte
-}
-
-// Hooks for presence bitmap operations that allocate, read and write the shadowPresence
-// using non-atomic operations.
-func (data *RaceDetectHookData) raceDetectHookAlloc(size presenceSize) {
- sp := make([]byte, size)
- atomicStoreShadowPresence(&data.shadowPresence, &sp)
-}
-
-func (p presence) raceDetectHookPresent(num uint32) {
- data := p.toRaceDetectData()
- if data == nil {
- return
- }
- sp := atomicLoadShadowPresence(&data.shadowPresence)
- if sp != nil {
- _ = (*sp)[num]
- }
-}
-
-func (p presence) raceDetectHookSetPresent(num uint32, size presenceSize) {
- data := p.toRaceDetectData()
- if data == nil {
- return
- }
- sp := atomicLoadShadowPresence(&data.shadowPresence)
- if sp == nil {
- data.raceDetectHookAlloc(size)
- sp = atomicLoadShadowPresence(&data.shadowPresence)
- }
- (*sp)[num] = 1
-}
-
-func (p presence) raceDetectHookClearPresent(num uint32) {
- data := p.toRaceDetectData()
- if data == nil {
- return
- }
- sp := atomicLoadShadowPresence(&data.shadowPresence)
- if sp != nil {
- (*sp)[num] = 0
-
- }
-}
-
-// raceDetectHookAllocAndCopy allocates a new shadowPresence slice at lazy and copies
-// shadowPresence bytes from src to lazy.
-func (p presence) raceDetectHookAllocAndCopy(q presence) {
- sData := q.toRaceDetectData()
- dData := p.toRaceDetectData()
- if sData == nil {
- return
- }
- srcSp := atomicLoadShadowPresence(&sData.shadowPresence)
- if srcSp == nil {
- atomicStoreShadowPresence(&dData.shadowPresence, nil)
- return
- }
- n := len(*srcSp)
- dSlice := make([]byte, n)
- atomicStoreShadowPresence(&dData.shadowPresence, &dSlice)
- for i := 0; i < n; i++ {
- dSlice[i] = (*srcSp)[i]
- }
-}
-
-// raceDetectHookPresent is called by the generated file interface
-// (*proto.internalFuncs) Present to optionally read an unprotected
-// shadow bitmap when race detection is enabled. In regular code it is
-// a noop.
-func raceDetectHookPresent(field *uint32, num uint32) {
- data := findPointerToRaceDetectData(field, num)
- if data == nil {
- return
- }
- sp := atomicLoadShadowPresence(&data.shadowPresence)
- if sp != nil {
- _ = (*sp)[num]
- }
-}
-
-// raceDetectHookSetPresent is called by the generated file interface
-// (*proto.internalFuncs) SetPresent to optionally write an unprotected
-// shadow bitmap when race detection is enabled. In regular code it is
-// a noop.
-func raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) {
- data := findPointerToRaceDetectData(field, num)
- if data == nil {
- return
- }
- sp := atomicLoadShadowPresence(&data.shadowPresence)
- if sp == nil {
- data.raceDetectHookAlloc(size)
- sp = atomicLoadShadowPresence(&data.shadowPresence)
- }
- (*sp)[num] = 1
-}
-
-// raceDetectHookClearPresent is called by the generated file interface
-// (*proto.internalFuncs) ClearPresent to optionally write an unprotected
-// shadow bitmap when race detection is enabled. In regular code it is
-// a noop.
-func raceDetectHookClearPresent(field *uint32, num uint32) {
- data := findPointerToRaceDetectData(field, num)
- if data == nil {
- return
- }
- sp := atomicLoadShadowPresence(&data.shadowPresence)
- if sp != nil {
- (*sp)[num] = 0
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/checkinit.go b/vendor/google.golang.org/protobuf/internal/impl/checkinit.go
deleted file mode 100644
index fe2c719ce..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/checkinit.go
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "sync"
-
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-func (mi *MessageInfo) checkInitialized(in protoiface.CheckInitializedInput) (protoiface.CheckInitializedOutput, error) {
- var p pointer
- if ms, ok := in.Message.(*messageState); ok {
- p = ms.pointer()
- } else {
- p = in.Message.(*messageReflectWrapper).pointer()
- }
- return protoiface.CheckInitializedOutput{}, mi.checkInitializedPointer(p)
-}
-
-func (mi *MessageInfo) checkInitializedPointer(p pointer) error {
- mi.init()
- if !mi.needsInitCheck {
- return nil
- }
- if p.IsNil() {
- for _, f := range mi.orderedCoderFields {
- if f.isRequired {
- return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))
- }
- }
- return nil
- }
-
- var presence presence
- if mi.presenceOffset.IsValid() {
- presence = p.Apply(mi.presenceOffset).PresenceInfo()
- }
-
- if mi.extensionOffset.IsValid() {
- e := p.Apply(mi.extensionOffset).Extensions()
- if err := mi.isInitExtensions(e); err != nil {
- return err
- }
- }
- for _, f := range mi.orderedCoderFields {
- if !f.isRequired && f.funcs.isInit == nil {
- continue
- }
-
- if f.presenceIndex != noPresence {
- if !presence.Present(f.presenceIndex) {
- if f.isRequired {
- return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))
- }
- continue
- }
- if f.funcs.isInit != nil {
- f.mi.init()
- if f.mi.needsInitCheck {
- if f.isLazy && p.Apply(f.offset).AtomicGetPointer().IsNil() {
- lazy := *p.Apply(mi.lazyOffset).LazyInfoPtr()
- if !lazy.AllowedPartial() {
- // Nothing to see here, it was checked on unmarshal
- continue
- }
- mi.lazyUnmarshal(p, f.num)
- }
- if err := f.funcs.isInit(p.Apply(f.offset), f); err != nil {
- return err
- }
- }
- }
- continue
- }
-
- fptr := p.Apply(f.offset)
- if f.isPointer && fptr.Elem().IsNil() {
- if f.isRequired {
- return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))
- }
- continue
- }
- if f.funcs.isInit == nil {
- continue
- }
- if err := f.funcs.isInit(fptr, f); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (mi *MessageInfo) isInitExtensions(ext *map[int32]ExtensionField) error {
- if ext == nil {
- return nil
- }
- for _, x := range *ext {
- ei := getExtensionFieldInfo(x.Type())
- if ei.funcs.isInit == nil || x.isUnexpandedLazy() {
- continue
- }
- v := x.Value()
- if !v.IsValid() {
- continue
- }
- if err := ei.funcs.isInit(v); err != nil {
- return err
- }
- }
- return nil
-}
-
-var (
- needsInitCheckMu sync.Mutex
- needsInitCheckMap sync.Map
-)
-
-// needsInitCheck reports whether a message needs to be checked for partial initialization.
-//
-// It returns true if the message transitively includes any required or extension fields.
-func needsInitCheck(md protoreflect.MessageDescriptor) bool {
- if v, ok := needsInitCheckMap.Load(md); ok {
- if has, ok := v.(bool); ok {
- return has
- }
- }
- needsInitCheckMu.Lock()
- defer needsInitCheckMu.Unlock()
- return needsInitCheckLocked(md)
-}
-
-func needsInitCheckLocked(md protoreflect.MessageDescriptor) (has bool) {
- if v, ok := needsInitCheckMap.Load(md); ok {
- // If has is true, we've previously determined that this message
- // needs init checks.
- //
- // If has is false, we've previously determined that it can never
- // be uninitialized.
- //
- // If has is not a bool, we've just encountered a cycle in the
- // message graph. In this case, it is safe to return false: If
- // the message does have required fields, we'll detect them later
- // in the graph traversal.
- has, ok := v.(bool)
- return ok && has
- }
- needsInitCheckMap.Store(md, struct{}{}) // avoid cycles while descending into this message
- defer func() {
- needsInitCheckMap.Store(md, has)
- }()
- if md.RequiredNumbers().Len() > 0 {
- return true
- }
- if md.ExtensionRanges().Len() > 0 {
- return true
- }
- for i := 0; i < md.Fields().Len(); i++ {
- fd := md.Fields().Get(i)
- // Map keys are never messages, so just consider the map value.
- if fd.IsMap() {
- fd = fd.MapValue()
- }
- fmd := fd.Message()
- if fmd != nil && needsInitCheckLocked(fmd) {
- return true
- }
- }
- return false
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
deleted file mode 100644
index 0d5b546e0..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "sync"
- "sync/atomic"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type extensionFieldInfo struct {
- wiretag uint64
- tagsize int
- unmarshalNeedsValue bool
- funcs valueCoderFuncs
- validation validationInfo
-}
-
-func getExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo {
- if xi, ok := xt.(*ExtensionInfo); ok {
- xi.lazyInit()
- return xi.info
- }
- // Ideally we'd cache the resulting *extensionFieldInfo so we don't have to
- // recompute this metadata repeatedly. But without support for something like
- // weak references, such a cache would pin temporary values (like dynamic
- // extension types, constructed for the duration of a user request) to the
- // heap forever, causing memory usage of the cache to grow unbounded.
- // See discussion in https://github.com/golang/protobuf/issues/1521.
- return makeExtensionFieldInfo(xt.TypeDescriptor())
-}
-
-func makeExtensionFieldInfo(xd protoreflect.ExtensionDescriptor) *extensionFieldInfo {
- var wiretag uint64
- if !xd.IsPacked() {
- wiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()])
- } else {
- wiretag = protowire.EncodeTag(xd.Number(), protowire.BytesType)
- }
- e := &extensionFieldInfo{
- wiretag: wiretag,
- tagsize: protowire.SizeVarint(wiretag),
- funcs: encoderFuncsForValue(xd),
- }
- // Does the unmarshal function need a value passed to it?
- // This is true for composite types, where we pass in a message, list, or map to fill in,
- // and for enums, where we pass in a prototype value to specify the concrete enum type.
- switch xd.Kind() {
- case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.EnumKind:
- e.unmarshalNeedsValue = true
- default:
- if xd.Cardinality() == protoreflect.Repeated {
- e.unmarshalNeedsValue = true
- }
- }
- return e
-}
-
-type lazyExtensionValue struct {
- atomicOnce uint32 // atomically set if value is valid
- mu sync.Mutex
- xi *extensionFieldInfo
- value protoreflect.Value
- b []byte
-}
-
-type ExtensionField struct {
- typ protoreflect.ExtensionType
-
- // value is either the value of GetValue,
- // or a *lazyExtensionValue that then returns the value of GetValue.
- value protoreflect.Value
- lazy *lazyExtensionValue
-}
-
-func (f *ExtensionField) appendLazyBytes(xt protoreflect.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) {
- if f.lazy == nil {
- f.lazy = &lazyExtensionValue{xi: xi}
- }
- f.typ = xt
- f.lazy.xi = xi
- f.lazy.b = protowire.AppendTag(f.lazy.b, num, wtyp)
- f.lazy.b = append(f.lazy.b, b...)
-}
-
-func (f *ExtensionField) canLazy(xt protoreflect.ExtensionType) bool {
- if f.typ == nil {
- return true
- }
- if f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {
- return true
- }
- return false
-}
-
-// isUnexpandedLazy returns true if the ExensionField is lazy and not
-// yet expanded, which means it's present and already checked for
-// initialized required fields.
-func (f *ExtensionField) isUnexpandedLazy() bool {
- return f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0
-}
-
-// lazyBuffer retrieves the buffer for a lazy extension if it's not yet expanded.
-//
-// The returned buffer has to be kept over whatever operation we're planning,
-// as re-retrieving it will fail after the message is lazily decoded.
-func (f *ExtensionField) lazyBuffer() []byte {
- // This function might be in the critical path, so check the atomic without
- // taking a look first, then only take the lock if needed.
- if !f.isUnexpandedLazy() {
- return nil
- }
- f.lazy.mu.Lock()
- defer f.lazy.mu.Unlock()
- return f.lazy.b
-}
-
-func (f *ExtensionField) lazyInit() {
- f.lazy.mu.Lock()
- defer f.lazy.mu.Unlock()
- if atomic.LoadUint32(&f.lazy.atomicOnce) == 1 {
- return
- }
- if f.lazy.xi != nil {
- b := f.lazy.b
- val := f.typ.New()
- for len(b) > 0 {
- var tag uint64
- if b[0] < 0x80 {
- tag = uint64(b[0])
- b = b[1:]
- } else if len(b) >= 2 && b[1] < 128 {
- tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
- b = b[2:]
- } else {
- var n int
- tag, n = protowire.ConsumeVarint(b)
- if n < 0 {
- panic(errors.New("bad tag in lazy extension decoding"))
- }
- b = b[n:]
- }
- num := protowire.Number(tag >> 3)
- wtyp := protowire.Type(tag & 7)
- var out unmarshalOutput
- var err error
- val, out, err = f.lazy.xi.funcs.unmarshal(b, val, num, wtyp, lazyUnmarshalOptions)
- if err != nil {
- panic(errors.New("decode failure in lazy extension decoding: %v", err))
- }
- b = b[out.n:]
- }
- f.lazy.value = val
- } else {
- panic("No support for lazy fns for ExtensionField")
- }
- f.lazy.xi = nil
- f.lazy.b = nil
- atomic.StoreUint32(&f.lazy.atomicOnce, 1)
-}
-
-// Set sets the type and value of the extension field.
-// This must not be called concurrently.
-func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value) {
- f.typ = t
- f.value = v
- f.lazy = nil
-}
-
-// Value returns the value of the extension field.
-// This may be called concurrently.
-func (f *ExtensionField) Value() protoreflect.Value {
- if f.lazy != nil {
- if atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {
- f.lazyInit()
- }
- return f.lazy.value
- }
- return f.value
-}
-
-// Type returns the type of the extension field.
-// This may be called concurrently.
-func (f ExtensionField) Type() protoreflect.ExtensionType {
- return f.typ
-}
-
-// IsSet returns whether the extension field is set.
-// This may be called concurrently.
-func (f ExtensionField) IsSet() bool {
- return f.typ != nil
-}
-
-// IsLazy reports whether a field is lazily encoded.
-// It is exported for testing.
-func IsLazy(m protoreflect.Message, fd protoreflect.FieldDescriptor) bool {
- var mi *MessageInfo
- var p pointer
- switch m := m.(type) {
- case *messageState:
- mi = m.messageInfo()
- p = m.pointer()
- case *messageReflectWrapper:
- mi = m.messageInfo()
- p = m.pointer()
- default:
- return false
- }
- xd, ok := fd.(protoreflect.ExtensionTypeDescriptor)
- if !ok {
- return false
- }
- xt := xd.Type()
- ext := mi.extensionMap(p)
- if ext == nil {
- return false
- }
- f, ok := (*ext)[int32(fd.Number())]
- if !ok {
- return false
- }
- return f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go
deleted file mode 100644
index 7c1f66c8c..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go
+++ /dev/null
@@ -1,863 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "sync"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-type errInvalidUTF8 struct{}
-
-func (errInvalidUTF8) Error() string { return "string field contains invalid UTF-8" }
-func (errInvalidUTF8) InvalidUTF8() bool { return true }
-func (errInvalidUTF8) Unwrap() error { return errors.Error }
-
-// initOneofFieldCoders initializes the fast-path functions for the fields in a oneof.
-//
-// For size, marshal, and isInit operations, functions are set only on the first field
-// in the oneof. The functions are called when the oneof is non-nil, and will dispatch
-// to the appropriate field-specific function as necessary.
-//
-// The unmarshal function is set on each field individually as usual.
-func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si structInfo) {
- fs := si.oneofsByName[od.Name()]
- ft := fs.Type
- oneofFields := make(map[reflect.Type]*coderFieldInfo)
- needIsInit := false
- fields := od.Fields()
- for i, lim := 0, fields.Len(); i < lim; i++ {
- fd := od.Fields().Get(i)
- num := fd.Number()
- // Make a copy of the original coderFieldInfo for use in unmarshaling.
- //
- // oneofFields[oneofType].funcs.marshal is the field-specific marshal function.
- //
- // mi.coderFields[num].marshal is set on only the first field in the oneof,
- // and dispatches to the field-specific marshaler in oneofFields.
- cf := *mi.coderFields[num]
- ot := si.oneofWrappersByNumber[num]
- cf.ft = ot.Field(0).Type
- cf.mi, cf.funcs = fieldCoder(fd, cf.ft)
- oneofFields[ot] = &cf
- if cf.funcs.isInit != nil {
- needIsInit = true
- }
- mi.coderFields[num].funcs.unmarshal = func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- var vw reflect.Value // pointer to wrapper type
- vi := p.AsValueOf(ft).Elem() // oneof field value of interface kind
- if !vi.IsNil() && !vi.Elem().IsNil() && vi.Elem().Elem().Type() == ot {
- vw = vi.Elem()
- } else {
- vw = reflect.New(ot)
- }
- out, err := cf.funcs.unmarshal(b, pointerOfValue(vw).Apply(zeroOffset), wtyp, &cf, opts)
- if err != nil {
- return out, err
- }
- if cf.funcs.isInit == nil {
- out.initialized = true
- }
- vi.Set(vw)
- return out, nil
- }
- }
- getInfo := func(p pointer) (pointer, *coderFieldInfo) {
- v := p.AsValueOf(ft).Elem()
- if v.IsNil() {
- return pointer{}, nil
- }
- v = v.Elem() // interface -> *struct
- if v.IsNil() {
- return pointer{}, nil
- }
- return pointerOfValue(v).Apply(zeroOffset), oneofFields[v.Elem().Type()]
- }
- first := mi.coderFields[od.Fields().Get(0).Number()]
- first.funcs.size = func(p pointer, _ *coderFieldInfo, opts marshalOptions) int {
- p, info := getInfo(p)
- if info == nil || info.funcs.size == nil {
- return 0
- }
- return info.funcs.size(p, info, opts)
- }
- first.funcs.marshal = func(b []byte, p pointer, _ *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- p, info := getInfo(p)
- if info == nil || info.funcs.marshal == nil {
- return b, nil
- }
- return info.funcs.marshal(b, p, info, opts)
- }
- first.funcs.merge = func(dst, src pointer, _ *coderFieldInfo, opts mergeOptions) {
- srcp, srcinfo := getInfo(src)
- if srcinfo == nil || srcinfo.funcs.merge == nil {
- return
- }
- dstp, dstinfo := getInfo(dst)
- if dstinfo != srcinfo {
- dst.AsValueOf(ft).Elem().Set(reflect.New(src.AsValueOf(ft).Elem().Elem().Elem().Type()))
- dstp = pointerOfValue(dst.AsValueOf(ft).Elem().Elem()).Apply(zeroOffset)
- }
- srcinfo.funcs.merge(dstp, srcp, srcinfo, opts)
- }
- if needIsInit {
- first.funcs.isInit = func(p pointer, _ *coderFieldInfo) error {
- p, info := getInfo(p)
- if info == nil || info.funcs.isInit == nil {
- return nil
- }
- return info.funcs.isInit(p, info)
- }
- }
-}
-
-func makeWeakMessageFieldCoder(fd protoreflect.FieldDescriptor) pointerCoderFuncs {
- var once sync.Once
- var messageType protoreflect.MessageType
- lazyInit := func() {
- once.Do(func() {
- messageName := fd.Message().FullName()
- messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName)
- })
- }
-
- return pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- m, ok := p.WeakFields().get(f.num)
- if !ok {
- return 0
- }
- lazyInit()
- if messageType == nil {
- panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName()))
- }
- return sizeMessage(m, f.tagsize, opts)
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- m, ok := p.WeakFields().get(f.num)
- if !ok {
- return b, nil
- }
- lazyInit()
- if messageType == nil {
- panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName()))
- }
- return appendMessage(b, m, f.wiretag, opts)
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- fs := p.WeakFields()
- m, ok := fs.get(f.num)
- if !ok {
- lazyInit()
- if messageType == nil {
- return unmarshalOutput{}, errUnknown
- }
- m = messageType.New().Interface()
- fs.set(f.num, m)
- }
- return consumeMessage(b, m, wtyp, opts)
- },
- isInit: func(p pointer, f *coderFieldInfo) error {
- m, ok := p.WeakFields().get(f.num)
- if !ok {
- return nil
- }
- return proto.CheckInitialized(m)
- },
- merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- sm, ok := src.WeakFields().get(f.num)
- if !ok {
- return
- }
- dm, ok := dst.WeakFields().get(f.num)
- if !ok {
- lazyInit()
- if messageType == nil {
- panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName()))
- }
- dm = messageType.New().Interface()
- dst.WeakFields().set(f.num, dm)
- }
- opts.Merge(dm, sm)
- },
- }
-}
-
-func makeMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
- if mi := getMessageInfo(ft); mi != nil {
- funcs := pointerCoderFuncs{
- size: sizeMessageInfo,
- marshal: appendMessageInfo,
- unmarshal: consumeMessageInfo,
- merge: mergeMessage,
- }
- if needsInitCheck(mi.Desc) {
- funcs.isInit = isInitMessageInfo
- }
- return funcs
- } else {
- return pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- m := asMessage(p.AsValueOf(ft).Elem())
- return sizeMessage(m, f.tagsize, opts)
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- m := asMessage(p.AsValueOf(ft).Elem())
- return appendMessage(b, m, f.wiretag, opts)
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- mp := p.AsValueOf(ft).Elem()
- if mp.IsNil() {
- mp.Set(reflect.New(ft.Elem()))
- }
- return consumeMessage(b, asMessage(mp), wtyp, opts)
- },
- isInit: func(p pointer, f *coderFieldInfo) error {
- m := asMessage(p.AsValueOf(ft).Elem())
- return proto.CheckInitialized(m)
- },
- merge: mergeMessage,
- }
- }
-}
-
-func sizeMessageInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- return protowire.SizeBytes(f.mi.sizePointer(p.Elem(), opts)) + f.tagsize
-}
-
-func appendMessageInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- calculatedSize := f.mi.sizePointer(p.Elem(), opts)
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(calculatedSize))
- before := len(b)
- b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts)
- if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil {
- return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)
- }
- return b, err
-}
-
-func consumeMessageInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if p.Elem().IsNil() {
- p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
- }
- o, err := f.mi.unmarshalPointer(v, p.Elem(), 0, opts)
- if err != nil {
- return out, err
- }
- out.n = n
- out.initialized = o.initialized
- return out, nil
-}
-
-func isInitMessageInfo(p pointer, f *coderFieldInfo) error {
- return f.mi.checkInitializedPointer(p.Elem())
-}
-
-func sizeMessage(m proto.Message, tagsize int, opts marshalOptions) int {
- return protowire.SizeBytes(opts.Options().Size(m)) + tagsize
-}
-
-func appendMessage(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) {
- mopts := opts.Options()
- calculatedSize := mopts.Size(m)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(calculatedSize))
- before := len(b)
- b, err := mopts.MarshalAppend(b, m)
- if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil {
- return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)
- }
- return b, err
-}
-
-func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
- Buf: v,
- Message: m.ProtoReflect(),
- })
- if err != nil {
- return out, err
- }
- out.n = n
- out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
- return out, nil
-}
-
-func sizeMessageValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- m := v.Message().Interface()
- return sizeMessage(m, tagsize, opts)
-}
-
-func appendMessageValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- m := v.Message().Interface()
- return appendMessage(b, m, wiretag, opts)
-}
-
-func consumeMessageValue(b []byte, v protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) {
- m := v.Message().Interface()
- out, err := consumeMessage(b, m, wtyp, opts)
- return v, out, err
-}
-
-func isInitMessageValue(v protoreflect.Value) error {
- m := v.Message().Interface()
- return proto.CheckInitialized(m)
-}
-
-var coderMessageValue = valueCoderFuncs{
- size: sizeMessageValue,
- marshal: appendMessageValue,
- unmarshal: consumeMessageValue,
- isInit: isInitMessageValue,
- merge: mergeMessageValue,
-}
-
-func sizeGroupValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- m := v.Message().Interface()
- return sizeGroup(m, tagsize, opts)
-}
-
-func appendGroupValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- m := v.Message().Interface()
- return appendGroup(b, m, wiretag, opts)
-}
-
-func consumeGroupValue(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) {
- m := v.Message().Interface()
- out, err := consumeGroup(b, m, num, wtyp, opts)
- return v, out, err
-}
-
-var coderGroupValue = valueCoderFuncs{
- size: sizeGroupValue,
- marshal: appendGroupValue,
- unmarshal: consumeGroupValue,
- isInit: isInitMessageValue,
- merge: mergeMessageValue,
-}
-
-func makeGroupFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
- num := fd.Number()
- if mi := getMessageInfo(ft); mi != nil {
- funcs := pointerCoderFuncs{
- size: sizeGroupType,
- marshal: appendGroupType,
- unmarshal: consumeGroupType,
- merge: mergeMessage,
- }
- if needsInitCheck(mi.Desc) {
- funcs.isInit = isInitMessageInfo
- }
- return funcs
- } else {
- return pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- m := asMessage(p.AsValueOf(ft).Elem())
- return sizeGroup(m, f.tagsize, opts)
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- m := asMessage(p.AsValueOf(ft).Elem())
- return appendGroup(b, m, f.wiretag, opts)
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- mp := p.AsValueOf(ft).Elem()
- if mp.IsNil() {
- mp.Set(reflect.New(ft.Elem()))
- }
- return consumeGroup(b, asMessage(mp), num, wtyp, opts)
- },
- isInit: func(p pointer, f *coderFieldInfo) error {
- m := asMessage(p.AsValueOf(ft).Elem())
- return proto.CheckInitialized(m)
- },
- merge: mergeMessage,
- }
- }
-}
-
-func sizeGroupType(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- return 2*f.tagsize + f.mi.sizePointer(p.Elem(), opts)
-}
-
-func appendGroupType(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, f.wiretag) // start group
- b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts)
- b = protowire.AppendVarint(b, f.wiretag+1) // end group
- return b, err
-}
-
-func consumeGroupType(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.StartGroupType {
- return out, errUnknown
- }
- if p.Elem().IsNil() {
- p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
- }
- return f.mi.unmarshalPointer(b, p.Elem(), f.num, opts)
-}
-
-func sizeGroup(m proto.Message, tagsize int, opts marshalOptions) int {
- return 2*tagsize + opts.Options().Size(m)
-}
-
-func appendGroup(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag) // start group
- b, err := opts.Options().MarshalAppend(b, m)
- b = protowire.AppendVarint(b, wiretag+1) // end group
- return b, err
-}
-
-func consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.StartGroupType {
- return out, errUnknown
- }
- b, n := protowire.ConsumeGroup(num, b)
- if n < 0 {
- return out, errDecode
- }
- o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
- Buf: b,
- Message: m.ProtoReflect(),
- })
- if err != nil {
- return out, err
- }
- out.n = n
- out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
- return out, nil
-}
-
-func makeMessageSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
- if mi := getMessageInfo(ft); mi != nil {
- funcs := pointerCoderFuncs{
- size: sizeMessageSliceInfo,
- marshal: appendMessageSliceInfo,
- unmarshal: consumeMessageSliceInfo,
- merge: mergeMessageSlice,
- }
- if needsInitCheck(mi.Desc) {
- funcs.isInit = isInitMessageSliceInfo
- }
- return funcs
- }
- return pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- return sizeMessageSlice(p, ft, f.tagsize, opts)
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- return appendMessageSlice(b, p, f.wiretag, ft, opts)
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- return consumeMessageSlice(b, p, ft, wtyp, opts)
- },
- isInit: func(p pointer, f *coderFieldInfo) error {
- return isInitMessageSlice(p, ft)
- },
- merge: mergeMessageSlice,
- }
-}
-
-func sizeMessageSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- s := p.PointerSlice()
- n := 0
- for _, v := range s {
- n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize
- }
- return n
-}
-
-func appendMessageSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := p.PointerSlice()
- var err error
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- siz := f.mi.sizePointer(v, opts)
- b = protowire.AppendVarint(b, uint64(siz))
- before := len(b)
- b, err = f.mi.marshalAppendPointer(b, v, opts)
- if err != nil {
- return b, err
- }
- if measuredSize := len(b) - before; siz != measuredSize {
- return nil, errors.MismatchedSizeCalculation(siz, measuredSize)
- }
- }
- return b, nil
-}
-
-func consumeMessageSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- m := reflect.New(f.mi.GoReflectType.Elem()).Interface()
- mp := pointerOfIface(m)
- o, err := f.mi.unmarshalPointer(v, mp, 0, opts)
- if err != nil {
- return out, err
- }
- p.AppendPointerSlice(mp)
- out.n = n
- out.initialized = o.initialized
- return out, nil
-}
-
-func isInitMessageSliceInfo(p pointer, f *coderFieldInfo) error {
- s := p.PointerSlice()
- for _, v := range s {
- if err := f.mi.checkInitializedPointer(v); err != nil {
- return err
- }
- }
- return nil
-}
-
-func sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, opts marshalOptions) int {
- mopts := opts.Options()
- s := p.PointerSlice()
- n := 0
- for _, v := range s {
- m := asMessage(v.AsValueOf(goType.Elem()))
- n += protowire.SizeBytes(mopts.Size(m)) + tagsize
- }
- return n
-}
-
-func appendMessageSlice(b []byte, p pointer, wiretag uint64, goType reflect.Type, opts marshalOptions) ([]byte, error) {
- mopts := opts.Options()
- s := p.PointerSlice()
- var err error
- for _, v := range s {
- m := asMessage(v.AsValueOf(goType.Elem()))
- b = protowire.AppendVarint(b, wiretag)
- siz := mopts.Size(m)
- b = protowire.AppendVarint(b, uint64(siz))
- before := len(b)
- b, err = mopts.MarshalAppend(b, m)
- if err != nil {
- return b, err
- }
- if measuredSize := len(b) - before; siz != measuredSize {
- return nil, errors.MismatchedSizeCalculation(siz, measuredSize)
- }
- }
- return b, nil
-}
-
-func consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- mp := reflect.New(goType.Elem())
- o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
- Buf: v,
- Message: asMessage(mp).ProtoReflect(),
- })
- if err != nil {
- return out, err
- }
- p.AppendPointerSlice(pointerOfValue(mp))
- out.n = n
- out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
- return out, nil
-}
-
-func isInitMessageSlice(p pointer, goType reflect.Type) error {
- s := p.PointerSlice()
- for _, v := range s {
- m := asMessage(v.AsValueOf(goType.Elem()))
- if err := proto.CheckInitialized(m); err != nil {
- return err
- }
- }
- return nil
-}
-
-// Slices of messages
-
-func sizeMessageSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int {
- mopts := opts.Options()
- list := listv.List()
- n := 0
- for i, llen := 0, list.Len(); i < llen; i++ {
- m := list.Get(i).Message().Interface()
- n += protowire.SizeBytes(mopts.Size(m)) + tagsize
- }
- return n
-}
-
-func appendMessageSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- mopts := opts.Options()
- for i, llen := 0, list.Len(); i < llen; i++ {
- m := list.Get(i).Message().Interface()
- b = protowire.AppendVarint(b, wiretag)
- siz := mopts.Size(m)
- b = protowire.AppendVarint(b, uint64(siz))
- before := len(b)
- var err error
- b, err = mopts.MarshalAppend(b, m)
- if err != nil {
- return b, err
- }
- if measuredSize := len(b) - before; siz != measuredSize {
- return nil, errors.MismatchedSizeCalculation(siz, measuredSize)
- }
- }
- return b, nil
-}
-
-func consumeMessageSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp != protowire.BytesType {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- m := list.NewElement()
- o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
- Buf: v,
- Message: m.Message(),
- })
- if err != nil {
- return protoreflect.Value{}, out, err
- }
- list.Append(m)
- out.n = n
- out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
- return listv, out, nil
-}
-
-func isInitMessageSliceValue(listv protoreflect.Value) error {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- m := list.Get(i).Message().Interface()
- if err := proto.CheckInitialized(m); err != nil {
- return err
- }
- }
- return nil
-}
-
-var coderMessageSliceValue = valueCoderFuncs{
- size: sizeMessageSliceValue,
- marshal: appendMessageSliceValue,
- unmarshal: consumeMessageSliceValue,
- isInit: isInitMessageSliceValue,
- merge: mergeMessageListValue,
-}
-
-func sizeGroupSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int {
- mopts := opts.Options()
- list := listv.List()
- n := 0
- for i, llen := 0, list.Len(); i < llen; i++ {
- m := list.Get(i).Message().Interface()
- n += 2*tagsize + mopts.Size(m)
- }
- return n
-}
-
-func appendGroupSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- mopts := opts.Options()
- for i, llen := 0, list.Len(); i < llen; i++ {
- m := list.Get(i).Message().Interface()
- b = protowire.AppendVarint(b, wiretag) // start group
- var err error
- b, err = mopts.MarshalAppend(b, m)
- if err != nil {
- return b, err
- }
- b = protowire.AppendVarint(b, wiretag+1) // end group
- }
- return b, nil
-}
-
-func consumeGroupSliceValue(b []byte, listv protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp != protowire.StartGroupType {
- return protoreflect.Value{}, out, errUnknown
- }
- b, n := protowire.ConsumeGroup(num, b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- m := list.NewElement()
- o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
- Buf: b,
- Message: m.Message(),
- })
- if err != nil {
- return protoreflect.Value{}, out, err
- }
- list.Append(m)
- out.n = n
- out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
- return listv, out, nil
-}
-
-var coderGroupSliceValue = valueCoderFuncs{
- size: sizeGroupSliceValue,
- marshal: appendGroupSliceValue,
- unmarshal: consumeGroupSliceValue,
- isInit: isInitMessageSliceValue,
- merge: mergeMessageListValue,
-}
-
-func makeGroupSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {
- num := fd.Number()
- if mi := getMessageInfo(ft); mi != nil {
- funcs := pointerCoderFuncs{
- size: sizeGroupSliceInfo,
- marshal: appendGroupSliceInfo,
- unmarshal: consumeGroupSliceInfo,
- merge: mergeMessageSlice,
- }
- if needsInitCheck(mi.Desc) {
- funcs.isInit = isInitMessageSliceInfo
- }
- return funcs
- }
- return pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- return sizeGroupSlice(p, ft, f.tagsize, opts)
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- return appendGroupSlice(b, p, f.wiretag, ft, opts)
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- return consumeGroupSlice(b, p, num, wtyp, ft, opts)
- },
- isInit: func(p pointer, f *coderFieldInfo) error {
- return isInitMessageSlice(p, ft)
- },
- merge: mergeMessageSlice,
- }
-}
-
-func sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, opts marshalOptions) int {
- mopts := opts.Options()
- s := p.PointerSlice()
- n := 0
- for _, v := range s {
- m := asMessage(v.AsValueOf(messageType.Elem()))
- n += 2*tagsize + mopts.Size(m)
- }
- return n
-}
-
-func appendGroupSlice(b []byte, p pointer, wiretag uint64, messageType reflect.Type, opts marshalOptions) ([]byte, error) {
- s := p.PointerSlice()
- var err error
- for _, v := range s {
- m := asMessage(v.AsValueOf(messageType.Elem()))
- b = protowire.AppendVarint(b, wiretag) // start group
- b, err = opts.Options().MarshalAppend(b, m)
- if err != nil {
- return b, err
- }
- b = protowire.AppendVarint(b, wiretag+1) // end group
- }
- return b, nil
-}
-
-func consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire.Type, goType reflect.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.StartGroupType {
- return out, errUnknown
- }
- b, n := protowire.ConsumeGroup(num, b)
- if n < 0 {
- return out, errDecode
- }
- mp := reflect.New(goType.Elem())
- o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{
- Buf: b,
- Message: asMessage(mp).ProtoReflect(),
- })
- if err != nil {
- return out, err
- }
- p.AppendPointerSlice(pointerOfValue(mp))
- out.n = n
- out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0
- return out, nil
-}
-
-func sizeGroupSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- s := p.PointerSlice()
- n := 0
- for _, v := range s {
- n += 2*f.tagsize + f.mi.sizePointer(v, opts)
- }
- return n
-}
-
-func appendGroupSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := p.PointerSlice()
- var err error
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag) // start group
- b, err = f.mi.marshalAppendPointer(b, v, opts)
- if err != nil {
- return b, err
- }
- b = protowire.AppendVarint(b, f.wiretag+1) // end group
- }
- return b, nil
-}
-
-func consumeGroupSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- if wtyp != protowire.StartGroupType {
- return unmarshalOutput{}, errUnknown
- }
- m := reflect.New(f.mi.GoReflectType.Elem()).Interface()
- mp := pointerOfIface(m)
- out, err := f.mi.unmarshalPointer(b, mp, f.num, opts)
- if err != nil {
- return out, err
- }
- p.AppendPointerSlice(mp)
- return out, nil
-}
-
-func asMessage(v reflect.Value) protoreflect.ProtoMessage {
- if m, ok := v.Interface().(protoreflect.ProtoMessage); ok {
- return m
- }
- return legacyWrapMessage(v).Interface()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go
deleted file mode 100644
index 76818ea25..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go
+++ /dev/null
@@ -1,264 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func makeOpaqueMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {
- mi := getMessageInfo(ft)
- if mi == nil {
- panic(fmt.Sprintf("invalid field: %v: unsupported message type %v", fd.FullName(), ft))
- }
- switch fd.Kind() {
- case protoreflect.MessageKind:
- return mi, pointerCoderFuncs{
- size: sizeOpaqueMessage,
- marshal: appendOpaqueMessage,
- unmarshal: consumeOpaqueMessage,
- isInit: isInitOpaqueMessage,
- merge: mergeOpaqueMessage,
- }
- case protoreflect.GroupKind:
- return mi, pointerCoderFuncs{
- size: sizeOpaqueGroup,
- marshal: appendOpaqueGroup,
- unmarshal: consumeOpaqueGroup,
- isInit: isInitOpaqueMessage,
- merge: mergeOpaqueMessage,
- }
- }
- panic("unexpected field kind")
-}
-
-func sizeOpaqueMessage(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return protowire.SizeBytes(f.mi.sizePointer(p.AtomicGetPointer(), opts)) + f.tagsize
-}
-
-func appendOpaqueMessage(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- mp := p.AtomicGetPointer()
- calculatedSize := f.mi.sizePointer(mp, opts)
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(calculatedSize))
- before := len(b)
- b, err := f.mi.marshalAppendPointer(b, mp, opts)
- if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil {
- return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)
- }
- return b, err
-}
-
-func consumeOpaqueMessage(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- mp := p.AtomicGetPointer()
- if mp.IsNil() {
- mp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
- }
- o, err := f.mi.unmarshalPointer(v, mp, 0, opts)
- if err != nil {
- return out, err
- }
- out.n = n
- out.initialized = o.initialized
- return out, nil
-}
-
-func isInitOpaqueMessage(p pointer, f *coderFieldInfo) error {
- mp := p.AtomicGetPointer()
- if mp.IsNil() {
- return nil
- }
- return f.mi.checkInitializedPointer(mp)
-}
-
-func mergeOpaqueMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- dstmp := dst.AtomicGetPointer()
- if dstmp.IsNil() {
- dstmp = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
- }
- f.mi.mergePointer(dstmp, src.AtomicGetPointer(), opts)
-}
-
-func sizeOpaqueGroup(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return 2*f.tagsize + f.mi.sizePointer(p.AtomicGetPointer(), opts)
-}
-
-func appendOpaqueGroup(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, f.wiretag) // start group
- b, err := f.mi.marshalAppendPointer(b, p.AtomicGetPointer(), opts)
- b = protowire.AppendVarint(b, f.wiretag+1) // end group
- return b, err
-}
-
-func consumeOpaqueGroup(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.StartGroupType {
- return out, errUnknown
- }
- mp := p.AtomicGetPointer()
- if mp.IsNil() {
- mp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
- }
- o, e := f.mi.unmarshalPointer(b, mp, f.num, opts)
- return o, e
-}
-
-func makeOpaqueRepeatedMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {
- if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice {
- panic(fmt.Sprintf("invalid field: %v: unsupported type for opaque repeated message: %v", fd.FullName(), ft))
- }
- mt := ft.Elem().Elem() // *[]*T -> *T
- mi := getMessageInfo(mt)
- if mi == nil {
- panic(fmt.Sprintf("invalid field: %v: unsupported message type %v", fd.FullName(), mt))
- }
- switch fd.Kind() {
- case protoreflect.MessageKind:
- return mi, pointerCoderFuncs{
- size: sizeOpaqueMessageSlice,
- marshal: appendOpaqueMessageSlice,
- unmarshal: consumeOpaqueMessageSlice,
- isInit: isInitOpaqueMessageSlice,
- merge: mergeOpaqueMessageSlice,
- }
- case protoreflect.GroupKind:
- return mi, pointerCoderFuncs{
- size: sizeOpaqueGroupSlice,
- marshal: appendOpaqueGroupSlice,
- unmarshal: consumeOpaqueGroupSlice,
- isInit: isInitOpaqueMessageSlice,
- merge: mergeOpaqueMessageSlice,
- }
- }
- panic("unexpected field kind")
-}
-
-func sizeOpaqueMessageSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := p.AtomicGetPointer().PointerSlice()
- n := 0
- for _, v := range s {
- n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize
- }
- return n
-}
-
-func appendOpaqueMessageSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := p.AtomicGetPointer().PointerSlice()
- var err error
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- siz := f.mi.sizePointer(v, opts)
- b = protowire.AppendVarint(b, uint64(siz))
- before := len(b)
- b, err = f.mi.marshalAppendPointer(b, v, opts)
- if err != nil {
- return b, err
- }
- if measuredSize := len(b) - before; siz != measuredSize {
- return nil, errors.MismatchedSizeCalculation(siz, measuredSize)
- }
- }
- return b, nil
-}
-
-func consumeOpaqueMessageSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- mp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))
- o, err := f.mi.unmarshalPointer(v, mp, 0, opts)
- if err != nil {
- return out, err
- }
- sp := p.AtomicGetPointer()
- if sp.IsNil() {
- sp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem())))
- }
- sp.AppendPointerSlice(mp)
- out.n = n
- out.initialized = o.initialized
- return out, nil
-}
-
-func isInitOpaqueMessageSlice(p pointer, f *coderFieldInfo) error {
- sp := p.AtomicGetPointer()
- if sp.IsNil() {
- return nil
- }
- s := sp.PointerSlice()
- for _, v := range s {
- if err := f.mi.checkInitializedPointer(v); err != nil {
- return err
- }
- }
- return nil
-}
-
-func mergeOpaqueMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- ds := dst.AtomicGetPointer()
- if ds.IsNil() {
- ds = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem())))
- }
- for _, sp := range src.AtomicGetPointer().PointerSlice() {
- dm := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))
- f.mi.mergePointer(dm, sp, opts)
- ds.AppendPointerSlice(dm)
- }
-}
-
-func sizeOpaqueGroupSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := p.AtomicGetPointer().PointerSlice()
- n := 0
- for _, v := range s {
- n += 2*f.tagsize + f.mi.sizePointer(v, opts)
- }
- return n
-}
-
-func appendOpaqueGroupSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := p.AtomicGetPointer().PointerSlice()
- var err error
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag) // start group
- b, err = f.mi.marshalAppendPointer(b, v, opts)
- if err != nil {
- return b, err
- }
- b = protowire.AppendVarint(b, f.wiretag+1) // end group
- }
- return b, nil
-}
-
-func consumeOpaqueGroupSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.StartGroupType {
- return out, errUnknown
- }
- mp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))
- out, err = f.mi.unmarshalPointer(b, mp, f.num, opts)
- if err != nil {
- return out, err
- }
- sp := p.AtomicGetPointer()
- if sp.IsNil() {
- sp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem())))
- }
- sp.AppendPointerSlice(mp)
- return out, err
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go b/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go
deleted file mode 100644
index f55dc01e3..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go
+++ /dev/null
@@ -1,5724 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package impl
-
-import (
- "math"
- "unicode/utf8"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// sizeBool returns the size of wire encoding a bool pointer as a Bool.
-func sizeBool(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Bool()
- return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
-}
-
-// appendBool wire encodes a bool pointer as a Bool.
-func appendBool(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Bool()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v))
- return b, nil
-}
-
-// consumeBool wire decodes a bool pointer as a Bool.
-func consumeBool(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Bool() = protowire.DecodeBool(v)
- out.n = n
- return out, nil
-}
-
-var coderBool = pointerCoderFuncs{
- size: sizeBool,
- marshal: appendBool,
- unmarshal: consumeBool,
- merge: mergeBool,
-}
-
-// sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool.
-// The zero value is not encoded.
-func sizeBoolNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Bool()
- if v == false {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
-}
-
-// appendBoolNoZero wire encodes a bool pointer as a Bool.
-// The zero value is not encoded.
-func appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Bool()
- if v == false {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v))
- return b, nil
-}
-
-var coderBoolNoZero = pointerCoderFuncs{
- size: sizeBoolNoZero,
- marshal: appendBoolNoZero,
- unmarshal: consumeBool,
- merge: mergeBoolNoZero,
-}
-
-// sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool.
-// It panics if the pointer is nil.
-func sizeBoolPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.BoolPtr()
- return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
-}
-
-// appendBoolPtr wire encodes a *bool pointer as a Bool.
-// It panics if the pointer is nil.
-func appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.BoolPtr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v))
- return b, nil
-}
-
-// consumeBoolPtr wire decodes a *bool pointer as a Bool.
-func consumeBoolPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.BoolPtr()
- if *vp == nil {
- *vp = new(bool)
- }
- **vp = protowire.DecodeBool(v)
- out.n = n
- return out, nil
-}
-
-var coderBoolPtr = pointerCoderFuncs{
- size: sizeBoolPtr,
- marshal: appendBoolPtr,
- unmarshal: consumeBoolPtr,
- merge: mergeBoolPtr,
-}
-
-// sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool.
-func sizeBoolSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.BoolSlice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))
- }
- return size
-}
-
-// appendBoolSlice encodes a []bool pointer as a repeated Bool.
-func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.BoolSlice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v))
- }
- return b, nil
-}
-
-// consumeBoolSlice wire decodes a []bool pointer as a repeated Bool.
-func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.BoolSlice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growBoolSlice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, protowire.DecodeBool(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, protowire.DecodeBool(v))
- out.n = n
- return out, nil
-}
-
-var coderBoolSlice = pointerCoderFuncs{
- size: sizeBoolSlice,
- marshal: appendBoolSlice,
- unmarshal: consumeBoolSlice,
- merge: mergeBoolSlice,
-}
-
-// sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool.
-func sizeBoolPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.BoolSlice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(protowire.EncodeBool(v))
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool.
-func appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.BoolSlice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(protowire.EncodeBool(v))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, protowire.EncodeBool(v))
- }
- return b, nil
-}
-
-var coderBoolPackedSlice = pointerCoderFuncs{
- size: sizeBoolPackedSlice,
- marshal: appendBoolPackedSlice,
- unmarshal: consumeBoolSlice,
- merge: mergeBoolSlice,
-}
-
-// sizeBoolValue returns the size of wire encoding a bool value as a Bool.
-func sizeBoolValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
-}
-
-// appendBoolValue encodes a bool value as a Bool.
-func appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
- return b, nil
-}
-
-// consumeBoolValue decodes a bool value as a Bool.
-func consumeBoolValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfBool(protowire.DecodeBool(v)), out, nil
-}
-
-var coderBoolValue = valueCoderFuncs{
- size: sizeBoolValue,
- marshal: appendBoolValue,
- unmarshal: consumeBoolValue,
- merge: mergeScalarValue,
-}
-
-// sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool.
-func sizeBoolSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
- }
- return size
-}
-
-// appendBoolSliceValue encodes a []bool value as a repeated Bool.
-func appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
- }
- return b, nil
-}
-
-// consumeBoolSliceValue wire decodes a []bool value as a repeated Bool.
-func consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderBoolSliceValue = valueCoderFuncs{
- size: sizeBoolSliceValue,
- marshal: appendBoolSliceValue,
- unmarshal: consumeBoolSliceValue,
- merge: mergeListValue,
-}
-
-// sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool.
-func sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool.
-func appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
- }
- return b, nil
-}
-
-var coderBoolPackedSliceValue = valueCoderFuncs{
- size: sizeBoolPackedSliceValue,
- marshal: appendBoolPackedSliceValue,
- unmarshal: consumeBoolSliceValue,
- merge: mergeListValue,
-}
-
-// sizeEnumValue returns the size of wire encoding a value as a Enum.
-func sizeEnumValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(uint64(v.Enum()))
-}
-
-// appendEnumValue encodes a value as a Enum.
-func appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(v.Enum()))
- return b, nil
-}
-
-// consumeEnumValue decodes a value as a Enum.
-func consumeEnumValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil
-}
-
-var coderEnumValue = valueCoderFuncs{
- size: sizeEnumValue,
- marshal: appendEnumValue,
- unmarshal: consumeEnumValue,
- merge: mergeScalarValue,
-}
-
-// sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum.
-func sizeEnumSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(uint64(v.Enum()))
- }
- return size
-}
-
-// appendEnumSliceValue encodes a [] value as a repeated Enum.
-func appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(v.Enum()))
- }
- return b, nil
-}
-
-// consumeEnumSliceValue wire decodes a [] value as a repeated Enum.
-func consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderEnumSliceValue = valueCoderFuncs{
- size: sizeEnumSliceValue,
- marshal: appendEnumSliceValue,
- unmarshal: consumeEnumSliceValue,
- merge: mergeListValue,
-}
-
-// sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum.
-func sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(v.Enum()))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum.
-func appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(v.Enum()))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, uint64(v.Enum()))
- }
- return b, nil
-}
-
-var coderEnumPackedSliceValue = valueCoderFuncs{
- size: sizeEnumPackedSliceValue,
- marshal: appendEnumPackedSliceValue,
- unmarshal: consumeEnumSliceValue,
- merge: mergeListValue,
-}
-
-// sizeInt32 returns the size of wire encoding a int32 pointer as a Int32.
-func sizeInt32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int32()
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendInt32 wire encodes a int32 pointer as a Int32.
-func appendInt32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int32()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-// consumeInt32 wire decodes a int32 pointer as a Int32.
-func consumeInt32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Int32() = int32(v)
- out.n = n
- return out, nil
-}
-
-var coderInt32 = pointerCoderFuncs{
- size: sizeInt32,
- marshal: appendInt32,
- unmarshal: consumeInt32,
- merge: mergeInt32,
-}
-
-// sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32.
-// The zero value is not encoded.
-func sizeInt32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int32()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendInt32NoZero wire encodes a int32 pointer as a Int32.
-// The zero value is not encoded.
-func appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int32()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-var coderInt32NoZero = pointerCoderFuncs{
- size: sizeInt32NoZero,
- marshal: appendInt32NoZero,
- unmarshal: consumeInt32,
- merge: mergeInt32NoZero,
-}
-
-// sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32.
-// It panics if the pointer is nil.
-func sizeInt32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.Int32Ptr()
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendInt32Ptr wire encodes a *int32 pointer as a Int32.
-// It panics if the pointer is nil.
-func appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Int32Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-// consumeInt32Ptr wire decodes a *int32 pointer as a Int32.
-func consumeInt32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.Int32Ptr()
- if *vp == nil {
- *vp = new(int32)
- }
- **vp = int32(v)
- out.n = n
- return out, nil
-}
-
-var coderInt32Ptr = pointerCoderFuncs{
- size: sizeInt32Ptr,
- marshal: appendInt32Ptr,
- unmarshal: consumeInt32Ptr,
- merge: mergeInt32Ptr,
-}
-
-// sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32.
-func sizeInt32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int32Slice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(uint64(v))
- }
- return size
-}
-
-// appendInt32Slice encodes a []int32 pointer as a repeated Int32.
-func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int32Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- }
- return b, nil
-}
-
-// consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32.
-func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Int32Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growInt32Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, int32(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, int32(v))
- out.n = n
- return out, nil
-}
-
-var coderInt32Slice = pointerCoderFuncs{
- size: sizeInt32Slice,
- marshal: appendInt32Slice,
- unmarshal: consumeInt32Slice,
- merge: mergeInt32Slice,
-}
-
-// sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32.
-func sizeInt32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int32Slice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(uint64(v))
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32.
-func appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int32Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(uint64(v))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, uint64(v))
- }
- return b, nil
-}
-
-var coderInt32PackedSlice = pointerCoderFuncs{
- size: sizeInt32PackedSlice,
- marshal: appendInt32PackedSlice,
- unmarshal: consumeInt32Slice,
- merge: mergeInt32Slice,
-}
-
-// sizeInt32Value returns the size of wire encoding a int32 value as a Int32.
-func sizeInt32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(uint64(int32(v.Int())))
-}
-
-// appendInt32Value encodes a int32 value as a Int32.
-func appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(int32(v.Int())))
- return b, nil
-}
-
-// consumeInt32Value decodes a int32 value as a Int32.
-func consumeInt32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfInt32(int32(v)), out, nil
-}
-
-var coderInt32Value = valueCoderFuncs{
- size: sizeInt32Value,
- marshal: appendInt32Value,
- unmarshal: consumeInt32Value,
- merge: mergeScalarValue,
-}
-
-// sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32.
-func sizeInt32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(uint64(int32(v.Int())))
- }
- return size
-}
-
-// appendInt32SliceValue encodes a []int32 value as a repeated Int32.
-func appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(int32(v.Int())))
- }
- return b, nil
-}
-
-// consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32.
-func consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderInt32SliceValue = valueCoderFuncs{
- size: sizeInt32SliceValue,
- marshal: appendInt32SliceValue,
- unmarshal: consumeInt32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32.
-func sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(int32(v.Int())))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32.
-func appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(int32(v.Int())))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, uint64(int32(v.Int())))
- }
- return b, nil
-}
-
-var coderInt32PackedSliceValue = valueCoderFuncs{
- size: sizeInt32PackedSliceValue,
- marshal: appendInt32PackedSliceValue,
- unmarshal: consumeInt32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32.
-func sizeSint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int32()
- return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
-}
-
-// appendSint32 wire encodes a int32 pointer as a Sint32.
-func appendSint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int32()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
- return b, nil
-}
-
-// consumeSint32 wire decodes a int32 pointer as a Sint32.
-func consumeSint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Int32() = int32(protowire.DecodeZigZag(v & math.MaxUint32))
- out.n = n
- return out, nil
-}
-
-var coderSint32 = pointerCoderFuncs{
- size: sizeSint32,
- marshal: appendSint32,
- unmarshal: consumeSint32,
- merge: mergeInt32,
-}
-
-// sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32.
-// The zero value is not encoded.
-func sizeSint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int32()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
-}
-
-// appendSint32NoZero wire encodes a int32 pointer as a Sint32.
-// The zero value is not encoded.
-func appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int32()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
- return b, nil
-}
-
-var coderSint32NoZero = pointerCoderFuncs{
- size: sizeSint32NoZero,
- marshal: appendSint32NoZero,
- unmarshal: consumeSint32,
- merge: mergeInt32NoZero,
-}
-
-// sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32.
-// It panics if the pointer is nil.
-func sizeSint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.Int32Ptr()
- return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
-}
-
-// appendSint32Ptr wire encodes a *int32 pointer as a Sint32.
-// It panics if the pointer is nil.
-func appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Int32Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
- return b, nil
-}
-
-// consumeSint32Ptr wire decodes a *int32 pointer as a Sint32.
-func consumeSint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.Int32Ptr()
- if *vp == nil {
- *vp = new(int32)
- }
- **vp = int32(protowire.DecodeZigZag(v & math.MaxUint32))
- out.n = n
- return out, nil
-}
-
-var coderSint32Ptr = pointerCoderFuncs{
- size: sizeSint32Ptr,
- marshal: appendSint32Ptr,
- unmarshal: consumeSint32Ptr,
- merge: mergeInt32Ptr,
-}
-
-// sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32.
-func sizeSint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int32Slice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
- }
- return size
-}
-
-// appendSint32Slice encodes a []int32 pointer as a repeated Sint32.
-func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int32Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
- }
- return b, nil
-}
-
-// consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32.
-func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Int32Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growInt32Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, int32(protowire.DecodeZigZag(v&math.MaxUint32)))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, int32(protowire.DecodeZigZag(v&math.MaxUint32)))
- out.n = n
- return out, nil
-}
-
-var coderSint32Slice = pointerCoderFuncs{
- size: sizeSint32Slice,
- marshal: appendSint32Slice,
- unmarshal: consumeSint32Slice,
- merge: mergeInt32Slice,
-}
-
-// sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32.
-func sizeSint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int32Slice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32.
-func appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int32Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))
- }
- return b, nil
-}
-
-var coderSint32PackedSlice = pointerCoderFuncs{
- size: sizeSint32PackedSlice,
- marshal: appendSint32PackedSlice,
- unmarshal: consumeSint32Slice,
- merge: mergeInt32Slice,
-}
-
-// sizeSint32Value returns the size of wire encoding a int32 value as a Sint32.
-func sizeSint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
-}
-
-// appendSint32Value encodes a int32 value as a Sint32.
-func appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
- return b, nil
-}
-
-// consumeSint32Value decodes a int32 value as a Sint32.
-func consumeSint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), out, nil
-}
-
-var coderSint32Value = valueCoderFuncs{
- size: sizeSint32Value,
- marshal: appendSint32Value,
- unmarshal: consumeSint32Value,
- merge: mergeScalarValue,
-}
-
-// sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32.
-func sizeSint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
- }
- return size
-}
-
-// appendSint32SliceValue encodes a []int32 value as a repeated Sint32.
-func appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
- }
- return b, nil
-}
-
-// consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32.
-func consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
- out.n = n
- return listv, out, nil
-}
-
-var coderSint32SliceValue = valueCoderFuncs{
- size: sizeSint32SliceValue,
- marshal: appendSint32SliceValue,
- unmarshal: consumeSint32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32.
-func sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32.
-func appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
- }
- return b, nil
-}
-
-var coderSint32PackedSliceValue = valueCoderFuncs{
- size: sizeSint32PackedSliceValue,
- marshal: appendSint32PackedSliceValue,
- unmarshal: consumeSint32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32.
-func sizeUint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Uint32()
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendUint32 wire encodes a uint32 pointer as a Uint32.
-func appendUint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint32()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-// consumeUint32 wire decodes a uint32 pointer as a Uint32.
-func consumeUint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Uint32() = uint32(v)
- out.n = n
- return out, nil
-}
-
-var coderUint32 = pointerCoderFuncs{
- size: sizeUint32,
- marshal: appendUint32,
- unmarshal: consumeUint32,
- merge: mergeUint32,
-}
-
-// sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32.
-// The zero value is not encoded.
-func sizeUint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Uint32()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendUint32NoZero wire encodes a uint32 pointer as a Uint32.
-// The zero value is not encoded.
-func appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint32()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-var coderUint32NoZero = pointerCoderFuncs{
- size: sizeUint32NoZero,
- marshal: appendUint32NoZero,
- unmarshal: consumeUint32,
- merge: mergeUint32NoZero,
-}
-
-// sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32.
-// It panics if the pointer is nil.
-func sizeUint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.Uint32Ptr()
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendUint32Ptr wire encodes a *uint32 pointer as a Uint32.
-// It panics if the pointer is nil.
-func appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Uint32Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-// consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32.
-func consumeUint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.Uint32Ptr()
- if *vp == nil {
- *vp = new(uint32)
- }
- **vp = uint32(v)
- out.n = n
- return out, nil
-}
-
-var coderUint32Ptr = pointerCoderFuncs{
- size: sizeUint32Ptr,
- marshal: appendUint32Ptr,
- unmarshal: consumeUint32Ptr,
- merge: mergeUint32Ptr,
-}
-
-// sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32.
-func sizeUint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint32Slice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(uint64(v))
- }
- return size
-}
-
-// appendUint32Slice encodes a []uint32 pointer as a repeated Uint32.
-func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint32Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- }
- return b, nil
-}
-
-// consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32.
-func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Uint32Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growUint32Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, uint32(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, uint32(v))
- out.n = n
- return out, nil
-}
-
-var coderUint32Slice = pointerCoderFuncs{
- size: sizeUint32Slice,
- marshal: appendUint32Slice,
- unmarshal: consumeUint32Slice,
- merge: mergeUint32Slice,
-}
-
-// sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32.
-func sizeUint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint32Slice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(uint64(v))
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32.
-func appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint32Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(uint64(v))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, uint64(v))
- }
- return b, nil
-}
-
-var coderUint32PackedSlice = pointerCoderFuncs{
- size: sizeUint32PackedSlice,
- marshal: appendUint32PackedSlice,
- unmarshal: consumeUint32Slice,
- merge: mergeUint32Slice,
-}
-
-// sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32.
-func sizeUint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(uint64(uint32(v.Uint())))
-}
-
-// appendUint32Value encodes a uint32 value as a Uint32.
-func appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
- return b, nil
-}
-
-// consumeUint32Value decodes a uint32 value as a Uint32.
-func consumeUint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfUint32(uint32(v)), out, nil
-}
-
-var coderUint32Value = valueCoderFuncs{
- size: sizeUint32Value,
- marshal: appendUint32Value,
- unmarshal: consumeUint32Value,
- merge: mergeScalarValue,
-}
-
-// sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32.
-func sizeUint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(uint64(uint32(v.Uint())))
- }
- return size
-}
-
-// appendUint32SliceValue encodes a []uint32 value as a repeated Uint32.
-func appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
- }
- return b, nil
-}
-
-// consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32.
-func consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderUint32SliceValue = valueCoderFuncs{
- size: sizeUint32SliceValue,
- marshal: appendUint32SliceValue,
- unmarshal: consumeUint32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32.
-func sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(uint32(v.Uint())))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32.
-func appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(uint32(v.Uint())))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
- }
- return b, nil
-}
-
-var coderUint32PackedSliceValue = valueCoderFuncs{
- size: sizeUint32PackedSliceValue,
- marshal: appendUint32PackedSliceValue,
- unmarshal: consumeUint32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeInt64 returns the size of wire encoding a int64 pointer as a Int64.
-func sizeInt64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int64()
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendInt64 wire encodes a int64 pointer as a Int64.
-func appendInt64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int64()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-// consumeInt64 wire decodes a int64 pointer as a Int64.
-func consumeInt64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Int64() = int64(v)
- out.n = n
- return out, nil
-}
-
-var coderInt64 = pointerCoderFuncs{
- size: sizeInt64,
- marshal: appendInt64,
- unmarshal: consumeInt64,
- merge: mergeInt64,
-}
-
-// sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64.
-// The zero value is not encoded.
-func sizeInt64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int64()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendInt64NoZero wire encodes a int64 pointer as a Int64.
-// The zero value is not encoded.
-func appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int64()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-var coderInt64NoZero = pointerCoderFuncs{
- size: sizeInt64NoZero,
- marshal: appendInt64NoZero,
- unmarshal: consumeInt64,
- merge: mergeInt64NoZero,
-}
-
-// sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64.
-// It panics if the pointer is nil.
-func sizeInt64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.Int64Ptr()
- return f.tagsize + protowire.SizeVarint(uint64(v))
-}
-
-// appendInt64Ptr wire encodes a *int64 pointer as a Int64.
-// It panics if the pointer is nil.
-func appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Int64Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- return b, nil
-}
-
-// consumeInt64Ptr wire decodes a *int64 pointer as a Int64.
-func consumeInt64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.Int64Ptr()
- if *vp == nil {
- *vp = new(int64)
- }
- **vp = int64(v)
- out.n = n
- return out, nil
-}
-
-var coderInt64Ptr = pointerCoderFuncs{
- size: sizeInt64Ptr,
- marshal: appendInt64Ptr,
- unmarshal: consumeInt64Ptr,
- merge: mergeInt64Ptr,
-}
-
-// sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64.
-func sizeInt64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int64Slice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(uint64(v))
- }
- return size
-}
-
-// appendInt64Slice encodes a []int64 pointer as a repeated Int64.
-func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int64Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, uint64(v))
- }
- return b, nil
-}
-
-// consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64.
-func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Int64Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growInt64Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, int64(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, int64(v))
- out.n = n
- return out, nil
-}
-
-var coderInt64Slice = pointerCoderFuncs{
- size: sizeInt64Slice,
- marshal: appendInt64Slice,
- unmarshal: consumeInt64Slice,
- merge: mergeInt64Slice,
-}
-
-// sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64.
-func sizeInt64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int64Slice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(uint64(v))
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64.
-func appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int64Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(uint64(v))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, uint64(v))
- }
- return b, nil
-}
-
-var coderInt64PackedSlice = pointerCoderFuncs{
- size: sizeInt64PackedSlice,
- marshal: appendInt64PackedSlice,
- unmarshal: consumeInt64Slice,
- merge: mergeInt64Slice,
-}
-
-// sizeInt64Value returns the size of wire encoding a int64 value as a Int64.
-func sizeInt64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(uint64(v.Int()))
-}
-
-// appendInt64Value encodes a int64 value as a Int64.
-func appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(v.Int()))
- return b, nil
-}
-
-// consumeInt64Value decodes a int64 value as a Int64.
-func consumeInt64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfInt64(int64(v)), out, nil
-}
-
-var coderInt64Value = valueCoderFuncs{
- size: sizeInt64Value,
- marshal: appendInt64Value,
- unmarshal: consumeInt64Value,
- merge: mergeScalarValue,
-}
-
-// sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64.
-func sizeInt64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(uint64(v.Int()))
- }
- return size
-}
-
-// appendInt64SliceValue encodes a []int64 value as a repeated Int64.
-func appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, uint64(v.Int()))
- }
- return b, nil
-}
-
-// consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64.
-func consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderInt64SliceValue = valueCoderFuncs{
- size: sizeInt64SliceValue,
- marshal: appendInt64SliceValue,
- unmarshal: consumeInt64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64.
-func sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(v.Int()))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64.
-func appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(uint64(v.Int()))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, uint64(v.Int()))
- }
- return b, nil
-}
-
-var coderInt64PackedSliceValue = valueCoderFuncs{
- size: sizeInt64PackedSliceValue,
- marshal: appendInt64PackedSliceValue,
- unmarshal: consumeInt64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64.
-func sizeSint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int64()
- return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
-}
-
-// appendSint64 wire encodes a int64 pointer as a Sint64.
-func appendSint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int64()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
- return b, nil
-}
-
-// consumeSint64 wire decodes a int64 pointer as a Sint64.
-func consumeSint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Int64() = protowire.DecodeZigZag(v)
- out.n = n
- return out, nil
-}
-
-var coderSint64 = pointerCoderFuncs{
- size: sizeSint64,
- marshal: appendSint64,
- unmarshal: consumeSint64,
- merge: mergeInt64,
-}
-
-// sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64.
-// The zero value is not encoded.
-func sizeSint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int64()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
-}
-
-// appendSint64NoZero wire encodes a int64 pointer as a Sint64.
-// The zero value is not encoded.
-func appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int64()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
- return b, nil
-}
-
-var coderSint64NoZero = pointerCoderFuncs{
- size: sizeSint64NoZero,
- marshal: appendSint64NoZero,
- unmarshal: consumeSint64,
- merge: mergeInt64NoZero,
-}
-
-// sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64.
-// It panics if the pointer is nil.
-func sizeSint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.Int64Ptr()
- return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
-}
-
-// appendSint64Ptr wire encodes a *int64 pointer as a Sint64.
-// It panics if the pointer is nil.
-func appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Int64Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
- return b, nil
-}
-
-// consumeSint64Ptr wire decodes a *int64 pointer as a Sint64.
-func consumeSint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.Int64Ptr()
- if *vp == nil {
- *vp = new(int64)
- }
- **vp = protowire.DecodeZigZag(v)
- out.n = n
- return out, nil
-}
-
-var coderSint64Ptr = pointerCoderFuncs{
- size: sizeSint64Ptr,
- marshal: appendSint64Ptr,
- unmarshal: consumeSint64Ptr,
- merge: mergeInt64Ptr,
-}
-
-// sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64.
-func sizeSint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int64Slice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))
- }
- return size
-}
-
-// appendSint64Slice encodes a []int64 pointer as a repeated Sint64.
-func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int64Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
- }
- return b, nil
-}
-
-// consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64.
-func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Int64Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growInt64Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, protowire.DecodeZigZag(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, protowire.DecodeZigZag(v))
- out.n = n
- return out, nil
-}
-
-var coderSint64Slice = pointerCoderFuncs{
- size: sizeSint64Slice,
- marshal: appendSint64Slice,
- unmarshal: consumeSint64Slice,
- merge: mergeInt64Slice,
-}
-
-// sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64.
-func sizeSint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int64Slice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(protowire.EncodeZigZag(v))
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64.
-func appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int64Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(protowire.EncodeZigZag(v))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v))
- }
- return b, nil
-}
-
-var coderSint64PackedSlice = pointerCoderFuncs{
- size: sizeSint64PackedSlice,
- marshal: appendSint64PackedSlice,
- unmarshal: consumeSint64Slice,
- merge: mergeInt64Slice,
-}
-
-// sizeSint64Value returns the size of wire encoding a int64 value as a Sint64.
-func sizeSint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
-}
-
-// appendSint64Value encodes a int64 value as a Sint64.
-func appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
- return b, nil
-}
-
-// consumeSint64Value decodes a int64 value as a Sint64.
-func consumeSint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), out, nil
-}
-
-var coderSint64Value = valueCoderFuncs{
- size: sizeSint64Value,
- marshal: appendSint64Value,
- unmarshal: consumeSint64Value,
- merge: mergeScalarValue,
-}
-
-// sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64.
-func sizeSint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
- }
- return size
-}
-
-// appendSint64SliceValue encodes a []int64 value as a repeated Sint64.
-func appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
- }
- return b, nil
-}
-
-// consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64.
-func consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderSint64SliceValue = valueCoderFuncs{
- size: sizeSint64SliceValue,
- marshal: appendSint64SliceValue,
- unmarshal: consumeSint64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64.
-func sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64.
-func appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
- }
- return b, nil
-}
-
-var coderSint64PackedSliceValue = valueCoderFuncs{
- size: sizeSint64PackedSliceValue,
- marshal: appendSint64PackedSliceValue,
- unmarshal: consumeSint64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64.
-func sizeUint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Uint64()
- return f.tagsize + protowire.SizeVarint(v)
-}
-
-// appendUint64 wire encodes a uint64 pointer as a Uint64.
-func appendUint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint64()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, v)
- return b, nil
-}
-
-// consumeUint64 wire decodes a uint64 pointer as a Uint64.
-func consumeUint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *p.Uint64() = v
- out.n = n
- return out, nil
-}
-
-var coderUint64 = pointerCoderFuncs{
- size: sizeUint64,
- marshal: appendUint64,
- unmarshal: consumeUint64,
- merge: mergeUint64,
-}
-
-// sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64.
-// The zero value is not encoded.
-func sizeUint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Uint64()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeVarint(v)
-}
-
-// appendUint64NoZero wire encodes a uint64 pointer as a Uint64.
-// The zero value is not encoded.
-func appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint64()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, v)
- return b, nil
-}
-
-var coderUint64NoZero = pointerCoderFuncs{
- size: sizeUint64NoZero,
- marshal: appendUint64NoZero,
- unmarshal: consumeUint64,
- merge: mergeUint64NoZero,
-}
-
-// sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64.
-// It panics if the pointer is nil.
-func sizeUint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.Uint64Ptr()
- return f.tagsize + protowire.SizeVarint(v)
-}
-
-// appendUint64Ptr wire encodes a *uint64 pointer as a Uint64.
-// It panics if the pointer is nil.
-func appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Uint64Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, v)
- return b, nil
-}
-
-// consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64.
-func consumeUint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- vp := p.Uint64Ptr()
- if *vp == nil {
- *vp = new(uint64)
- }
- **vp = v
- out.n = n
- return out, nil
-}
-
-var coderUint64Ptr = pointerCoderFuncs{
- size: sizeUint64Ptr,
- marshal: appendUint64Ptr,
- unmarshal: consumeUint64Ptr,
- merge: mergeUint64Ptr,
-}
-
-// sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64.
-func sizeUint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint64Slice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeVarint(v)
- }
- return size
-}
-
-// appendUint64Slice encodes a []uint64 pointer as a repeated Uint64.
-func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint64Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendVarint(b, v)
- }
- return b, nil
-}
-
-// consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64.
-func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Uint64Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := 0
- for _, v := range b {
- if v < 0x80 {
- count++
- }
- }
- if count > 0 {
- p.growUint64Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- s = append(s, v)
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.VarintType {
- return out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, v)
- out.n = n
- return out, nil
-}
-
-var coderUint64Slice = pointerCoderFuncs{
- size: sizeUint64Slice,
- marshal: appendUint64Slice,
- unmarshal: consumeUint64Slice,
- merge: mergeUint64Slice,
-}
-
-// sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64.
-func sizeUint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint64Slice()
- if len(s) == 0 {
- return 0
- }
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(v)
- }
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64.
-func appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint64Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := 0
- for _, v := range s {
- n += protowire.SizeVarint(v)
- }
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendVarint(b, v)
- }
- return b, nil
-}
-
-var coderUint64PackedSlice = pointerCoderFuncs{
- size: sizeUint64PackedSlice,
- marshal: appendUint64PackedSlice,
- unmarshal: consumeUint64Slice,
- merge: mergeUint64Slice,
-}
-
-// sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64.
-func sizeUint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeVarint(v.Uint())
-}
-
-// appendUint64Value encodes a uint64 value as a Uint64.
-func appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, v.Uint())
- return b, nil
-}
-
-// consumeUint64Value decodes a uint64 value as a Uint64.
-func consumeUint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfUint64(v), out, nil
-}
-
-var coderUint64Value = valueCoderFuncs{
- size: sizeUint64Value,
- marshal: appendUint64Value,
- unmarshal: consumeUint64Value,
- merge: mergeScalarValue,
-}
-
-// sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64.
-func sizeUint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeVarint(v.Uint())
- }
- return size
-}
-
-// appendUint64SliceValue encodes a []uint64 value as a repeated Uint64.
-func appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendVarint(b, v.Uint())
- }
- return b, nil
-}
-
-// consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64.
-func consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint64(v))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.VarintType {
- return protoreflect.Value{}, out, errUnknown
- }
- var v uint64
- var n int
- if len(b) >= 1 && b[0] < 0x80 {
- v = uint64(b[0])
- n = 1
- } else if len(b) >= 2 && b[1] < 128 {
- v = uint64(b[0]&0x7f) + uint64(b[1])<<7
- n = 2
- } else {
- v, n = protowire.ConsumeVarint(b)
- }
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint64(v))
- out.n = n
- return listv, out, nil
-}
-
-var coderUint64SliceValue = valueCoderFuncs{
- size: sizeUint64SliceValue,
- marshal: appendUint64SliceValue,
- unmarshal: consumeUint64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64.
-func sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := 0
- for i, llen := 0, llen; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(v.Uint())
- }
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64.
-func appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := 0
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- n += protowire.SizeVarint(v.Uint())
- }
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, v.Uint())
- }
- return b, nil
-}
-
-var coderUint64PackedSliceValue = valueCoderFuncs{
- size: sizeUint64PackedSliceValue,
- marshal: appendUint64PackedSliceValue,
- unmarshal: consumeUint64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32.
-func sizeSfixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendSfixed32 wire encodes a int32 pointer as a Sfixed32.
-func appendSfixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int32()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, uint32(v))
- return b, nil
-}
-
-// consumeSfixed32 wire decodes a int32 pointer as a Sfixed32.
-func consumeSfixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Int32() = int32(v)
- out.n = n
- return out, nil
-}
-
-var coderSfixed32 = pointerCoderFuncs{
- size: sizeSfixed32,
- marshal: appendSfixed32,
- unmarshal: consumeSfixed32,
- merge: mergeInt32,
-}
-
-// sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32.
-// The zero value is not encoded.
-func sizeSfixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int32()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32.
-// The zero value is not encoded.
-func appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int32()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, uint32(v))
- return b, nil
-}
-
-var coderSfixed32NoZero = pointerCoderFuncs{
- size: sizeSfixed32NoZero,
- marshal: appendSfixed32NoZero,
- unmarshal: consumeSfixed32,
- merge: mergeInt32NoZero,
-}
-
-// sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32.
-// It panics if the pointer is nil.
-func sizeSfixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32.
-// It panics if the pointer is nil.
-func appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Int32Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, uint32(v))
- return b, nil
-}
-
-// consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32.
-func consumeSfixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.Int32Ptr()
- if *vp == nil {
- *vp = new(int32)
- }
- **vp = int32(v)
- out.n = n
- return out, nil
-}
-
-var coderSfixed32Ptr = pointerCoderFuncs{
- size: sizeSfixed32Ptr,
- marshal: appendSfixed32Ptr,
- unmarshal: consumeSfixed32Ptr,
- merge: mergeInt32Ptr,
-}
-
-// sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32.
-func sizeSfixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int32Slice()
- size = len(s) * (f.tagsize + protowire.SizeFixed32())
- return size
-}
-
-// appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32.
-func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int32Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, uint32(v))
- }
- return b, nil
-}
-
-// consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32.
-func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Int32Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := len(b) / protowire.SizeFixed32()
- if count > 0 {
- p.growInt32Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- s = append(s, int32(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, int32(v))
- out.n = n
- return out, nil
-}
-
-var coderSfixed32Slice = pointerCoderFuncs{
- size: sizeSfixed32Slice,
- marshal: appendSfixed32Slice,
- unmarshal: consumeSfixed32Slice,
- merge: mergeInt32Slice,
-}
-
-// sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32.
-func sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int32Slice()
- if len(s) == 0 {
- return 0
- }
- n := len(s) * protowire.SizeFixed32()
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32.
-func appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int32Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := len(s) * protowire.SizeFixed32()
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendFixed32(b, uint32(v))
- }
- return b, nil
-}
-
-var coderSfixed32PackedSlice = pointerCoderFuncs{
- size: sizeSfixed32PackedSlice,
- marshal: appendSfixed32PackedSlice,
- unmarshal: consumeSfixed32Slice,
- merge: mergeInt32Slice,
-}
-
-// sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32.
-func sizeSfixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeFixed32()
-}
-
-// appendSfixed32Value encodes a int32 value as a Sfixed32.
-func appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed32(b, uint32(v.Int()))
- return b, nil
-}
-
-// consumeSfixed32Value decodes a int32 value as a Sfixed32.
-func consumeSfixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfInt32(int32(v)), out, nil
-}
-
-var coderSfixed32Value = valueCoderFuncs{
- size: sizeSfixed32Value,
- marshal: appendSfixed32Value,
- unmarshal: consumeSfixed32Value,
- merge: mergeScalarValue,
-}
-
-// sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32.
-func sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- size = list.Len() * (tagsize + protowire.SizeFixed32())
- return size
-}
-
-// appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32.
-func appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed32(b, uint32(v.Int()))
- }
- return b, nil
-}
-
-// consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32.
-func consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.Fixed32Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderSfixed32SliceValue = valueCoderFuncs{
- size: sizeSfixed32SliceValue,
- marshal: appendSfixed32SliceValue,
- unmarshal: consumeSfixed32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32.
-func sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := llen * protowire.SizeFixed32()
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32.
-func appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := llen * protowire.SizeFixed32()
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendFixed32(b, uint32(v.Int()))
- }
- return b, nil
-}
-
-var coderSfixed32PackedSliceValue = valueCoderFuncs{
- size: sizeSfixed32PackedSliceValue,
- marshal: appendSfixed32PackedSliceValue,
- unmarshal: consumeSfixed32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32.
-func sizeFixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendFixed32 wire encodes a uint32 pointer as a Fixed32.
-func appendFixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint32()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, v)
- return b, nil
-}
-
-// consumeFixed32 wire decodes a uint32 pointer as a Fixed32.
-func consumeFixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Uint32() = v
- out.n = n
- return out, nil
-}
-
-var coderFixed32 = pointerCoderFuncs{
- size: sizeFixed32,
- marshal: appendFixed32,
- unmarshal: consumeFixed32,
- merge: mergeUint32,
-}
-
-// sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32.
-// The zero value is not encoded.
-func sizeFixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Uint32()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32.
-// The zero value is not encoded.
-func appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint32()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, v)
- return b, nil
-}
-
-var coderFixed32NoZero = pointerCoderFuncs{
- size: sizeFixed32NoZero,
- marshal: appendFixed32NoZero,
- unmarshal: consumeFixed32,
- merge: mergeUint32NoZero,
-}
-
-// sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32.
-// It panics if the pointer is nil.
-func sizeFixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32.
-// It panics if the pointer is nil.
-func appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Uint32Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, v)
- return b, nil
-}
-
-// consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32.
-func consumeFixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.Uint32Ptr()
- if *vp == nil {
- *vp = new(uint32)
- }
- **vp = v
- out.n = n
- return out, nil
-}
-
-var coderFixed32Ptr = pointerCoderFuncs{
- size: sizeFixed32Ptr,
- marshal: appendFixed32Ptr,
- unmarshal: consumeFixed32Ptr,
- merge: mergeUint32Ptr,
-}
-
-// sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32.
-func sizeFixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint32Slice()
- size = len(s) * (f.tagsize + protowire.SizeFixed32())
- return size
-}
-
-// appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32.
-func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint32Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, v)
- }
- return b, nil
-}
-
-// consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32.
-func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Uint32Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := len(b) / protowire.SizeFixed32()
- if count > 0 {
- p.growUint32Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- s = append(s, v)
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, v)
- out.n = n
- return out, nil
-}
-
-var coderFixed32Slice = pointerCoderFuncs{
- size: sizeFixed32Slice,
- marshal: appendFixed32Slice,
- unmarshal: consumeFixed32Slice,
- merge: mergeUint32Slice,
-}
-
-// sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32.
-func sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint32Slice()
- if len(s) == 0 {
- return 0
- }
- n := len(s) * protowire.SizeFixed32()
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32.
-func appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint32Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := len(s) * protowire.SizeFixed32()
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendFixed32(b, v)
- }
- return b, nil
-}
-
-var coderFixed32PackedSlice = pointerCoderFuncs{
- size: sizeFixed32PackedSlice,
- marshal: appendFixed32PackedSlice,
- unmarshal: consumeFixed32Slice,
- merge: mergeUint32Slice,
-}
-
-// sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32.
-func sizeFixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeFixed32()
-}
-
-// appendFixed32Value encodes a uint32 value as a Fixed32.
-func appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed32(b, uint32(v.Uint()))
- return b, nil
-}
-
-// consumeFixed32Value decodes a uint32 value as a Fixed32.
-func consumeFixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfUint32(uint32(v)), out, nil
-}
-
-var coderFixed32Value = valueCoderFuncs{
- size: sizeFixed32Value,
- marshal: appendFixed32Value,
- unmarshal: consumeFixed32Value,
- merge: mergeScalarValue,
-}
-
-// sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32.
-func sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- size = list.Len() * (tagsize + protowire.SizeFixed32())
- return size
-}
-
-// appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32.
-func appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed32(b, uint32(v.Uint()))
- }
- return b, nil
-}
-
-// consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32.
-func consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.Fixed32Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderFixed32SliceValue = valueCoderFuncs{
- size: sizeFixed32SliceValue,
- marshal: appendFixed32SliceValue,
- unmarshal: consumeFixed32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32.
-func sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := llen * protowire.SizeFixed32()
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32.
-func appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := llen * protowire.SizeFixed32()
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendFixed32(b, uint32(v.Uint()))
- }
- return b, nil
-}
-
-var coderFixed32PackedSliceValue = valueCoderFuncs{
- size: sizeFixed32PackedSliceValue,
- marshal: appendFixed32PackedSliceValue,
- unmarshal: consumeFixed32SliceValue,
- merge: mergeListValue,
-}
-
-// sizeFloat returns the size of wire encoding a float32 pointer as a Float.
-func sizeFloat(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendFloat wire encodes a float32 pointer as a Float.
-func appendFloat(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Float32()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, math.Float32bits(v))
- return b, nil
-}
-
-// consumeFloat wire decodes a float32 pointer as a Float.
-func consumeFloat(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Float32() = math.Float32frombits(v)
- out.n = n
- return out, nil
-}
-
-var coderFloat = pointerCoderFuncs{
- size: sizeFloat,
- marshal: appendFloat,
- unmarshal: consumeFloat,
- merge: mergeFloat32,
-}
-
-// sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float.
-// The zero value is not encoded.
-func sizeFloatNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Float32()
- if v == 0 && !math.Signbit(float64(v)) {
- return 0
- }
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendFloatNoZero wire encodes a float32 pointer as a Float.
-// The zero value is not encoded.
-func appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Float32()
- if v == 0 && !math.Signbit(float64(v)) {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, math.Float32bits(v))
- return b, nil
-}
-
-var coderFloatNoZero = pointerCoderFuncs{
- size: sizeFloatNoZero,
- marshal: appendFloatNoZero,
- unmarshal: consumeFloat,
- merge: mergeFloat32NoZero,
-}
-
-// sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float.
-// It panics if the pointer is nil.
-func sizeFloatPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return f.tagsize + protowire.SizeFixed32()
-}
-
-// appendFloatPtr wire encodes a *float32 pointer as a Float.
-// It panics if the pointer is nil.
-func appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Float32Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, math.Float32bits(v))
- return b, nil
-}
-
-// consumeFloatPtr wire decodes a *float32 pointer as a Float.
-func consumeFloatPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.Float32Ptr()
- if *vp == nil {
- *vp = new(float32)
- }
- **vp = math.Float32frombits(v)
- out.n = n
- return out, nil
-}
-
-var coderFloatPtr = pointerCoderFuncs{
- size: sizeFloatPtr,
- marshal: appendFloatPtr,
- unmarshal: consumeFloatPtr,
- merge: mergeFloat32Ptr,
-}
-
-// sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float.
-func sizeFloatSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Float32Slice()
- size = len(s) * (f.tagsize + protowire.SizeFixed32())
- return size
-}
-
-// appendFloatSlice encodes a []float32 pointer as a repeated Float.
-func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Float32Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed32(b, math.Float32bits(v))
- }
- return b, nil
-}
-
-// consumeFloatSlice wire decodes a []float32 pointer as a repeated Float.
-func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Float32Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := len(b) / protowire.SizeFixed32()
- if count > 0 {
- p.growFloat32Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- s = append(s, math.Float32frombits(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.Fixed32Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, math.Float32frombits(v))
- out.n = n
- return out, nil
-}
-
-var coderFloatSlice = pointerCoderFuncs{
- size: sizeFloatSlice,
- marshal: appendFloatSlice,
- unmarshal: consumeFloatSlice,
- merge: mergeFloat32Slice,
-}
-
-// sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float.
-func sizeFloatPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Float32Slice()
- if len(s) == 0 {
- return 0
- }
- n := len(s) * protowire.SizeFixed32()
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float.
-func appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Float32Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := len(s) * protowire.SizeFixed32()
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendFixed32(b, math.Float32bits(v))
- }
- return b, nil
-}
-
-var coderFloatPackedSlice = pointerCoderFuncs{
- size: sizeFloatPackedSlice,
- marshal: appendFloatPackedSlice,
- unmarshal: consumeFloatSlice,
- merge: mergeFloat32Slice,
-}
-
-// sizeFloatValue returns the size of wire encoding a float32 value as a Float.
-func sizeFloatValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeFixed32()
-}
-
-// appendFloatValue encodes a float32 value as a Float.
-func appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
- return b, nil
-}
-
-// consumeFloatValue decodes a float32 value as a Float.
-func consumeFloatValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed32Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil
-}
-
-var coderFloatValue = valueCoderFuncs{
- size: sizeFloatValue,
- marshal: appendFloatValue,
- unmarshal: consumeFloatValue,
- merge: mergeScalarValue,
-}
-
-// sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float.
-func sizeFloatSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- size = list.Len() * (tagsize + protowire.SizeFixed32())
- return size
-}
-
-// appendFloatSliceValue encodes a []float32 value as a repeated Float.
-func appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
- }
- return b, nil
-}
-
-// consumeFloatSliceValue wire decodes a []float32 value as a repeated Float.
-func consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.Fixed32Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
- out.n = n
- return listv, out, nil
-}
-
-var coderFloatSliceValue = valueCoderFuncs{
- size: sizeFloatSliceValue,
- marshal: appendFloatSliceValue,
- unmarshal: consumeFloatSliceValue,
- merge: mergeListValue,
-}
-
-// sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float.
-func sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := llen * protowire.SizeFixed32()
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float.
-func appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := llen * protowire.SizeFixed32()
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
- }
- return b, nil
-}
-
-var coderFloatPackedSliceValue = valueCoderFuncs{
- size: sizeFloatPackedSliceValue,
- marshal: appendFloatPackedSliceValue,
- unmarshal: consumeFloatSliceValue,
- merge: mergeListValue,
-}
-
-// sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64.
-func sizeSfixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendSfixed64 wire encodes a int64 pointer as a Sfixed64.
-func appendSfixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int64()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, uint64(v))
- return b, nil
-}
-
-// consumeSfixed64 wire decodes a int64 pointer as a Sfixed64.
-func consumeSfixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Int64() = int64(v)
- out.n = n
- return out, nil
-}
-
-var coderSfixed64 = pointerCoderFuncs{
- size: sizeSfixed64,
- marshal: appendSfixed64,
- unmarshal: consumeSfixed64,
- merge: mergeInt64,
-}
-
-// sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64.
-// The zero value is not encoded.
-func sizeSfixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Int64()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64.
-// The zero value is not encoded.
-func appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Int64()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, uint64(v))
- return b, nil
-}
-
-var coderSfixed64NoZero = pointerCoderFuncs{
- size: sizeSfixed64NoZero,
- marshal: appendSfixed64NoZero,
- unmarshal: consumeSfixed64,
- merge: mergeInt64NoZero,
-}
-
-// sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64.
-// It panics if the pointer is nil.
-func sizeSfixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64.
-// It panics if the pointer is nil.
-func appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Int64Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, uint64(v))
- return b, nil
-}
-
-// consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64.
-func consumeSfixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.Int64Ptr()
- if *vp == nil {
- *vp = new(int64)
- }
- **vp = int64(v)
- out.n = n
- return out, nil
-}
-
-var coderSfixed64Ptr = pointerCoderFuncs{
- size: sizeSfixed64Ptr,
- marshal: appendSfixed64Ptr,
- unmarshal: consumeSfixed64Ptr,
- merge: mergeInt64Ptr,
-}
-
-// sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64.
-func sizeSfixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int64Slice()
- size = len(s) * (f.tagsize + protowire.SizeFixed64())
- return size
-}
-
-// appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64.
-func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int64Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, uint64(v))
- }
- return b, nil
-}
-
-// consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64.
-func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Int64Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := len(b) / protowire.SizeFixed64()
- if count > 0 {
- p.growInt64Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- s = append(s, int64(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, int64(v))
- out.n = n
- return out, nil
-}
-
-var coderSfixed64Slice = pointerCoderFuncs{
- size: sizeSfixed64Slice,
- marshal: appendSfixed64Slice,
- unmarshal: consumeSfixed64Slice,
- merge: mergeInt64Slice,
-}
-
-// sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64.
-func sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Int64Slice()
- if len(s) == 0 {
- return 0
- }
- n := len(s) * protowire.SizeFixed64()
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64.
-func appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Int64Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := len(s) * protowire.SizeFixed64()
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendFixed64(b, uint64(v))
- }
- return b, nil
-}
-
-var coderSfixed64PackedSlice = pointerCoderFuncs{
- size: sizeSfixed64PackedSlice,
- marshal: appendSfixed64PackedSlice,
- unmarshal: consumeSfixed64Slice,
- merge: mergeInt64Slice,
-}
-
-// sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64.
-func sizeSfixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeFixed64()
-}
-
-// appendSfixed64Value encodes a int64 value as a Sfixed64.
-func appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed64(b, uint64(v.Int()))
- return b, nil
-}
-
-// consumeSfixed64Value decodes a int64 value as a Sfixed64.
-func consumeSfixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfInt64(int64(v)), out, nil
-}
-
-var coderSfixed64Value = valueCoderFuncs{
- size: sizeSfixed64Value,
- marshal: appendSfixed64Value,
- unmarshal: consumeSfixed64Value,
- merge: mergeScalarValue,
-}
-
-// sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64.
-func sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- size = list.Len() * (tagsize + protowire.SizeFixed64())
- return size
-}
-
-// appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64.
-func appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed64(b, uint64(v.Int()))
- }
- return b, nil
-}
-
-// consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64.
-func consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.Fixed64Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderSfixed64SliceValue = valueCoderFuncs{
- size: sizeSfixed64SliceValue,
- marshal: appendSfixed64SliceValue,
- unmarshal: consumeSfixed64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64.
-func sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := llen * protowire.SizeFixed64()
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64.
-func appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := llen * protowire.SizeFixed64()
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendFixed64(b, uint64(v.Int()))
- }
- return b, nil
-}
-
-var coderSfixed64PackedSliceValue = valueCoderFuncs{
- size: sizeSfixed64PackedSliceValue,
- marshal: appendSfixed64PackedSliceValue,
- unmarshal: consumeSfixed64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64.
-func sizeFixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendFixed64 wire encodes a uint64 pointer as a Fixed64.
-func appendFixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint64()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, v)
- return b, nil
-}
-
-// consumeFixed64 wire decodes a uint64 pointer as a Fixed64.
-func consumeFixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Uint64() = v
- out.n = n
- return out, nil
-}
-
-var coderFixed64 = pointerCoderFuncs{
- size: sizeFixed64,
- marshal: appendFixed64,
- unmarshal: consumeFixed64,
- merge: mergeUint64,
-}
-
-// sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64.
-// The zero value is not encoded.
-func sizeFixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Uint64()
- if v == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64.
-// The zero value is not encoded.
-func appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Uint64()
- if v == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, v)
- return b, nil
-}
-
-var coderFixed64NoZero = pointerCoderFuncs{
- size: sizeFixed64NoZero,
- marshal: appendFixed64NoZero,
- unmarshal: consumeFixed64,
- merge: mergeUint64NoZero,
-}
-
-// sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64.
-// It panics if the pointer is nil.
-func sizeFixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64.
-// It panics if the pointer is nil.
-func appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Uint64Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, v)
- return b, nil
-}
-
-// consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64.
-func consumeFixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.Uint64Ptr()
- if *vp == nil {
- *vp = new(uint64)
- }
- **vp = v
- out.n = n
- return out, nil
-}
-
-var coderFixed64Ptr = pointerCoderFuncs{
- size: sizeFixed64Ptr,
- marshal: appendFixed64Ptr,
- unmarshal: consumeFixed64Ptr,
- merge: mergeUint64Ptr,
-}
-
-// sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64.
-func sizeFixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint64Slice()
- size = len(s) * (f.tagsize + protowire.SizeFixed64())
- return size
-}
-
-// appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64.
-func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint64Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, v)
- }
- return b, nil
-}
-
-// consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64.
-func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Uint64Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := len(b) / protowire.SizeFixed64()
- if count > 0 {
- p.growUint64Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- s = append(s, v)
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, v)
- out.n = n
- return out, nil
-}
-
-var coderFixed64Slice = pointerCoderFuncs{
- size: sizeFixed64Slice,
- marshal: appendFixed64Slice,
- unmarshal: consumeFixed64Slice,
- merge: mergeUint64Slice,
-}
-
-// sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64.
-func sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Uint64Slice()
- if len(s) == 0 {
- return 0
- }
- n := len(s) * protowire.SizeFixed64()
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64.
-func appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Uint64Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := len(s) * protowire.SizeFixed64()
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendFixed64(b, v)
- }
- return b, nil
-}
-
-var coderFixed64PackedSlice = pointerCoderFuncs{
- size: sizeFixed64PackedSlice,
- marshal: appendFixed64PackedSlice,
- unmarshal: consumeFixed64Slice,
- merge: mergeUint64Slice,
-}
-
-// sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64.
-func sizeFixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeFixed64()
-}
-
-// appendFixed64Value encodes a uint64 value as a Fixed64.
-func appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed64(b, v.Uint())
- return b, nil
-}
-
-// consumeFixed64Value decodes a uint64 value as a Fixed64.
-func consumeFixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfUint64(v), out, nil
-}
-
-var coderFixed64Value = valueCoderFuncs{
- size: sizeFixed64Value,
- marshal: appendFixed64Value,
- unmarshal: consumeFixed64Value,
- merge: mergeScalarValue,
-}
-
-// sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64.
-func sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- size = list.Len() * (tagsize + protowire.SizeFixed64())
- return size
-}
-
-// appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64.
-func appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed64(b, v.Uint())
- }
- return b, nil
-}
-
-// consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64.
-func consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint64(v))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.Fixed64Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfUint64(v))
- out.n = n
- return listv, out, nil
-}
-
-var coderFixed64SliceValue = valueCoderFuncs{
- size: sizeFixed64SliceValue,
- marshal: appendFixed64SliceValue,
- unmarshal: consumeFixed64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64.
-func sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := llen * protowire.SizeFixed64()
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64.
-func appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := llen * protowire.SizeFixed64()
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendFixed64(b, v.Uint())
- }
- return b, nil
-}
-
-var coderFixed64PackedSliceValue = valueCoderFuncs{
- size: sizeFixed64PackedSliceValue,
- marshal: appendFixed64PackedSliceValue,
- unmarshal: consumeFixed64SliceValue,
- merge: mergeListValue,
-}
-
-// sizeDouble returns the size of wire encoding a float64 pointer as a Double.
-func sizeDouble(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
-
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendDouble wire encodes a float64 pointer as a Double.
-func appendDouble(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Float64()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, math.Float64bits(v))
- return b, nil
-}
-
-// consumeDouble wire decodes a float64 pointer as a Double.
-func consumeDouble(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Float64() = math.Float64frombits(v)
- out.n = n
- return out, nil
-}
-
-var coderDouble = pointerCoderFuncs{
- size: sizeDouble,
- marshal: appendDouble,
- unmarshal: consumeDouble,
- merge: mergeFloat64,
-}
-
-// sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double.
-// The zero value is not encoded.
-func sizeDoubleNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Float64()
- if v == 0 && !math.Signbit(float64(v)) {
- return 0
- }
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendDoubleNoZero wire encodes a float64 pointer as a Double.
-// The zero value is not encoded.
-func appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Float64()
- if v == 0 && !math.Signbit(float64(v)) {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, math.Float64bits(v))
- return b, nil
-}
-
-var coderDoubleNoZero = pointerCoderFuncs{
- size: sizeDoubleNoZero,
- marshal: appendDoubleNoZero,
- unmarshal: consumeDouble,
- merge: mergeFloat64NoZero,
-}
-
-// sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double.
-// It panics if the pointer is nil.
-func sizeDoublePtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- return f.tagsize + protowire.SizeFixed64()
-}
-
-// appendDoublePtr wire encodes a *float64 pointer as a Double.
-// It panics if the pointer is nil.
-func appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.Float64Ptr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, math.Float64bits(v))
- return b, nil
-}
-
-// consumeDoublePtr wire decodes a *float64 pointer as a Double.
-func consumeDoublePtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.Float64Ptr()
- if *vp == nil {
- *vp = new(float64)
- }
- **vp = math.Float64frombits(v)
- out.n = n
- return out, nil
-}
-
-var coderDoublePtr = pointerCoderFuncs{
- size: sizeDoublePtr,
- marshal: appendDoublePtr,
- unmarshal: consumeDoublePtr,
- merge: mergeFloat64Ptr,
-}
-
-// sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double.
-func sizeDoubleSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Float64Slice()
- size = len(s) * (f.tagsize + protowire.SizeFixed64())
- return size
-}
-
-// appendDoubleSlice encodes a []float64 pointer as a repeated Double.
-func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Float64Slice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendFixed64(b, math.Float64bits(v))
- }
- return b, nil
-}
-
-// consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double.
-func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.Float64Slice()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- count := len(b) / protowire.SizeFixed64()
- if count > 0 {
- p.growFloat64Slice(count)
- }
- s := *sp
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- s = append(s, math.Float64frombits(v))
- b = b[n:]
- }
- *sp = s
- out.n = n
- return out, nil
- }
- if wtyp != protowire.Fixed64Type {
- return out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, math.Float64frombits(v))
- out.n = n
- return out, nil
-}
-
-var coderDoubleSlice = pointerCoderFuncs{
- size: sizeDoubleSlice,
- marshal: appendDoubleSlice,
- unmarshal: consumeDoubleSlice,
- merge: mergeFloat64Slice,
-}
-
-// sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double.
-func sizeDoublePackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.Float64Slice()
- if len(s) == 0 {
- return 0
- }
- n := len(s) * protowire.SizeFixed64()
- return f.tagsize + protowire.SizeBytes(n)
-}
-
-// appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double.
-func appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.Float64Slice()
- if len(s) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- n := len(s) * protowire.SizeFixed64()
- b = protowire.AppendVarint(b, uint64(n))
- for _, v := range s {
- b = protowire.AppendFixed64(b, math.Float64bits(v))
- }
- return b, nil
-}
-
-var coderDoublePackedSlice = pointerCoderFuncs{
- size: sizeDoublePackedSlice,
- marshal: appendDoublePackedSlice,
- unmarshal: consumeDoubleSlice,
- merge: mergeFloat64Slice,
-}
-
-// sizeDoubleValue returns the size of wire encoding a float64 value as a Double.
-func sizeDoubleValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeFixed64()
-}
-
-// appendDoubleValue encodes a float64 value as a Double.
-func appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
- return b, nil
-}
-
-// consumeDoubleValue decodes a float64 value as a Double.
-func consumeDoubleValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.Fixed64Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil
-}
-
-var coderDoubleValue = valueCoderFuncs{
- size: sizeDoubleValue,
- marshal: appendDoubleValue,
- unmarshal: consumeDoubleValue,
- merge: mergeScalarValue,
-}
-
-// sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double.
-func sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- size = list.Len() * (tagsize + protowire.SizeFixed64())
- return size
-}
-
-// appendDoubleSliceValue encodes a []float64 value as a repeated Double.
-func appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
- }
- return b, nil
-}
-
-// consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double.
-func consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp == protowire.BytesType {
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- for len(b) > 0 {
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
- b = b[n:]
- }
- out.n = n
- return listv, out, nil
- }
- if wtyp != protowire.Fixed64Type {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderDoubleSliceValue = valueCoderFuncs{
- size: sizeDoubleSliceValue,
- marshal: appendDoubleSliceValue,
- unmarshal: consumeDoubleSliceValue,
- merge: mergeListValue,
-}
-
-// sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double.
-func sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return 0
- }
- n := llen * protowire.SizeFixed64()
- return tagsize + protowire.SizeBytes(n)
-}
-
-// appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double.
-func appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- llen := list.Len()
- if llen == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, wiretag)
- n := llen * protowire.SizeFixed64()
- b = protowire.AppendVarint(b, uint64(n))
- for i := 0; i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
- }
- return b, nil
-}
-
-var coderDoublePackedSliceValue = valueCoderFuncs{
- size: sizeDoublePackedSliceValue,
- marshal: appendDoublePackedSliceValue,
- unmarshal: consumeDoubleSliceValue,
- merge: mergeListValue,
-}
-
-// sizeString returns the size of wire encoding a string pointer as a String.
-func sizeString(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.String()
- return f.tagsize + protowire.SizeBytes(len(v))
-}
-
-// appendString wire encodes a string pointer as a String.
-func appendString(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.String()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- return b, nil
-}
-
-// consumeString wire decodes a string pointer as a String.
-func consumeString(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- *p.String() = string(v)
- out.n = n
- return out, nil
-}
-
-var coderString = pointerCoderFuncs{
- size: sizeString,
- marshal: appendString,
- unmarshal: consumeString,
- merge: mergeString,
-}
-
-// appendStringValidateUTF8 wire encodes a string pointer as a String.
-func appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.String()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- if !utf8.ValidString(v) {
- return b, errInvalidUTF8{}
- }
- return b, nil
-}
-
-// consumeStringValidateUTF8 wire decodes a string pointer as a String.
-func consumeStringValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if !utf8.Valid(v) {
- return out, errInvalidUTF8{}
- }
- *p.String() = string(v)
- out.n = n
- return out, nil
-}
-
-var coderStringValidateUTF8 = pointerCoderFuncs{
- size: sizeString,
- marshal: appendStringValidateUTF8,
- unmarshal: consumeStringValidateUTF8,
- merge: mergeString,
-}
-
-// sizeStringNoZero returns the size of wire encoding a string pointer as a String.
-// The zero value is not encoded.
-func sizeStringNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.String()
- if len(v) == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeBytes(len(v))
-}
-
-// appendStringNoZero wire encodes a string pointer as a String.
-// The zero value is not encoded.
-func appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.String()
- if len(v) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- return b, nil
-}
-
-var coderStringNoZero = pointerCoderFuncs{
- size: sizeStringNoZero,
- marshal: appendStringNoZero,
- unmarshal: consumeString,
- merge: mergeStringNoZero,
-}
-
-// appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String.
-// The zero value is not encoded.
-func appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.String()
- if len(v) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- if !utf8.ValidString(v) {
- return b, errInvalidUTF8{}
- }
- return b, nil
-}
-
-var coderStringNoZeroValidateUTF8 = pointerCoderFuncs{
- size: sizeStringNoZero,
- marshal: appendStringNoZeroValidateUTF8,
- unmarshal: consumeStringValidateUTF8,
- merge: mergeStringNoZero,
-}
-
-// sizeStringPtr returns the size of wire encoding a *string pointer as a String.
-// It panics if the pointer is nil.
-func sizeStringPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := **p.StringPtr()
- return f.tagsize + protowire.SizeBytes(len(v))
-}
-
-// appendStringPtr wire encodes a *string pointer as a String.
-// It panics if the pointer is nil.
-func appendStringPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.StringPtr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- return b, nil
-}
-
-// consumeStringPtr wire decodes a *string pointer as a String.
-func consumeStringPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- vp := p.StringPtr()
- if *vp == nil {
- *vp = new(string)
- }
- **vp = string(v)
- out.n = n
- return out, nil
-}
-
-var coderStringPtr = pointerCoderFuncs{
- size: sizeStringPtr,
- marshal: appendStringPtr,
- unmarshal: consumeStringPtr,
- merge: mergeStringPtr,
-}
-
-// appendStringPtrValidateUTF8 wire encodes a *string pointer as a String.
-// It panics if the pointer is nil.
-func appendStringPtrValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := **p.StringPtr()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- if !utf8.ValidString(v) {
- return b, errInvalidUTF8{}
- }
- return b, nil
-}
-
-// consumeStringPtrValidateUTF8 wire decodes a *string pointer as a String.
-func consumeStringPtrValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if !utf8.Valid(v) {
- return out, errInvalidUTF8{}
- }
- vp := p.StringPtr()
- if *vp == nil {
- *vp = new(string)
- }
- **vp = string(v)
- out.n = n
- return out, nil
-}
-
-var coderStringPtrValidateUTF8 = pointerCoderFuncs{
- size: sizeStringPtr,
- marshal: appendStringPtrValidateUTF8,
- unmarshal: consumeStringPtrValidateUTF8,
- merge: mergeStringPtr,
-}
-
-// sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String.
-func sizeStringSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.StringSlice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeBytes(len(v))
- }
- return size
-}
-
-// appendStringSlice encodes a []string pointer as a repeated String.
-func appendStringSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.StringSlice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- }
- return b, nil
-}
-
-// consumeStringSlice wire decodes a []string pointer as a repeated String.
-func consumeStringSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.StringSlice()
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, string(v))
- out.n = n
- return out, nil
-}
-
-var coderStringSlice = pointerCoderFuncs{
- size: sizeStringSlice,
- marshal: appendStringSlice,
- unmarshal: consumeStringSlice,
- merge: mergeStringSlice,
-}
-
-// appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String.
-func appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.StringSlice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendString(b, v)
- if !utf8.ValidString(v) {
- return b, errInvalidUTF8{}
- }
- }
- return b, nil
-}
-
-// consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String.
-func consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if !utf8.Valid(v) {
- return out, errInvalidUTF8{}
- }
- sp := p.StringSlice()
- *sp = append(*sp, string(v))
- out.n = n
- return out, nil
-}
-
-var coderStringSliceValidateUTF8 = pointerCoderFuncs{
- size: sizeStringSlice,
- marshal: appendStringSliceValidateUTF8,
- unmarshal: consumeStringSliceValidateUTF8,
- merge: mergeStringSlice,
-}
-
-// sizeStringValue returns the size of wire encoding a string value as a String.
-func sizeStringValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeBytes(len(v.String()))
-}
-
-// appendStringValue encodes a string value as a String.
-func appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendString(b, v.String())
- return b, nil
-}
-
-// consumeStringValue decodes a string value as a String.
-func consumeStringValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfString(string(v)), out, nil
-}
-
-var coderStringValue = valueCoderFuncs{
- size: sizeStringValue,
- marshal: appendStringValue,
- unmarshal: consumeStringValue,
- merge: mergeScalarValue,
-}
-
-// appendStringValueValidateUTF8 encodes a string value as a String.
-func appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendString(b, v.String())
- if !utf8.ValidString(v.String()) {
- return b, errInvalidUTF8{}
- }
- return b, nil
-}
-
-// consumeStringValueValidateUTF8 decodes a string value as a String.
-func consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- if !utf8.Valid(v) {
- return protoreflect.Value{}, out, errInvalidUTF8{}
- }
- out.n = n
- return protoreflect.ValueOfString(string(v)), out, nil
-}
-
-var coderStringValueValidateUTF8 = valueCoderFuncs{
- size: sizeStringValue,
- marshal: appendStringValueValidateUTF8,
- unmarshal: consumeStringValueValidateUTF8,
- merge: mergeScalarValue,
-}
-
-// sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String.
-func sizeStringSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeBytes(len(v.String()))
- }
- return size
-}
-
-// appendStringSliceValue encodes a []string value as a repeated String.
-func appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendString(b, v.String())
- }
- return b, nil
-}
-
-// consumeStringSliceValue wire decodes a []string value as a repeated String.
-func consumeStringSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp != protowire.BytesType {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfString(string(v)))
- out.n = n
- return listv, out, nil
-}
-
-var coderStringSliceValue = valueCoderFuncs{
- size: sizeStringSliceValue,
- marshal: appendStringSliceValue,
- unmarshal: consumeStringSliceValue,
- merge: mergeListValue,
-}
-
-// sizeBytes returns the size of wire encoding a []byte pointer as a Bytes.
-func sizeBytes(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Bytes()
- return f.tagsize + protowire.SizeBytes(len(v))
-}
-
-// appendBytes wire encodes a []byte pointer as a Bytes.
-func appendBytes(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Bytes()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendBytes(b, v)
- return b, nil
-}
-
-// consumeBytes wire decodes a []byte pointer as a Bytes.
-func consumeBytes(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Bytes() = append(emptyBuf[:], v...)
- out.n = n
- return out, nil
-}
-
-var coderBytes = pointerCoderFuncs{
- size: sizeBytes,
- marshal: appendBytes,
- unmarshal: consumeBytes,
- merge: mergeBytes,
-}
-
-// appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes.
-func appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Bytes()
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendBytes(b, v)
- if !utf8.Valid(v) {
- return b, errInvalidUTF8{}
- }
- return b, nil
-}
-
-// consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes.
-func consumeBytesValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if !utf8.Valid(v) {
- return out, errInvalidUTF8{}
- }
- *p.Bytes() = append(emptyBuf[:], v...)
- out.n = n
- return out, nil
-}
-
-var coderBytesValidateUTF8 = pointerCoderFuncs{
- size: sizeBytes,
- marshal: appendBytesValidateUTF8,
- unmarshal: consumeBytesValidateUTF8,
- merge: mergeBytes,
-}
-
-// sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes.
-// The zero value is not encoded.
-func sizeBytesNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- v := *p.Bytes()
- if len(v) == 0 {
- return 0
- }
- return f.tagsize + protowire.SizeBytes(len(v))
-}
-
-// appendBytesNoZero wire encodes a []byte pointer as a Bytes.
-// The zero value is not encoded.
-func appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Bytes()
- if len(v) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendBytes(b, v)
- return b, nil
-}
-
-// consumeBytesNoZero wire decodes a []byte pointer as a Bytes.
-// The zero value is not decoded.
-func consumeBytesNoZero(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- *p.Bytes() = append(([]byte)(nil), v...)
- out.n = n
- return out, nil
-}
-
-var coderBytesNoZero = pointerCoderFuncs{
- size: sizeBytesNoZero,
- marshal: appendBytesNoZero,
- unmarshal: consumeBytesNoZero,
- merge: mergeBytesNoZero,
-}
-
-// appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes.
-// The zero value is not encoded.
-func appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- v := *p.Bytes()
- if len(v) == 0 {
- return b, nil
- }
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendBytes(b, v)
- if !utf8.Valid(v) {
- return b, errInvalidUTF8{}
- }
- return b, nil
-}
-
-// consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes.
-func consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if !utf8.Valid(v) {
- return out, errInvalidUTF8{}
- }
- *p.Bytes() = append(([]byte)(nil), v...)
- out.n = n
- return out, nil
-}
-
-var coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{
- size: sizeBytesNoZero,
- marshal: appendBytesNoZeroValidateUTF8,
- unmarshal: consumeBytesNoZeroValidateUTF8,
- merge: mergeBytesNoZero,
-}
-
-// sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes.
-func sizeBytesSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {
- s := *p.BytesSlice()
- for _, v := range s {
- size += f.tagsize + protowire.SizeBytes(len(v))
- }
- return size
-}
-
-// appendBytesSlice encodes a [][]byte pointer as a repeated Bytes.
-func appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.BytesSlice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendBytes(b, v)
- }
- return b, nil
-}
-
-// consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes.
-func consumeBytesSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- sp := p.BytesSlice()
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- *sp = append(*sp, append(emptyBuf[:], v...))
- out.n = n
- return out, nil
-}
-
-var coderBytesSlice = pointerCoderFuncs{
- size: sizeBytesSlice,
- marshal: appendBytesSlice,
- unmarshal: consumeBytesSlice,
- merge: mergeBytesSlice,
-}
-
-// appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes.
-func appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- s := *p.BytesSlice()
- for _, v := range s {
- b = protowire.AppendVarint(b, f.wiretag)
- b = protowire.AppendBytes(b, v)
- if !utf8.Valid(v) {
- return b, errInvalidUTF8{}
- }
- }
- return b, nil
-}
-
-// consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes.
-func consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- if !utf8.Valid(v) {
- return out, errInvalidUTF8{}
- }
- sp := p.BytesSlice()
- *sp = append(*sp, append(emptyBuf[:], v...))
- out.n = n
- return out, nil
-}
-
-var coderBytesSliceValidateUTF8 = pointerCoderFuncs{
- size: sizeBytesSlice,
- marshal: appendBytesSliceValidateUTF8,
- unmarshal: consumeBytesSliceValidateUTF8,
- merge: mergeBytesSlice,
-}
-
-// sizeBytesValue returns the size of wire encoding a []byte value as a Bytes.
-func sizeBytesValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {
- return tagsize + protowire.SizeBytes(len(v.Bytes()))
-}
-
-// appendBytesValue encodes a []byte value as a Bytes.
-func appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendBytes(b, v.Bytes())
- return b, nil
-}
-
-// consumeBytesValue decodes a []byte value as a Bytes.
-func consumeBytesValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- out.n = n
- return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil
-}
-
-var coderBytesValue = valueCoderFuncs{
- size: sizeBytesValue,
- marshal: appendBytesValue,
- unmarshal: consumeBytesValue,
- merge: mergeBytesValue,
-}
-
-// sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes.
-func sizeBytesSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- size += tagsize + protowire.SizeBytes(len(v.Bytes()))
- }
- return size
-}
-
-// appendBytesSliceValue encodes a [][]byte value as a repeated Bytes.
-func appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {
- list := listv.List()
- for i, llen := 0, list.Len(); i < llen; i++ {
- v := list.Get(i)
- b = protowire.AppendVarint(b, wiretag)
- b = protowire.AppendBytes(b, v.Bytes())
- }
- return b, nil
-}
-
-// consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes.
-func consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {
- list := listv.List()
- if wtyp != protowire.BytesType {
- return protoreflect.Value{}, out, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return protoreflect.Value{}, out, errDecode
- }
- list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))
- out.n = n
- return listv, out, nil
-}
-
-var coderBytesSliceValue = valueCoderFuncs{
- size: sizeBytesSliceValue,
- marshal: appendBytesSliceValue,
- unmarshal: consumeBytesSliceValue,
- merge: mergeBytesListValue,
-}
-
-// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.
-var emptyBuf [0]byte
-
-var wireTypes = map[protoreflect.Kind]protowire.Type{
- protoreflect.BoolKind: protowire.VarintType,
- protoreflect.EnumKind: protowire.VarintType,
- protoreflect.Int32Kind: protowire.VarintType,
- protoreflect.Sint32Kind: protowire.VarintType,
- protoreflect.Uint32Kind: protowire.VarintType,
- protoreflect.Int64Kind: protowire.VarintType,
- protoreflect.Sint64Kind: protowire.VarintType,
- protoreflect.Uint64Kind: protowire.VarintType,
- protoreflect.Sfixed32Kind: protowire.Fixed32Type,
- protoreflect.Fixed32Kind: protowire.Fixed32Type,
- protoreflect.FloatKind: protowire.Fixed32Type,
- protoreflect.Sfixed64Kind: protowire.Fixed64Type,
- protoreflect.Fixed64Kind: protowire.Fixed64Type,
- protoreflect.DoubleKind: protowire.Fixed64Type,
- protoreflect.StringKind: protowire.BytesType,
- protoreflect.BytesKind: protowire.BytesType,
- protoreflect.MessageKind: protowire.BytesType,
- protoreflect.GroupKind: protowire.StartGroupType,
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go
deleted file mode 100644
index 229c69801..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go
+++ /dev/null
@@ -1,399 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "reflect"
- "sort"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type mapInfo struct {
- goType reflect.Type
- keyWiretag uint64
- valWiretag uint64
- keyFuncs valueCoderFuncs
- valFuncs valueCoderFuncs
- keyZero protoreflect.Value
- keyKind protoreflect.Kind
- conv *mapConverter
-}
-
-func encoderFuncsForMap(fd protoreflect.FieldDescriptor, ft reflect.Type) (valueMessage *MessageInfo, funcs pointerCoderFuncs) {
- // TODO: Consider generating specialized map coders.
- keyField := fd.MapKey()
- valField := fd.MapValue()
- keyWiretag := protowire.EncodeTag(1, wireTypes[keyField.Kind()])
- valWiretag := protowire.EncodeTag(2, wireTypes[valField.Kind()])
- keyFuncs := encoderFuncsForValue(keyField)
- valFuncs := encoderFuncsForValue(valField)
- conv := newMapConverter(ft, fd)
-
- mapi := &mapInfo{
- goType: ft,
- keyWiretag: keyWiretag,
- valWiretag: valWiretag,
- keyFuncs: keyFuncs,
- valFuncs: valFuncs,
- keyZero: keyField.Default(),
- keyKind: keyField.Kind(),
- conv: conv,
- }
- if valField.Kind() == protoreflect.MessageKind {
- valueMessage = getMessageInfo(ft.Elem())
- }
-
- funcs = pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- return sizeMap(p.AsValueOf(ft).Elem(), mapi, f, opts)
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- return appendMap(b, p.AsValueOf(ft).Elem(), mapi, f, opts)
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- mp := p.AsValueOf(ft)
- if mp.Elem().IsNil() {
- mp.Elem().Set(reflect.MakeMap(mapi.goType))
- }
- if f.mi == nil {
- return consumeMap(b, mp.Elem(), wtyp, mapi, f, opts)
- } else {
- return consumeMapOfMessage(b, mp.Elem(), wtyp, mapi, f, opts)
- }
- },
- }
- switch valField.Kind() {
- case protoreflect.MessageKind:
- funcs.merge = mergeMapOfMessage
- case protoreflect.BytesKind:
- funcs.merge = mergeMapOfBytes
- default:
- funcs.merge = mergeMap
- }
- if valFuncs.isInit != nil {
- funcs.isInit = func(p pointer, f *coderFieldInfo) error {
- return isInitMap(p.AsValueOf(ft).Elem(), mapi, f)
- }
- }
- return valueMessage, funcs
-}
-
-const (
- mapKeyTagSize = 1 // field 1, tag size 1.
- mapValTagSize = 1 // field 2, tag size 2.
-)
-
-func sizeMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) int {
- if mapv.Len() == 0 {
- return 0
- }
- n := 0
- iter := mapv.MapRange()
- for iter.Next() {
- key := mapi.conv.keyConv.PBValueOf(iter.Key()).MapKey()
- keySize := mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)
- var valSize int
- value := mapi.conv.valConv.PBValueOf(iter.Value())
- if f.mi == nil {
- valSize = mapi.valFuncs.size(value, mapValTagSize, opts)
- } else {
- p := pointerOfValue(iter.Value())
- valSize += mapValTagSize
- valSize += protowire.SizeBytes(f.mi.sizePointer(p, opts))
- }
- n += f.tagsize + protowire.SizeBytes(keySize+valSize)
- }
- return n
-}
-
-func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- var (
- key = mapi.keyZero
- val = mapi.conv.valConv.New()
- )
- for len(b) > 0 {
- num, wtyp, n := protowire.ConsumeTag(b)
- if n < 0 {
- return out, errDecode
- }
- if num > protowire.MaxValidNumber {
- return out, errDecode
- }
- b = b[n:]
- err := errUnknown
- switch num {
- case genid.MapEntry_Key_field_number:
- var v protoreflect.Value
- var o unmarshalOutput
- v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)
- if err != nil {
- break
- }
- key = v
- n = o.n
- case genid.MapEntry_Value_field_number:
- var v protoreflect.Value
- var o unmarshalOutput
- v, o, err = mapi.valFuncs.unmarshal(b, val, num, wtyp, opts)
- if err != nil {
- break
- }
- val = v
- n = o.n
- }
- if err == errUnknown {
- n = protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return out, errDecode
- }
- } else if err != nil {
- return out, err
- }
- b = b[n:]
- }
- mapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), mapi.conv.valConv.GoValueOf(val))
- out.n = n
- return out, nil
-}
-
-func consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if wtyp != protowire.BytesType {
- return out, errUnknown
- }
- b, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- var (
- key = mapi.keyZero
- val = reflect.New(f.mi.GoReflectType.Elem())
- )
- for len(b) > 0 {
- num, wtyp, n := protowire.ConsumeTag(b)
- if n < 0 {
- return out, errDecode
- }
- if num > protowire.MaxValidNumber {
- return out, errDecode
- }
- b = b[n:]
- err := errUnknown
- switch num {
- case 1:
- var v protoreflect.Value
- var o unmarshalOutput
- v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)
- if err != nil {
- break
- }
- key = v
- n = o.n
- case 2:
- if wtyp != protowire.BytesType {
- break
- }
- var v []byte
- v, n = protowire.ConsumeBytes(b)
- if n < 0 {
- return out, errDecode
- }
- var o unmarshalOutput
- o, err = f.mi.unmarshalPointer(v, pointerOfValue(val), 0, opts)
- if o.initialized {
- // Consider this map item initialized so long as we see
- // an initialized value.
- out.initialized = true
- }
- }
- if err == errUnknown {
- n = protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return out, errDecode
- }
- } else if err != nil {
- return out, err
- }
- b = b[n:]
- }
- mapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), val)
- out.n = n
- return out, nil
-}
-
-func appendMapItem(b []byte, keyrv, valrv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- if f.mi == nil {
- key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey()
- val := mapi.conv.valConv.PBValueOf(valrv)
- size := 0
- size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)
- size += mapi.valFuncs.size(val, mapValTagSize, opts)
- b = protowire.AppendVarint(b, uint64(size))
- before := len(b)
- b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts)
- if err != nil {
- return nil, err
- }
- b, err = mapi.valFuncs.marshal(b, val, mapi.valWiretag, opts)
- if measuredSize := len(b) - before; size != measuredSize && err == nil {
- return nil, errors.MismatchedSizeCalculation(size, measuredSize)
- }
- return b, err
- } else {
- key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey()
- val := pointerOfValue(valrv)
- valSize := f.mi.sizePointer(val, opts)
- size := 0
- size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)
- size += mapValTagSize + protowire.SizeBytes(valSize)
- b = protowire.AppendVarint(b, uint64(size))
- b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts)
- if err != nil {
- return nil, err
- }
- b = protowire.AppendVarint(b, mapi.valWiretag)
- b = protowire.AppendVarint(b, uint64(valSize))
- before := len(b)
- b, err = f.mi.marshalAppendPointer(b, val, opts)
- if measuredSize := len(b) - before; valSize != measuredSize && err == nil {
- return nil, errors.MismatchedSizeCalculation(valSize, measuredSize)
- }
- return b, err
- }
-}
-
-func appendMap(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- if mapv.Len() == 0 {
- return b, nil
- }
- if opts.Deterministic() {
- return appendMapDeterministic(b, mapv, mapi, f, opts)
- }
- iter := mapv.MapRange()
- for iter.Next() {
- var err error
- b = protowire.AppendVarint(b, f.wiretag)
- b, err = appendMapItem(b, iter.Key(), iter.Value(), mapi, f, opts)
- if err != nil {
- return b, err
- }
- }
- return b, nil
-}
-
-func appendMapDeterministic(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- keys := mapv.MapKeys()
- sort.Slice(keys, func(i, j int) bool {
- switch keys[i].Kind() {
- case reflect.Bool:
- return !keys[i].Bool() && keys[j].Bool()
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- return keys[i].Int() < keys[j].Int()
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- return keys[i].Uint() < keys[j].Uint()
- case reflect.Float32, reflect.Float64:
- return keys[i].Float() < keys[j].Float()
- case reflect.String:
- return keys[i].String() < keys[j].String()
- default:
- panic("invalid kind: " + keys[i].Kind().String())
- }
- })
- for _, key := range keys {
- var err error
- b = protowire.AppendVarint(b, f.wiretag)
- b, err = appendMapItem(b, key, mapv.MapIndex(key), mapi, f, opts)
- if err != nil {
- return b, err
- }
- }
- return b, nil
-}
-
-func isInitMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo) error {
- if mi := f.mi; mi != nil {
- mi.init()
- if !mi.needsInitCheck {
- return nil
- }
- iter := mapv.MapRange()
- for iter.Next() {
- val := pointerOfValue(iter.Value())
- if err := mi.checkInitializedPointer(val); err != nil {
- return err
- }
- }
- } else {
- iter := mapv.MapRange()
- for iter.Next() {
- val := mapi.conv.valConv.PBValueOf(iter.Value())
- if err := mapi.valFuncs.isInit(val); err != nil {
- return err
- }
- }
- }
- return nil
-}
-
-func mergeMap(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- dstm := dst.AsValueOf(f.ft).Elem()
- srcm := src.AsValueOf(f.ft).Elem()
- if srcm.Len() == 0 {
- return
- }
- if dstm.IsNil() {
- dstm.Set(reflect.MakeMap(f.ft))
- }
- iter := srcm.MapRange()
- for iter.Next() {
- dstm.SetMapIndex(iter.Key(), iter.Value())
- }
-}
-
-func mergeMapOfBytes(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- dstm := dst.AsValueOf(f.ft).Elem()
- srcm := src.AsValueOf(f.ft).Elem()
- if srcm.Len() == 0 {
- return
- }
- if dstm.IsNil() {
- dstm.Set(reflect.MakeMap(f.ft))
- }
- iter := srcm.MapRange()
- for iter.Next() {
- dstm.SetMapIndex(iter.Key(), reflect.ValueOf(append(emptyBuf[:], iter.Value().Bytes()...)))
- }
-}
-
-func mergeMapOfMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- dstm := dst.AsValueOf(f.ft).Elem()
- srcm := src.AsValueOf(f.ft).Elem()
- if srcm.Len() == 0 {
- return
- }
- if dstm.IsNil() {
- dstm.Set(reflect.MakeMap(f.ft))
- }
- iter := srcm.MapRange()
- for iter.Next() {
- val := reflect.New(f.ft.Elem().Elem())
- if f.mi != nil {
- f.mi.mergePointer(pointerOfValue(val), pointerOfValue(iter.Value()), opts)
- } else {
- opts.Merge(asMessage(val), asMessage(iter.Value()))
- }
- dstm.SetMapIndex(iter.Key(), val)
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go
deleted file mode 100644
index 111d95833..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "sort"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/order"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// coderMessageInfo contains per-message information used by the fast-path functions.
-// This is a different type from MessageInfo to keep MessageInfo as general-purpose as
-// possible.
-type coderMessageInfo struct {
- methods protoiface.Methods
-
- orderedCoderFields []*coderFieldInfo
- denseCoderFields []*coderFieldInfo
- coderFields map[protowire.Number]*coderFieldInfo
- sizecacheOffset offset
- unknownOffset offset
- unknownPtrKind bool
- extensionOffset offset
- needsInitCheck bool
- isMessageSet bool
- numRequiredFields uint8
-
- lazyOffset offset
- presenceOffset offset
- presenceSize presenceSize
-}
-
-type coderFieldInfo struct {
- funcs pointerCoderFuncs // fast-path per-field functions
- mi *MessageInfo // field's message
- ft reflect.Type
- validation validationInfo // information used by message validation
- num protoreflect.FieldNumber // field number
- offset offset // struct field offset
- wiretag uint64 // field tag (number + wire type)
- tagsize int // size of the varint-encoded tag
- isPointer bool // true if IsNil may be called on the struct field
- isRequired bool // true if field is required
-
- isLazy bool
- presenceIndex uint32
-}
-
-const noPresence = 0xffffffff
-
-func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
- mi.sizecacheOffset = invalidOffset
- mi.unknownOffset = invalidOffset
- mi.extensionOffset = invalidOffset
- mi.lazyOffset = invalidOffset
- mi.presenceOffset = si.presenceOffset
-
- if si.sizecacheOffset.IsValid() && si.sizecacheType == sizecacheType {
- mi.sizecacheOffset = si.sizecacheOffset
- }
- if si.unknownOffset.IsValid() && (si.unknownType == unknownFieldsAType || si.unknownType == unknownFieldsBType) {
- mi.unknownOffset = si.unknownOffset
- mi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr
- }
- if si.extensionOffset.IsValid() && si.extensionType == extensionFieldsType {
- mi.extensionOffset = si.extensionOffset
- }
-
- mi.coderFields = make(map[protowire.Number]*coderFieldInfo)
- fields := mi.Desc.Fields()
- preallocFields := make([]coderFieldInfo, fields.Len())
- for i := 0; i < fields.Len(); i++ {
- fd := fields.Get(i)
-
- fs := si.fieldsByNumber[fd.Number()]
- isOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic()
- if isOneof {
- fs = si.oneofsByName[fd.ContainingOneof().Name()]
- }
- ft := fs.Type
- var wiretag uint64
- if !fd.IsPacked() {
- wiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()])
- } else {
- wiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType)
- }
- var fieldOffset offset
- var funcs pointerCoderFuncs
- var childMessage *MessageInfo
- switch {
- case ft == nil:
- // This never occurs for generated message types.
- // It implies that a hand-crafted type has missing Go fields
- // for specific protobuf message fields.
- funcs = pointerCoderFuncs{
- size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {
- return 0
- },
- marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {
- return nil, nil
- },
- unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- isInit: func(p pointer, f *coderFieldInfo) error {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- }
- case isOneof:
- fieldOffset = offsetOf(fs)
- case fd.IsWeak():
- fieldOffset = si.weakOffset
- funcs = makeWeakMessageFieldCoder(fd)
- default:
- fieldOffset = offsetOf(fs)
- childMessage, funcs = fieldCoder(fd, ft)
- }
- cf := &preallocFields[i]
- *cf = coderFieldInfo{
- num: fd.Number(),
- offset: fieldOffset,
- wiretag: wiretag,
- ft: ft,
- tagsize: protowire.SizeVarint(wiretag),
- funcs: funcs,
- mi: childMessage,
- validation: newFieldValidationInfo(mi, si, fd, ft),
- isPointer: fd.Cardinality() == protoreflect.Repeated || fd.HasPresence(),
- isRequired: fd.Cardinality() == protoreflect.Required,
-
- presenceIndex: noPresence,
- }
- mi.orderedCoderFields = append(mi.orderedCoderFields, cf)
- mi.coderFields[cf.num] = cf
- }
- for i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ {
- if od := oneofs.Get(i); !od.IsSynthetic() {
- mi.initOneofFieldCoders(od, si)
- }
- }
- if messageset.IsMessageSet(mi.Desc) {
- if !mi.extensionOffset.IsValid() {
- panic(fmt.Sprintf("%v: MessageSet with no extensions field", mi.Desc.FullName()))
- }
- if !mi.unknownOffset.IsValid() {
- panic(fmt.Sprintf("%v: MessageSet with no unknown field", mi.Desc.FullName()))
- }
- mi.isMessageSet = true
- }
- sort.Slice(mi.orderedCoderFields, func(i, j int) bool {
- return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num
- })
-
- var maxDense protoreflect.FieldNumber
- for _, cf := range mi.orderedCoderFields {
- if cf.num >= 16 && cf.num >= 2*maxDense {
- break
- }
- maxDense = cf.num
- }
- mi.denseCoderFields = make([]*coderFieldInfo, maxDense+1)
- for _, cf := range mi.orderedCoderFields {
- if int(cf.num) >= len(mi.denseCoderFields) {
- break
- }
- mi.denseCoderFields[cf.num] = cf
- }
-
- // To preserve compatibility with historic wire output, marshal oneofs last.
- if mi.Desc.Oneofs().Len() > 0 {
- sort.Slice(mi.orderedCoderFields, func(i, j int) bool {
- fi := fields.ByNumber(mi.orderedCoderFields[i].num)
- fj := fields.ByNumber(mi.orderedCoderFields[j].num)
- return order.LegacyFieldOrder(fi, fj)
- })
- }
-
- mi.needsInitCheck = needsInitCheck(mi.Desc)
- if mi.methods.Marshal == nil && mi.methods.Size == nil {
- mi.methods.Flags |= protoiface.SupportMarshalDeterministic
- mi.methods.Marshal = mi.marshal
- mi.methods.Size = mi.size
- }
- if mi.methods.Unmarshal == nil {
- mi.methods.Flags |= protoiface.SupportUnmarshalDiscardUnknown
- mi.methods.Unmarshal = mi.unmarshal
- }
- if mi.methods.CheckInitialized == nil {
- mi.methods.CheckInitialized = mi.checkInitialized
- }
- if mi.methods.Merge == nil {
- mi.methods.Merge = mi.merge
- }
- if mi.methods.Equal == nil {
- mi.methods.Equal = equal
- }
-}
-
-// getUnknownBytes returns a *[]byte for the unknown fields.
-// It is the caller's responsibility to check whether the pointer is nil.
-// This function is specially designed to be inlineable.
-func (mi *MessageInfo) getUnknownBytes(p pointer) *[]byte {
- if mi.unknownPtrKind {
- return *p.Apply(mi.unknownOffset).BytesPtr()
- } else {
- return p.Apply(mi.unknownOffset).Bytes()
- }
-}
-
-// mutableUnknownBytes returns a *[]byte for the unknown fields.
-// The returned pointer is guaranteed to not be nil.
-func (mi *MessageInfo) mutableUnknownBytes(p pointer) *[]byte {
- if mi.unknownPtrKind {
- bp := p.Apply(mi.unknownOffset).BytesPtr()
- if *bp == nil {
- *bp = new([]byte)
- }
- return *bp
- } else {
- return p.Apply(mi.unknownOffset).Bytes()
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go
deleted file mode 100644
index f81d7d0db..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "sort"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/order"
- "google.golang.org/protobuf/reflect/protoreflect"
- piface "google.golang.org/protobuf/runtime/protoiface"
-)
-
-func (mi *MessageInfo) makeOpaqueCoderMethods(t reflect.Type, si opaqueStructInfo) {
- mi.sizecacheOffset = si.sizecacheOffset
- mi.unknownOffset = si.unknownOffset
- mi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr
- mi.extensionOffset = si.extensionOffset
- mi.lazyOffset = si.lazyOffset
- mi.presenceOffset = si.presenceOffset
-
- mi.coderFields = make(map[protowire.Number]*coderFieldInfo)
- fields := mi.Desc.Fields()
- for i := 0; i < fields.Len(); i++ {
- fd := fields.Get(i)
-
- fs := si.fieldsByNumber[fd.Number()]
- if fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() {
- fs = si.oneofsByName[fd.ContainingOneof().Name()]
- }
- ft := fs.Type
- var wiretag uint64
- if !fd.IsPacked() {
- wiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()])
- } else {
- wiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType)
- }
- var fieldOffset offset
- var funcs pointerCoderFuncs
- var childMessage *MessageInfo
- switch {
- case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():
- fieldOffset = offsetOf(fs)
- case fd.IsWeak():
- fieldOffset = si.weakOffset
- funcs = makeWeakMessageFieldCoder(fd)
- case fd.Message() != nil && !fd.IsMap():
- fieldOffset = offsetOf(fs)
- if fd.IsList() {
- childMessage, funcs = makeOpaqueRepeatedMessageFieldCoder(fd, ft)
- } else {
- childMessage, funcs = makeOpaqueMessageFieldCoder(fd, ft)
- }
- default:
- fieldOffset = offsetOf(fs)
- childMessage, funcs = fieldCoder(fd, ft)
- }
- cf := &coderFieldInfo{
- num: fd.Number(),
- offset: fieldOffset,
- wiretag: wiretag,
- ft: ft,
- tagsize: protowire.SizeVarint(wiretag),
- funcs: funcs,
- mi: childMessage,
- validation: newFieldValidationInfo(mi, si.structInfo, fd, ft),
- isPointer: (fd.Cardinality() == protoreflect.Repeated ||
- fd.Kind() == protoreflect.MessageKind ||
- fd.Kind() == protoreflect.GroupKind),
- isRequired: fd.Cardinality() == protoreflect.Required,
- presenceIndex: noPresence,
- }
-
- // TODO: Use presence for all fields.
- //
- // In some cases, such as maps, presence means only "might be set" rather
- // than "is definitely set", but every field should have a presence bit to
- // permit us to skip over definitely-unset fields at marshal time.
-
- var hasPresence bool
- hasPresence, cf.isLazy = usePresenceForField(si, fd)
-
- if hasPresence {
- cf.presenceIndex, mi.presenceSize = presenceIndex(mi.Desc, fd)
- }
-
- mi.orderedCoderFields = append(mi.orderedCoderFields, cf)
- mi.coderFields[cf.num] = cf
- }
- for i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ {
- if od := oneofs.Get(i); !od.IsSynthetic() {
- mi.initOneofFieldCoders(od, si.structInfo)
- }
- }
- if messageset.IsMessageSet(mi.Desc) {
- if !mi.extensionOffset.IsValid() {
- panic(fmt.Sprintf("%v: MessageSet with no extensions field", mi.Desc.FullName()))
- }
- if !mi.unknownOffset.IsValid() {
- panic(fmt.Sprintf("%v: MessageSet with no unknown field", mi.Desc.FullName()))
- }
- mi.isMessageSet = true
- }
- sort.Slice(mi.orderedCoderFields, func(i, j int) bool {
- return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num
- })
-
- var maxDense protoreflect.FieldNumber
- for _, cf := range mi.orderedCoderFields {
- if cf.num >= 16 && cf.num >= 2*maxDense {
- break
- }
- maxDense = cf.num
- }
- mi.denseCoderFields = make([]*coderFieldInfo, maxDense+1)
- for _, cf := range mi.orderedCoderFields {
- if int(cf.num) > len(mi.denseCoderFields) {
- break
- }
- mi.denseCoderFields[cf.num] = cf
- }
-
- // To preserve compatibility with historic wire output, marshal oneofs last.
- if mi.Desc.Oneofs().Len() > 0 {
- sort.Slice(mi.orderedCoderFields, func(i, j int) bool {
- fi := fields.ByNumber(mi.orderedCoderFields[i].num)
- fj := fields.ByNumber(mi.orderedCoderFields[j].num)
- return order.LegacyFieldOrder(fi, fj)
- })
- }
-
- mi.needsInitCheck = needsInitCheck(mi.Desc)
- if mi.methods.Marshal == nil && mi.methods.Size == nil {
- mi.methods.Flags |= piface.SupportMarshalDeterministic
- mi.methods.Marshal = mi.marshal
- mi.methods.Size = mi.size
- }
- if mi.methods.Unmarshal == nil {
- mi.methods.Flags |= piface.SupportUnmarshalDiscardUnknown
- mi.methods.Unmarshal = mi.unmarshal
- }
- if mi.methods.CheckInitialized == nil {
- mi.methods.CheckInitialized = mi.checkInitialized
- }
- if mi.methods.Merge == nil {
- mi.methods.Merge = mi.merge
- }
- if mi.methods.Equal == nil {
- mi.methods.Equal = equal
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go b/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go
deleted file mode 100644
index 7a16ec13d..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "sort"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
-)
-
-func sizeMessageSet(mi *MessageInfo, p pointer, opts marshalOptions) (size int) {
- if !flags.ProtoLegacy {
- return 0
- }
-
- ext := *p.Apply(mi.extensionOffset).Extensions()
- for _, x := range ext {
- xi := getExtensionFieldInfo(x.Type())
- if xi.funcs.size == nil {
- continue
- }
- num, _ := protowire.DecodeTag(xi.wiretag)
- size += messageset.SizeField(num)
- if fullyLazyExtensions(opts) {
- // Don't expand the extension, instead use the buffer to calculate size
- if lb := x.lazyBuffer(); lb != nil {
- // We got hold of the buffer, so it's still lazy.
- // Don't count the tag size in the extension buffer, it's already added.
- size += protowire.SizeTag(messageset.FieldMessage) + len(lb) - xi.tagsize
- continue
- }
- }
- size += xi.funcs.size(x.Value(), protowire.SizeTag(messageset.FieldMessage), opts)
- }
-
- if u := mi.getUnknownBytes(p); u != nil {
- size += messageset.SizeUnknown(*u)
- }
-
- return size
-}
-
-func marshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts marshalOptions) ([]byte, error) {
- if !flags.ProtoLegacy {
- return b, errors.New("no support for message_set_wire_format")
- }
-
- ext := *p.Apply(mi.extensionOffset).Extensions()
- switch len(ext) {
- case 0:
- case 1:
- // Fast-path for one extension: Don't bother sorting the keys.
- for _, x := range ext {
- var err error
- b, err = marshalMessageSetField(mi, b, x, opts)
- if err != nil {
- return b, err
- }
- }
- default:
- // Sort the keys to provide a deterministic encoding.
- // Not sure this is required, but the old code does it.
- keys := make([]int, 0, len(ext))
- for k := range ext {
- keys = append(keys, int(k))
- }
- sort.Ints(keys)
- for _, k := range keys {
- var err error
- b, err = marshalMessageSetField(mi, b, ext[int32(k)], opts)
- if err != nil {
- return b, err
- }
- }
- }
-
- if u := mi.getUnknownBytes(p); u != nil {
- var err error
- b, err = messageset.AppendUnknown(b, *u)
- if err != nil {
- return b, err
- }
- }
-
- return b, nil
-}
-
-func marshalMessageSetField(mi *MessageInfo, b []byte, x ExtensionField, opts marshalOptions) ([]byte, error) {
- xi := getExtensionFieldInfo(x.Type())
- num, _ := protowire.DecodeTag(xi.wiretag)
- b = messageset.AppendFieldStart(b, num)
-
- if fullyLazyExtensions(opts) {
- // Don't expand the extension if it's still in wire format, instead use the buffer content.
- if lb := x.lazyBuffer(); lb != nil {
- // The tag inside the lazy buffer is a different tag (the extension
- // number), but what we need here is the tag for FieldMessage:
- b = protowire.AppendVarint(b, protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType))
- b = append(b, lb[xi.tagsize:]...)
- b = messageset.AppendFieldEnd(b)
- return b, nil
- }
- }
-
- b, err := xi.funcs.marshal(b, x.Value(), protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType), opts)
- if err != nil {
- return b, err
- }
- b = messageset.AppendFieldEnd(b)
- return b, nil
-}
-
-func unmarshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts unmarshalOptions) (out unmarshalOutput, err error) {
- if !flags.ProtoLegacy {
- return out, errors.New("no support for message_set_wire_format")
- }
-
- ep := p.Apply(mi.extensionOffset).Extensions()
- if *ep == nil {
- *ep = make(map[int32]ExtensionField)
- }
- ext := *ep
- initialized := true
- err = messageset.Unmarshal(b, true, func(num protowire.Number, v []byte) error {
- o, err := mi.unmarshalExtension(v, num, protowire.BytesType, ext, opts)
- if err == errUnknown {
- u := mi.mutableUnknownBytes(p)
- *u = protowire.AppendTag(*u, num, protowire.BytesType)
- *u = append(*u, v...)
- return nil
- }
- if !o.initialized {
- initialized = false
- }
- return err
- })
- out.n = len(b)
- out.initialized = initialized
- return out, err
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go b/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go
deleted file mode 100644
index 13077751e..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go
+++ /dev/null
@@ -1,557 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// pointerCoderFuncs is a set of pointer encoding functions.
-type pointerCoderFuncs struct {
- mi *MessageInfo
- size func(p pointer, f *coderFieldInfo, opts marshalOptions) int
- marshal func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error)
- unmarshal func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error)
- isInit func(p pointer, f *coderFieldInfo) error
- merge func(dst, src pointer, f *coderFieldInfo, opts mergeOptions)
-}
-
-// valueCoderFuncs is a set of protoreflect.Value encoding functions.
-type valueCoderFuncs struct {
- size func(v protoreflect.Value, tagsize int, opts marshalOptions) int
- marshal func(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error)
- unmarshal func(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error)
- isInit func(v protoreflect.Value) error
- merge func(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value
-}
-
-// fieldCoder returns pointer functions for a field, used for operating on
-// struct fields.
-func fieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {
- switch {
- case fd.IsMap():
- return encoderFuncsForMap(fd, ft)
- case fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked():
- // Repeated fields (not packed).
- if ft.Kind() != reflect.Slice {
- break
- }
- ft := ft.Elem()
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if ft.Kind() == reflect.Bool {
- return nil, coderBoolSlice
- }
- case protoreflect.EnumKind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderEnumSlice
- }
- case protoreflect.Int32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderInt32Slice
- }
- case protoreflect.Sint32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSint32Slice
- }
- case protoreflect.Uint32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderUint32Slice
- }
- case protoreflect.Int64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderInt64Slice
- }
- case protoreflect.Sint64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSint64Slice
- }
- case protoreflect.Uint64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderUint64Slice
- }
- case protoreflect.Sfixed32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSfixed32Slice
- }
- case protoreflect.Fixed32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderFixed32Slice
- }
- case protoreflect.FloatKind:
- if ft.Kind() == reflect.Float32 {
- return nil, coderFloatSlice
- }
- case protoreflect.Sfixed64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSfixed64Slice
- }
- case protoreflect.Fixed64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderFixed64Slice
- }
- case protoreflect.DoubleKind:
- if ft.Kind() == reflect.Float64 {
- return nil, coderDoubleSlice
- }
- case protoreflect.StringKind:
- if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
- return nil, coderStringSliceValidateUTF8
- }
- if ft.Kind() == reflect.String {
- return nil, coderStringSlice
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) {
- return nil, coderBytesSliceValidateUTF8
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
- return nil, coderBytesSlice
- }
- case protoreflect.BytesKind:
- if ft.Kind() == reflect.String {
- return nil, coderStringSlice
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
- return nil, coderBytesSlice
- }
- case protoreflect.MessageKind:
- return getMessageInfo(ft), makeMessageSliceFieldCoder(fd, ft)
- case protoreflect.GroupKind:
- return getMessageInfo(ft), makeGroupSliceFieldCoder(fd, ft)
- }
- case fd.Cardinality() == protoreflect.Repeated && fd.IsPacked():
- // Packed repeated fields.
- //
- // Only repeated fields of primitive numeric types
- // (Varint, Fixed32, or Fixed64 wire type) can be packed.
- if ft.Kind() != reflect.Slice {
- break
- }
- ft := ft.Elem()
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if ft.Kind() == reflect.Bool {
- return nil, coderBoolPackedSlice
- }
- case protoreflect.EnumKind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderEnumPackedSlice
- }
- case protoreflect.Int32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderInt32PackedSlice
- }
- case protoreflect.Sint32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSint32PackedSlice
- }
- case protoreflect.Uint32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderUint32PackedSlice
- }
- case protoreflect.Int64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderInt64PackedSlice
- }
- case protoreflect.Sint64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSint64PackedSlice
- }
- case protoreflect.Uint64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderUint64PackedSlice
- }
- case protoreflect.Sfixed32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSfixed32PackedSlice
- }
- case protoreflect.Fixed32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderFixed32PackedSlice
- }
- case protoreflect.FloatKind:
- if ft.Kind() == reflect.Float32 {
- return nil, coderFloatPackedSlice
- }
- case protoreflect.Sfixed64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSfixed64PackedSlice
- }
- case protoreflect.Fixed64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderFixed64PackedSlice
- }
- case protoreflect.DoubleKind:
- if ft.Kind() == reflect.Float64 {
- return nil, coderDoublePackedSlice
- }
- }
- case fd.Kind() == protoreflect.MessageKind:
- return getMessageInfo(ft), makeMessageFieldCoder(fd, ft)
- case fd.Kind() == protoreflect.GroupKind:
- return getMessageInfo(ft), makeGroupFieldCoder(fd, ft)
- case !fd.HasPresence() && fd.ContainingOneof() == nil:
- // Populated oneof fields always encode even if set to the zero value,
- // which normally are not encoded in proto3.
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if ft.Kind() == reflect.Bool {
- return nil, coderBoolNoZero
- }
- case protoreflect.EnumKind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderEnumNoZero
- }
- case protoreflect.Int32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderInt32NoZero
- }
- case protoreflect.Sint32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSint32NoZero
- }
- case protoreflect.Uint32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderUint32NoZero
- }
- case protoreflect.Int64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderInt64NoZero
- }
- case protoreflect.Sint64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSint64NoZero
- }
- case protoreflect.Uint64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderUint64NoZero
- }
- case protoreflect.Sfixed32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSfixed32NoZero
- }
- case protoreflect.Fixed32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderFixed32NoZero
- }
- case protoreflect.FloatKind:
- if ft.Kind() == reflect.Float32 {
- return nil, coderFloatNoZero
- }
- case protoreflect.Sfixed64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSfixed64NoZero
- }
- case protoreflect.Fixed64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderFixed64NoZero
- }
- case protoreflect.DoubleKind:
- if ft.Kind() == reflect.Float64 {
- return nil, coderDoubleNoZero
- }
- case protoreflect.StringKind:
- if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
- return nil, coderStringNoZeroValidateUTF8
- }
- if ft.Kind() == reflect.String {
- return nil, coderStringNoZero
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) {
- return nil, coderBytesNoZeroValidateUTF8
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
- return nil, coderBytesNoZero
- }
- case protoreflect.BytesKind:
- if ft.Kind() == reflect.String {
- return nil, coderStringNoZero
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
- return nil, coderBytesNoZero
- }
- }
- case ft.Kind() == reflect.Ptr:
- ft := ft.Elem()
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if ft.Kind() == reflect.Bool {
- return nil, coderBoolPtr
- }
- case protoreflect.EnumKind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderEnumPtr
- }
- case protoreflect.Int32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderInt32Ptr
- }
- case protoreflect.Sint32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSint32Ptr
- }
- case protoreflect.Uint32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderUint32Ptr
- }
- case protoreflect.Int64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderInt64Ptr
- }
- case protoreflect.Sint64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSint64Ptr
- }
- case protoreflect.Uint64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderUint64Ptr
- }
- case protoreflect.Sfixed32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSfixed32Ptr
- }
- case protoreflect.Fixed32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderFixed32Ptr
- }
- case protoreflect.FloatKind:
- if ft.Kind() == reflect.Float32 {
- return nil, coderFloatPtr
- }
- case protoreflect.Sfixed64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSfixed64Ptr
- }
- case protoreflect.Fixed64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderFixed64Ptr
- }
- case protoreflect.DoubleKind:
- if ft.Kind() == reflect.Float64 {
- return nil, coderDoublePtr
- }
- case protoreflect.StringKind:
- if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
- return nil, coderStringPtrValidateUTF8
- }
- if ft.Kind() == reflect.String {
- return nil, coderStringPtr
- }
- case protoreflect.BytesKind:
- if ft.Kind() == reflect.String {
- return nil, coderStringPtr
- }
- }
- default:
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if ft.Kind() == reflect.Bool {
- return nil, coderBool
- }
- case protoreflect.EnumKind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderEnum
- }
- case protoreflect.Int32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderInt32
- }
- case protoreflect.Sint32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSint32
- }
- case protoreflect.Uint32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderUint32
- }
- case protoreflect.Int64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderInt64
- }
- case protoreflect.Sint64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSint64
- }
- case protoreflect.Uint64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderUint64
- }
- case protoreflect.Sfixed32Kind:
- if ft.Kind() == reflect.Int32 {
- return nil, coderSfixed32
- }
- case protoreflect.Fixed32Kind:
- if ft.Kind() == reflect.Uint32 {
- return nil, coderFixed32
- }
- case protoreflect.FloatKind:
- if ft.Kind() == reflect.Float32 {
- return nil, coderFloat
- }
- case protoreflect.Sfixed64Kind:
- if ft.Kind() == reflect.Int64 {
- return nil, coderSfixed64
- }
- case protoreflect.Fixed64Kind:
- if ft.Kind() == reflect.Uint64 {
- return nil, coderFixed64
- }
- case protoreflect.DoubleKind:
- if ft.Kind() == reflect.Float64 {
- return nil, coderDouble
- }
- case protoreflect.StringKind:
- if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {
- return nil, coderStringValidateUTF8
- }
- if ft.Kind() == reflect.String {
- return nil, coderString
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) {
- return nil, coderBytesValidateUTF8
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
- return nil, coderBytes
- }
- case protoreflect.BytesKind:
- if ft.Kind() == reflect.String {
- return nil, coderString
- }
- if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {
- return nil, coderBytes
- }
- }
- }
- panic(fmt.Sprintf("invalid type: no encoder for %v %v %v/%v", fd.FullName(), fd.Cardinality(), fd.Kind(), ft))
-}
-
-// encoderFuncsForValue returns value functions for a field, used for
-// extension values and map encoding.
-func encoderFuncsForValue(fd protoreflect.FieldDescriptor) valueCoderFuncs {
- switch {
- case fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked():
- switch fd.Kind() {
- case protoreflect.BoolKind:
- return coderBoolSliceValue
- case protoreflect.EnumKind:
- return coderEnumSliceValue
- case protoreflect.Int32Kind:
- return coderInt32SliceValue
- case protoreflect.Sint32Kind:
- return coderSint32SliceValue
- case protoreflect.Uint32Kind:
- return coderUint32SliceValue
- case protoreflect.Int64Kind:
- return coderInt64SliceValue
- case protoreflect.Sint64Kind:
- return coderSint64SliceValue
- case protoreflect.Uint64Kind:
- return coderUint64SliceValue
- case protoreflect.Sfixed32Kind:
- return coderSfixed32SliceValue
- case protoreflect.Fixed32Kind:
- return coderFixed32SliceValue
- case protoreflect.FloatKind:
- return coderFloatSliceValue
- case protoreflect.Sfixed64Kind:
- return coderSfixed64SliceValue
- case protoreflect.Fixed64Kind:
- return coderFixed64SliceValue
- case protoreflect.DoubleKind:
- return coderDoubleSliceValue
- case protoreflect.StringKind:
- // We don't have a UTF-8 validating coder for repeated string fields.
- // Value coders are used for extensions and maps.
- // Extensions are never proto3, and maps never contain lists.
- return coderStringSliceValue
- case protoreflect.BytesKind:
- return coderBytesSliceValue
- case protoreflect.MessageKind:
- return coderMessageSliceValue
- case protoreflect.GroupKind:
- return coderGroupSliceValue
- }
- case fd.Cardinality() == protoreflect.Repeated && fd.IsPacked():
- switch fd.Kind() {
- case protoreflect.BoolKind:
- return coderBoolPackedSliceValue
- case protoreflect.EnumKind:
- return coderEnumPackedSliceValue
- case protoreflect.Int32Kind:
- return coderInt32PackedSliceValue
- case protoreflect.Sint32Kind:
- return coderSint32PackedSliceValue
- case protoreflect.Uint32Kind:
- return coderUint32PackedSliceValue
- case protoreflect.Int64Kind:
- return coderInt64PackedSliceValue
- case protoreflect.Sint64Kind:
- return coderSint64PackedSliceValue
- case protoreflect.Uint64Kind:
- return coderUint64PackedSliceValue
- case protoreflect.Sfixed32Kind:
- return coderSfixed32PackedSliceValue
- case protoreflect.Fixed32Kind:
- return coderFixed32PackedSliceValue
- case protoreflect.FloatKind:
- return coderFloatPackedSliceValue
- case protoreflect.Sfixed64Kind:
- return coderSfixed64PackedSliceValue
- case protoreflect.Fixed64Kind:
- return coderFixed64PackedSliceValue
- case protoreflect.DoubleKind:
- return coderDoublePackedSliceValue
- }
- default:
- switch fd.Kind() {
- default:
- case protoreflect.BoolKind:
- return coderBoolValue
- case protoreflect.EnumKind:
- return coderEnumValue
- case protoreflect.Int32Kind:
- return coderInt32Value
- case protoreflect.Sint32Kind:
- return coderSint32Value
- case protoreflect.Uint32Kind:
- return coderUint32Value
- case protoreflect.Int64Kind:
- return coderInt64Value
- case protoreflect.Sint64Kind:
- return coderSint64Value
- case protoreflect.Uint64Kind:
- return coderUint64Value
- case protoreflect.Sfixed32Kind:
- return coderSfixed32Value
- case protoreflect.Fixed32Kind:
- return coderFixed32Value
- case protoreflect.FloatKind:
- return coderFloatValue
- case protoreflect.Sfixed64Kind:
- return coderSfixed64Value
- case protoreflect.Fixed64Kind:
- return coderFixed64Value
- case protoreflect.DoubleKind:
- return coderDoubleValue
- case protoreflect.StringKind:
- if strs.EnforceUTF8(fd) {
- return coderStringValueValidateUTF8
- }
- return coderStringValue
- case protoreflect.BytesKind:
- return coderBytesValue
- case protoreflect.MessageKind:
- return coderMessageValue
- case protoreflect.GroupKind:
- return coderGroupValue
- }
- }
- panic(fmt.Sprintf("invalid field: no encoder for %v %v %v", fd.FullName(), fd.Cardinality(), fd.Kind()))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
deleted file mode 100644
index 077712c2c..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-// When using unsafe pointers, we can just treat enum values as int32s.
-
-var (
- coderEnumNoZero = coderInt32NoZero
- coderEnum = coderInt32
- coderEnumPtr = coderInt32Ptr
- coderEnumSlice = coderInt32Slice
- coderEnumPackedSlice = coderInt32PackedSlice
-)
diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert.go b/vendor/google.golang.org/protobuf/internal/impl/convert.go
deleted file mode 100644
index f72ddd882..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/convert.go
+++ /dev/null
@@ -1,495 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// unwrapper unwraps the value to the underlying value.
-// This is implemented by List and Map.
-type unwrapper interface {
- protoUnwrap() any
-}
-
-// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.
-type Converter interface {
- // PBValueOf converts a reflect.Value to a protoreflect.Value.
- PBValueOf(reflect.Value) protoreflect.Value
-
- // GoValueOf converts a protoreflect.Value to a reflect.Value.
- GoValueOf(protoreflect.Value) reflect.Value
-
- // IsValidPB returns whether a protoreflect.Value is compatible with this type.
- IsValidPB(protoreflect.Value) bool
-
- // IsValidGo returns whether a reflect.Value is compatible with this type.
- IsValidGo(reflect.Value) bool
-
- // New returns a new field value.
- // For scalars, it returns the default value of the field.
- // For composite types, it returns a new mutable value.
- New() protoreflect.Value
-
- // Zero returns a new field value.
- // For scalars, it returns the default value of the field.
- // For composite types, it returns an immutable, empty value.
- Zero() protoreflect.Value
-}
-
-// NewConverter matches a Go type with a protobuf field and returns a Converter
-// that converts between the two. Enums must be a named int32 kind that
-// implements protoreflect.Enum, and messages must be pointer to a named
-// struct type that implements protoreflect.ProtoMessage.
-//
-// This matcher deliberately supports a wider range of Go types than what
-// protoc-gen-go historically generated to be able to automatically wrap some
-// v1 messages generated by other forks of protoc-gen-go.
-func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {
- switch {
- case fd.IsList():
- return newListConverter(t, fd)
- case fd.IsMap():
- return newMapConverter(t, fd)
- default:
- return newSingularConverter(t, fd)
- }
-}
-
-var (
- boolType = reflect.TypeOf(bool(false))
- int32Type = reflect.TypeOf(int32(0))
- int64Type = reflect.TypeOf(int64(0))
- uint32Type = reflect.TypeOf(uint32(0))
- uint64Type = reflect.TypeOf(uint64(0))
- float32Type = reflect.TypeOf(float32(0))
- float64Type = reflect.TypeOf(float64(0))
- stringType = reflect.TypeOf(string(""))
- bytesType = reflect.TypeOf([]byte(nil))
- byteType = reflect.TypeOf(byte(0))
-)
-
-var (
- boolZero = protoreflect.ValueOfBool(false)
- int32Zero = protoreflect.ValueOfInt32(0)
- int64Zero = protoreflect.ValueOfInt64(0)
- uint32Zero = protoreflect.ValueOfUint32(0)
- uint64Zero = protoreflect.ValueOfUint64(0)
- float32Zero = protoreflect.ValueOfFloat32(0)
- float64Zero = protoreflect.ValueOfFloat64(0)
- stringZero = protoreflect.ValueOfString("")
- bytesZero = protoreflect.ValueOfBytes(nil)
-)
-
-func newSingularConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {
- defVal := func(fd protoreflect.FieldDescriptor, zero protoreflect.Value) protoreflect.Value {
- if fd.Cardinality() == protoreflect.Repeated {
- // Default isn't defined for repeated fields.
- return zero
- }
- return fd.Default()
- }
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if t.Kind() == reflect.Bool {
- return &boolConverter{t, defVal(fd, boolZero)}
- }
- case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
- if t.Kind() == reflect.Int32 {
- return &int32Converter{t, defVal(fd, int32Zero)}
- }
- case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
- if t.Kind() == reflect.Int64 {
- return &int64Converter{t, defVal(fd, int64Zero)}
- }
- case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
- if t.Kind() == reflect.Uint32 {
- return &uint32Converter{t, defVal(fd, uint32Zero)}
- }
- case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
- if t.Kind() == reflect.Uint64 {
- return &uint64Converter{t, defVal(fd, uint64Zero)}
- }
- case protoreflect.FloatKind:
- if t.Kind() == reflect.Float32 {
- return &float32Converter{t, defVal(fd, float32Zero)}
- }
- case protoreflect.DoubleKind:
- if t.Kind() == reflect.Float64 {
- return &float64Converter{t, defVal(fd, float64Zero)}
- }
- case protoreflect.StringKind:
- if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {
- return &stringConverter{t, defVal(fd, stringZero)}
- }
- case protoreflect.BytesKind:
- if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {
- return &bytesConverter{t, defVal(fd, bytesZero)}
- }
- case protoreflect.EnumKind:
- // Handle enums, which must be a named int32 type.
- if t.Kind() == reflect.Int32 {
- return newEnumConverter(t, fd)
- }
- case protoreflect.MessageKind, protoreflect.GroupKind:
- return newMessageConverter(t)
- }
- panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
-}
-
-type boolConverter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *boolConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfBool(v.Bool())
-}
-func (c *boolConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(v.Bool()).Convert(c.goType)
-}
-func (c *boolConverter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(bool)
- return ok
-}
-func (c *boolConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *boolConverter) New() protoreflect.Value { return c.def }
-func (c *boolConverter) Zero() protoreflect.Value { return c.def }
-
-type int32Converter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *int32Converter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfInt32(int32(v.Int()))
-}
-func (c *int32Converter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(int32(v.Int())).Convert(c.goType)
-}
-func (c *int32Converter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(int32)
- return ok
-}
-func (c *int32Converter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *int32Converter) New() protoreflect.Value { return c.def }
-func (c *int32Converter) Zero() protoreflect.Value { return c.def }
-
-type int64Converter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *int64Converter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfInt64(int64(v.Int()))
-}
-func (c *int64Converter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(int64(v.Int())).Convert(c.goType)
-}
-func (c *int64Converter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(int64)
- return ok
-}
-func (c *int64Converter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *int64Converter) New() protoreflect.Value { return c.def }
-func (c *int64Converter) Zero() protoreflect.Value { return c.def }
-
-type uint32Converter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *uint32Converter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfUint32(uint32(v.Uint()))
-}
-func (c *uint32Converter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(uint32(v.Uint())).Convert(c.goType)
-}
-func (c *uint32Converter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(uint32)
- return ok
-}
-func (c *uint32Converter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *uint32Converter) New() protoreflect.Value { return c.def }
-func (c *uint32Converter) Zero() protoreflect.Value { return c.def }
-
-type uint64Converter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *uint64Converter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfUint64(uint64(v.Uint()))
-}
-func (c *uint64Converter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(uint64(v.Uint())).Convert(c.goType)
-}
-func (c *uint64Converter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(uint64)
- return ok
-}
-func (c *uint64Converter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *uint64Converter) New() protoreflect.Value { return c.def }
-func (c *uint64Converter) Zero() protoreflect.Value { return c.def }
-
-type float32Converter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *float32Converter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfFloat32(float32(v.Float()))
-}
-func (c *float32Converter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(float32(v.Float())).Convert(c.goType)
-}
-func (c *float32Converter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(float32)
- return ok
-}
-func (c *float32Converter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *float32Converter) New() protoreflect.Value { return c.def }
-func (c *float32Converter) Zero() protoreflect.Value { return c.def }
-
-type float64Converter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *float64Converter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfFloat64(float64(v.Float()))
-}
-func (c *float64Converter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(float64(v.Float())).Convert(c.goType)
-}
-func (c *float64Converter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(float64)
- return ok
-}
-func (c *float64Converter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *float64Converter) New() protoreflect.Value { return c.def }
-func (c *float64Converter) Zero() protoreflect.Value { return c.def }
-
-type stringConverter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfString(v.Convert(stringType).String())
-}
-func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- // protoreflect.Value.String never panics, so we go through an interface
- // conversion here to check the type.
- s := v.Interface().(string)
- if c.goType.Kind() == reflect.Slice && s == "" {
- return reflect.Zero(c.goType) // ensure empty string is []byte(nil)
- }
- return reflect.ValueOf(s).Convert(c.goType)
-}
-func (c *stringConverter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(string)
- return ok
-}
-func (c *stringConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *stringConverter) New() protoreflect.Value { return c.def }
-func (c *stringConverter) Zero() protoreflect.Value { return c.def }
-
-type bytesConverter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func (c *bytesConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- if c.goType.Kind() == reflect.String && v.Len() == 0 {
- return protoreflect.ValueOfBytes(nil) // ensure empty string is []byte(nil)
- }
- return protoreflect.ValueOfBytes(v.Convert(bytesType).Bytes())
-}
-func (c *bytesConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(v.Bytes()).Convert(c.goType)
-}
-func (c *bytesConverter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().([]byte)
- return ok
-}
-func (c *bytesConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-func (c *bytesConverter) New() protoreflect.Value { return c.def }
-func (c *bytesConverter) Zero() protoreflect.Value { return c.def }
-
-type enumConverter struct {
- goType reflect.Type
- def protoreflect.Value
-}
-
-func newEnumConverter(goType reflect.Type, fd protoreflect.FieldDescriptor) Converter {
- var def protoreflect.Value
- if fd.Cardinality() == protoreflect.Repeated {
- def = protoreflect.ValueOfEnum(fd.Enum().Values().Get(0).Number())
- } else {
- def = fd.Default()
- }
- return &enumConverter{goType, def}
-}
-
-func (c *enumConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v.Int()))
-}
-
-func (c *enumConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- return reflect.ValueOf(v.Enum()).Convert(c.goType)
-}
-
-func (c *enumConverter) IsValidPB(v protoreflect.Value) bool {
- _, ok := v.Interface().(protoreflect.EnumNumber)
- return ok
-}
-
-func (c *enumConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-
-func (c *enumConverter) New() protoreflect.Value {
- return c.def
-}
-
-func (c *enumConverter) Zero() protoreflect.Value {
- return c.def
-}
-
-type messageConverter struct {
- goType reflect.Type
-}
-
-func newMessageConverter(goType reflect.Type) Converter {
- return &messageConverter{goType}
-}
-
-func (c *messageConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- if c.isNonPointer() {
- if v.CanAddr() {
- v = v.Addr() // T => *T
- } else {
- v = reflect.Zero(reflect.PtrTo(v.Type()))
- }
- }
- if m, ok := v.Interface().(protoreflect.ProtoMessage); ok {
- return protoreflect.ValueOfMessage(m.ProtoReflect())
- }
- return protoreflect.ValueOfMessage(legacyWrapMessage(v))
-}
-
-func (c *messageConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- m := v.Message()
- var rv reflect.Value
- if u, ok := m.(unwrapper); ok {
- rv = reflect.ValueOf(u.protoUnwrap())
- } else {
- rv = reflect.ValueOf(m.Interface())
- }
- if c.isNonPointer() {
- if rv.Type() != reflect.PtrTo(c.goType) {
- panic(fmt.Sprintf("invalid type: got %v, want %v", rv.Type(), reflect.PtrTo(c.goType)))
- }
- if !rv.IsNil() {
- rv = rv.Elem() // *T => T
- } else {
- rv = reflect.Zero(rv.Type().Elem())
- }
- }
- if rv.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", rv.Type(), c.goType))
- }
- return rv
-}
-
-func (c *messageConverter) IsValidPB(v protoreflect.Value) bool {
- m := v.Message()
- var rv reflect.Value
- if u, ok := m.(unwrapper); ok {
- rv = reflect.ValueOf(u.protoUnwrap())
- } else {
- rv = reflect.ValueOf(m.Interface())
- }
- if c.isNonPointer() {
- return rv.Type() == reflect.PtrTo(c.goType)
- }
- return rv.Type() == c.goType
-}
-
-func (c *messageConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-
-func (c *messageConverter) New() protoreflect.Value {
- if c.isNonPointer() {
- return c.PBValueOf(reflect.New(c.goType).Elem())
- }
- return c.PBValueOf(reflect.New(c.goType.Elem()))
-}
-
-func (c *messageConverter) Zero() protoreflect.Value {
- return c.PBValueOf(reflect.Zero(c.goType))
-}
-
-// isNonPointer reports whether the type is a non-pointer type.
-// This never occurs for generated message types.
-func (c *messageConverter) isNonPointer() bool {
- return c.goType.Kind() != reflect.Ptr
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_list.go b/vendor/google.golang.org/protobuf/internal/impl/convert_list.go
deleted file mode 100644
index 18cb96fd7..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/convert_list.go
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func newListConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {
- switch {
- case t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Slice:
- return &listPtrConverter{t, newSingularConverter(t.Elem().Elem(), fd)}
- case t.Kind() == reflect.Slice:
- return &listConverter{t, newSingularConverter(t.Elem(), fd)}
- }
- panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
-}
-
-type listConverter struct {
- goType reflect.Type // []T
- c Converter
-}
-
-func (c *listConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- pv := reflect.New(c.goType)
- pv.Elem().Set(v)
- return protoreflect.ValueOfList(&listReflect{pv, c.c})
-}
-
-func (c *listConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- rv := v.List().(*listReflect).v
- if rv.IsNil() {
- return reflect.Zero(c.goType)
- }
- return rv.Elem()
-}
-
-func (c *listConverter) IsValidPB(v protoreflect.Value) bool {
- list, ok := v.Interface().(*listReflect)
- if !ok {
- return false
- }
- return list.v.Type().Elem() == c.goType
-}
-
-func (c *listConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-
-func (c *listConverter) New() protoreflect.Value {
- return protoreflect.ValueOfList(&listReflect{reflect.New(c.goType), c.c})
-}
-
-func (c *listConverter) Zero() protoreflect.Value {
- return protoreflect.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c})
-}
-
-type listPtrConverter struct {
- goType reflect.Type // *[]T
- c Converter
-}
-
-func (c *listPtrConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfList(&listReflect{v, c.c})
-}
-
-func (c *listPtrConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- return v.List().(*listReflect).v
-}
-
-func (c *listPtrConverter) IsValidPB(v protoreflect.Value) bool {
- list, ok := v.Interface().(*listReflect)
- if !ok {
- return false
- }
- return list.v.Type() == c.goType
-}
-
-func (c *listPtrConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-
-func (c *listPtrConverter) New() protoreflect.Value {
- return c.PBValueOf(reflect.New(c.goType.Elem()))
-}
-
-func (c *listPtrConverter) Zero() protoreflect.Value {
- return c.PBValueOf(reflect.Zero(c.goType))
-}
-
-type listReflect struct {
- v reflect.Value // *[]T
- conv Converter
-}
-
-func (ls *listReflect) Len() int {
- if ls.v.IsNil() {
- return 0
- }
- return ls.v.Elem().Len()
-}
-func (ls *listReflect) Get(i int) protoreflect.Value {
- return ls.conv.PBValueOf(ls.v.Elem().Index(i))
-}
-func (ls *listReflect) Set(i int, v protoreflect.Value) {
- ls.v.Elem().Index(i).Set(ls.conv.GoValueOf(v))
-}
-func (ls *listReflect) Append(v protoreflect.Value) {
- ls.v.Elem().Set(reflect.Append(ls.v.Elem(), ls.conv.GoValueOf(v)))
-}
-func (ls *listReflect) AppendMutable() protoreflect.Value {
- if _, ok := ls.conv.(*messageConverter); !ok {
- panic("invalid AppendMutable on list with non-message type")
- }
- v := ls.NewElement()
- ls.Append(v)
- return v
-}
-func (ls *listReflect) Truncate(i int) {
- ls.v.Elem().Set(ls.v.Elem().Slice(0, i))
-}
-func (ls *listReflect) NewElement() protoreflect.Value {
- return ls.conv.New()
-}
-func (ls *listReflect) IsValid() bool {
- return !ls.v.IsNil()
-}
-func (ls *listReflect) protoUnwrap() any {
- return ls.v.Interface()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_map.go b/vendor/google.golang.org/protobuf/internal/impl/convert_map.go
deleted file mode 100644
index e4580b3ac..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/convert_map.go
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type mapConverter struct {
- goType reflect.Type // map[K]V
- keyConv, valConv Converter
-}
-
-func newMapConverter(t reflect.Type, fd protoreflect.FieldDescriptor) *mapConverter {
- if t.Kind() != reflect.Map {
- panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName()))
- }
- return &mapConverter{
- goType: t,
- keyConv: newSingularConverter(t.Key(), fd.MapKey()),
- valConv: newSingularConverter(t.Elem(), fd.MapValue()),
- }
-}
-
-func (c *mapConverter) PBValueOf(v reflect.Value) protoreflect.Value {
- if v.Type() != c.goType {
- panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType))
- }
- return protoreflect.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv})
-}
-
-func (c *mapConverter) GoValueOf(v protoreflect.Value) reflect.Value {
- return v.Map().(*mapReflect).v
-}
-
-func (c *mapConverter) IsValidPB(v protoreflect.Value) bool {
- mapv, ok := v.Interface().(*mapReflect)
- if !ok {
- return false
- }
- return mapv.v.Type() == c.goType
-}
-
-func (c *mapConverter) IsValidGo(v reflect.Value) bool {
- return v.IsValid() && v.Type() == c.goType
-}
-
-func (c *mapConverter) New() protoreflect.Value {
- return c.PBValueOf(reflect.MakeMap(c.goType))
-}
-
-func (c *mapConverter) Zero() protoreflect.Value {
- return c.PBValueOf(reflect.Zero(c.goType))
-}
-
-type mapReflect struct {
- v reflect.Value // map[K]V
- keyConv Converter
- valConv Converter
-}
-
-func (ms *mapReflect) Len() int {
- return ms.v.Len()
-}
-func (ms *mapReflect) Has(k protoreflect.MapKey) bool {
- rk := ms.keyConv.GoValueOf(k.Value())
- rv := ms.v.MapIndex(rk)
- return rv.IsValid()
-}
-func (ms *mapReflect) Get(k protoreflect.MapKey) protoreflect.Value {
- rk := ms.keyConv.GoValueOf(k.Value())
- rv := ms.v.MapIndex(rk)
- if !rv.IsValid() {
- return protoreflect.Value{}
- }
- return ms.valConv.PBValueOf(rv)
-}
-func (ms *mapReflect) Set(k protoreflect.MapKey, v protoreflect.Value) {
- rk := ms.keyConv.GoValueOf(k.Value())
- rv := ms.valConv.GoValueOf(v)
- ms.v.SetMapIndex(rk, rv)
-}
-func (ms *mapReflect) Clear(k protoreflect.MapKey) {
- rk := ms.keyConv.GoValueOf(k.Value())
- ms.v.SetMapIndex(rk, reflect.Value{})
-}
-func (ms *mapReflect) Mutable(k protoreflect.MapKey) protoreflect.Value {
- if _, ok := ms.valConv.(*messageConverter); !ok {
- panic("invalid Mutable on map with non-message value type")
- }
- v := ms.Get(k)
- if !v.IsValid() {
- v = ms.NewValue()
- ms.Set(k, v)
- }
- return v
-}
-func (ms *mapReflect) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) {
- iter := ms.v.MapRange()
- for iter.Next() {
- k := ms.keyConv.PBValueOf(iter.Key()).MapKey()
- v := ms.valConv.PBValueOf(iter.Value())
- if !f(k, v) {
- return
- }
- }
-}
-func (ms *mapReflect) NewValue() protoreflect.Value {
- return ms.valConv.New()
-}
-func (ms *mapReflect) IsValid() bool {
- return !ms.v.IsNil()
-}
-func (ms *mapReflect) protoUnwrap() any {
- return ms.v.Interface()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/decode.go b/vendor/google.golang.org/protobuf/internal/impl/decode.go
deleted file mode 100644
index e0dd21fa5..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/decode.go
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "math/bits"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-var errDecode = errors.New("cannot parse invalid wire-format data")
-var errRecursionDepth = errors.New("exceeded maximum recursion depth")
-
-type unmarshalOptions struct {
- flags protoiface.UnmarshalInputFlags
- resolver interface {
- FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
- FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
- }
- depth int
-}
-
-func (o unmarshalOptions) Options() proto.UnmarshalOptions {
- return proto.UnmarshalOptions{
- Merge: true,
- AllowPartial: true,
- DiscardUnknown: o.DiscardUnknown(),
- Resolver: o.resolver,
-
- NoLazyDecoding: o.NoLazyDecoding(),
- }
-}
-
-func (o unmarshalOptions) DiscardUnknown() bool {
- return o.flags&protoiface.UnmarshalDiscardUnknown != 0
-}
-
-func (o unmarshalOptions) AliasBuffer() bool { return o.flags&protoiface.UnmarshalAliasBuffer != 0 }
-func (o unmarshalOptions) Validated() bool { return o.flags&protoiface.UnmarshalValidated != 0 }
-func (o unmarshalOptions) NoLazyDecoding() bool {
- return o.flags&protoiface.UnmarshalNoLazyDecoding != 0
-}
-
-func (o unmarshalOptions) CanBeLazy() bool {
- if o.resolver != protoregistry.GlobalTypes {
- return false
- }
- // We ignore the UnmarshalInvalidateSizeCache even though it's not in the default set
- return (o.flags & ^(protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated | protoiface.UnmarshalCheckRequired)) == 0
-}
-
-var lazyUnmarshalOptions = unmarshalOptions{
- resolver: protoregistry.GlobalTypes,
-
- flags: protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated,
-
- depth: protowire.DefaultRecursionLimit,
-}
-
-type unmarshalOutput struct {
- n int // number of bytes consumed
- initialized bool
-}
-
-// unmarshal is protoreflect.Methods.Unmarshal.
-func (mi *MessageInfo) unmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
- var p pointer
- if ms, ok := in.Message.(*messageState); ok {
- p = ms.pointer()
- } else {
- p = in.Message.(*messageReflectWrapper).pointer()
- }
- out, err := mi.unmarshalPointer(in.Buf, p, 0, unmarshalOptions{
- flags: in.Flags,
- resolver: in.Resolver,
- depth: in.Depth,
- })
- var flags protoiface.UnmarshalOutputFlags
- if out.initialized {
- flags |= protoiface.UnmarshalInitialized
- }
- return protoiface.UnmarshalOutput{
- Flags: flags,
- }, err
-}
-
-// errUnknown is returned during unmarshaling to indicate a parse error that
-// should result in a field being placed in the unknown fields section (for example,
-// when the wire type doesn't match) as opposed to the entire unmarshal operation
-// failing (for example, when a field extends past the available input).
-//
-// This is a sentinel error which should never be visible to the user.
-var errUnknown = errors.New("unknown")
-
-func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) {
- mi.init()
- opts.depth--
- if opts.depth < 0 {
- return out, errRecursionDepth
- }
- if flags.ProtoLegacy && mi.isMessageSet {
- return unmarshalMessageSet(mi, b, p, opts)
- }
-
- lazyDecoding := LazyEnabled() // default
- if opts.NoLazyDecoding() {
- lazyDecoding = false // explicitly disabled
- }
- if mi.lazyOffset.IsValid() && lazyDecoding {
- return mi.unmarshalPointerLazy(b, p, groupTag, opts)
- }
- return mi.unmarshalPointerEager(b, p, groupTag, opts)
-}
-
-// unmarshalPointerEager is the message unmarshalling function for all messages that are not lazy.
-// The corresponding function for Lazy is in google_lazy.go.
-func (mi *MessageInfo) unmarshalPointerEager(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) {
-
- initialized := true
- var requiredMask uint64
- var exts *map[int32]ExtensionField
-
- var presence presence
- if mi.presenceOffset.IsValid() {
- presence = p.Apply(mi.presenceOffset).PresenceInfo()
- }
-
- start := len(b)
- for len(b) > 0 {
- // Parse the tag (field number and wire type).
- var tag uint64
- if b[0] < 0x80 {
- tag = uint64(b[0])
- b = b[1:]
- } else if len(b) >= 2 && b[1] < 128 {
- tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
- b = b[2:]
- } else {
- var n int
- tag, n = protowire.ConsumeVarint(b)
- if n < 0 {
- return out, errDecode
- }
- b = b[n:]
- }
- var num protowire.Number
- if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {
- return out, errDecode
- } else {
- num = protowire.Number(n)
- }
- wtyp := protowire.Type(tag & 7)
-
- if wtyp == protowire.EndGroupType {
- if num != groupTag {
- return out, errDecode
- }
- groupTag = 0
- break
- }
-
- var f *coderFieldInfo
- if int(num) < len(mi.denseCoderFields) {
- f = mi.denseCoderFields[num]
- } else {
- f = mi.coderFields[num]
- }
- var n int
- err := errUnknown
- switch {
- case f != nil:
- if f.funcs.unmarshal == nil {
- break
- }
- var o unmarshalOutput
- o, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts)
- n = o.n
- if err != nil {
- break
- }
- requiredMask |= f.validation.requiredBit
- if f.funcs.isInit != nil && !o.initialized {
- initialized = false
- }
-
- if f.presenceIndex != noPresence {
- presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)
- }
-
- default:
- // Possible extension.
- if exts == nil && mi.extensionOffset.IsValid() {
- exts = p.Apply(mi.extensionOffset).Extensions()
- if *exts == nil {
- *exts = make(map[int32]ExtensionField)
- }
- }
- if exts == nil {
- break
- }
- var o unmarshalOutput
- o, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts)
- if err != nil {
- break
- }
- n = o.n
- if !o.initialized {
- initialized = false
- }
- }
- if err != nil {
- if err != errUnknown {
- return out, err
- }
- n = protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return out, errDecode
- }
- if !opts.DiscardUnknown() && mi.unknownOffset.IsValid() {
- u := mi.mutableUnknownBytes(p)
- *u = protowire.AppendTag(*u, num, wtyp)
- *u = append(*u, b[:n]...)
- }
- }
- b = b[n:]
- }
- if groupTag != 0 {
- return out, errDecode
- }
- if mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) {
- initialized = false
- }
- if initialized {
- out.initialized = true
- }
- out.n = start - len(b)
- return out, nil
-}
-
-func (mi *MessageInfo) unmarshalExtension(b []byte, num protowire.Number, wtyp protowire.Type, exts map[int32]ExtensionField, opts unmarshalOptions) (out unmarshalOutput, err error) {
- x := exts[int32(num)]
- xt := x.Type()
- if xt == nil {
- var err error
- xt, err = opts.resolver.FindExtensionByNumber(mi.Desc.FullName(), num)
- if err != nil {
- if err == protoregistry.NotFound {
- return out, errUnknown
- }
- return out, errors.New("%v: unable to resolve extension %v: %v", mi.Desc.FullName(), num, err)
- }
- }
- xi := getExtensionFieldInfo(xt)
- if xi.funcs.unmarshal == nil {
- return out, errUnknown
- }
- if flags.LazyUnmarshalExtensions {
- if opts.CanBeLazy() && x.canLazy(xt) {
- out, valid := skipExtension(b, xi, num, wtyp, opts)
- switch valid {
- case ValidationValid:
- if out.initialized {
- x.appendLazyBytes(xt, xi, num, wtyp, b[:out.n])
- exts[int32(num)] = x
- return out, nil
- }
- case ValidationInvalid:
- return out, errDecode
- case ValidationUnknown:
- }
- }
- }
- ival := x.Value()
- if !ival.IsValid() && xi.unmarshalNeedsValue {
- // Create a new message, list, or map value to fill in.
- // For enums, create a prototype value to let the unmarshal func know the
- // concrete type.
- ival = xt.New()
- }
- v, out, err := xi.funcs.unmarshal(b, ival, num, wtyp, opts)
- if err != nil {
- return out, err
- }
- if xi.funcs.isInit == nil {
- out.initialized = true
- }
- x.Set(xt, v)
- exts[int32(num)] = x
- return out, nil
-}
-
-func skipExtension(b []byte, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) {
- if xi.validation.mi == nil {
- return out, ValidationUnknown
- }
- xi.validation.mi.init()
- switch xi.validation.typ {
- case validationTypeMessage:
- if wtyp != protowire.BytesType {
- return out, ValidationUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, ValidationUnknown
- }
-
- if opts.Validated() {
- out.initialized = true
- out.n = n
- return out, ValidationValid
- }
-
- out, st := xi.validation.mi.validate(v, 0, opts)
- out.n = n
- return out, st
- case validationTypeGroup:
- if wtyp != protowire.StartGroupType {
- return out, ValidationUnknown
- }
- out, st := xi.validation.mi.validate(b, num, opts)
- return out, st
- default:
- return out, ValidationUnknown
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/encode.go b/vendor/google.golang.org/protobuf/internal/impl/encode.go
deleted file mode 100644
index b2e212291..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/encode.go
+++ /dev/null
@@ -1,315 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "math"
- "sort"
- "sync/atomic"
-
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/protolazy"
- "google.golang.org/protobuf/proto"
- piface "google.golang.org/protobuf/runtime/protoiface"
-)
-
-type marshalOptions struct {
- flags piface.MarshalInputFlags
-}
-
-func (o marshalOptions) Options() proto.MarshalOptions {
- return proto.MarshalOptions{
- AllowPartial: true,
- Deterministic: o.Deterministic(),
- UseCachedSize: o.UseCachedSize(),
- }
-}
-
-func (o marshalOptions) Deterministic() bool { return o.flags&piface.MarshalDeterministic != 0 }
-func (o marshalOptions) UseCachedSize() bool { return o.flags&piface.MarshalUseCachedSize != 0 }
-
-// size is protoreflect.Methods.Size.
-func (mi *MessageInfo) size(in piface.SizeInput) piface.SizeOutput {
- var p pointer
- if ms, ok := in.Message.(*messageState); ok {
- p = ms.pointer()
- } else {
- p = in.Message.(*messageReflectWrapper).pointer()
- }
- size := mi.sizePointer(p, marshalOptions{
- flags: in.Flags,
- })
- return piface.SizeOutput{Size: size}
-}
-
-func (mi *MessageInfo) sizePointer(p pointer, opts marshalOptions) (size int) {
- mi.init()
- if p.IsNil() {
- return 0
- }
- if opts.UseCachedSize() && mi.sizecacheOffset.IsValid() {
- // The size cache contains the size + 1, to allow the
- // zero value to be invalid, while also allowing for a
- // 0 size to be cached.
- if size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size > 0 {
- return int(size - 1)
- }
- }
- return mi.sizePointerSlow(p, opts)
-}
-
-func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int) {
- if flags.ProtoLegacy && mi.isMessageSet {
- size = sizeMessageSet(mi, p, opts)
- if mi.sizecacheOffset.IsValid() {
- atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1))
- }
- return size
- }
- if mi.extensionOffset.IsValid() {
- e := p.Apply(mi.extensionOffset).Extensions()
- size += mi.sizeExtensions(e, opts)
- }
-
- var lazy **protolazy.XXX_lazyUnmarshalInfo
- var presence presence
- if mi.presenceOffset.IsValid() {
- presence = p.Apply(mi.presenceOffset).PresenceInfo()
- if mi.lazyOffset.IsValid() {
- lazy = p.Apply(mi.lazyOffset).LazyInfoPtr()
- }
- }
-
- for _, f := range mi.orderedCoderFields {
- if f.funcs.size == nil {
- continue
- }
- fptr := p.Apply(f.offset)
-
- if f.presenceIndex != noPresence {
- if !presence.Present(f.presenceIndex) {
- continue
- }
-
- if f.isLazy && fptr.AtomicGetPointer().IsNil() {
- if lazyFields(opts) {
- size += (*lazy).SizeField(uint32(f.num))
- continue
- } else {
- mi.lazyUnmarshal(p, f.num)
- }
- }
- size += f.funcs.size(fptr, f, opts)
- continue
- }
-
- if f.isPointer && fptr.Elem().IsNil() {
- continue
- }
- size += f.funcs.size(fptr, f, opts)
- }
- if mi.unknownOffset.IsValid() {
- if u := mi.getUnknownBytes(p); u != nil {
- size += len(*u)
- }
- }
- if mi.sizecacheOffset.IsValid() {
- if size > (math.MaxInt32 - 1) {
- // The size is too large for the int32 sizecache field.
- // We will need to recompute the size when encoding;
- // unfortunately expensive, but better than invalid output.
- atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), 0)
- } else {
- // The size cache contains the size + 1, to allow the
- // zero value to be invalid, while also allowing for a
- // 0 size to be cached.
- atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1))
- }
- }
- return size
-}
-
-// marshal is protoreflect.Methods.Marshal.
-func (mi *MessageInfo) marshal(in piface.MarshalInput) (out piface.MarshalOutput, err error) {
- var p pointer
- if ms, ok := in.Message.(*messageState); ok {
- p = ms.pointer()
- } else {
- p = in.Message.(*messageReflectWrapper).pointer()
- }
- b, err := mi.marshalAppendPointer(in.Buf, p, marshalOptions{
- flags: in.Flags,
- })
- return piface.MarshalOutput{Buf: b}, err
-}
-
-func (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOptions) ([]byte, error) {
- mi.init()
- if p.IsNil() {
- return b, nil
- }
- if flags.ProtoLegacy && mi.isMessageSet {
- return marshalMessageSet(mi, b, p, opts)
- }
- var err error
- // The old marshaler encodes extensions at beginning.
- if mi.extensionOffset.IsValid() {
- e := p.Apply(mi.extensionOffset).Extensions()
- // TODO: Special handling for MessageSet?
- b, err = mi.appendExtensions(b, e, opts)
- if err != nil {
- return b, err
- }
- }
-
- var lazy **protolazy.XXX_lazyUnmarshalInfo
- var presence presence
- if mi.presenceOffset.IsValid() {
- presence = p.Apply(mi.presenceOffset).PresenceInfo()
- if mi.lazyOffset.IsValid() {
- lazy = p.Apply(mi.lazyOffset).LazyInfoPtr()
- }
- }
-
- for _, f := range mi.orderedCoderFields {
- if f.funcs.marshal == nil {
- continue
- }
- fptr := p.Apply(f.offset)
-
- if f.presenceIndex != noPresence {
- if !presence.Present(f.presenceIndex) {
- continue
- }
- if f.isLazy {
- // Be careful, this field needs to be read atomically, like for a get
- if f.isPointer && fptr.AtomicGetPointer().IsNil() {
- if lazyFields(opts) {
- b, _ = (*lazy).AppendField(b, uint32(f.num))
- continue
- } else {
- mi.lazyUnmarshal(p, f.num)
- }
- }
-
- b, err = f.funcs.marshal(b, fptr, f, opts)
- if err != nil {
- return b, err
- }
- continue
- } else if f.isPointer && fptr.Elem().IsNil() {
- continue
- }
- b, err = f.funcs.marshal(b, fptr, f, opts)
- if err != nil {
- return b, err
- }
- continue
- }
-
- if f.isPointer && fptr.Elem().IsNil() {
- continue
- }
- b, err = f.funcs.marshal(b, fptr, f, opts)
- if err != nil {
- return b, err
- }
- }
- if mi.unknownOffset.IsValid() && !mi.isMessageSet {
- if u := mi.getUnknownBytes(p); u != nil {
- b = append(b, (*u)...)
- }
- }
- return b, nil
-}
-
-// fullyLazyExtensions returns true if we should attempt to keep extensions lazy over size and marshal.
-func fullyLazyExtensions(opts marshalOptions) bool {
- // When deterministic marshaling is requested, force an unmarshal for lazy
- // extensions to produce a deterministic result, instead of passing through
- // bytes lazily that may or may not match what Go Protobuf would produce.
- return opts.flags&piface.MarshalDeterministic == 0
-}
-
-// lazyFields returns true if we should attempt to keep fields lazy over size and marshal.
-func lazyFields(opts marshalOptions) bool {
- // When deterministic marshaling is requested, force an unmarshal for lazy
- // fields to produce a deterministic result, instead of passing through
- // bytes lazily that may or may not match what Go Protobuf would produce.
- return opts.flags&piface.MarshalDeterministic == 0
-}
-
-func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) {
- if ext == nil {
- return 0
- }
- for _, x := range *ext {
- xi := getExtensionFieldInfo(x.Type())
- if xi.funcs.size == nil {
- continue
- }
- if fullyLazyExtensions(opts) {
- // Don't expand the extension, instead use the buffer to calculate size
- if lb := x.lazyBuffer(); lb != nil {
- // We got hold of the buffer, so it's still lazy.
- n += len(lb)
- continue
- }
- }
- n += xi.funcs.size(x.Value(), xi.tagsize, opts)
- }
- return n
-}
-
-func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField, opts marshalOptions) ([]byte, error) {
- if ext == nil {
- return b, nil
- }
-
- switch len(*ext) {
- case 0:
- return b, nil
- case 1:
- // Fast-path for one extension: Don't bother sorting the keys.
- var err error
- for _, x := range *ext {
- xi := getExtensionFieldInfo(x.Type())
- if fullyLazyExtensions(opts) {
- // Don't expand the extension if it's still in wire format, instead use the buffer content.
- if lb := x.lazyBuffer(); lb != nil {
- b = append(b, lb...)
- continue
- }
- }
- b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
- }
- return b, err
- default:
- // Sort the keys to provide a deterministic encoding.
- // Not sure this is required, but the old code does it.
- keys := make([]int, 0, len(*ext))
- for k := range *ext {
- keys = append(keys, int(k))
- }
- sort.Ints(keys)
- var err error
- for _, k := range keys {
- x := (*ext)[int32(k)]
- xi := getExtensionFieldInfo(x.Type())
- if fullyLazyExtensions(opts) {
- // Don't expand the extension if it's still in wire format, instead use the buffer content.
- if lb := x.lazyBuffer(); lb != nil {
- b = append(b, lb...)
- continue
- }
- }
- b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)
- if err != nil {
- return b, err
- }
- }
- return b, nil
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/enum.go b/vendor/google.golang.org/protobuf/internal/impl/enum.go
deleted file mode 100644
index 5f3ef5ad7..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/enum.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type EnumInfo struct {
- GoReflectType reflect.Type // int32 kind
- Desc protoreflect.EnumDescriptor
-}
-
-func (t *EnumInfo) New(n protoreflect.EnumNumber) protoreflect.Enum {
- return reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(protoreflect.Enum)
-}
-func (t *EnumInfo) Descriptor() protoreflect.EnumDescriptor { return t.Desc }
diff --git a/vendor/google.golang.org/protobuf/internal/impl/equal.go b/vendor/google.golang.org/protobuf/internal/impl/equal.go
deleted file mode 100644
index 9f6c32a7d..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/equal.go
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "bytes"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-func equal(in protoiface.EqualInput) protoiface.EqualOutput {
- return protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)}
-}
-
-// equalMessage is a fast-path variant of protoreflect.equalMessage.
-// It takes advantage of the internal messageState type to avoid
-// unnecessary allocations, type assertions.
-func equalMessage(mx, my protoreflect.Message) bool {
- if mx == nil || my == nil {
- return mx == my
- }
- if mx.Descriptor() != my.Descriptor() {
- return false
- }
-
- msx, ok := mx.(*messageState)
- if !ok {
- return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
- }
- msy, ok := my.(*messageState)
- if !ok {
- return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
- }
-
- mi := msx.messageInfo()
- miy := msy.messageInfo()
- if mi != miy {
- return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))
- }
- mi.init()
- // Compares regular fields
- // Modified Message.Range code that compares two messages of the same type
- // while going over the fields.
- for _, ri := range mi.rangeInfos {
- var fd protoreflect.FieldDescriptor
- var vx, vy protoreflect.Value
-
- switch ri := ri.(type) {
- case *fieldInfo:
- hx := ri.has(msx.pointer())
- hy := ri.has(msy.pointer())
- if hx != hy {
- return false
- }
- if !hx {
- continue
- }
- fd = ri.fieldDesc
- vx = ri.get(msx.pointer())
- vy = ri.get(msy.pointer())
- case *oneofInfo:
- fnx := ri.which(msx.pointer())
- fny := ri.which(msy.pointer())
- if fnx != fny {
- return false
- }
- if fnx <= 0 {
- continue
- }
- fi := mi.fields[fnx]
- fd = fi.fieldDesc
- vx = fi.get(msx.pointer())
- vy = fi.get(msy.pointer())
- }
-
- if !equalValue(fd, vx, vy) {
- return false
- }
- }
-
- // Compare extensions.
- // This is more complicated because mx or my could have empty/nil extension maps,
- // however some populated extension map values are equal to nil extension maps.
- emx := mi.extensionMap(msx.pointer())
- emy := mi.extensionMap(msy.pointer())
- if emx != nil {
- for k, x := range *emx {
- xd := x.Type().TypeDescriptor()
- xv := x.Value()
- var y ExtensionField
- ok := false
- if emy != nil {
- y, ok = (*emy)[k]
- }
- // We need to treat empty lists as equal to nil values
- if emy == nil || !ok {
- if xd.IsList() && xv.List().Len() == 0 {
- continue
- }
- return false
- }
-
- if !equalValue(xd, xv, y.Value()) {
- return false
- }
- }
- }
- if emy != nil {
- // emy may have extensions emx does not have, need to check them as well
- for k, y := range *emy {
- if emx != nil {
- // emx has the field, so we already checked it
- if _, ok := (*emx)[k]; ok {
- continue
- }
- }
- // Empty lists are equal to nil
- if y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 {
- continue
- }
-
- // Cant be equal if the extension is populated
- return false
- }
- }
-
- return equalUnknown(mx.GetUnknown(), my.GetUnknown())
-}
-
-func equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool {
- // slow path
- if fd.Kind() != protoreflect.MessageKind {
- return vx.Equal(vy)
- }
-
- // fast path special cases
- if fd.IsMap() {
- if fd.MapValue().Kind() == protoreflect.MessageKind {
- return equalMessageMap(vx.Map(), vy.Map())
- }
- return vx.Equal(vy)
- }
-
- if fd.IsList() {
- return equalMessageList(vx.List(), vy.List())
- }
-
- return equalMessage(vx.Message(), vy.Message())
-}
-
-// Mostly copied from protoreflect.equalMap.
-// This variant only works for messages as map types.
-// All other map types should be handled via Value.Equal.
-func equalMessageMap(mx, my protoreflect.Map) bool {
- if mx.Len() != my.Len() {
- return false
- }
- equal := true
- mx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool {
- if !my.Has(k) {
- equal = false
- return false
- }
- vy := my.Get(k)
- equal = equalMessage(vx.Message(), vy.Message())
- return equal
- })
- return equal
-}
-
-// Mostly copied from protoreflect.equalList.
-// The only change is the usage of equalImpl instead of protoreflect.equalValue.
-func equalMessageList(lx, ly protoreflect.List) bool {
- if lx.Len() != ly.Len() {
- return false
- }
- for i := 0; i < lx.Len(); i++ {
- // We only operate on messages here since equalImpl will not call us in any other case.
- if !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) {
- return false
- }
- }
- return true
-}
-
-// equalUnknown compares unknown fields by direct comparison on the raw bytes
-// of each individual field number.
-// Copied from protoreflect.equalUnknown.
-func equalUnknown(x, y protoreflect.RawFields) bool {
- if len(x) != len(y) {
- return false
- }
- if bytes.Equal([]byte(x), []byte(y)) {
- return true
- }
-
- mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
- my := make(map[protoreflect.FieldNumber]protoreflect.RawFields)
- for len(x) > 0 {
- fnum, _, n := protowire.ConsumeField(x)
- mx[fnum] = append(mx[fnum], x[:n]...)
- x = x[n:]
- }
- for len(y) > 0 {
- fnum, _, n := protowire.ConsumeField(y)
- my[fnum] = append(my[fnum], y[:n]...)
- y = y[n:]
- }
- if len(mx) != len(my) {
- return false
- }
-
- for k, v1 := range mx {
- if v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) {
- return false
- }
- }
-
- return true
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/extension.go b/vendor/google.golang.org/protobuf/internal/impl/extension.go
deleted file mode 100644
index e31249f64..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/extension.go
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "reflect"
- "sync"
- "sync/atomic"
-
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// ExtensionInfo implements ExtensionType.
-//
-// This type contains a number of exported fields for legacy compatibility.
-// The only non-deprecated use of this type is through the methods of the
-// ExtensionType interface.
-type ExtensionInfo struct {
- // An ExtensionInfo may exist in several stages of initialization.
- //
- // extensionInfoUninitialized: Some or all of the legacy exported
- // fields may be set, but none of the unexported fields have been
- // initialized. This is the starting state for an ExtensionInfo
- // in legacy generated code.
- //
- // extensionInfoDescInit: The desc field is set, but other unexported fields
- // may not be initialized. Legacy exported fields may or may not be set.
- // This is the starting state for an ExtensionInfo in newly generated code.
- //
- // extensionInfoFullInit: The ExtensionInfo is fully initialized.
- // This state is only entered after lazy initialization is complete.
- init uint32
- mu sync.Mutex
-
- goType reflect.Type
- desc extensionTypeDescriptor
- conv Converter
- info *extensionFieldInfo // for fast-path method implementations
-
- // ExtendedType is a typed nil-pointer to the parent message type that
- // is being extended. It is possible for this to be unpopulated in v2
- // since the message may no longer implement the MessageV1 interface.
- //
- // Deprecated: Use the ExtendedType method instead.
- ExtendedType protoiface.MessageV1
-
- // ExtensionType is the zero value of the extension type.
- //
- // For historical reasons, reflect.TypeOf(ExtensionType) and the
- // type returned by InterfaceOf may not be identical.
- //
- // Deprecated: Use InterfaceOf(xt.Zero()) instead.
- ExtensionType any
-
- // Field is the field number of the extension.
- //
- // Deprecated: Use the Descriptor().Number method instead.
- Field int32
-
- // Name is the fully qualified name of extension.
- //
- // Deprecated: Use the Descriptor().FullName method instead.
- Name string
-
- // Tag is the protobuf struct tag used in the v1 API.
- //
- // Deprecated: Do not use.
- Tag string
-
- // Filename is the proto filename in which the extension is defined.
- //
- // Deprecated: Use Descriptor().ParentFile().Path() instead.
- Filename string
-}
-
-// Stages of initialization: See the ExtensionInfo.init field.
-const (
- extensionInfoUninitialized = 0
- extensionInfoDescInit = 1
- extensionInfoFullInit = 2
-)
-
-func InitExtensionInfo(xi *ExtensionInfo, xd protoreflect.ExtensionDescriptor, goType reflect.Type) {
- xi.goType = goType
- xi.desc = extensionTypeDescriptor{xd, xi}
- xi.init = extensionInfoDescInit
-}
-
-func (xi *ExtensionInfo) New() protoreflect.Value {
- return xi.lazyInit().New()
-}
-func (xi *ExtensionInfo) Zero() protoreflect.Value {
- return xi.lazyInit().Zero()
-}
-func (xi *ExtensionInfo) ValueOf(v any) protoreflect.Value {
- return xi.lazyInit().PBValueOf(reflect.ValueOf(v))
-}
-func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) any {
- return xi.lazyInit().GoValueOf(v).Interface()
-}
-func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool {
- return xi.lazyInit().IsValidPB(v)
-}
-func (xi *ExtensionInfo) IsValidInterface(v any) bool {
- return xi.lazyInit().IsValidGo(reflect.ValueOf(v))
-}
-func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor {
- if atomic.LoadUint32(&xi.init) < extensionInfoDescInit {
- xi.lazyInitSlow()
- }
- return &xi.desc
-}
-
-func (xi *ExtensionInfo) lazyInit() Converter {
- if atomic.LoadUint32(&xi.init) < extensionInfoFullInit {
- xi.lazyInitSlow()
- }
- return xi.conv
-}
-
-func (xi *ExtensionInfo) lazyInitSlow() {
- xi.mu.Lock()
- defer xi.mu.Unlock()
-
- if xi.init == extensionInfoFullInit {
- return
- }
- defer atomic.StoreUint32(&xi.init, extensionInfoFullInit)
-
- if xi.desc.ExtensionDescriptor == nil {
- xi.initFromLegacy()
- }
- if !xi.desc.ExtensionDescriptor.IsPlaceholder() {
- if xi.ExtensionType == nil {
- xi.initToLegacy()
- }
- xi.conv = NewConverter(xi.goType, xi.desc.ExtensionDescriptor)
- xi.info = makeExtensionFieldInfo(xi.desc.ExtensionDescriptor)
- xi.info.validation = newValidationInfo(xi.desc.ExtensionDescriptor, xi.goType)
- }
-}
-
-type extensionTypeDescriptor struct {
- protoreflect.ExtensionDescriptor
- xi *ExtensionInfo
-}
-
-func (xtd *extensionTypeDescriptor) Type() protoreflect.ExtensionType {
- return xtd.xi
-}
-func (xtd *extensionTypeDescriptor) Descriptor() protoreflect.ExtensionDescriptor {
- return xtd.ExtensionDescriptor
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/lazy.go b/vendor/google.golang.org/protobuf/internal/impl/lazy.go
deleted file mode 100644
index e8fb6c35b..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/lazy.go
+++ /dev/null
@@ -1,433 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "math/bits"
- "os"
- "reflect"
- "sort"
- "sync/atomic"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/protolazy"
- "google.golang.org/protobuf/reflect/protoreflect"
- preg "google.golang.org/protobuf/reflect/protoregistry"
- piface "google.golang.org/protobuf/runtime/protoiface"
-)
-
-var enableLazy int32 = func() int32 {
- if os.Getenv("GOPROTODEBUG") == "nolazy" {
- return 0
- }
- return 1
-}()
-
-// EnableLazyUnmarshal enables lazy unmarshaling.
-func EnableLazyUnmarshal(enable bool) {
- if enable {
- atomic.StoreInt32(&enableLazy, 1)
- return
- }
- atomic.StoreInt32(&enableLazy, 0)
-}
-
-// LazyEnabled reports whether lazy unmarshalling is currently enabled.
-func LazyEnabled() bool {
- return atomic.LoadInt32(&enableLazy) != 0
-}
-
-// UnmarshalField unmarshals a field in a message.
-func UnmarshalField(m interface{}, num protowire.Number) {
- switch m := m.(type) {
- case *messageState:
- m.messageInfo().lazyUnmarshal(m.pointer(), num)
- case *messageReflectWrapper:
- m.messageInfo().lazyUnmarshal(m.pointer(), num)
- default:
- panic(fmt.Sprintf("unsupported wrapper type %T", m))
- }
-}
-
-func (mi *MessageInfo) lazyUnmarshal(p pointer, num protoreflect.FieldNumber) {
- var f *coderFieldInfo
- if int(num) < len(mi.denseCoderFields) {
- f = mi.denseCoderFields[num]
- } else {
- f = mi.coderFields[num]
- }
- if f == nil {
- panic(fmt.Sprintf("lazyUnmarshal: field info for %v.%v", mi.Desc.FullName(), num))
- }
- lazy := *p.Apply(mi.lazyOffset).LazyInfoPtr()
- start, end, found, _, multipleEntries := lazy.FindFieldInProto(uint32(num))
- if !found && multipleEntries == nil {
- panic(fmt.Sprintf("lazyUnmarshal: can't find field data for %v.%v", mi.Desc.FullName(), num))
- }
- // The actual pointer in the message can not be set until the whole struct is filled in, otherwise we will have races.
- // Create another pointer and set it atomically, if we won the race and the pointer in the original message is still nil.
- fp := pointerOfValue(reflect.New(f.ft))
- if multipleEntries != nil {
- for _, entry := range multipleEntries {
- mi.unmarshalField(lazy.Buffer()[entry.Start:entry.End], fp, f, lazy, lazy.UnmarshalFlags())
- }
- } else {
- mi.unmarshalField(lazy.Buffer()[start:end], fp, f, lazy, lazy.UnmarshalFlags())
- }
- p.Apply(f.offset).AtomicSetPointerIfNil(fp.Elem())
-}
-
-func (mi *MessageInfo) unmarshalField(b []byte, p pointer, f *coderFieldInfo, lazyInfo *protolazy.XXX_lazyUnmarshalInfo, flags piface.UnmarshalInputFlags) error {
- opts := lazyUnmarshalOptions
- opts.flags |= flags
- for len(b) > 0 {
- // Parse the tag (field number and wire type).
- var tag uint64
- if b[0] < 0x80 {
- tag = uint64(b[0])
- b = b[1:]
- } else if len(b) >= 2 && b[1] < 128 {
- tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
- b = b[2:]
- } else {
- var n int
- tag, n = protowire.ConsumeVarint(b)
- if n < 0 {
- return errors.New("invalid wire data")
- }
- b = b[n:]
- }
- var num protowire.Number
- if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {
- return errors.New("invalid wire data")
- } else {
- num = protowire.Number(n)
- }
- wtyp := protowire.Type(tag & 7)
- if num == f.num {
- o, err := f.funcs.unmarshal(b, p, wtyp, f, opts)
- if err == nil {
- b = b[o.n:]
- continue
- }
- if err != errUnknown {
- return err
- }
- }
- n := protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return errors.New("invalid wire data")
- }
- b = b[n:]
- }
- return nil
-}
-
-func (mi *MessageInfo) skipField(b []byte, f *coderFieldInfo, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) {
- fmi := f.validation.mi
- if fmi == nil {
- fd := mi.Desc.Fields().ByNumber(f.num)
- if fd == nil || !fd.IsWeak() {
- return out, ValidationUnknown
- }
- messageName := fd.Message().FullName()
- messageType, err := preg.GlobalTypes.FindMessageByName(messageName)
- if err != nil {
- return out, ValidationUnknown
- }
- var ok bool
- fmi, ok = messageType.(*MessageInfo)
- if !ok {
- return out, ValidationUnknown
- }
- }
- fmi.init()
- switch f.validation.typ {
- case validationTypeMessage:
- if wtyp != protowire.BytesType {
- return out, ValidationWrongWireType
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return out, ValidationInvalid
- }
- out, st := fmi.validate(v, 0, opts)
- out.n = n
- return out, st
- case validationTypeGroup:
- if wtyp != protowire.StartGroupType {
- return out, ValidationWrongWireType
- }
- out, st := fmi.validate(b, f.num, opts)
- return out, st
- default:
- return out, ValidationUnknown
- }
-}
-
-// unmarshalPointerLazy is similar to unmarshalPointerEager, but it
-// specifically handles lazy unmarshalling. it expects lazyOffset and
-// presenceOffset to both be valid.
-func (mi *MessageInfo) unmarshalPointerLazy(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) {
- initialized := true
- var requiredMask uint64
- var lazy **protolazy.XXX_lazyUnmarshalInfo
- var presence presence
- var lazyIndex []protolazy.IndexEntry
- var lastNum protowire.Number
- outOfOrder := false
- lazyDecode := false
- presence = p.Apply(mi.presenceOffset).PresenceInfo()
- lazy = p.Apply(mi.lazyOffset).LazyInfoPtr()
- if !presence.AnyPresent(mi.presenceSize) {
- if opts.CanBeLazy() {
- // If the message contains existing data, we need to merge into it.
- // Lazy unmarshaling doesn't merge, so only enable it when the
- // message is empty (has no presence bitmap).
- lazyDecode = true
- if *lazy == nil {
- *lazy = &protolazy.XXX_lazyUnmarshalInfo{}
- }
- (*lazy).SetUnmarshalFlags(opts.flags)
- if !opts.AliasBuffer() {
- // Make a copy of the buffer for lazy unmarshaling.
- // Set the AliasBuffer flag so recursive unmarshal
- // operations reuse the copy.
- b = append([]byte{}, b...)
- opts.flags |= piface.UnmarshalAliasBuffer
- }
- (*lazy).SetBuffer(b)
- }
- }
- // Track special handling of lazy fields.
- //
- // In the common case, all fields are lazyValidateOnly (and lazyFields remains nil).
- // In the event that validation for a field fails, this map tracks handling of the field.
- type lazyAction uint8
- const (
- lazyValidateOnly lazyAction = iota // validate the field only
- lazyUnmarshalNow // eagerly unmarshal the field
- lazyUnmarshalLater // unmarshal the field after the message is fully processed
- )
- var lazyFields map[*coderFieldInfo]lazyAction
- var exts *map[int32]ExtensionField
- start := len(b)
- pos := 0
- for len(b) > 0 {
- // Parse the tag (field number and wire type).
- var tag uint64
- if b[0] < 0x80 {
- tag = uint64(b[0])
- b = b[1:]
- } else if len(b) >= 2 && b[1] < 128 {
- tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
- b = b[2:]
- } else {
- var n int
- tag, n = protowire.ConsumeVarint(b)
- if n < 0 {
- return out, errDecode
- }
- b = b[n:]
- }
- var num protowire.Number
- if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {
- return out, errors.New("invalid field number")
- } else {
- num = protowire.Number(n)
- }
- wtyp := protowire.Type(tag & 7)
-
- if wtyp == protowire.EndGroupType {
- if num != groupTag {
- return out, errors.New("mismatching end group marker")
- }
- groupTag = 0
- break
- }
-
- var f *coderFieldInfo
- if int(num) < len(mi.denseCoderFields) {
- f = mi.denseCoderFields[num]
- } else {
- f = mi.coderFields[num]
- }
- var n int
- err := errUnknown
- discardUnknown := false
- Field:
- switch {
- case f != nil:
- if f.funcs.unmarshal == nil {
- break
- }
- if f.isLazy && lazyDecode {
- switch {
- case lazyFields == nil || lazyFields[f] == lazyValidateOnly:
- // Attempt to validate this field and leave it for later lazy unmarshaling.
- o, valid := mi.skipField(b, f, wtyp, opts)
- switch valid {
- case ValidationValid:
- // Skip over the valid field and continue.
- err = nil
- presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)
- requiredMask |= f.validation.requiredBit
- if !o.initialized {
- initialized = false
- }
- n = o.n
- break Field
- case ValidationInvalid:
- return out, errors.New("invalid proto wire format")
- case ValidationWrongWireType:
- break Field
- case ValidationUnknown:
- if lazyFields == nil {
- lazyFields = make(map[*coderFieldInfo]lazyAction)
- }
- if presence.Present(f.presenceIndex) {
- // We were unable to determine if the field is valid or not,
- // and we've already skipped over at least one instance of this
- // field. Clear the presence bit (so if we stop decoding early,
- // we don't leave a partially-initialized field around) and flag
- // the field for unmarshaling before we return.
- presence.ClearPresent(f.presenceIndex)
- lazyFields[f] = lazyUnmarshalLater
- discardUnknown = true
- break Field
- } else {
- // We were unable to determine if the field is valid or not,
- // but this is the first time we've seen it. Flag it as needing
- // eager unmarshaling and fall through to the eager unmarshal case below.
- lazyFields[f] = lazyUnmarshalNow
- }
- }
- case lazyFields[f] == lazyUnmarshalLater:
- // This field will be unmarshaled in a separate pass below.
- // Skip over it here.
- discardUnknown = true
- break Field
- default:
- // Eagerly unmarshal the field.
- }
- }
- if f.isLazy && !lazyDecode && presence.Present(f.presenceIndex) {
- if p.Apply(f.offset).AtomicGetPointer().IsNil() {
- mi.lazyUnmarshal(p, f.num)
- }
- }
- var o unmarshalOutput
- o, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts)
- n = o.n
- if err != nil {
- break
- }
- requiredMask |= f.validation.requiredBit
- if f.funcs.isInit != nil && !o.initialized {
- initialized = false
- }
- if f.presenceIndex != noPresence {
- presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)
- }
- default:
- // Possible extension.
- if exts == nil && mi.extensionOffset.IsValid() {
- exts = p.Apply(mi.extensionOffset).Extensions()
- if *exts == nil {
- *exts = make(map[int32]ExtensionField)
- }
- }
- if exts == nil {
- break
- }
- var o unmarshalOutput
- o, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts)
- if err != nil {
- break
- }
- n = o.n
- if !o.initialized {
- initialized = false
- }
- }
- if err != nil {
- if err != errUnknown {
- return out, err
- }
- n = protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return out, errDecode
- }
- if !discardUnknown && !opts.DiscardUnknown() && mi.unknownOffset.IsValid() {
- u := mi.mutableUnknownBytes(p)
- *u = protowire.AppendTag(*u, num, wtyp)
- *u = append(*u, b[:n]...)
- }
- }
- b = b[n:]
- end := start - len(b)
- if lazyDecode && f != nil && f.isLazy {
- if num != lastNum {
- lazyIndex = append(lazyIndex, protolazy.IndexEntry{
- FieldNum: uint32(num),
- Start: uint32(pos),
- End: uint32(end),
- })
- } else {
- i := len(lazyIndex) - 1
- lazyIndex[i].End = uint32(end)
- lazyIndex[i].MultipleContiguous = true
- }
- }
- if num < lastNum {
- outOfOrder = true
- }
- pos = end
- lastNum = num
- }
- if groupTag != 0 {
- return out, errors.New("missing end group marker")
- }
- if lazyFields != nil {
- // Some fields failed validation, and now need to be unmarshaled.
- for f, action := range lazyFields {
- if action != lazyUnmarshalLater {
- continue
- }
- initialized = false
- if *lazy == nil {
- *lazy = &protolazy.XXX_lazyUnmarshalInfo{}
- }
- if err := mi.unmarshalField((*lazy).Buffer(), p.Apply(f.offset), f, *lazy, opts.flags); err != nil {
- return out, err
- }
- presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)
- }
- }
- if lazyDecode {
- if outOfOrder {
- sort.Slice(lazyIndex, func(i, j int) bool {
- return lazyIndex[i].FieldNum < lazyIndex[j].FieldNum ||
- (lazyIndex[i].FieldNum == lazyIndex[j].FieldNum &&
- lazyIndex[i].Start < lazyIndex[j].Start)
- })
- }
- if *lazy == nil {
- *lazy = &protolazy.XXX_lazyUnmarshalInfo{}
- }
-
- (*lazy).SetIndex(lazyIndex)
- }
- if mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) {
- initialized = false
- }
- if initialized {
- out.initialized = true
- }
- out.n = start - len(b)
- return out, nil
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go
deleted file mode 100644
index 81b2b1a76..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "strings"
- "sync"
-
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// legacyEnumName returns the name of enums used in legacy code.
-// It is neither the protobuf full name nor the qualified Go name,
-// but rather an odd hybrid of both.
-func legacyEnumName(ed protoreflect.EnumDescriptor) string {
- var protoPkg string
- enumName := string(ed.FullName())
- if fd := ed.ParentFile(); fd != nil {
- protoPkg = string(fd.Package())
- enumName = strings.TrimPrefix(enumName, protoPkg+".")
- }
- if protoPkg == "" {
- return strs.GoCamelCase(enumName)
- }
- return protoPkg + "." + strs.GoCamelCase(enumName)
-}
-
-// legacyWrapEnum wraps v as a protoreflect.Enum,
-// where v must be a int32 kind and not implement the v2 API already.
-func legacyWrapEnum(v reflect.Value) protoreflect.Enum {
- et := legacyLoadEnumType(v.Type())
- return et.New(protoreflect.EnumNumber(v.Int()))
-}
-
-var legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType
-
-// legacyLoadEnumType dynamically loads a protoreflect.EnumType for t,
-// where t must be an int32 kind and not implement the v2 API already.
-func legacyLoadEnumType(t reflect.Type) protoreflect.EnumType {
- // Fast-path: check if a EnumType is cached for this concrete type.
- if et, ok := legacyEnumTypeCache.Load(t); ok {
- return et.(protoreflect.EnumType)
- }
-
- // Slow-path: derive enum descriptor and initialize EnumType.
- var et protoreflect.EnumType
- ed := LegacyLoadEnumDesc(t)
- et = &legacyEnumType{
- desc: ed,
- goType: t,
- }
- if et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok {
- return et.(protoreflect.EnumType)
- }
- return et
-}
-
-type legacyEnumType struct {
- desc protoreflect.EnumDescriptor
- goType reflect.Type
- m sync.Map // map[protoreflect.EnumNumber]proto.Enum
-}
-
-func (t *legacyEnumType) New(n protoreflect.EnumNumber) protoreflect.Enum {
- if e, ok := t.m.Load(n); ok {
- return e.(protoreflect.Enum)
- }
- e := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType}
- t.m.Store(n, e)
- return e
-}
-func (t *legacyEnumType) Descriptor() protoreflect.EnumDescriptor {
- return t.desc
-}
-
-type legacyEnumWrapper struct {
- num protoreflect.EnumNumber
- pbTyp protoreflect.EnumType
- goTyp reflect.Type
-}
-
-func (e *legacyEnumWrapper) Descriptor() protoreflect.EnumDescriptor {
- return e.pbTyp.Descriptor()
-}
-func (e *legacyEnumWrapper) Type() protoreflect.EnumType {
- return e.pbTyp
-}
-func (e *legacyEnumWrapper) Number() protoreflect.EnumNumber {
- return e.num
-}
-func (e *legacyEnumWrapper) ProtoReflect() protoreflect.Enum {
- return e
-}
-func (e *legacyEnumWrapper) protoUnwrap() any {
- v := reflect.New(e.goTyp).Elem()
- v.SetInt(int64(e.num))
- return v.Interface()
-}
-
-var (
- _ protoreflect.Enum = (*legacyEnumWrapper)(nil)
- _ unwrapper = (*legacyEnumWrapper)(nil)
-)
-
-var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
-
-// LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type,
-// which must be an int32 kind and not implement the v2 API already.
-//
-// This is exported for testing purposes.
-func LegacyLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {
- // Fast-path: check if an EnumDescriptor is cached for this concrete type.
- if ed, ok := legacyEnumDescCache.Load(t); ok {
- return ed.(protoreflect.EnumDescriptor)
- }
-
- // Slow-path: initialize EnumDescriptor from the raw descriptor.
- ev := reflect.Zero(t).Interface()
- if _, ok := ev.(protoreflect.Enum); ok {
- panic(fmt.Sprintf("%v already implements proto.Enum", t))
- }
- edV1, ok := ev.(enumV1)
- if !ok {
- return aberrantLoadEnumDesc(t)
- }
- b, idxs := edV1.EnumDescriptor()
-
- var ed protoreflect.EnumDescriptor
- if len(idxs) == 1 {
- ed = legacyLoadFileDesc(b).Enums().Get(idxs[0])
- } else {
- md := legacyLoadFileDesc(b).Messages().Get(idxs[0])
- for _, i := range idxs[1 : len(idxs)-1] {
- md = md.Messages().Get(i)
- }
- ed = md.Enums().Get(idxs[len(idxs)-1])
- }
- if ed, ok := legacyEnumDescCache.LoadOrStore(t, ed); ok {
- return ed.(protoreflect.EnumDescriptor)
- }
- return ed
-}
-
-var aberrantEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor
-
-// aberrantLoadEnumDesc returns an EnumDescriptor derived from the Go type,
-// which must not implement protoreflect.Enum or enumV1.
-//
-// If the type does not implement enumV1, then there is no reliable
-// way to derive the original protobuf type information.
-// We are unable to use the global enum registry since it is
-// unfortunately keyed by the protobuf full name, which we also do not know.
-// Thus, this produces some bogus enum descriptor based on the Go type name.
-func aberrantLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {
- // Fast-path: check if an EnumDescriptor is cached for this concrete type.
- if ed, ok := aberrantEnumDescCache.Load(t); ok {
- return ed.(protoreflect.EnumDescriptor)
- }
-
- // Slow-path: construct a bogus, but unique EnumDescriptor.
- ed := &filedesc.Enum{L2: new(filedesc.EnumL2)}
- ed.L0.FullName = AberrantDeriveFullName(t) // e.g., github_com.user.repo.MyEnum
- ed.L0.ParentFile = filedesc.SurrogateProto3
- ed.L1.EditionFeatures = ed.L0.ParentFile.L1.EditionFeatures
- ed.L2.Values.List = append(ed.L2.Values.List, filedesc.EnumValue{})
-
- // TODO: Use the presence of a UnmarshalJSON method to determine proto2?
-
- vd := &ed.L2.Values.List[0]
- vd.L0.FullName = ed.L0.FullName + "_UNKNOWN" // e.g., github_com.user.repo.MyEnum_UNKNOWN
- vd.L0.ParentFile = ed.L0.ParentFile
- vd.L0.Parent = ed
-
- // TODO: We could use the String method to obtain some enum value names by
- // starting at 0 and print the enum until it produces invalid identifiers.
- // An exhaustive query is clearly impractical, but can be best-effort.
-
- if ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok {
- return ed.(protoreflect.EnumDescriptor)
- }
- return ed
-}
-
-// AberrantDeriveFullName derives a fully qualified protobuf name for the given Go type
-// The provided name is not guaranteed to be stable nor universally unique.
-// It should be sufficiently unique within a program.
-//
-// This is exported for testing purposes.
-func AberrantDeriveFullName(t reflect.Type) protoreflect.FullName {
- sanitize := func(r rune) rune {
- switch {
- case r == '/':
- return '.'
- case 'a' <= r && r <= 'z', 'A' <= r && r <= 'Z', '0' <= r && r <= '9':
- return r
- default:
- return '_'
- }
- }
- prefix := strings.Map(sanitize, t.PkgPath())
- suffix := strings.Map(sanitize, t.Name())
- if suffix == "" {
- suffix = fmt.Sprintf("UnknownX%X", reflect.ValueOf(t).Pointer())
- }
-
- ss := append(strings.Split(prefix, "."), suffix)
- for i, s := range ss {
- if s == "" || ('0' <= s[0] && s[0] <= '9') {
- ss[i] = "x" + s
- }
- }
- return protoreflect.FullName(strings.Join(ss, "."))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go
deleted file mode 100644
index 9b64ad5bb..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "encoding/binary"
- "encoding/json"
- "hash/crc32"
- "math"
- "reflect"
-
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// These functions exist to support exported APIs in generated protobufs.
-// While these are deprecated, they cannot be removed for compatibility reasons.
-
-// LegacyEnumName returns the name of enums used in legacy code.
-func (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string {
- return legacyEnumName(ed)
-}
-
-// LegacyMessageTypeOf returns the protoreflect.MessageType for m,
-// with name used as the message name if necessary.
-func (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType {
- if mv := (Export{}).protoMessageV2Of(m); mv != nil {
- return mv.ProtoReflect().Type()
- }
- return legacyLoadMessageType(reflect.TypeOf(m), name)
-}
-
-// UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input.
-// The input can either be a string representing the enum value by name,
-// or a number representing the enum number itself.
-func (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error) {
- if b[0] == '"' {
- var name protoreflect.Name
- if err := json.Unmarshal(b, &name); err != nil {
- return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
- }
- ev := ed.Values().ByName(name)
- if ev == nil {
- return 0, errors.New("invalid value for enum %v: %s", ed.FullName(), name)
- }
- return ev.Number(), nil
- } else {
- var num protoreflect.EnumNumber
- if err := json.Unmarshal(b, &num); err != nil {
- return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b)
- }
- return num, nil
- }
-}
-
-// CompressGZIP compresses the input as a GZIP-encoded file.
-// The current implementation does no compression.
-func (Export) CompressGZIP(in []byte) (out []byte) {
- // RFC 1952, section 2.3.1.
- var gzipHeader = [10]byte{0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}
-
- // RFC 1951, section 3.2.4.
- var blockHeader [5]byte
- const maxBlockSize = math.MaxUint16
- numBlocks := 1 + len(in)/maxBlockSize
-
- // RFC 1952, section 2.3.1.
- var gzipFooter [8]byte
- binary.LittleEndian.PutUint32(gzipFooter[0:4], crc32.ChecksumIEEE(in))
- binary.LittleEndian.PutUint32(gzipFooter[4:8], uint32(len(in)))
-
- // Encode the input without compression using raw DEFLATE blocks.
- out = make([]byte, 0, len(gzipHeader)+len(blockHeader)*numBlocks+len(in)+len(gzipFooter))
- out = append(out, gzipHeader[:]...)
- for blockHeader[0] == 0 {
- blockSize := maxBlockSize
- if blockSize > len(in) {
- blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3.
- blockSize = len(in)
- }
- binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize))
- binary.LittleEndian.PutUint16(blockHeader[3:5], ^uint16(blockSize))
- out = append(out, blockHeader[:]...)
- out = append(out, in[:blockSize]...)
- in = in[blockSize:]
- }
- out = append(out, gzipFooter[:]...)
- return out
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
deleted file mode 100644
index b6849d669..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "reflect"
-
- "google.golang.org/protobuf/internal/descopts"
- "google.golang.org/protobuf/internal/encoding/messageset"
- ptag "google.golang.org/protobuf/internal/encoding/tag"
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-func (xi *ExtensionInfo) initToLegacy() {
- xd := xi.desc
- var parent protoiface.MessageV1
- messageName := xd.ContainingMessage().FullName()
- if mt, _ := protoregistry.GlobalTypes.FindMessageByName(messageName); mt != nil {
- // Create a new parent message and unwrap it if possible.
- mv := mt.New().Interface()
- t := reflect.TypeOf(mv)
- if mv, ok := mv.(unwrapper); ok {
- t = reflect.TypeOf(mv.protoUnwrap())
- }
-
- // Check whether the message implements the legacy v1 Message interface.
- mz := reflect.Zero(t).Interface()
- if mz, ok := mz.(protoiface.MessageV1); ok {
- parent = mz
- }
- }
-
- // Determine the v1 extension type, which is unfortunately not the same as
- // the v2 ExtensionType.GoType.
- extType := xi.goType
- switch extType.Kind() {
- case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:
- extType = reflect.PtrTo(extType) // T -> *T for singular scalar fields
- }
-
- // Reconstruct the legacy enum full name.
- var enumName string
- if xd.Kind() == protoreflect.EnumKind {
- enumName = legacyEnumName(xd.Enum())
- }
-
- // Derive the proto file that the extension was declared within.
- var filename string
- if fd := xd.ParentFile(); fd != nil {
- filename = fd.Path()
- }
-
- // For MessageSet extensions, the name used is the parent message.
- name := xd.FullName()
- if messageset.IsMessageSetExtension(xd) {
- name = name.Parent()
- }
-
- xi.ExtendedType = parent
- xi.ExtensionType = reflect.Zero(extType).Interface()
- xi.Field = int32(xd.Number())
- xi.Name = string(name)
- xi.Tag = ptag.Marshal(xd, enumName)
- xi.Filename = filename
-}
-
-// initFromLegacy initializes an ExtensionInfo from
-// the contents of the deprecated exported fields of the type.
-func (xi *ExtensionInfo) initFromLegacy() {
- // The v1 API returns "type incomplete" descriptors where only the
- // field number is specified. In such a case, use a placeholder.
- if xi.ExtendedType == nil || xi.ExtensionType == nil {
- xd := placeholderExtension{
- name: protoreflect.FullName(xi.Name),
- number: protoreflect.FieldNumber(xi.Field),
- }
- xi.desc = extensionTypeDescriptor{xd, xi}
- return
- }
-
- // Resolve enum or message dependencies.
- var ed protoreflect.EnumDescriptor
- var md protoreflect.MessageDescriptor
- t := reflect.TypeOf(xi.ExtensionType)
- isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct
- isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
- if isOptional || isRepeated {
- t = t.Elem()
- }
- switch v := reflect.Zero(t).Interface().(type) {
- case protoreflect.Enum:
- ed = v.Descriptor()
- case enumV1:
- ed = LegacyLoadEnumDesc(t)
- case protoreflect.ProtoMessage:
- md = v.ProtoReflect().Descriptor()
- case messageV1:
- md = LegacyLoadMessageDesc(t)
- }
-
- // Derive basic field information from the struct tag.
- var evs protoreflect.EnumValueDescriptors
- if ed != nil {
- evs = ed.Values()
- }
- fd := ptag.Unmarshal(xi.Tag, t, evs).(*filedesc.Field)
-
- // Construct a v2 ExtensionType.
- xd := &filedesc.Extension{L2: new(filedesc.ExtensionL2)}
- xd.L0.ParentFile = filedesc.SurrogateProto2
- xd.L0.FullName = protoreflect.FullName(xi.Name)
- xd.L1.Number = protoreflect.FieldNumber(xi.Field)
- xd.L1.Cardinality = fd.L1.Cardinality
- xd.L1.Kind = fd.L1.Kind
- xd.L1.EditionFeatures = fd.L1.EditionFeatures
- xd.L2.Default = fd.L1.Default
- xd.L1.Extendee = Export{}.MessageDescriptorOf(xi.ExtendedType)
- xd.L2.Enum = ed
- xd.L2.Message = md
-
- // Derive real extension field name for MessageSets.
- if messageset.IsMessageSet(xd.L1.Extendee) && md.FullName() == xd.L0.FullName {
- xd.L0.FullName = xd.L0.FullName.Append(messageset.ExtensionName)
- }
-
- tt := reflect.TypeOf(xi.ExtensionType)
- if isOptional {
- tt = tt.Elem()
- }
- xi.goType = tt
- xi.desc = extensionTypeDescriptor{xd, xi}
-}
-
-type placeholderExtension struct {
- name protoreflect.FullName
- number protoreflect.FieldNumber
-}
-
-func (x placeholderExtension) ParentFile() protoreflect.FileDescriptor { return nil }
-func (x placeholderExtension) Parent() protoreflect.Descriptor { return nil }
-func (x placeholderExtension) Index() int { return 0 }
-func (x placeholderExtension) Syntax() protoreflect.Syntax { return 0 }
-func (x placeholderExtension) Name() protoreflect.Name { return x.name.Name() }
-func (x placeholderExtension) FullName() protoreflect.FullName { return x.name }
-func (x placeholderExtension) IsPlaceholder() bool { return true }
-func (x placeholderExtension) Options() protoreflect.ProtoMessage { return descopts.Field }
-func (x placeholderExtension) Number() protoreflect.FieldNumber { return x.number }
-func (x placeholderExtension) Cardinality() protoreflect.Cardinality { return 0 }
-func (x placeholderExtension) Kind() protoreflect.Kind { return 0 }
-func (x placeholderExtension) HasJSONName() bool { return false }
-func (x placeholderExtension) JSONName() string { return "[" + string(x.name) + "]" }
-func (x placeholderExtension) TextName() string { return "[" + string(x.name) + "]" }
-func (x placeholderExtension) HasPresence() bool { return false }
-func (x placeholderExtension) HasOptionalKeyword() bool { return false }
-func (x placeholderExtension) IsExtension() bool { return true }
-func (x placeholderExtension) IsWeak() bool { return false }
-func (x placeholderExtension) IsLazy() bool { return false }
-func (x placeholderExtension) IsPacked() bool { return false }
-func (x placeholderExtension) IsList() bool { return false }
-func (x placeholderExtension) IsMap() bool { return false }
-func (x placeholderExtension) MapKey() protoreflect.FieldDescriptor { return nil }
-func (x placeholderExtension) MapValue() protoreflect.FieldDescriptor { return nil }
-func (x placeholderExtension) HasDefault() bool { return false }
-func (x placeholderExtension) Default() protoreflect.Value { return protoreflect.Value{} }
-func (x placeholderExtension) DefaultEnumValue() protoreflect.EnumValueDescriptor { return nil }
-func (x placeholderExtension) ContainingOneof() protoreflect.OneofDescriptor { return nil }
-func (x placeholderExtension) ContainingMessage() protoreflect.MessageDescriptor { return nil }
-func (x placeholderExtension) Enum() protoreflect.EnumDescriptor { return nil }
-func (x placeholderExtension) Message() protoreflect.MessageDescriptor { return nil }
-func (x placeholderExtension) ProtoType(protoreflect.FieldDescriptor) { return }
-func (x placeholderExtension) ProtoInternal(pragma.DoNotImplement) { return }
diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go
deleted file mode 100644
index b649f1124..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "bytes"
- "compress/gzip"
- "io"
- "sync"
-
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// Every enum and message type generated by protoc-gen-go since commit 2fc053c5
-// on February 25th, 2016 has had a method to get the raw descriptor.
-// Types that were not generated by protoc-gen-go or were generated prior
-// to that version are not supported.
-//
-// The []byte returned is the encoded form of a FileDescriptorProto message
-// compressed using GZIP. The []int is the path from the top-level file
-// to the specific message or enum declaration.
-type (
- enumV1 interface {
- EnumDescriptor() ([]byte, []int)
- }
- messageV1 interface {
- Descriptor() ([]byte, []int)
- }
-)
-
-var legacyFileDescCache sync.Map // map[*byte]protoreflect.FileDescriptor
-
-// legacyLoadFileDesc unmarshals b as a compressed FileDescriptorProto message.
-//
-// This assumes that b is immutable and that b does not refer to part of a
-// concatenated series of GZIP files (which would require shenanigans that
-// rely on the concatenation properties of both protobufs and GZIP).
-// File descriptors generated by protoc-gen-go do not rely on that property.
-func legacyLoadFileDesc(b []byte) protoreflect.FileDescriptor {
- // Fast-path: check whether we already have a cached file descriptor.
- if fd, ok := legacyFileDescCache.Load(&b[0]); ok {
- return fd.(protoreflect.FileDescriptor)
- }
-
- // Slow-path: decompress and unmarshal the file descriptor proto.
- zr, err := gzip.NewReader(bytes.NewReader(b))
- if err != nil {
- panic(err)
- }
- b2, err := io.ReadAll(zr)
- if err != nil {
- panic(err)
- }
-
- fd := filedesc.Builder{
- RawDescriptor: b2,
- FileRegistry: resolverOnly{protoregistry.GlobalFiles}, // do not register back to global registry
- }.Build().File
- if fd, ok := legacyFileDescCache.LoadOrStore(&b[0], fd); ok {
- return fd.(protoreflect.FileDescriptor)
- }
- return fd
-}
-
-type resolverOnly struct {
- reg *protoregistry.Files
-}
-
-func (r resolverOnly) FindFileByPath(path string) (protoreflect.FileDescriptor, error) {
- return r.reg.FindFileByPath(path)
-}
-func (r resolverOnly) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) {
- return r.reg.FindDescriptorByName(name)
-}
-func (resolverOnly) RegisterFile(protoreflect.FileDescriptor) error {
- return nil
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go
deleted file mode 100644
index bf0b6049b..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go
+++ /dev/null
@@ -1,572 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "strings"
- "sync"
-
- "google.golang.org/protobuf/internal/descopts"
- ptag "google.golang.org/protobuf/internal/encoding/tag"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// legacyWrapMessage wraps v as a protoreflect.Message,
-// where v must be a *struct kind and not implement the v2 API already.
-func legacyWrapMessage(v reflect.Value) protoreflect.Message {
- t := v.Type()
- if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
- return aberrantMessage{v: v}
- }
- mt := legacyLoadMessageInfo(t, "")
- return mt.MessageOf(v.Interface())
-}
-
-// legacyLoadMessageType dynamically loads a protoreflect.Type for t,
-// where t must be not implement the v2 API already.
-// The provided name is used if it cannot be determined from the message.
-func legacyLoadMessageType(t reflect.Type, name protoreflect.FullName) protoreflect.MessageType {
- if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
- return aberrantMessageType{t}
- }
- return legacyLoadMessageInfo(t, name)
-}
-
-var legacyMessageTypeCache sync.Map // map[reflect.Type]*MessageInfo
-
-// legacyLoadMessageInfo dynamically loads a *MessageInfo for t,
-// where t must be a *struct kind and not implement the v2 API already.
-// The provided name is used if it cannot be determined from the message.
-func legacyLoadMessageInfo(t reflect.Type, name protoreflect.FullName) *MessageInfo {
- // Fast-path: check if a MessageInfo is cached for this concrete type.
- if mt, ok := legacyMessageTypeCache.Load(t); ok {
- return mt.(*MessageInfo)
- }
-
- // Slow-path: derive message descriptor and initialize MessageInfo.
- mi := &MessageInfo{
- Desc: legacyLoadMessageDesc(t, name),
- GoReflectType: t,
- }
-
- var hasMarshal, hasUnmarshal bool
- v := reflect.Zero(t).Interface()
- if _, hasMarshal = v.(legacyMarshaler); hasMarshal {
- mi.methods.Marshal = legacyMarshal
-
- // We have no way to tell whether the type's Marshal method
- // supports deterministic serialization or not, but this
- // preserves the v1 implementation's behavior of always
- // calling Marshal methods when present.
- mi.methods.Flags |= protoiface.SupportMarshalDeterministic
- }
- if _, hasUnmarshal = v.(legacyUnmarshaler); hasUnmarshal {
- mi.methods.Unmarshal = legacyUnmarshal
- }
- if _, hasMerge := v.(legacyMerger); hasMerge || (hasMarshal && hasUnmarshal) {
- mi.methods.Merge = legacyMerge
- }
-
- if mi, ok := legacyMessageTypeCache.LoadOrStore(t, mi); ok {
- return mi.(*MessageInfo)
- }
- return mi
-}
-
-var legacyMessageDescCache sync.Map // map[reflect.Type]protoreflect.MessageDescriptor
-
-// LegacyLoadMessageDesc returns an MessageDescriptor derived from the Go type,
-// which should be a *struct kind and must not implement the v2 API already.
-//
-// This is exported for testing purposes.
-func LegacyLoadMessageDesc(t reflect.Type) protoreflect.MessageDescriptor {
- return legacyLoadMessageDesc(t, "")
-}
-func legacyLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {
- // Fast-path: check if a MessageDescriptor is cached for this concrete type.
- if mi, ok := legacyMessageDescCache.Load(t); ok {
- return mi.(protoreflect.MessageDescriptor)
- }
-
- // Slow-path: initialize MessageDescriptor from the raw descriptor.
- mv := reflect.Zero(t).Interface()
- if _, ok := mv.(protoreflect.ProtoMessage); ok {
- panic(fmt.Sprintf("%v already implements proto.Message", t))
- }
- mdV1, ok := mv.(messageV1)
- if !ok {
- return aberrantLoadMessageDesc(t, name)
- }
-
- // If this is a dynamic message type where there isn't a 1-1 mapping between
- // Go and protobuf types, calling the Descriptor method on the zero value of
- // the message type isn't likely to work. If it panics, swallow the panic and
- // continue as if the Descriptor method wasn't present.
- b, idxs := func() ([]byte, []int) {
- defer func() {
- recover()
- }()
- return mdV1.Descriptor()
- }()
- if b == nil {
- return aberrantLoadMessageDesc(t, name)
- }
-
- // If the Go type has no fields, then this might be a proto3 empty message
- // from before the size cache was added. If there are any fields, check to
- // see that at least one of them looks like something we generated.
- if t.Elem().Kind() == reflect.Struct {
- if nfield := t.Elem().NumField(); nfield > 0 {
- hasProtoField := false
- for i := 0; i < nfield; i++ {
- f := t.Elem().Field(i)
- if f.Tag.Get("protobuf") != "" || f.Tag.Get("protobuf_oneof") != "" || strings.HasPrefix(f.Name, "XXX_") {
- hasProtoField = true
- break
- }
- }
- if !hasProtoField {
- return aberrantLoadMessageDesc(t, name)
- }
- }
- }
-
- md := legacyLoadFileDesc(b).Messages().Get(idxs[0])
- for _, i := range idxs[1:] {
- md = md.Messages().Get(i)
- }
- if name != "" && md.FullName() != name {
- panic(fmt.Sprintf("mismatching message name: got %v, want %v", md.FullName(), name))
- }
- if md, ok := legacyMessageDescCache.LoadOrStore(t, md); ok {
- return md.(protoreflect.MessageDescriptor)
- }
- return md
-}
-
-var (
- aberrantMessageDescLock sync.Mutex
- aberrantMessageDescCache map[reflect.Type]protoreflect.MessageDescriptor
-)
-
-// aberrantLoadMessageDesc returns an MessageDescriptor derived from the Go type,
-// which must not implement protoreflect.ProtoMessage or messageV1.
-//
-// This is a best-effort derivation of the message descriptor using the protobuf
-// tags on the struct fields.
-func aberrantLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {
- aberrantMessageDescLock.Lock()
- defer aberrantMessageDescLock.Unlock()
- if aberrantMessageDescCache == nil {
- aberrantMessageDescCache = make(map[reflect.Type]protoreflect.MessageDescriptor)
- }
- return aberrantLoadMessageDescReentrant(t, name)
-}
-func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {
- // Fast-path: check if an MessageDescriptor is cached for this concrete type.
- if md, ok := aberrantMessageDescCache[t]; ok {
- return md
- }
-
- // Slow-path: construct a descriptor from the Go struct type (best-effort).
- // Cache the MessageDescriptor early on so that we can resolve internal
- // cyclic references.
- md := &filedesc.Message{L2: new(filedesc.MessageL2)}
- md.L0.FullName = aberrantDeriveMessageName(t, name)
- md.L0.ParentFile = filedesc.SurrogateProto2
- aberrantMessageDescCache[t] = md
-
- if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {
- return md
- }
-
- // Try to determine if the message is using proto3 by checking scalars.
- for i := 0; i < t.Elem().NumField(); i++ {
- f := t.Elem().Field(i)
- if tag := f.Tag.Get("protobuf"); tag != "" {
- switch f.Type.Kind() {
- case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:
- md.L0.ParentFile = filedesc.SurrogateProto3
- }
- for _, s := range strings.Split(tag, ",") {
- if s == "proto3" {
- md.L0.ParentFile = filedesc.SurrogateProto3
- }
- }
- }
- }
-
- md.L1.EditionFeatures = md.L0.ParentFile.L1.EditionFeatures
- // Obtain a list of oneof wrapper types.
- var oneofWrappers []reflect.Type
- methods := make([]reflect.Method, 0, 2)
- if m, ok := t.MethodByName("XXX_OneofFuncs"); ok {
- methods = append(methods, m)
- }
- if m, ok := t.MethodByName("XXX_OneofWrappers"); ok {
- methods = append(methods, m)
- }
- for _, fn := range methods {
- for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
- if vs, ok := v.Interface().([]any); ok {
- for _, v := range vs {
- oneofWrappers = append(oneofWrappers, reflect.TypeOf(v))
- }
- }
- }
- }
-
- // Obtain a list of the extension ranges.
- if fn, ok := t.MethodByName("ExtensionRangeArray"); ok {
- vs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0]
- for i := 0; i < vs.Len(); i++ {
- v := vs.Index(i)
- md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, [2]protoreflect.FieldNumber{
- protoreflect.FieldNumber(v.FieldByName("Start").Int()),
- protoreflect.FieldNumber(v.FieldByName("End").Int() + 1),
- })
- md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, nil)
- }
- }
-
- // Derive the message fields by inspecting the struct fields.
- for i := 0; i < t.Elem().NumField(); i++ {
- f := t.Elem().Field(i)
- if tag := f.Tag.Get("protobuf"); tag != "" {
- tagKey := f.Tag.Get("protobuf_key")
- tagVal := f.Tag.Get("protobuf_val")
- aberrantAppendField(md, f.Type, tag, tagKey, tagVal)
- }
- if tag := f.Tag.Get("protobuf_oneof"); tag != "" {
- n := len(md.L2.Oneofs.List)
- md.L2.Oneofs.List = append(md.L2.Oneofs.List, filedesc.Oneof{})
- od := &md.L2.Oneofs.List[n]
- od.L0.FullName = md.FullName().Append(protoreflect.Name(tag))
- od.L0.ParentFile = md.L0.ParentFile
- od.L1.EditionFeatures = md.L1.EditionFeatures
- od.L0.Parent = md
- od.L0.Index = n
-
- for _, t := range oneofWrappers {
- if t.Implements(f.Type) {
- f := t.Elem().Field(0)
- if tag := f.Tag.Get("protobuf"); tag != "" {
- aberrantAppendField(md, f.Type, tag, "", "")
- fd := &md.L2.Fields.List[len(md.L2.Fields.List)-1]
- fd.L1.ContainingOneof = od
- fd.L1.EditionFeatures = od.L1.EditionFeatures
- od.L1.Fields.List = append(od.L1.Fields.List, fd)
- }
- }
- }
- }
- }
-
- return md
-}
-
-func aberrantDeriveMessageName(t reflect.Type, name protoreflect.FullName) protoreflect.FullName {
- if name.IsValid() {
- return name
- }
- func() {
- defer func() { recover() }() // swallow possible nil panics
- if m, ok := reflect.Zero(t).Interface().(interface{ XXX_MessageName() string }); ok {
- name = protoreflect.FullName(m.XXX_MessageName())
- }
- }()
- if name.IsValid() {
- return name
- }
- if t.Kind() == reflect.Ptr {
- t = t.Elem()
- }
- return AberrantDeriveFullName(t)
-}
-
-func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey, tagVal string) {
- t := goType
- isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct
- isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
- if isOptional || isRepeated {
- t = t.Elem()
- }
- fd := ptag.Unmarshal(tag, t, placeholderEnumValues{}).(*filedesc.Field)
-
- // Append field descriptor to the message.
- n := len(md.L2.Fields.List)
- md.L2.Fields.List = append(md.L2.Fields.List, *fd)
- fd = &md.L2.Fields.List[n]
- fd.L0.FullName = md.FullName().Append(fd.Name())
- fd.L0.ParentFile = md.L0.ParentFile
- fd.L0.Parent = md
- fd.L0.Index = n
-
- if fd.L1.IsWeak || fd.L1.EditionFeatures.IsPacked {
- fd.L1.Options = func() protoreflect.ProtoMessage {
- opts := descopts.Field.ProtoReflect().New()
- if fd.L1.IsWeak {
- opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true))
- }
- if fd.L1.EditionFeatures.IsPacked {
- opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.EditionFeatures.IsPacked))
- }
- return opts.Interface()
- }
- }
-
- // Populate Enum and Message.
- if fd.Enum() == nil && fd.Kind() == protoreflect.EnumKind {
- switch v := reflect.Zero(t).Interface().(type) {
- case protoreflect.Enum:
- fd.L1.Enum = v.Descriptor()
- default:
- fd.L1.Enum = LegacyLoadEnumDesc(t)
- }
- }
- if fd.Message() == nil && (fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind) {
- switch v := reflect.Zero(t).Interface().(type) {
- case protoreflect.ProtoMessage:
- fd.L1.Message = v.ProtoReflect().Descriptor()
- case messageV1:
- fd.L1.Message = LegacyLoadMessageDesc(t)
- default:
- if t.Kind() == reflect.Map {
- n := len(md.L1.Messages.List)
- md.L1.Messages.List = append(md.L1.Messages.List, filedesc.Message{L2: new(filedesc.MessageL2)})
- md2 := &md.L1.Messages.List[n]
- md2.L0.FullName = md.FullName().Append(protoreflect.Name(strs.MapEntryName(string(fd.Name()))))
- md2.L0.ParentFile = md.L0.ParentFile
- md2.L0.Parent = md
- md2.L0.Index = n
- md2.L1.EditionFeatures = md.L1.EditionFeatures
-
- md2.L1.IsMapEntry = true
- md2.L2.Options = func() protoreflect.ProtoMessage {
- opts := descopts.Message.ProtoReflect().New()
- opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOfBool(true))
- return opts.Interface()
- }
-
- aberrantAppendField(md2, t.Key(), tagKey, "", "")
- aberrantAppendField(md2, t.Elem(), tagVal, "", "")
-
- fd.L1.Message = md2
- break
- }
- fd.L1.Message = aberrantLoadMessageDescReentrant(t, "")
- }
- }
-}
-
-type placeholderEnumValues struct {
- protoreflect.EnumValueDescriptors
-}
-
-func (placeholderEnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor {
- return filedesc.PlaceholderEnumValue(protoreflect.FullName(fmt.Sprintf("UNKNOWN_%d", n)))
-}
-
-// legacyMarshaler is the proto.Marshaler interface superseded by protoiface.Methoder.
-type legacyMarshaler interface {
- Marshal() ([]byte, error)
-}
-
-// legacyUnmarshaler is the proto.Unmarshaler interface superseded by protoiface.Methoder.
-type legacyUnmarshaler interface {
- Unmarshal([]byte) error
-}
-
-// legacyMerger is the proto.Merger interface superseded by protoiface.Methoder.
-type legacyMerger interface {
- Merge(protoiface.MessageV1)
-}
-
-var aberrantProtoMethods = &protoiface.Methods{
- Marshal: legacyMarshal,
- Unmarshal: legacyUnmarshal,
- Merge: legacyMerge,
-
- // We have no way to tell whether the type's Marshal method
- // supports deterministic serialization or not, but this
- // preserves the v1 implementation's behavior of always
- // calling Marshal methods when present.
- Flags: protoiface.SupportMarshalDeterministic,
-}
-
-func legacyMarshal(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
- v := in.Message.(unwrapper).protoUnwrap()
- marshaler, ok := v.(legacyMarshaler)
- if !ok {
- return protoiface.MarshalOutput{}, errors.New("%T does not implement Marshal", v)
- }
- out, err := marshaler.Marshal()
- if in.Buf != nil {
- out = append(in.Buf, out...)
- }
- return protoiface.MarshalOutput{
- Buf: out,
- }, err
-}
-
-func legacyUnmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
- v := in.Message.(unwrapper).protoUnwrap()
- unmarshaler, ok := v.(legacyUnmarshaler)
- if !ok {
- return protoiface.UnmarshalOutput{}, errors.New("%T does not implement Unmarshal", v)
- }
- return protoiface.UnmarshalOutput{}, unmarshaler.Unmarshal(in.Buf)
-}
-
-func legacyMerge(in protoiface.MergeInput) protoiface.MergeOutput {
- // Check whether this supports the legacy merger.
- dstv := in.Destination.(unwrapper).protoUnwrap()
- merger, ok := dstv.(legacyMerger)
- if ok {
- merger.Merge(Export{}.ProtoMessageV1Of(in.Source))
- return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
- }
-
- // If legacy merger is unavailable, implement merge in terms of
- // a marshal and unmarshal operation.
- srcv := in.Source.(unwrapper).protoUnwrap()
- marshaler, ok := srcv.(legacyMarshaler)
- if !ok {
- return protoiface.MergeOutput{}
- }
- dstv = in.Destination.(unwrapper).protoUnwrap()
- unmarshaler, ok := dstv.(legacyUnmarshaler)
- if !ok {
- return protoiface.MergeOutput{}
- }
- if !in.Source.IsValid() {
- // Legacy Marshal methods may not function on nil messages.
- // Check for a typed nil source only after we confirm that
- // legacy Marshal/Unmarshal methods are present, for
- // consistency.
- return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
- }
- b, err := marshaler.Marshal()
- if err != nil {
- return protoiface.MergeOutput{}
- }
- err = unmarshaler.Unmarshal(b)
- if err != nil {
- return protoiface.MergeOutput{}
- }
- return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
-}
-
-// aberrantMessageType implements MessageType for all types other than pointer-to-struct.
-type aberrantMessageType struct {
- t reflect.Type
-}
-
-func (mt aberrantMessageType) New() protoreflect.Message {
- if mt.t.Kind() == reflect.Ptr {
- return aberrantMessage{reflect.New(mt.t.Elem())}
- }
- return aberrantMessage{reflect.Zero(mt.t)}
-}
-func (mt aberrantMessageType) Zero() protoreflect.Message {
- return aberrantMessage{reflect.Zero(mt.t)}
-}
-func (mt aberrantMessageType) GoType() reflect.Type {
- return mt.t
-}
-func (mt aberrantMessageType) Descriptor() protoreflect.MessageDescriptor {
- return LegacyLoadMessageDesc(mt.t)
-}
-
-// aberrantMessage implements Message for all types other than pointer-to-struct.
-//
-// When the underlying type implements legacyMarshaler or legacyUnmarshaler,
-// the aberrant Message can be marshaled or unmarshaled. Otherwise, there is
-// not much that can be done with values of this type.
-type aberrantMessage struct {
- v reflect.Value
-}
-
-// Reset implements the v1 proto.Message.Reset method.
-func (m aberrantMessage) Reset() {
- if mr, ok := m.v.Interface().(interface{ Reset() }); ok {
- mr.Reset()
- return
- }
- if m.v.Kind() == reflect.Ptr && !m.v.IsNil() {
- m.v.Elem().Set(reflect.Zero(m.v.Type().Elem()))
- }
-}
-
-func (m aberrantMessage) ProtoReflect() protoreflect.Message {
- return m
-}
-
-func (m aberrantMessage) Descriptor() protoreflect.MessageDescriptor {
- return LegacyLoadMessageDesc(m.v.Type())
-}
-func (m aberrantMessage) Type() protoreflect.MessageType {
- return aberrantMessageType{m.v.Type()}
-}
-func (m aberrantMessage) New() protoreflect.Message {
- if m.v.Type().Kind() == reflect.Ptr {
- return aberrantMessage{reflect.New(m.v.Type().Elem())}
- }
- return aberrantMessage{reflect.Zero(m.v.Type())}
-}
-func (m aberrantMessage) Interface() protoreflect.ProtoMessage {
- return m
-}
-func (m aberrantMessage) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- return
-}
-func (m aberrantMessage) Has(protoreflect.FieldDescriptor) bool {
- return false
-}
-func (m aberrantMessage) Clear(protoreflect.FieldDescriptor) {
- panic("invalid Message.Clear on " + string(m.Descriptor().FullName()))
-}
-func (m aberrantMessage) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
- if fd.Default().IsValid() {
- return fd.Default()
- }
- panic("invalid Message.Get on " + string(m.Descriptor().FullName()))
-}
-func (m aberrantMessage) Set(protoreflect.FieldDescriptor, protoreflect.Value) {
- panic("invalid Message.Set on " + string(m.Descriptor().FullName()))
-}
-func (m aberrantMessage) Mutable(protoreflect.FieldDescriptor) protoreflect.Value {
- panic("invalid Message.Mutable on " + string(m.Descriptor().FullName()))
-}
-func (m aberrantMessage) NewField(protoreflect.FieldDescriptor) protoreflect.Value {
- panic("invalid Message.NewField on " + string(m.Descriptor().FullName()))
-}
-func (m aberrantMessage) WhichOneof(protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
- panic("invalid Message.WhichOneof descriptor on " + string(m.Descriptor().FullName()))
-}
-func (m aberrantMessage) GetUnknown() protoreflect.RawFields {
- return nil
-}
-func (m aberrantMessage) SetUnknown(protoreflect.RawFields) {
- // SetUnknown discards its input on messages which don't support unknown field storage.
-}
-func (m aberrantMessage) IsValid() bool {
- if m.v.Kind() == reflect.Ptr {
- return !m.v.IsNil()
- }
- return false
-}
-func (m aberrantMessage) ProtoMethods() *protoiface.Methods {
- return aberrantProtoMethods
-}
-func (m aberrantMessage) protoUnwrap() any {
- return m.v.Interface()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge.go b/vendor/google.golang.org/protobuf/internal/impl/merge.go
deleted file mode 100644
index 8ffdce67d..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/merge.go
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-type mergeOptions struct{}
-
-func (o mergeOptions) Merge(dst, src proto.Message) {
- proto.Merge(dst, src)
-}
-
-// merge is protoreflect.Methods.Merge.
-func (mi *MessageInfo) merge(in protoiface.MergeInput) protoiface.MergeOutput {
- dp, ok := mi.getPointer(in.Destination)
- if !ok {
- return protoiface.MergeOutput{}
- }
- sp, ok := mi.getPointer(in.Source)
- if !ok {
- return protoiface.MergeOutput{}
- }
- mi.mergePointer(dp, sp, mergeOptions{})
- return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
-}
-
-func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) {
- mi.init()
- if dst.IsNil() {
- panic(fmt.Sprintf("invalid value: merging into nil message"))
- }
- if src.IsNil() {
- return
- }
-
- var presenceSrc presence
- var presenceDst presence
- if mi.presenceOffset.IsValid() {
- presenceSrc = src.Apply(mi.presenceOffset).PresenceInfo()
- presenceDst = dst.Apply(mi.presenceOffset).PresenceInfo()
- }
-
- for _, f := range mi.orderedCoderFields {
- if f.funcs.merge == nil {
- continue
- }
- sfptr := src.Apply(f.offset)
-
- if f.presenceIndex != noPresence {
- if !presenceSrc.Present(f.presenceIndex) {
- continue
- }
- dfptr := dst.Apply(f.offset)
- if f.isLazy {
- if sfptr.AtomicGetPointer().IsNil() {
- mi.lazyUnmarshal(src, f.num)
- }
- if presenceDst.Present(f.presenceIndex) && dfptr.AtomicGetPointer().IsNil() {
- mi.lazyUnmarshal(dst, f.num)
- }
- }
- f.funcs.merge(dst.Apply(f.offset), sfptr, f, opts)
- presenceDst.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)
- continue
- }
-
- if f.isPointer && sfptr.Elem().IsNil() {
- continue
- }
- f.funcs.merge(dst.Apply(f.offset), sfptr, f, opts)
- }
- if mi.extensionOffset.IsValid() {
- sext := src.Apply(mi.extensionOffset).Extensions()
- dext := dst.Apply(mi.extensionOffset).Extensions()
- if *dext == nil {
- *dext = make(map[int32]ExtensionField)
- }
- for num, sx := range *sext {
- xt := sx.Type()
- xi := getExtensionFieldInfo(xt)
- if xi.funcs.merge == nil {
- continue
- }
- dx := (*dext)[num]
- var dv protoreflect.Value
- if dx.Type() == sx.Type() {
- dv = dx.Value()
- }
- if !dv.IsValid() && xi.unmarshalNeedsValue {
- dv = xt.New()
- }
- dv = xi.funcs.merge(dv, sx.Value(), opts)
- dx.Set(sx.Type(), dv)
- (*dext)[num] = dx
- }
- }
- if mi.unknownOffset.IsValid() {
- su := mi.getUnknownBytes(src)
- if su != nil && len(*su) > 0 {
- du := mi.mutableUnknownBytes(dst)
- *du = append(*du, *su...)
- }
- }
-}
-
-func mergeScalarValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
- return src
-}
-
-func mergeBytesValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
- return protoreflect.ValueOfBytes(append(emptyBuf[:], src.Bytes()...))
-}
-
-func mergeListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
- dstl := dst.List()
- srcl := src.List()
- for i, llen := 0, srcl.Len(); i < llen; i++ {
- dstl.Append(srcl.Get(i))
- }
- return dst
-}
-
-func mergeBytesListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
- dstl := dst.List()
- srcl := src.List()
- for i, llen := 0, srcl.Len(); i < llen; i++ {
- sb := srcl.Get(i).Bytes()
- db := append(emptyBuf[:], sb...)
- dstl.Append(protoreflect.ValueOfBytes(db))
- }
- return dst
-}
-
-func mergeMessageListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
- dstl := dst.List()
- srcl := src.List()
- for i, llen := 0, srcl.Len(); i < llen; i++ {
- sm := srcl.Get(i).Message()
- dm := proto.Clone(sm.Interface()).ProtoReflect()
- dstl.Append(protoreflect.ValueOfMessage(dm))
- }
- return dst
-}
-
-func mergeMessageValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {
- opts.Merge(dst.Message().Interface(), src.Message().Interface())
- return dst
-}
-
-func mergeMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- if f.mi != nil {
- if dst.Elem().IsNil() {
- dst.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))
- }
- f.mi.mergePointer(dst.Elem(), src.Elem(), opts)
- } else {
- dm := dst.AsValueOf(f.ft).Elem()
- sm := src.AsValueOf(f.ft).Elem()
- if dm.IsNil() {
- dm.Set(reflect.New(f.ft.Elem()))
- }
- opts.Merge(asMessage(dm), asMessage(sm))
- }
-}
-
-func mergeMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {
- for _, sp := range src.PointerSlice() {
- dm := reflect.New(f.ft.Elem().Elem())
- if f.mi != nil {
- f.mi.mergePointer(pointerOfValue(dm), sp, opts)
- } else {
- opts.Merge(asMessage(dm), asMessage(sp.AsValueOf(f.ft.Elem().Elem())))
- }
- dst.AppendPointerSlice(pointerOfValue(dm))
- }
-}
-
-func mergeBytes(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Bytes() = append(emptyBuf[:], *src.Bytes()...)
-}
-
-func mergeBytesNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Bytes()
- if len(v) > 0 {
- *dst.Bytes() = append(emptyBuf[:], v...)
- }
-}
-
-func mergeBytesSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.BytesSlice()
- for _, v := range *src.BytesSlice() {
- *ds = append(*ds, append(emptyBuf[:], v...))
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go b/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go
deleted file mode 100644
index 8816c274d..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package impl
-
-import ()
-
-func mergeBool(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Bool() = *src.Bool()
-}
-
-func mergeBoolNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Bool()
- if v != false {
- *dst.Bool() = v
- }
-}
-
-func mergeBoolPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.BoolPtr()
- if p != nil {
- v := *p
- *dst.BoolPtr() = &v
- }
-}
-
-func mergeBoolSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.BoolSlice()
- ss := src.BoolSlice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeInt32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Int32() = *src.Int32()
-}
-
-func mergeInt32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Int32()
- if v != 0 {
- *dst.Int32() = v
- }
-}
-
-func mergeInt32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.Int32Ptr()
- if p != nil {
- v := *p
- *dst.Int32Ptr() = &v
- }
-}
-
-func mergeInt32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.Int32Slice()
- ss := src.Int32Slice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeUint32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Uint32() = *src.Uint32()
-}
-
-func mergeUint32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Uint32()
- if v != 0 {
- *dst.Uint32() = v
- }
-}
-
-func mergeUint32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.Uint32Ptr()
- if p != nil {
- v := *p
- *dst.Uint32Ptr() = &v
- }
-}
-
-func mergeUint32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.Uint32Slice()
- ss := src.Uint32Slice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeInt64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Int64() = *src.Int64()
-}
-
-func mergeInt64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Int64()
- if v != 0 {
- *dst.Int64() = v
- }
-}
-
-func mergeInt64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.Int64Ptr()
- if p != nil {
- v := *p
- *dst.Int64Ptr() = &v
- }
-}
-
-func mergeInt64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.Int64Slice()
- ss := src.Int64Slice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeUint64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Uint64() = *src.Uint64()
-}
-
-func mergeUint64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Uint64()
- if v != 0 {
- *dst.Uint64() = v
- }
-}
-
-func mergeUint64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.Uint64Ptr()
- if p != nil {
- v := *p
- *dst.Uint64Ptr() = &v
- }
-}
-
-func mergeUint64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.Uint64Slice()
- ss := src.Uint64Slice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeFloat32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Float32() = *src.Float32()
-}
-
-func mergeFloat32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Float32()
- if v != 0 {
- *dst.Float32() = v
- }
-}
-
-func mergeFloat32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.Float32Ptr()
- if p != nil {
- v := *p
- *dst.Float32Ptr() = &v
- }
-}
-
-func mergeFloat32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.Float32Slice()
- ss := src.Float32Slice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeFloat64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.Float64() = *src.Float64()
-}
-
-func mergeFloat64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.Float64()
- if v != 0 {
- *dst.Float64() = v
- }
-}
-
-func mergeFloat64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.Float64Ptr()
- if p != nil {
- v := *p
- *dst.Float64Ptr() = &v
- }
-}
-
-func mergeFloat64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.Float64Slice()
- ss := src.Float64Slice()
- *ds = append(*ds, *ss...)
-}
-
-func mergeString(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- *dst.String() = *src.String()
-}
-
-func mergeStringNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- v := *src.String()
- if v != "" {
- *dst.String() = v
- }
-}
-
-func mergeStringPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- p := *src.StringPtr()
- if p != nil {
- v := *p
- *dst.StringPtr() = &v
- }
-}
-
-func mergeStringSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {
- ds := dst.StringSlice()
- ss := src.StringSlice()
- *ds = append(*ds, *ss...)
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message.go b/vendor/google.golang.org/protobuf/internal/impl/message.go
deleted file mode 100644
index d1f79b422..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message.go
+++ /dev/null
@@ -1,296 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
- "strconv"
- "strings"
- "sync"
- "sync/atomic"
-
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// MessageInfo provides protobuf related functionality for a given Go type
-// that represents a message. A given instance of MessageInfo is tied to
-// exactly one Go type, which must be a pointer to a struct type.
-//
-// The exported fields must be populated before any methods are called
-// and cannot be mutated after set.
-type MessageInfo struct {
- // GoReflectType is the underlying message Go type and must be populated.
- GoReflectType reflect.Type // pointer to struct
-
- // Desc is the underlying message descriptor type and must be populated.
- Desc protoreflect.MessageDescriptor
-
- // Deprecated: Exporter will be removed the next time we bump
- // protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640
- Exporter exporter
-
- // OneofWrappers is list of pointers to oneof wrapper struct types.
- OneofWrappers []any
-
- initMu sync.Mutex // protects all unexported fields
- initDone uint32
-
- reflectMessageInfo // for reflection implementation
- coderMessageInfo // for fast-path method implementations
-}
-
-// exporter is a function that returns a reference to the ith field of v,
-// where v is a pointer to a struct. It returns nil if it does not support
-// exporting the requested field (e.g., already exported).
-type exporter func(v any, i int) any
-
-// getMessageInfo returns the MessageInfo for any message type that
-// is generated by our implementation of protoc-gen-go (for v2 and on).
-// If it is unable to obtain a MessageInfo, it returns nil.
-func getMessageInfo(mt reflect.Type) *MessageInfo {
- m, ok := reflect.Zero(mt).Interface().(protoreflect.ProtoMessage)
- if !ok {
- return nil
- }
- mr, ok := m.ProtoReflect().(interface{ ProtoMessageInfo() *MessageInfo })
- if !ok {
- return nil
- }
- return mr.ProtoMessageInfo()
-}
-
-func (mi *MessageInfo) init() {
- // This function is called in the hot path. Inline the sync.Once logic,
- // since allocating a closure for Once.Do is expensive.
- // Keep init small to ensure that it can be inlined.
- if atomic.LoadUint32(&mi.initDone) == 0 {
- mi.initOnce()
- }
-}
-
-func (mi *MessageInfo) initOnce() {
- mi.initMu.Lock()
- defer mi.initMu.Unlock()
- if mi.initDone == 1 {
- return
- }
- if opaqueInitHook(mi) {
- return
- }
-
- t := mi.GoReflectType
- if t.Kind() != reflect.Ptr && t.Elem().Kind() != reflect.Struct {
- panic(fmt.Sprintf("got %v, want *struct kind", t))
- }
- t = t.Elem()
-
- si := mi.makeStructInfo(t)
- mi.makeReflectFuncs(t, si)
- mi.makeCoderMethods(t, si)
-
- atomic.StoreUint32(&mi.initDone, 1)
-}
-
-// getPointer returns the pointer for a message, which should be of
-// the type of the MessageInfo. If the message is of a different type,
-// it returns ok==false.
-func (mi *MessageInfo) getPointer(m protoreflect.Message) (p pointer, ok bool) {
- switch m := m.(type) {
- case *messageState:
- return m.pointer(), m.messageInfo() == mi
- case *messageReflectWrapper:
- return m.pointer(), m.messageInfo() == mi
- }
- return pointer{}, false
-}
-
-type (
- SizeCache = int32
- WeakFields = map[int32]protoreflect.ProtoMessage
- UnknownFields = unknownFieldsA // TODO: switch to unknownFieldsB
- unknownFieldsA = []byte
- unknownFieldsB = *[]byte
- ExtensionFields = map[int32]ExtensionField
-)
-
-var (
- sizecacheType = reflect.TypeOf(SizeCache(0))
- weakFieldsType = reflect.TypeOf(WeakFields(nil))
- unknownFieldsAType = reflect.TypeOf(unknownFieldsA(nil))
- unknownFieldsBType = reflect.TypeOf(unknownFieldsB(nil))
- extensionFieldsType = reflect.TypeOf(ExtensionFields(nil))
-)
-
-type structInfo struct {
- sizecacheOffset offset
- sizecacheType reflect.Type
- weakOffset offset
- weakType reflect.Type
- unknownOffset offset
- unknownType reflect.Type
- extensionOffset offset
- extensionType reflect.Type
-
- lazyOffset offset
- presenceOffset offset
-
- fieldsByNumber map[protoreflect.FieldNumber]reflect.StructField
- oneofsByName map[protoreflect.Name]reflect.StructField
- oneofWrappersByType map[reflect.Type]protoreflect.FieldNumber
- oneofWrappersByNumber map[protoreflect.FieldNumber]reflect.Type
-}
-
-func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo {
- si := structInfo{
- sizecacheOffset: invalidOffset,
- weakOffset: invalidOffset,
- unknownOffset: invalidOffset,
- extensionOffset: invalidOffset,
- lazyOffset: invalidOffset,
- presenceOffset: invalidOffset,
-
- fieldsByNumber: map[protoreflect.FieldNumber]reflect.StructField{},
- oneofsByName: map[protoreflect.Name]reflect.StructField{},
- oneofWrappersByType: map[reflect.Type]protoreflect.FieldNumber{},
- oneofWrappersByNumber: map[protoreflect.FieldNumber]reflect.Type{},
- }
-
-fieldLoop:
- for i := 0; i < t.NumField(); i++ {
- switch f := t.Field(i); f.Name {
- case genid.SizeCache_goname, genid.SizeCacheA_goname:
- if f.Type == sizecacheType {
- si.sizecacheOffset = offsetOf(f)
- si.sizecacheType = f.Type
- }
- case genid.WeakFields_goname, genid.WeakFieldsA_goname:
- if f.Type == weakFieldsType {
- si.weakOffset = offsetOf(f)
- si.weakType = f.Type
- }
- case genid.UnknownFields_goname, genid.UnknownFieldsA_goname:
- if f.Type == unknownFieldsAType || f.Type == unknownFieldsBType {
- si.unknownOffset = offsetOf(f)
- si.unknownType = f.Type
- }
- case genid.ExtensionFields_goname, genid.ExtensionFieldsA_goname, genid.ExtensionFieldsB_goname:
- if f.Type == extensionFieldsType {
- si.extensionOffset = offsetOf(f)
- si.extensionType = f.Type
- }
- case "lazyFields", "XXX_lazyUnmarshalInfo":
- si.lazyOffset = offsetOf(f)
- case "XXX_presence":
- si.presenceOffset = offsetOf(f)
- default:
- for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") {
- if len(s) > 0 && strings.Trim(s, "0123456789") == "" {
- n, _ := strconv.ParseUint(s, 10, 64)
- si.fieldsByNumber[protoreflect.FieldNumber(n)] = f
- continue fieldLoop
- }
- }
- if s := f.Tag.Get("protobuf_oneof"); len(s) > 0 {
- si.oneofsByName[protoreflect.Name(s)] = f
- continue fieldLoop
- }
- }
- }
-
- // Derive a mapping of oneof wrappers to fields.
- oneofWrappers := mi.OneofWrappers
- methods := make([]reflect.Method, 0, 2)
- if m, ok := reflect.PtrTo(t).MethodByName("XXX_OneofFuncs"); ok {
- methods = append(methods, m)
- }
- if m, ok := reflect.PtrTo(t).MethodByName("XXX_OneofWrappers"); ok {
- methods = append(methods, m)
- }
- for _, fn := range methods {
- for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {
- if vs, ok := v.Interface().([]any); ok {
- oneofWrappers = vs
- }
- }
- }
- for _, v := range oneofWrappers {
- tf := reflect.TypeOf(v).Elem()
- f := tf.Field(0)
- for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") {
- if len(s) > 0 && strings.Trim(s, "0123456789") == "" {
- n, _ := strconv.ParseUint(s, 10, 64)
- si.oneofWrappersByType[tf] = protoreflect.FieldNumber(n)
- si.oneofWrappersByNumber[protoreflect.FieldNumber(n)] = tf
- break
- }
- }
- }
-
- return si
-}
-
-func (mi *MessageInfo) New() protoreflect.Message {
- m := reflect.New(mi.GoReflectType.Elem()).Interface()
- if r, ok := m.(protoreflect.ProtoMessage); ok {
- return r.ProtoReflect()
- }
- return mi.MessageOf(m)
-}
-func (mi *MessageInfo) Zero() protoreflect.Message {
- return mi.MessageOf(reflect.Zero(mi.GoReflectType).Interface())
-}
-func (mi *MessageInfo) Descriptor() protoreflect.MessageDescriptor {
- return mi.Desc
-}
-func (mi *MessageInfo) Enum(i int) protoreflect.EnumType {
- mi.init()
- fd := mi.Desc.Fields().Get(i)
- return Export{}.EnumTypeOf(mi.fieldTypes[fd.Number()])
-}
-func (mi *MessageInfo) Message(i int) protoreflect.MessageType {
- mi.init()
- fd := mi.Desc.Fields().Get(i)
- switch {
- case fd.IsWeak():
- mt, _ := protoregistry.GlobalTypes.FindMessageByName(fd.Message().FullName())
- return mt
- case fd.IsMap():
- return mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]}
- default:
- return Export{}.MessageTypeOf(mi.fieldTypes[fd.Number()])
- }
-}
-
-type mapEntryType struct {
- desc protoreflect.MessageDescriptor
- valType any // zero value of enum or message type
-}
-
-func (mt mapEntryType) New() protoreflect.Message {
- return nil
-}
-func (mt mapEntryType) Zero() protoreflect.Message {
- return nil
-}
-func (mt mapEntryType) Descriptor() protoreflect.MessageDescriptor {
- return mt.desc
-}
-func (mt mapEntryType) Enum(i int) protoreflect.EnumType {
- fd := mt.desc.Fields().Get(i)
- if fd.Enum() == nil {
- return nil
- }
- return Export{}.EnumTypeOf(mt.valType)
-}
-func (mt mapEntryType) Message(i int) protoreflect.MessageType {
- fd := mt.desc.Fields().Get(i)
- if fd.Message() == nil {
- return nil
- }
- return Export{}.MessageTypeOf(mt.valType)
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go
deleted file mode 100644
index d8dcd7886..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go
+++ /dev/null
@@ -1,632 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "math"
- "reflect"
- "strings"
- "sync/atomic"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type opaqueStructInfo struct {
- structInfo
-}
-
-// isOpaque determines whether a protobuf message type is on the Opaque API. It
-// checks whether the type is a Go struct that protoc-gen-go would generate.
-//
-// This function only detects newly generated messages from the v2
-// implementation of protoc-gen-go. It is unable to classify generated messages
-// that are too old or those that are generated by a different generator
-// such as protoc-gen-gogo.
-func isOpaque(t reflect.Type) bool {
- // The current detection mechanism is to simply check the first field
- // for a struct tag with the "protogen" key.
- if t.Kind() == reflect.Struct && t.NumField() > 0 {
- pgt := t.Field(0).Tag.Get("protogen")
- return strings.HasPrefix(pgt, "opaque.")
- }
- return false
-}
-
-func opaqueInitHook(mi *MessageInfo) bool {
- mt := mi.GoReflectType.Elem()
- si := opaqueStructInfo{
- structInfo: mi.makeStructInfo(mt),
- }
-
- if !isOpaque(mt) {
- return false
- }
-
- defer atomic.StoreUint32(&mi.initDone, 1)
-
- mi.fields = map[protoreflect.FieldNumber]*fieldInfo{}
- fds := mi.Desc.Fields()
- for i := 0; i < fds.Len(); i++ {
- fd := fds.Get(i)
- fs := si.fieldsByNumber[fd.Number()]
- var fi fieldInfo
- usePresence, _ := usePresenceForField(si, fd)
-
- switch {
- case fd.IsWeak():
- // Weak fields are no different for opaque.
- fi = fieldInfoForWeakMessage(fd, si.weakOffset)
- case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():
- // Oneofs are no different for opaque.
- fi = fieldInfoForOneof(fd, si.oneofsByName[fd.ContainingOneof().Name()], mi.Exporter, si.oneofWrappersByNumber[fd.Number()])
- case fd.IsMap():
- fi = mi.fieldInfoForMapOpaque(si, fd, fs)
- case fd.IsList() && fd.Message() == nil && usePresence:
- fi = mi.fieldInfoForScalarListOpaque(si, fd, fs)
- case fd.IsList() && fd.Message() == nil:
- // Proto3 lists without presence can use same access methods as open
- fi = fieldInfoForList(fd, fs, mi.Exporter)
- case fd.IsList() && usePresence:
- fi = mi.fieldInfoForMessageListOpaque(si, fd, fs)
- case fd.IsList():
- // Proto3 opaque messages that does not need presence bitmap.
- // Different representation than open struct, but same logic
- fi = mi.fieldInfoForMessageListOpaqueNoPresence(si, fd, fs)
- case fd.Message() != nil && usePresence:
- fi = mi.fieldInfoForMessageOpaque(si, fd, fs)
- case fd.Message() != nil:
- // Proto3 messages without presence can use same access methods as open
- fi = fieldInfoForMessage(fd, fs, mi.Exporter)
- default:
- fi = mi.fieldInfoForScalarOpaque(si, fd, fs)
- }
- mi.fields[fd.Number()] = &fi
- }
- mi.oneofs = map[protoreflect.Name]*oneofInfo{}
- for i := 0; i < mi.Desc.Oneofs().Len(); i++ {
- od := mi.Desc.Oneofs().Get(i)
- mi.oneofs[od.Name()] = makeOneofInfoOpaque(mi, od, si.structInfo, mi.Exporter)
- }
-
- mi.denseFields = make([]*fieldInfo, fds.Len()*2)
- for i := 0; i < fds.Len(); i++ {
- if fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) {
- mi.denseFields[fd.Number()] = mi.fields[fd.Number()]
- }
- }
-
- for i := 0; i < fds.Len(); {
- fd := fds.Get(i)
- if od := fd.ContainingOneof(); od != nil && !fd.ContainingOneof().IsSynthetic() {
- mi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()])
- i += od.Fields().Len()
- } else {
- mi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()])
- i++
- }
- }
-
- mi.makeExtensionFieldsFunc(mt, si.structInfo)
- mi.makeUnknownFieldsFunc(mt, si.structInfo)
- mi.makeOpaqueCoderMethods(mt, si)
- mi.makeFieldTypes(si.structInfo)
-
- return true
-}
-
-func makeOneofInfoOpaque(mi *MessageInfo, od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo {
- oi := &oneofInfo{oneofDesc: od}
- if od.IsSynthetic() {
- fd := od.Fields().Get(0)
- index, _ := presenceIndex(mi.Desc, fd)
- oi.which = func(p pointer) protoreflect.FieldNumber {
- if p.IsNil() {
- return 0
- }
- if !mi.present(p, index) {
- return 0
- }
- return od.Fields().Get(0).Number()
- }
- return oi
- }
- // Dispatch to non-opaque oneof implementation for non-synthetic oneofs.
- return makeOneofInfo(od, si, x)
-}
-
-func (mi *MessageInfo) fieldInfoForMapOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Map {
- panic(fmt.Sprintf("invalid type: got %v, want map kind", ft))
- }
- fieldOffset := offsetOf(fs)
- conv := NewConverter(ft, fd)
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- // Don't bother checking presence bits, since we need to
- // look at the map length even if the presence bit is set.
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return rv.Len() > 0
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.Len() == 0 {
- return conv.Zero()
- }
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- pv := conv.GoValueOf(v)
- if pv.IsNil() {
- panic(fmt.Sprintf("invalid value: setting map field to read-only value"))
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(pv)
- },
- mutable: func(p pointer) protoreflect.Value {
- v := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if v.IsNil() {
- v.Set(reflect.MakeMap(fs.Type))
- }
- return conv.PBValueOf(v)
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func (mi *MessageInfo) fieldInfoForScalarListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Slice {
- panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft))
- }
- conv := NewConverter(reflect.PtrTo(ft), fd)
- fieldOffset := offsetOf(fs)
- index, _ := presenceIndex(mi.Desc, fd)
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return rv.Len() > 0
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type)
- if rv.Elem().Len() == 0 {
- return conv.Zero()
- }
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- pv := conv.GoValueOf(v)
- if pv.IsNil() {
- panic(fmt.Sprintf("invalid value: setting repeated field to read-only value"))
- }
- mi.setPresent(p, index)
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(pv.Elem())
- },
- mutable: func(p pointer) protoreflect.Value {
- mi.setPresent(p, index)
- return conv.PBValueOf(p.Apply(fieldOffset).AsValueOf(fs.Type))
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func (mi *MessageInfo) fieldInfoForMessageListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice {
- panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft))
- }
- conv := NewConverter(ft, fd)
- fieldOffset := offsetOf(fs)
- index, _ := presenceIndex(mi.Desc, fd)
- fieldNumber := fd.Number()
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- if !mi.present(p, index) {
- return false
- }
- sp := p.Apply(fieldOffset).AtomicGetPointer()
- if sp.IsNil() {
- // Lazily unmarshal this field.
- mi.lazyUnmarshal(p, fieldNumber)
- sp = p.Apply(fieldOffset).AtomicGetPointer()
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- return rv.Elem().Len() > 0
- },
- clear: func(p pointer) {
- fp := p.Apply(fieldOffset)
- sp := fp.AtomicGetPointer()
- if sp.IsNil() {
- sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem())))
- mi.setPresent(p, index)
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- rv.Elem().Set(reflect.Zero(rv.Type().Elem()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- if !mi.present(p, index) {
- return conv.Zero()
- }
- sp := p.Apply(fieldOffset).AtomicGetPointer()
- if sp.IsNil() {
- // Lazily unmarshal this field.
- mi.lazyUnmarshal(p, fieldNumber)
- sp = p.Apply(fieldOffset).AtomicGetPointer()
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- if rv.Elem().Len() == 0 {
- return conv.Zero()
- }
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- fp := p.Apply(fieldOffset)
- sp := fp.AtomicGetPointer()
- if sp.IsNil() {
- sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem())))
- mi.setPresent(p, index)
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- val := conv.GoValueOf(v)
- if val.IsNil() {
- panic(fmt.Sprintf("invalid value: setting repeated field to read-only value"))
- } else {
- rv.Elem().Set(val.Elem())
- }
- },
- mutable: func(p pointer) protoreflect.Value {
- fp := p.Apply(fieldOffset)
- sp := fp.AtomicGetPointer()
- if sp.IsNil() {
- if mi.present(p, index) {
- // Lazily unmarshal this field.
- mi.lazyUnmarshal(p, fieldNumber)
- sp = p.Apply(fieldOffset).AtomicGetPointer()
- } else {
- sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem())))
- mi.setPresent(p, index)
- }
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- return conv.PBValueOf(rv)
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func (mi *MessageInfo) fieldInfoForMessageListOpaqueNoPresence(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice {
- panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft))
- }
- conv := NewConverter(ft, fd)
- fieldOffset := offsetOf(fs)
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- sp := p.Apply(fieldOffset).AtomicGetPointer()
- if sp.IsNil() {
- return false
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- return rv.Elem().Len() > 0
- },
- clear: func(p pointer) {
- sp := p.Apply(fieldOffset).AtomicGetPointer()
- if !sp.IsNil() {
- rv := sp.AsValueOf(fs.Type.Elem())
- rv.Elem().Set(reflect.Zero(rv.Type().Elem()))
- }
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- sp := p.Apply(fieldOffset).AtomicGetPointer()
- if sp.IsNil() {
- return conv.Zero()
- }
- rv := sp.AsValueOf(fs.Type.Elem())
- if rv.Elem().Len() == 0 {
- return conv.Zero()
- }
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() {
- rv.Set(reflect.New(fs.Type.Elem()))
- }
- val := conv.GoValueOf(v)
- if val.IsNil() {
- panic(fmt.Sprintf("invalid value: setting repeated field to read-only value"))
- } else {
- rv.Elem().Set(val.Elem())
- }
- },
- mutable: func(p pointer) protoreflect.Value {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() {
- rv.Set(reflect.New(fs.Type.Elem()))
- }
- return conv.PBValueOf(rv)
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func (mi *MessageInfo) fieldInfoForScalarOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {
- ft := fs.Type
- nullable := fd.HasPresence()
- if oneof := fd.ContainingOneof(); oneof != nil && oneof.IsSynthetic() {
- nullable = true
- }
- deref := false
- if nullable && ft.Kind() == reflect.Ptr {
- ft = ft.Elem()
- deref = true
- }
- conv := NewConverter(ft, fd)
- fieldOffset := offsetOf(fs)
- index, _ := presenceIndex(mi.Desc, fd)
- var getter func(p pointer) protoreflect.Value
- if !nullable {
- getter = getterForDirectScalar(fd, fs, conv, fieldOffset)
- } else {
- getter = getterForOpaqueNullableScalar(mi, index, fd, fs, conv, fieldOffset)
- }
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- if nullable {
- return mi.present(p, index)
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- switch rv.Kind() {
- case reflect.Bool:
- return rv.Bool()
- case reflect.Int32, reflect.Int64:
- return rv.Int() != 0
- case reflect.Uint32, reflect.Uint64:
- return rv.Uint() != 0
- case reflect.Float32, reflect.Float64:
- return rv.Float() != 0 || math.Signbit(rv.Float())
- case reflect.String, reflect.Slice:
- return rv.Len() > 0
- default:
- panic(fmt.Sprintf("invalid type: %v", rv.Type())) // should never happen
- }
- },
- clear: func(p pointer) {
- if nullable {
- mi.clearPresent(p, index)
- }
- // This is only valuable for bytes and strings, but we do it unconditionally.
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: getter,
- // TODO: Implement unsafe fast path for set?
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if deref {
- if rv.IsNil() {
- rv.Set(reflect.New(ft))
- }
- rv = rv.Elem()
- }
-
- rv.Set(conv.GoValueOf(v))
- if nullable && rv.Kind() == reflect.Slice && rv.IsNil() {
- rv.Set(emptyBytes)
- }
- if nullable {
- mi.setPresent(p, index)
- }
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func (mi *MessageInfo) fieldInfoForMessageOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {
- ft := fs.Type
- conv := NewConverter(ft, fd)
- fieldOffset := offsetOf(fs)
- index, _ := presenceIndex(mi.Desc, fd)
- fieldNumber := fd.Number()
- elemType := fs.Type.Elem()
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- return mi.present(p, index)
- },
- clear: func(p pointer) {
- mi.clearPresent(p, index)
- p.Apply(fieldOffset).AtomicSetNilPointer()
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- fp := p.Apply(fieldOffset)
- mp := fp.AtomicGetPointer()
- if mp.IsNil() {
- // Lazily unmarshal this field.
- mi.lazyUnmarshal(p, fieldNumber)
- mp = fp.AtomicGetPointer()
- }
- rv := mp.AsValueOf(elemType)
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- val := pointerOfValue(conv.GoValueOf(v))
- if val.IsNil() {
- panic("invalid nil pointer")
- }
- p.Apply(fieldOffset).AtomicSetPointer(val)
- mi.setPresent(p, index)
- },
- mutable: func(p pointer) protoreflect.Value {
- fp := p.Apply(fieldOffset)
- mp := fp.AtomicGetPointer()
- if mp.IsNil() {
- if mi.present(p, index) {
- // Lazily unmarshal this field.
- mi.lazyUnmarshal(p, fieldNumber)
- mp = fp.AtomicGetPointer()
- } else {
- mp = pointerOfValue(conv.GoValueOf(conv.New()))
- fp.AtomicSetPointer(mp)
- mi.setPresent(p, index)
- }
- }
- return conv.PBValueOf(mp.AsValueOf(fs.Type.Elem()))
- },
- newMessage: func() protoreflect.Message {
- return conv.New().Message()
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-// A presenceList wraps a List, updating presence bits as necessary when the
-// list contents change.
-type presenceList struct {
- pvalueList
- setPresence func(bool)
-}
-type pvalueList interface {
- protoreflect.List
- //Unwrapper
-}
-
-func (list presenceList) Append(v protoreflect.Value) {
- list.pvalueList.Append(v)
- list.setPresence(true)
-}
-func (list presenceList) Truncate(i int) {
- list.pvalueList.Truncate(i)
- list.setPresence(i > 0)
-}
-
-// presenceIndex returns the index to pass to presence functions.
-//
-// TODO: field.Desc.Index() would be simpler, and would give space to record the presence of oneof fields.
-func presenceIndex(md protoreflect.MessageDescriptor, fd protoreflect.FieldDescriptor) (uint32, presenceSize) {
- found := false
- var index, numIndices uint32
- for i := 0; i < md.Fields().Len(); i++ {
- f := md.Fields().Get(i)
- if f == fd {
- found = true
- index = numIndices
- }
- if f.ContainingOneof() == nil || isLastOneofField(f) {
- numIndices++
- }
- }
- if !found {
- panic(fmt.Sprintf("BUG: %v not in %v", fd.Name(), md.FullName()))
- }
- return index, presenceSize(numIndices)
-}
-
-func isLastOneofField(fd protoreflect.FieldDescriptor) bool {
- fields := fd.ContainingOneof().Fields()
- return fields.Get(fields.Len()-1) == fd
-}
-
-func (mi *MessageInfo) setPresent(p pointer, index uint32) {
- p.Apply(mi.presenceOffset).PresenceInfo().SetPresent(index, mi.presenceSize)
-}
-
-func (mi *MessageInfo) clearPresent(p pointer, index uint32) {
- p.Apply(mi.presenceOffset).PresenceInfo().ClearPresent(index)
-}
-
-func (mi *MessageInfo) present(p pointer, index uint32) bool {
- return p.Apply(mi.presenceOffset).PresenceInfo().Present(index)
-}
-
-// usePresenceForField implements the somewhat intricate logic of when
-// the presence bitmap is used for a field. The main logic is that a
-// field that is optional or that can be lazy will use the presence
-// bit, but for proto2, also maps have a presence bit. It also records
-// if the field can ever be lazy, which is true if we have a
-// lazyOffset and the field is a message or a slice of messages. A
-// field that is lazy will always need a presence bit. Oneofs are not
-// lazy and do not use presence, unless they are a synthetic oneof,
-// which is a proto3 optional field. For proto3 optionals, we use the
-// presence and they can also be lazy when applicable (a message).
-func usePresenceForField(si opaqueStructInfo, fd protoreflect.FieldDescriptor) (usePresence, canBeLazy bool) {
- hasLazyField := fd.(interface{ IsLazy() bool }).IsLazy()
-
- // Non-oneof scalar fields with explicit field presence use the presence array.
- usesPresenceArray := fd.HasPresence() && fd.Message() == nil && (fd.ContainingOneof() == nil || fd.ContainingOneof().IsSynthetic())
- switch {
- case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():
- return false, false
- case fd.IsWeak():
- return false, false
- case fd.IsMap():
- return false, false
- case fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind:
- return hasLazyField, hasLazyField
- default:
- return usesPresenceArray || (hasLazyField && fd.HasPresence()), false
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go
deleted file mode 100644
index a69825699..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package impl
-
-import (
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func getterForOpaqueNullableScalar(mi *MessageInfo, index uint32, fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value {
- ft := fs.Type
- if ft.Kind() == reflect.Ptr {
- ft = ft.Elem()
- }
- if fd.Kind() == protoreflect.EnumKind {
- // Enums for nullable opaque types.
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return conv.PBValueOf(rv)
- }
- }
- switch ft.Kind() {
- case reflect.Bool:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bool()
- return protoreflect.ValueOfBool(*x)
- }
- case reflect.Int32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Int32()
- return protoreflect.ValueOfInt32(*x)
- }
- case reflect.Uint32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Uint32()
- return protoreflect.ValueOfUint32(*x)
- }
- case reflect.Int64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Int64()
- return protoreflect.ValueOfInt64(*x)
- }
- case reflect.Uint64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Uint64()
- return protoreflect.ValueOfUint64(*x)
- }
- case reflect.Float32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Float32()
- return protoreflect.ValueOfFloat32(*x)
- }
- case reflect.Float64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Float64()
- return protoreflect.ValueOfFloat64(*x)
- }
- case reflect.String:
- if fd.Kind() == protoreflect.BytesKind {
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).StringPtr()
- if *x == nil {
- return conv.Zero()
- }
- if len(**x) == 0 {
- return protoreflect.ValueOfBytes(nil)
- }
- return protoreflect.ValueOfBytes([]byte(**x))
- }
- }
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).StringPtr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfString(**x)
- }
- case reflect.Slice:
- if fd.Kind() == protoreflect.StringKind {
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bytes()
- return protoreflect.ValueOfString(string(*x))
- }
- }
- return func(p pointer) protoreflect.Value {
- if p.IsNil() || !mi.present(p, index) {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bytes()
- return protoreflect.ValueOfBytes(*x)
- }
- }
- panic("unexpected protobuf kind: " + ft.Kind().String())
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go
deleted file mode 100644
index 31c19b54f..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go
+++ /dev/null
@@ -1,467 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "reflect"
-
- "google.golang.org/protobuf/internal/detrand"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type reflectMessageInfo struct {
- fields map[protoreflect.FieldNumber]*fieldInfo
- oneofs map[protoreflect.Name]*oneofInfo
-
- // fieldTypes contains the zero value of an enum or message field.
- // For lists, it contains the element type.
- // For maps, it contains the entry value type.
- fieldTypes map[protoreflect.FieldNumber]any
-
- // denseFields is a subset of fields where:
- // 0 < fieldDesc.Number() < len(denseFields)
- // It provides faster access to the fieldInfo, but may be incomplete.
- denseFields []*fieldInfo
-
- // rangeInfos is a list of all fields (not belonging to a oneof) and oneofs.
- rangeInfos []any // either *fieldInfo or *oneofInfo
-
- getUnknown func(pointer) protoreflect.RawFields
- setUnknown func(pointer, protoreflect.RawFields)
- extensionMap func(pointer) *extensionMap
-
- nilMessage atomicNilMessage
-}
-
-// makeReflectFuncs generates the set of functions to support reflection.
-func (mi *MessageInfo) makeReflectFuncs(t reflect.Type, si structInfo) {
- mi.makeKnownFieldsFunc(si)
- mi.makeUnknownFieldsFunc(t, si)
- mi.makeExtensionFieldsFunc(t, si)
- mi.makeFieldTypes(si)
-}
-
-// makeKnownFieldsFunc generates functions for operations that can be performed
-// on each protobuf message field. It takes in a reflect.Type representing the
-// Go struct and matches message fields with struct fields.
-//
-// This code assumes that the struct is well-formed and panics if there are
-// any discrepancies.
-func (mi *MessageInfo) makeKnownFieldsFunc(si structInfo) {
- mi.fields = map[protoreflect.FieldNumber]*fieldInfo{}
- md := mi.Desc
- fds := md.Fields()
- for i := 0; i < fds.Len(); i++ {
- fd := fds.Get(i)
- fs := si.fieldsByNumber[fd.Number()]
- isOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic()
- if isOneof {
- fs = si.oneofsByName[fd.ContainingOneof().Name()]
- }
- var fi fieldInfo
- switch {
- case fs.Type == nil:
- fi = fieldInfoForMissing(fd) // never occurs for officially generated message types
- case isOneof:
- fi = fieldInfoForOneof(fd, fs, mi.Exporter, si.oneofWrappersByNumber[fd.Number()])
- case fd.IsMap():
- fi = fieldInfoForMap(fd, fs, mi.Exporter)
- case fd.IsList():
- fi = fieldInfoForList(fd, fs, mi.Exporter)
- case fd.IsWeak():
- fi = fieldInfoForWeakMessage(fd, si.weakOffset)
- case fd.Message() != nil:
- fi = fieldInfoForMessage(fd, fs, mi.Exporter)
- default:
- fi = fieldInfoForScalar(fd, fs, mi.Exporter)
- }
- mi.fields[fd.Number()] = &fi
- }
-
- mi.oneofs = map[protoreflect.Name]*oneofInfo{}
- for i := 0; i < md.Oneofs().Len(); i++ {
- od := md.Oneofs().Get(i)
- mi.oneofs[od.Name()] = makeOneofInfo(od, si, mi.Exporter)
- }
-
- mi.denseFields = make([]*fieldInfo, fds.Len()*2)
- for i := 0; i < fds.Len(); i++ {
- if fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) {
- mi.denseFields[fd.Number()] = mi.fields[fd.Number()]
- }
- }
-
- for i := 0; i < fds.Len(); {
- fd := fds.Get(i)
- if od := fd.ContainingOneof(); od != nil && !od.IsSynthetic() {
- mi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()])
- i += od.Fields().Len()
- } else {
- mi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()])
- i++
- }
- }
-
- // Introduce instability to iteration order, but keep it deterministic.
- if len(mi.rangeInfos) > 1 && detrand.Bool() {
- i := detrand.Intn(len(mi.rangeInfos) - 1)
- mi.rangeInfos[i], mi.rangeInfos[i+1] = mi.rangeInfos[i+1], mi.rangeInfos[i]
- }
-}
-
-func (mi *MessageInfo) makeUnknownFieldsFunc(t reflect.Type, si structInfo) {
- switch {
- case si.unknownOffset.IsValid() && si.unknownType == unknownFieldsAType:
- // Handle as []byte.
- mi.getUnknown = func(p pointer) protoreflect.RawFields {
- if p.IsNil() {
- return nil
- }
- return *p.Apply(mi.unknownOffset).Bytes()
- }
- mi.setUnknown = func(p pointer, b protoreflect.RawFields) {
- if p.IsNil() {
- panic("invalid SetUnknown on nil Message")
- }
- *p.Apply(mi.unknownOffset).Bytes() = b
- }
- case si.unknownOffset.IsValid() && si.unknownType == unknownFieldsBType:
- // Handle as *[]byte.
- mi.getUnknown = func(p pointer) protoreflect.RawFields {
- if p.IsNil() {
- return nil
- }
- bp := p.Apply(mi.unknownOffset).BytesPtr()
- if *bp == nil {
- return nil
- }
- return **bp
- }
- mi.setUnknown = func(p pointer, b protoreflect.RawFields) {
- if p.IsNil() {
- panic("invalid SetUnknown on nil Message")
- }
- bp := p.Apply(mi.unknownOffset).BytesPtr()
- if *bp == nil {
- *bp = new([]byte)
- }
- **bp = b
- }
- default:
- mi.getUnknown = func(pointer) protoreflect.RawFields {
- return nil
- }
- mi.setUnknown = func(p pointer, _ protoreflect.RawFields) {
- if p.IsNil() {
- panic("invalid SetUnknown on nil Message")
- }
- }
- }
-}
-
-func (mi *MessageInfo) makeExtensionFieldsFunc(t reflect.Type, si structInfo) {
- if si.extensionOffset.IsValid() {
- mi.extensionMap = func(p pointer) *extensionMap {
- if p.IsNil() {
- return (*extensionMap)(nil)
- }
- v := p.Apply(si.extensionOffset).AsValueOf(extensionFieldsType)
- return (*extensionMap)(v.Interface().(*map[int32]ExtensionField))
- }
- } else {
- mi.extensionMap = func(pointer) *extensionMap {
- return (*extensionMap)(nil)
- }
- }
-}
-func (mi *MessageInfo) makeFieldTypes(si structInfo) {
- md := mi.Desc
- fds := md.Fields()
- for i := 0; i < fds.Len(); i++ {
- var ft reflect.Type
- fd := fds.Get(i)
- fs := si.fieldsByNumber[fd.Number()]
- isOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic()
- if isOneof {
- fs = si.oneofsByName[fd.ContainingOneof().Name()]
- }
- var isMessage bool
- switch {
- case fs.Type == nil:
- continue // never occurs for officially generated message types
- case isOneof:
- if fd.Enum() != nil || fd.Message() != nil {
- ft = si.oneofWrappersByNumber[fd.Number()].Field(0).Type
- }
- case fd.IsMap():
- if fd.MapValue().Enum() != nil || fd.MapValue().Message() != nil {
- ft = fs.Type.Elem()
- }
- isMessage = fd.MapValue().Message() != nil
- case fd.IsList():
- if fd.Enum() != nil || fd.Message() != nil {
- ft = fs.Type.Elem()
-
- if ft.Kind() == reflect.Slice {
- ft = ft.Elem()
- }
-
- }
- isMessage = fd.Message() != nil
- case fd.Enum() != nil:
- ft = fs.Type
- if fd.HasPresence() && ft.Kind() == reflect.Ptr {
- ft = ft.Elem()
- }
- case fd.Message() != nil:
- ft = fs.Type
- if fd.IsWeak() {
- ft = nil
- }
- isMessage = true
- }
- if isMessage && ft != nil && ft.Kind() != reflect.Ptr {
- ft = reflect.PtrTo(ft) // never occurs for officially generated message types
- }
- if ft != nil {
- if mi.fieldTypes == nil {
- mi.fieldTypes = make(map[protoreflect.FieldNumber]any)
- }
- mi.fieldTypes[fd.Number()] = reflect.Zero(ft).Interface()
- }
- }
-}
-
-type extensionMap map[int32]ExtensionField
-
-func (m *extensionMap) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- if m != nil {
- for _, x := range *m {
- xd := x.Type().TypeDescriptor()
- v := x.Value()
- if xd.IsList() && v.List().Len() == 0 {
- continue
- }
- if !f(xd, v) {
- return
- }
- }
- }
-}
-func (m *extensionMap) Has(xd protoreflect.ExtensionTypeDescriptor) (ok bool) {
- if m == nil {
- return false
- }
- x, ok := (*m)[int32(xd.Number())]
- if !ok {
- return false
- }
- if x.isUnexpandedLazy() {
- // Avoid calling x.Value(), which triggers a lazy unmarshal.
- return true
- }
- switch {
- case xd.IsList():
- return x.Value().List().Len() > 0
- case xd.IsMap():
- return x.Value().Map().Len() > 0
- }
- return true
-}
-func (m *extensionMap) Clear(xd protoreflect.ExtensionTypeDescriptor) {
- delete(*m, int32(xd.Number()))
-}
-func (m *extensionMap) Get(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value {
- if m != nil {
- if x, ok := (*m)[int32(xd.Number())]; ok {
- return x.Value()
- }
- }
- return xd.Type().Zero()
-}
-func (m *extensionMap) Set(xd protoreflect.ExtensionTypeDescriptor, v protoreflect.Value) {
- xt := xd.Type()
- isValid := true
- switch {
- case !xt.IsValidValue(v):
- isValid = false
- case xd.IsList():
- isValid = v.List().IsValid()
- case xd.IsMap():
- isValid = v.Map().IsValid()
- case xd.Message() != nil:
- isValid = v.Message().IsValid()
- }
- if !isValid {
- panic(fmt.Sprintf("%v: assigning invalid value", xd.FullName()))
- }
-
- if *m == nil {
- *m = make(map[int32]ExtensionField)
- }
- var x ExtensionField
- x.Set(xt, v)
- (*m)[int32(xd.Number())] = x
-}
-func (m *extensionMap) Mutable(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value {
- if xd.Kind() != protoreflect.MessageKind && xd.Kind() != protoreflect.GroupKind && !xd.IsList() && !xd.IsMap() {
- panic("invalid Mutable on field with non-composite type")
- }
- if x, ok := (*m)[int32(xd.Number())]; ok {
- return x.Value()
- }
- v := xd.Type().New()
- m.Set(xd, v)
- return v
-}
-
-// MessageState is a data structure that is nested as the first field in a
-// concrete message. It provides a way to implement the ProtoReflect method
-// in an allocation-free way without needing to have a shadow Go type generated
-// for every message type. This technique only works using unsafe.
-//
-// Example generated code:
-//
-// type M struct {
-// state protoimpl.MessageState
-//
-// Field1 int32
-// Field2 string
-// Field3 *BarMessage
-// ...
-// }
-//
-// func (m *M) ProtoReflect() protoreflect.Message {
-// mi := &file_fizz_buzz_proto_msgInfos[5]
-// if protoimpl.UnsafeEnabled && m != nil {
-// ms := protoimpl.X.MessageStateOf(Pointer(m))
-// if ms.LoadMessageInfo() == nil {
-// ms.StoreMessageInfo(mi)
-// }
-// return ms
-// }
-// return mi.MessageOf(m)
-// }
-//
-// The MessageState type holds a *MessageInfo, which must be atomically set to
-// the message info associated with a given message instance.
-// By unsafely converting a *M into a *MessageState, the MessageState object
-// has access to all the information needed to implement protobuf reflection.
-// It has access to the message info as its first field, and a pointer to the
-// MessageState is identical to a pointer to the concrete message value.
-//
-// Requirements:
-// - The type M must implement protoreflect.ProtoMessage.
-// - The address of m must not be nil.
-// - The address of m and the address of m.state must be equal,
-// even though they are different Go types.
-type MessageState struct {
- pragma.NoUnkeyedLiterals
- pragma.DoNotCompare
- pragma.DoNotCopy
-
- atomicMessageInfo *MessageInfo
-}
-
-type messageState MessageState
-
-var (
- _ protoreflect.Message = (*messageState)(nil)
- _ unwrapper = (*messageState)(nil)
-)
-
-// messageDataType is a tuple of a pointer to the message data and
-// a pointer to the message type. It is a generalized way of providing a
-// reflective view over a message instance. The disadvantage of this approach
-// is the need to allocate this tuple of 16B.
-type messageDataType struct {
- p pointer
- mi *MessageInfo
-}
-
-type (
- messageReflectWrapper messageDataType
- messageIfaceWrapper messageDataType
-)
-
-var (
- _ protoreflect.Message = (*messageReflectWrapper)(nil)
- _ unwrapper = (*messageReflectWrapper)(nil)
- _ protoreflect.ProtoMessage = (*messageIfaceWrapper)(nil)
- _ unwrapper = (*messageIfaceWrapper)(nil)
-)
-
-// MessageOf returns a reflective view over a message. The input must be a
-// pointer to a named Go struct. If the provided type has a ProtoReflect method,
-// it must be implemented by calling this method.
-func (mi *MessageInfo) MessageOf(m any) protoreflect.Message {
- if reflect.TypeOf(m) != mi.GoReflectType {
- panic(fmt.Sprintf("type mismatch: got %T, want %v", m, mi.GoReflectType))
- }
- p := pointerOfIface(m)
- if p.IsNil() {
- return mi.nilMessage.Init(mi)
- }
- return &messageReflectWrapper{p, mi}
-}
-
-func (m *messageReflectWrapper) pointer() pointer { return m.p }
-func (m *messageReflectWrapper) messageInfo() *MessageInfo { return m.mi }
-
-// Reset implements the v1 proto.Message.Reset method.
-func (m *messageIfaceWrapper) Reset() {
- if mr, ok := m.protoUnwrap().(interface{ Reset() }); ok {
- mr.Reset()
- return
- }
- rv := reflect.ValueOf(m.protoUnwrap())
- if rv.Kind() == reflect.Ptr && !rv.IsNil() {
- rv.Elem().Set(reflect.Zero(rv.Type().Elem()))
- }
-}
-func (m *messageIfaceWrapper) ProtoReflect() protoreflect.Message {
- return (*messageReflectWrapper)(m)
-}
-func (m *messageIfaceWrapper) protoUnwrap() any {
- return m.p.AsIfaceOf(m.mi.GoReflectType.Elem())
-}
-
-// checkField verifies that the provided field descriptor is valid.
-// Exactly one of the returned values is populated.
-func (mi *MessageInfo) checkField(fd protoreflect.FieldDescriptor) (*fieldInfo, protoreflect.ExtensionTypeDescriptor) {
- var fi *fieldInfo
- if n := fd.Number(); 0 < n && int(n) < len(mi.denseFields) {
- fi = mi.denseFields[n]
- } else {
- fi = mi.fields[n]
- }
- if fi != nil {
- if fi.fieldDesc != fd {
- if got, want := fd.FullName(), fi.fieldDesc.FullName(); got != want {
- panic(fmt.Sprintf("mismatching field: got %v, want %v", got, want))
- }
- panic(fmt.Sprintf("mismatching field: %v", fd.FullName()))
- }
- return fi, nil
- }
-
- if fd.IsExtension() {
- if got, want := fd.ContainingMessage().FullName(), mi.Desc.FullName(); got != want {
- // TODO: Should this be exact containing message descriptor match?
- panic(fmt.Sprintf("extension %v has mismatching containing message: got %v, want %v", fd.FullName(), got, want))
- }
- if !mi.Desc.ExtensionRanges().Has(fd.Number()) {
- panic(fmt.Sprintf("extension %v extends %v outside the extension range", fd.FullName(), mi.Desc.FullName()))
- }
- xtd, ok := fd.(protoreflect.ExtensionTypeDescriptor)
- if !ok {
- panic(fmt.Sprintf("extension %v does not implement protoreflect.ExtensionTypeDescriptor", fd.FullName()))
- }
- return nil, xtd
- }
- panic(fmt.Sprintf("field %v is invalid", fd.FullName()))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go
deleted file mode 100644
index 3cd1fbc21..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go
+++ /dev/null
@@ -1,499 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "math"
- "reflect"
- "sync"
-
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-type fieldInfo struct {
- fieldDesc protoreflect.FieldDescriptor
-
- // These fields are used for protobuf reflection support.
- has func(pointer) bool
- clear func(pointer)
- get func(pointer) protoreflect.Value
- set func(pointer, protoreflect.Value)
- mutable func(pointer) protoreflect.Value
- newMessage func() protoreflect.Message
- newField func() protoreflect.Value
-}
-
-func fieldInfoForMissing(fd protoreflect.FieldDescriptor) fieldInfo {
- // This never occurs for generated message types.
- // It implies that a hand-crafted type has missing Go fields
- // for specific protobuf message fields.
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- return false
- },
- clear: func(p pointer) {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- get: func(p pointer) protoreflect.Value {
- return fd.Default()
- },
- set: func(p pointer, v protoreflect.Value) {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- mutable: func(p pointer) protoreflect.Value {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- newMessage: func() protoreflect.Message {
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- newField: func() protoreflect.Value {
- if v := fd.Default(); v.IsValid() {
- return v
- }
- panic("missing Go struct field for " + string(fd.FullName()))
- },
- }
-}
-
-func fieldInfoForOneof(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter, ot reflect.Type) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Interface {
- panic(fmt.Sprintf("field %v has invalid type: got %v, want interface kind", fd.FullName(), ft))
- }
- if ot.Kind() != reflect.Struct {
- panic(fmt.Sprintf("field %v has invalid type: got %v, want struct kind", fd.FullName(), ot))
- }
- if !reflect.PtrTo(ot).Implements(ft) {
- panic(fmt.Sprintf("field %v has invalid type: %v does not implement %v", fd.FullName(), ot, ft))
- }
- conv := NewConverter(ot.Field(0).Type, fd)
- isMessage := fd.Message() != nil
-
- // TODO: Implement unsafe fast path?
- fieldOffset := offsetOf(fs)
- return fieldInfo{
- // NOTE: The logic below intentionally assumes that oneof fields are
- // well-formatted. That is, the oneof interface never contains a
- // typed nil pointer to one of the wrapper structs.
-
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {
- return false
- }
- return true
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() || rv.Elem().Type().Elem() != ot {
- // NOTE: We intentionally don't check for rv.Elem().IsNil()
- // so that (*OneofWrapperType)(nil) gets cleared to nil.
- return
- }
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {
- return conv.Zero()
- }
- rv = rv.Elem().Elem().Field(0)
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {
- rv.Set(reflect.New(ot))
- }
- rv = rv.Elem().Elem().Field(0)
- rv.Set(conv.GoValueOf(v))
- },
- mutable: func(p pointer) protoreflect.Value {
- if !isMessage {
- panic(fmt.Sprintf("field %v with invalid Mutable call on field with non-composite type", fd.FullName()))
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {
- rv.Set(reflect.New(ot))
- }
- rv = rv.Elem().Elem().Field(0)
- if rv.Kind() == reflect.Ptr && rv.IsNil() {
- rv.Set(conv.GoValueOf(protoreflect.ValueOfMessage(conv.New().Message())))
- }
- return conv.PBValueOf(rv)
- },
- newMessage: func() protoreflect.Message {
- return conv.New().Message()
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func fieldInfoForMap(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Map {
- panic(fmt.Sprintf("field %v has invalid type: got %v, want map kind", fd.FullName(), ft))
- }
- conv := NewConverter(ft, fd)
-
- // TODO: Implement unsafe fast path?
- fieldOffset := offsetOf(fs)
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return rv.Len() > 0
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.Len() == 0 {
- return conv.Zero()
- }
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- pv := conv.GoValueOf(v)
- if pv.IsNil() {
- panic(fmt.Sprintf("map field %v cannot be set with read-only value", fd.FullName()))
- }
- rv.Set(pv)
- },
- mutable: func(p pointer) protoreflect.Value {
- v := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if v.IsNil() {
- v.Set(reflect.MakeMap(fs.Type))
- }
- return conv.PBValueOf(v)
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func fieldInfoForList(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {
- ft := fs.Type
- if ft.Kind() != reflect.Slice {
- panic(fmt.Sprintf("field %v has invalid type: got %v, want slice kind", fd.FullName(), ft))
- }
- conv := NewConverter(reflect.PtrTo(ft), fd)
-
- // TODO: Implement unsafe fast path?
- fieldOffset := offsetOf(fs)
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return rv.Len() > 0
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type)
- if rv.Elem().Len() == 0 {
- return conv.Zero()
- }
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- pv := conv.GoValueOf(v)
- if pv.IsNil() {
- panic(fmt.Sprintf("list field %v cannot be set with read-only value", fd.FullName()))
- }
- rv.Set(pv.Elem())
- },
- mutable: func(p pointer) protoreflect.Value {
- v := p.Apply(fieldOffset).AsValueOf(fs.Type)
- return conv.PBValueOf(v)
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-var (
- nilBytes = reflect.ValueOf([]byte(nil))
- emptyBytes = reflect.ValueOf([]byte{})
-)
-
-func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {
- ft := fs.Type
- nullable := fd.HasPresence()
- isBytes := ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8
- var getter func(p pointer) protoreflect.Value
- if nullable {
- if ft.Kind() != reflect.Ptr && ft.Kind() != reflect.Slice {
- // This never occurs for generated message types.
- // Despite the protobuf type system specifying presence,
- // the Go field type cannot represent it.
- nullable = false
- }
- if ft.Kind() == reflect.Ptr {
- ft = ft.Elem()
- }
- }
- conv := NewConverter(ft, fd)
- fieldOffset := offsetOf(fs)
-
- // Generate specialized getter functions to avoid going through reflect.Value
- if nullable {
- getter = getterForNullableScalar(fd, fs, conv, fieldOffset)
- } else {
- getter = getterForDirectScalar(fd, fs, conv, fieldOffset)
- }
-
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- if nullable {
- return !p.Apply(fieldOffset).Elem().IsNil()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- switch rv.Kind() {
- case reflect.Bool:
- return rv.Bool()
- case reflect.Int32, reflect.Int64:
- return rv.Int() != 0
- case reflect.Uint32, reflect.Uint64:
- return rv.Uint() != 0
- case reflect.Float32, reflect.Float64:
- return rv.Float() != 0 || math.Signbit(rv.Float())
- case reflect.String, reflect.Slice:
- return rv.Len() > 0
- default:
- panic(fmt.Sprintf("field %v has invalid type: %v", fd.FullName(), rv.Type())) // should never happen
- }
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: getter,
- // TODO: Implement unsafe fast path for set?
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if nullable && rv.Kind() == reflect.Ptr {
- if rv.IsNil() {
- rv.Set(reflect.New(ft))
- }
- rv = rv.Elem()
- }
- rv.Set(conv.GoValueOf(v))
- if isBytes && rv.Len() == 0 {
- if nullable {
- rv.Set(emptyBytes) // preserve presence
- } else {
- rv.Set(nilBytes) // do not preserve presence
- }
- }
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-func fieldInfoForWeakMessage(fd protoreflect.FieldDescriptor, weakOffset offset) fieldInfo {
- if !flags.ProtoLegacyWeak {
- panic("no support for proto1 weak fields")
- }
-
- var once sync.Once
- var messageType protoreflect.MessageType
- lazyInit := func() {
- once.Do(func() {
- messageName := fd.Message().FullName()
- messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName)
- if messageType == nil {
- panic(fmt.Sprintf("weak message %v for field %v is not linked in", messageName, fd.FullName()))
- }
- })
- }
-
- num := fd.Number()
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- _, ok := p.Apply(weakOffset).WeakFields().get(num)
- return ok
- },
- clear: func(p pointer) {
- p.Apply(weakOffset).WeakFields().clear(num)
- },
- get: func(p pointer) protoreflect.Value {
- lazyInit()
- if p.IsNil() {
- return protoreflect.ValueOfMessage(messageType.Zero())
- }
- m, ok := p.Apply(weakOffset).WeakFields().get(num)
- if !ok {
- return protoreflect.ValueOfMessage(messageType.Zero())
- }
- return protoreflect.ValueOfMessage(m.ProtoReflect())
- },
- set: func(p pointer, v protoreflect.Value) {
- lazyInit()
- m := v.Message()
- if m.Descriptor() != messageType.Descriptor() {
- if got, want := m.Descriptor().FullName(), messageType.Descriptor().FullName(); got != want {
- panic(fmt.Sprintf("field %v has mismatching message descriptor: got %v, want %v", fd.FullName(), got, want))
- }
- panic(fmt.Sprintf("field %v has mismatching message descriptor: %v", fd.FullName(), m.Descriptor().FullName()))
- }
- p.Apply(weakOffset).WeakFields().set(num, m.Interface())
- },
- mutable: func(p pointer) protoreflect.Value {
- lazyInit()
- fs := p.Apply(weakOffset).WeakFields()
- m, ok := fs.get(num)
- if !ok {
- m = messageType.New().Interface()
- fs.set(num, m)
- }
- return protoreflect.ValueOfMessage(m.ProtoReflect())
- },
- newMessage: func() protoreflect.Message {
- lazyInit()
- return messageType.New()
- },
- newField: func() protoreflect.Value {
- lazyInit()
- return protoreflect.ValueOfMessage(messageType.New())
- },
- }
-}
-
-func fieldInfoForMessage(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {
- ft := fs.Type
- conv := NewConverter(ft, fd)
-
- // TODO: Implement unsafe fast path?
- fieldOffset := offsetOf(fs)
- return fieldInfo{
- fieldDesc: fd,
- has: func(p pointer) bool {
- if p.IsNil() {
- return false
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if fs.Type.Kind() != reflect.Ptr {
- return !rv.IsZero()
- }
- return !rv.IsNil()
- },
- clear: func(p pointer) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(reflect.Zero(rv.Type()))
- },
- get: func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return conv.PBValueOf(rv)
- },
- set: func(p pointer, v protoreflect.Value) {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- rv.Set(conv.GoValueOf(v))
- if fs.Type.Kind() == reflect.Ptr && rv.IsNil() {
- panic(fmt.Sprintf("field %v has invalid nil pointer", fd.FullName()))
- }
- },
- mutable: func(p pointer) protoreflect.Value {
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if fs.Type.Kind() == reflect.Ptr && rv.IsNil() {
- rv.Set(conv.GoValueOf(conv.New()))
- }
- return conv.PBValueOf(rv)
- },
- newMessage: func() protoreflect.Message {
- return conv.New().Message()
- },
- newField: func() protoreflect.Value {
- return conv.New()
- },
- }
-}
-
-type oneofInfo struct {
- oneofDesc protoreflect.OneofDescriptor
- which func(pointer) protoreflect.FieldNumber
-}
-
-func makeOneofInfo(od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo {
- oi := &oneofInfo{oneofDesc: od}
- if od.IsSynthetic() {
- fs := si.fieldsByNumber[od.Fields().Get(0).Number()]
- fieldOffset := offsetOf(fs)
- oi.which = func(p pointer) protoreflect.FieldNumber {
- if p.IsNil() {
- return 0
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() { // valid on either *T or []byte
- return 0
- }
- return od.Fields().Get(0).Number()
- }
- } else {
- fs := si.oneofsByName[od.Name()]
- fieldOffset := offsetOf(fs)
- oi.which = func(p pointer) protoreflect.FieldNumber {
- if p.IsNil() {
- return 0
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- if rv.IsNil() {
- return 0
- }
- rv = rv.Elem()
- if rv.IsNil() {
- return 0
- }
- return si.oneofWrappersByType[rv.Type().Elem()]
- }
- }
- return oi
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go
deleted file mode 100644
index af5e063a1..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package impl
-
-import (
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func getterForNullableScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value {
- ft := fs.Type
- if ft.Kind() == reflect.Ptr {
- ft = ft.Elem()
- }
- if fd.Kind() == protoreflect.EnumKind {
- elemType := fs.Type.Elem()
- // Enums for nullable types.
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).Elem().AsValueOf(elemType)
- if rv.IsNil() {
- return conv.Zero()
- }
- return conv.PBValueOf(rv.Elem())
- }
- }
- switch ft.Kind() {
- case reflect.Bool:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).BoolPtr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfBool(**x)
- }
- case reflect.Int32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Int32Ptr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfInt32(**x)
- }
- case reflect.Uint32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Uint32Ptr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfUint32(**x)
- }
- case reflect.Int64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Int64Ptr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfInt64(**x)
- }
- case reflect.Uint64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Uint64Ptr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfUint64(**x)
- }
- case reflect.Float32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Float32Ptr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfFloat32(**x)
- }
- case reflect.Float64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Float64Ptr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfFloat64(**x)
- }
- case reflect.String:
- if fd.Kind() == protoreflect.BytesKind {
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).StringPtr()
- if *x == nil {
- return conv.Zero()
- }
- if len(**x) == 0 {
- return protoreflect.ValueOfBytes(nil)
- }
- return protoreflect.ValueOfBytes([]byte(**x))
- }
- }
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).StringPtr()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfString(**x)
- }
- case reflect.Slice:
- if fd.Kind() == protoreflect.StringKind {
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bytes()
- if len(*x) == 0 {
- return conv.Zero()
- }
- return protoreflect.ValueOfString(string(*x))
- }
- }
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bytes()
- if *x == nil {
- return conv.Zero()
- }
- return protoreflect.ValueOfBytes(*x)
- }
- }
- panic("unexpected protobuf kind: " + ft.Kind().String())
-}
-
-func getterForDirectScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value {
- ft := fs.Type
- if fd.Kind() == protoreflect.EnumKind {
- // Enums for non nullable types.
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()
- return conv.PBValueOf(rv)
- }
- }
- switch ft.Kind() {
- case reflect.Bool:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bool()
- return protoreflect.ValueOfBool(*x)
- }
- case reflect.Int32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Int32()
- return protoreflect.ValueOfInt32(*x)
- }
- case reflect.Uint32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Uint32()
- return protoreflect.ValueOfUint32(*x)
- }
- case reflect.Int64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Int64()
- return protoreflect.ValueOfInt64(*x)
- }
- case reflect.Uint64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Uint64()
- return protoreflect.ValueOfUint64(*x)
- }
- case reflect.Float32:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Float32()
- return protoreflect.ValueOfFloat32(*x)
- }
- case reflect.Float64:
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Float64()
- return protoreflect.ValueOfFloat64(*x)
- }
- case reflect.String:
- if fd.Kind() == protoreflect.BytesKind {
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).String()
- if len(*x) == 0 {
- return protoreflect.ValueOfBytes(nil)
- }
- return protoreflect.ValueOfBytes([]byte(*x))
- }
- }
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).String()
- return protoreflect.ValueOfString(*x)
- }
- case reflect.Slice:
- if fd.Kind() == protoreflect.StringKind {
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bytes()
- return protoreflect.ValueOfString(string(*x))
- }
- }
- return func(p pointer) protoreflect.Value {
- if p.IsNil() {
- return conv.Zero()
- }
- x := p.Apply(fieldOffset).Bytes()
- return protoreflect.ValueOfBytes(*x)
- }
- }
- panic("unexpected protobuf kind: " + ft.Kind().String())
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go
deleted file mode 100644
index 99dc23c6f..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package impl
-
-import (
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-func (m *messageState) Descriptor() protoreflect.MessageDescriptor {
- return m.messageInfo().Desc
-}
-func (m *messageState) Type() protoreflect.MessageType {
- return m.messageInfo()
-}
-func (m *messageState) New() protoreflect.Message {
- return m.messageInfo().New()
-}
-func (m *messageState) Interface() protoreflect.ProtoMessage {
- return m.protoUnwrap().(protoreflect.ProtoMessage)
-}
-func (m *messageState) protoUnwrap() any {
- return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
-}
-func (m *messageState) ProtoMethods() *protoiface.Methods {
- mi := m.messageInfo()
- mi.init()
- return &mi.methods
-}
-
-// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code
-// to be able to retrieve a v2 MessageInfo struct.
-//
-// WARNING: This method is exempt from the compatibility promise and
-// may be removed in the future without warning.
-func (m *messageState) ProtoMessageInfo() *MessageInfo {
- return m.messageInfo()
-}
-
-func (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- mi := m.messageInfo()
- mi.init()
- for _, ri := range mi.rangeInfos {
- switch ri := ri.(type) {
- case *fieldInfo:
- if ri.has(m.pointer()) {
- if !f(ri.fieldDesc, ri.get(m.pointer())) {
- return
- }
- }
- case *oneofInfo:
- if n := ri.which(m.pointer()); n > 0 {
- fi := mi.fields[n]
- if !f(fi.fieldDesc, fi.get(m.pointer())) {
- return
- }
- }
- }
- }
- mi.extensionMap(m.pointer()).Range(f)
-}
-func (m *messageState) Has(fd protoreflect.FieldDescriptor) bool {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.has(m.pointer())
- } else {
- return mi.extensionMap(m.pointer()).Has(xd)
- }
-}
-func (m *messageState) Clear(fd protoreflect.FieldDescriptor) {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- fi.clear(m.pointer())
- } else {
- mi.extensionMap(m.pointer()).Clear(xd)
- }
-}
-func (m *messageState) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.get(m.pointer())
- } else {
- return mi.extensionMap(m.pointer()).Get(xd)
- }
-}
-func (m *messageState) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- fi.set(m.pointer(), v)
- } else {
- mi.extensionMap(m.pointer()).Set(xd, v)
- }
-}
-func (m *messageState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.mutable(m.pointer())
- } else {
- return mi.extensionMap(m.pointer()).Mutable(xd)
- }
-}
-func (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.newField()
- } else {
- return xd.Type().New()
- }
-}
-func (m *messageState) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
- mi := m.messageInfo()
- mi.init()
- if oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {
- return od.Fields().ByNumber(oi.which(m.pointer()))
- }
- panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName()))
-}
-func (m *messageState) GetUnknown() protoreflect.RawFields {
- mi := m.messageInfo()
- mi.init()
- return mi.getUnknown(m.pointer())
-}
-func (m *messageState) SetUnknown(b protoreflect.RawFields) {
- mi := m.messageInfo()
- mi.init()
- mi.setUnknown(m.pointer(), b)
-}
-func (m *messageState) IsValid() bool {
- return !m.pointer().IsNil()
-}
-
-func (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor {
- return m.messageInfo().Desc
-}
-func (m *messageReflectWrapper) Type() protoreflect.MessageType {
- return m.messageInfo()
-}
-func (m *messageReflectWrapper) New() protoreflect.Message {
- return m.messageInfo().New()
-}
-func (m *messageReflectWrapper) Interface() protoreflect.ProtoMessage {
- if m, ok := m.protoUnwrap().(protoreflect.ProtoMessage); ok {
- return m
- }
- return (*messageIfaceWrapper)(m)
-}
-func (m *messageReflectWrapper) protoUnwrap() any {
- return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())
-}
-func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods {
- mi := m.messageInfo()
- mi.init()
- return &mi.methods
-}
-
-// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code
-// to be able to retrieve a v2 MessageInfo struct.
-//
-// WARNING: This method is exempt from the compatibility promise and
-// may be removed in the future without warning.
-func (m *messageReflectWrapper) ProtoMessageInfo() *MessageInfo {
- return m.messageInfo()
-}
-
-func (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- mi := m.messageInfo()
- mi.init()
- for _, ri := range mi.rangeInfos {
- switch ri := ri.(type) {
- case *fieldInfo:
- if ri.has(m.pointer()) {
- if !f(ri.fieldDesc, ri.get(m.pointer())) {
- return
- }
- }
- case *oneofInfo:
- if n := ri.which(m.pointer()); n > 0 {
- fi := mi.fields[n]
- if !f(fi.fieldDesc, fi.get(m.pointer())) {
- return
- }
- }
- }
- }
- mi.extensionMap(m.pointer()).Range(f)
-}
-func (m *messageReflectWrapper) Has(fd protoreflect.FieldDescriptor) bool {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.has(m.pointer())
- } else {
- return mi.extensionMap(m.pointer()).Has(xd)
- }
-}
-func (m *messageReflectWrapper) Clear(fd protoreflect.FieldDescriptor) {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- fi.clear(m.pointer())
- } else {
- mi.extensionMap(m.pointer()).Clear(xd)
- }
-}
-func (m *messageReflectWrapper) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.get(m.pointer())
- } else {
- return mi.extensionMap(m.pointer()).Get(xd)
- }
-}
-func (m *messageReflectWrapper) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- fi.set(m.pointer(), v)
- } else {
- mi.extensionMap(m.pointer()).Set(xd, v)
- }
-}
-func (m *messageReflectWrapper) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.mutable(m.pointer())
- } else {
- return mi.extensionMap(m.pointer()).Mutable(xd)
- }
-}
-func (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
- mi := m.messageInfo()
- mi.init()
- if fi, xd := mi.checkField(fd); fi != nil {
- return fi.newField()
- } else {
- return xd.Type().New()
- }
-}
-func (m *messageReflectWrapper) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
- mi := m.messageInfo()
- mi.init()
- if oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {
- return od.Fields().ByNumber(oi.which(m.pointer()))
- }
- panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName()))
-}
-func (m *messageReflectWrapper) GetUnknown() protoreflect.RawFields {
- mi := m.messageInfo()
- mi.init()
- return mi.getUnknown(m.pointer())
-}
-func (m *messageReflectWrapper) SetUnknown(b protoreflect.RawFields) {
- mi := m.messageInfo()
- mi.init()
- mi.setUnknown(m.pointer(), b)
-}
-func (m *messageReflectWrapper) IsValid() bool {
- return !m.pointer().IsNil()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
deleted file mode 100644
index 6bed45e35..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "reflect"
- "sync/atomic"
- "unsafe"
-
- "google.golang.org/protobuf/internal/protolazy"
-)
-
-const UnsafeEnabled = true
-
-// Pointer is an opaque pointer type.
-type Pointer unsafe.Pointer
-
-// offset represents the offset to a struct field, accessible from a pointer.
-// The offset is the byte offset to the field from the start of the struct.
-type offset uintptr
-
-// offsetOf returns a field offset for the struct field.
-func offsetOf(f reflect.StructField) offset {
- return offset(f.Offset)
-}
-
-// IsValid reports whether the offset is valid.
-func (f offset) IsValid() bool { return f != invalidOffset }
-
-// invalidOffset is an invalid field offset.
-var invalidOffset = ^offset(0)
-
-// zeroOffset is a noop when calling pointer.Apply.
-var zeroOffset = offset(0)
-
-// pointer is a pointer to a message struct or field.
-type pointer struct{ p unsafe.Pointer }
-
-// pointerOf returns p as a pointer.
-func pointerOf(p Pointer) pointer {
- return pointer{p: unsafe.Pointer(p)}
-}
-
-// pointerOfValue returns v as a pointer.
-func pointerOfValue(v reflect.Value) pointer {
- return pointer{p: unsafe.Pointer(v.Pointer())}
-}
-
-// pointerOfIface returns the pointer portion of an interface.
-func pointerOfIface(v any) pointer {
- type ifaceHeader struct {
- Type unsafe.Pointer
- Data unsafe.Pointer
- }
- return pointer{p: (*ifaceHeader)(unsafe.Pointer(&v)).Data}
-}
-
-// IsNil reports whether the pointer is nil.
-func (p pointer) IsNil() bool {
- return p.p == nil
-}
-
-// Apply adds an offset to the pointer to derive a new pointer
-// to a specified field. The pointer must be valid and pointing at a struct.
-func (p pointer) Apply(f offset) pointer {
- if p.IsNil() {
- panic("invalid nil pointer")
- }
- return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
-}
-
-// AsValueOf treats p as a pointer to an object of type t and returns the value.
-// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))
-func (p pointer) AsValueOf(t reflect.Type) reflect.Value {
- return reflect.NewAt(t, p.p)
-}
-
-// AsIfaceOf treats p as a pointer to an object of type t and returns the value.
-// It is equivalent to p.AsValueOf(t).Interface()
-func (p pointer) AsIfaceOf(t reflect.Type) any {
- // TODO: Use tricky unsafe magic to directly create ifaceHeader.
- return p.AsValueOf(t).Interface()
-}
-
-func (p pointer) Bool() *bool { return (*bool)(p.p) }
-func (p pointer) BoolPtr() **bool { return (**bool)(p.p) }
-func (p pointer) BoolSlice() *[]bool { return (*[]bool)(p.p) }
-func (p pointer) Int32() *int32 { return (*int32)(p.p) }
-func (p pointer) Int32Ptr() **int32 { return (**int32)(p.p) }
-func (p pointer) Int32Slice() *[]int32 { return (*[]int32)(p.p) }
-func (p pointer) Int64() *int64 { return (*int64)(p.p) }
-func (p pointer) Int64Ptr() **int64 { return (**int64)(p.p) }
-func (p pointer) Int64Slice() *[]int64 { return (*[]int64)(p.p) }
-func (p pointer) Uint32() *uint32 { return (*uint32)(p.p) }
-func (p pointer) Uint32Ptr() **uint32 { return (**uint32)(p.p) }
-func (p pointer) Uint32Slice() *[]uint32 { return (*[]uint32)(p.p) }
-func (p pointer) Uint64() *uint64 { return (*uint64)(p.p) }
-func (p pointer) Uint64Ptr() **uint64 { return (**uint64)(p.p) }
-func (p pointer) Uint64Slice() *[]uint64 { return (*[]uint64)(p.p) }
-func (p pointer) Float32() *float32 { return (*float32)(p.p) }
-func (p pointer) Float32Ptr() **float32 { return (**float32)(p.p) }
-func (p pointer) Float32Slice() *[]float32 { return (*[]float32)(p.p) }
-func (p pointer) Float64() *float64 { return (*float64)(p.p) }
-func (p pointer) Float64Ptr() **float64 { return (**float64)(p.p) }
-func (p pointer) Float64Slice() *[]float64 { return (*[]float64)(p.p) }
-func (p pointer) String() *string { return (*string)(p.p) }
-func (p pointer) StringPtr() **string { return (**string)(p.p) }
-func (p pointer) StringSlice() *[]string { return (*[]string)(p.p) }
-func (p pointer) Bytes() *[]byte { return (*[]byte)(p.p) }
-func (p pointer) BytesPtr() **[]byte { return (**[]byte)(p.p) }
-func (p pointer) BytesSlice() *[][]byte { return (*[][]byte)(p.p) }
-func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.p) }
-func (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) }
-func (p pointer) LazyInfoPtr() **protolazy.XXX_lazyUnmarshalInfo {
- return (**protolazy.XXX_lazyUnmarshalInfo)(p.p)
-}
-
-func (p pointer) PresenceInfo() presence {
- return presence{P: p.p}
-}
-
-func (p pointer) Elem() pointer {
- return pointer{p: *(*unsafe.Pointer)(p.p)}
-}
-
-// PointerSlice loads []*T from p as a []pointer.
-// The value returned is aliased with the original slice.
-// This behavior differs from the implementation in pointer_reflect.go.
-func (p pointer) PointerSlice() []pointer {
- // Super-tricky - p should point to a []*T where T is a
- // message type. We load it as []pointer.
- return *(*[]pointer)(p.p)
-}
-
-// AppendPointerSlice appends v to p, which must be a []*T.
-func (p pointer) AppendPointerSlice(v pointer) {
- *(*[]pointer)(p.p) = append(*(*[]pointer)(p.p), v)
-}
-
-// SetPointer sets *p to v.
-func (p pointer) SetPointer(v pointer) {
- *(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p)
-}
-
-func (p pointer) growBoolSlice(addCap int) {
- sp := p.BoolSlice()
- s := make([]bool, 0, addCap+len(*sp))
- s = s[:len(*sp)]
- copy(s, *sp)
- *sp = s
-}
-
-func (p pointer) growInt32Slice(addCap int) {
- sp := p.Int32Slice()
- s := make([]int32, 0, addCap+len(*sp))
- s = s[:len(*sp)]
- copy(s, *sp)
- *sp = s
-}
-
-func (p pointer) growUint32Slice(addCap int) {
- p.growInt32Slice(addCap)
-}
-
-func (p pointer) growFloat32Slice(addCap int) {
- p.growInt32Slice(addCap)
-}
-
-func (p pointer) growInt64Slice(addCap int) {
- sp := p.Int64Slice()
- s := make([]int64, 0, addCap+len(*sp))
- s = s[:len(*sp)]
- copy(s, *sp)
- *sp = s
-}
-
-func (p pointer) growUint64Slice(addCap int) {
- p.growInt64Slice(addCap)
-}
-
-func (p pointer) growFloat64Slice(addCap int) {
- p.growInt64Slice(addCap)
-}
-
-// Static check that MessageState does not exceed the size of a pointer.
-const _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{}))
-
-func (Export) MessageStateOf(p Pointer) *messageState {
- // Super-tricky - see documentation on MessageState.
- return (*messageState)(unsafe.Pointer(p))
-}
-func (ms *messageState) pointer() pointer {
- // Super-tricky - see documentation on MessageState.
- return pointer{p: unsafe.Pointer(ms)}
-}
-func (ms *messageState) messageInfo() *MessageInfo {
- mi := ms.LoadMessageInfo()
- if mi == nil {
- panic("invalid nil message info; this suggests memory corruption due to a race or shallow copy on the message struct")
- }
- return mi
-}
-func (ms *messageState) LoadMessageInfo() *MessageInfo {
- return (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo))))
-}
-func (ms *messageState) StoreMessageInfo(mi *MessageInfo) {
- atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)), unsafe.Pointer(mi))
-}
-
-type atomicNilMessage struct{ p unsafe.Pointer } // p is a *messageReflectWrapper
-
-func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {
- if p := atomic.LoadPointer(&m.p); p != nil {
- return (*messageReflectWrapper)(p)
- }
- w := &messageReflectWrapper{mi: mi}
- atomic.CompareAndSwapPointer(&m.p, nil, (unsafe.Pointer)(w))
- return (*messageReflectWrapper)(atomic.LoadPointer(&m.p))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go
deleted file mode 100644
index 38aa7b7dc..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "sync/atomic"
- "unsafe"
-)
-
-func (p pointer) AtomicGetPointer() pointer {
- return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))}
-}
-
-func (p pointer) AtomicSetPointer(v pointer) {
- atomic.StorePointer((*unsafe.Pointer)(p.p), v.p)
-}
-
-func (p pointer) AtomicSetNilPointer() {
- atomic.StorePointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil))
-}
-
-func (p pointer) AtomicSetPointerIfNil(v pointer) pointer {
- if atomic.CompareAndSwapPointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil), v.p) {
- return v
- }
- return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))}
-}
-
-type atomicV1MessageInfo struct{ p Pointer }
-
-func (mi *atomicV1MessageInfo) Get() Pointer {
- return Pointer(atomic.LoadPointer((*unsafe.Pointer)(&mi.p)))
-}
-
-func (mi *atomicV1MessageInfo) SetIfNil(p Pointer) Pointer {
- if atomic.CompareAndSwapPointer((*unsafe.Pointer)(&mi.p), nil, unsafe.Pointer(p)) {
- return p
- }
- return mi.Get()
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/presence.go b/vendor/google.golang.org/protobuf/internal/impl/presence.go
deleted file mode 100644
index 914cb1ded..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/presence.go
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "sync/atomic"
- "unsafe"
-)
-
-// presenceSize represents the size of a presence set, which should be the largest index of the set+1
-type presenceSize uint32
-
-// presence is the internal representation of the bitmap array in a generated protobuf
-type presence struct {
- // This is a pointer to the beginning of an array of uint32
- P unsafe.Pointer
-}
-
-func (p presence) toElem(num uint32) (ret *uint32) {
- const (
- bitsPerByte = 8
- siz = unsafe.Sizeof(*ret)
- )
- // p.P points to an array of uint32, num is the bit in this array that the
- // caller wants to check/manipulate. Calculate the index in the array that
- // contains this specific bit. E.g.: 76 / 32 = 2 (integer division).
- offset := uintptr(num) / (siz * bitsPerByte) * siz
- return (*uint32)(unsafe.Pointer(uintptr(p.P) + offset))
-}
-
-// Present checks for the presence of a specific field number in a presence set.
-func (p presence) Present(num uint32) bool {
- if p.P == nil {
- return false
- }
- return Export{}.Present(p.toElem(num), num)
-}
-
-// SetPresent adds presence for a specific field number in a presence set.
-func (p presence) SetPresent(num uint32, size presenceSize) {
- Export{}.SetPresent(p.toElem(num), num, uint32(size))
-}
-
-// SetPresentUnatomic adds presence for a specific field number in a presence set without using
-// atomic operations. Only to be called during unmarshaling.
-func (p presence) SetPresentUnatomic(num uint32, size presenceSize) {
- Export{}.SetPresentNonAtomic(p.toElem(num), num, uint32(size))
-}
-
-// ClearPresent removes presence for a specific field number in a presence set.
-func (p presence) ClearPresent(num uint32) {
- Export{}.ClearPresent(p.toElem(num), num)
-}
-
-// LoadPresenceCache (together with PresentInCache) allows for a
-// cached version of checking for presence without re-reading the word
-// for every field. It is optimized for efficiency and assumes no
-// simltaneous mutation of the presence set (or at least does not have
-// a problem with simultaneous mutation giving inconsistent results).
-func (p presence) LoadPresenceCache() (current uint32) {
- if p.P == nil {
- return 0
- }
- return atomic.LoadUint32((*uint32)(p.P))
-}
-
-// PresentInCache reads presence from a cached word in the presence
-// bitmap. It caches up a new word if the bit is outside the
-// word. This is for really fast iteration through bitmaps in cases
-// where we either know that the bitmap will not be altered, or we
-// don't care about inconsistencies caused by simultaneous writes.
-func (p presence) PresentInCache(num uint32, cachedElement *uint32, current *uint32) bool {
- if num/32 != *cachedElement {
- o := uintptr(num/32) * unsafe.Sizeof(uint32(0))
- q := (*uint32)(unsafe.Pointer(uintptr(p.P) + o))
- *current = atomic.LoadUint32(q)
- *cachedElement = num / 32
- }
- return (*current & (1 << (num % 32))) > 0
-}
-
-// AnyPresent checks if any field is marked as present in the bitmap.
-func (p presence) AnyPresent(size presenceSize) bool {
- n := uintptr((size + 31) / 32)
- for j := uintptr(0); j < n; j++ {
- o := j * unsafe.Sizeof(uint32(0))
- q := (*uint32)(unsafe.Pointer(uintptr(p.P) + o))
- b := atomic.LoadUint32(q)
- if b > 0 {
- return true
- }
- }
- return false
-}
-
-// toRaceDetectData finds the preceding RaceDetectHookData in a
-// message by using pointer arithmetic. As the type of the presence
-// set (bitmap) varies with the number of fields in the protobuf, we
-// can not have a struct type containing the array and the
-// RaceDetectHookData. instead the RaceDetectHookData is placed
-// immediately before the bitmap array, and we find it by walking
-// backwards in the struct.
-//
-// This method is only called from the race-detect version of the code,
-// so RaceDetectHookData is never an empty struct.
-func (p presence) toRaceDetectData() *RaceDetectHookData {
- var template struct {
- d RaceDetectHookData
- a [1]uint32
- }
- o := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d)))
- return (*RaceDetectHookData)(unsafe.Pointer(uintptr(p.P) - o))
-}
-
-func atomicLoadShadowPresence(p **[]byte) *[]byte {
- return (*[]byte)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
-}
-func atomicStoreShadowPresence(p **[]byte, v *[]byte) {
- atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(p)), nil, unsafe.Pointer(v))
-}
-
-// findPointerToRaceDetectData finds the preceding RaceDetectHookData
-// in a message by using pointer arithmetic. For the methods called
-// directy from generated code, we don't have a pointer to the
-// beginning of the presence set, but a pointer inside the array. As
-// we know the index of the bit we're manipulating (num), we can
-// calculate which element of the array ptr is pointing to. With that
-// information we find the preceding RaceDetectHookData and can
-// manipulate the shadow bitmap.
-//
-// This method is only called from the race-detect version of the
-// code, so RaceDetectHookData is never an empty struct.
-func findPointerToRaceDetectData(ptr *uint32, num uint32) *RaceDetectHookData {
- var template struct {
- d RaceDetectHookData
- a [1]uint32
- }
- o := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d))) + uintptr(num/32)*unsafe.Sizeof(uint32(0))
- return (*RaceDetectHookData)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) - o))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/validate.go b/vendor/google.golang.org/protobuf/internal/impl/validate.go
deleted file mode 100644
index b534a3d6d..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/validate.go
+++ /dev/null
@@ -1,592 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
- "math"
- "math/bits"
- "reflect"
- "unicode/utf8"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// ValidationStatus is the result of validating the wire-format encoding of a message.
-type ValidationStatus int
-
-const (
- // ValidationUnknown indicates that unmarshaling the message might succeed or fail.
- // The validator was unable to render a judgement.
- //
- // The only causes of this status are an aberrant message type appearing somewhere
- // in the message or a failure in the extension resolver.
- ValidationUnknown ValidationStatus = iota + 1
-
- // ValidationInvalid indicates that unmarshaling the message will fail.
- ValidationInvalid
-
- // ValidationValid indicates that unmarshaling the message will succeed.
- ValidationValid
-
- // ValidationWrongWireType indicates that a validated field does not have
- // the expected wire type.
- ValidationWrongWireType
-)
-
-func (v ValidationStatus) String() string {
- switch v {
- case ValidationUnknown:
- return "ValidationUnknown"
- case ValidationInvalid:
- return "ValidationInvalid"
- case ValidationValid:
- return "ValidationValid"
- default:
- return fmt.Sprintf("ValidationStatus(%d)", int(v))
- }
-}
-
-// Validate determines whether the contents of the buffer are a valid wire encoding
-// of the message type.
-//
-// This function is exposed for testing.
-func Validate(mt protoreflect.MessageType, in protoiface.UnmarshalInput) (out protoiface.UnmarshalOutput, _ ValidationStatus) {
- mi, ok := mt.(*MessageInfo)
- if !ok {
- return out, ValidationUnknown
- }
- if in.Resolver == nil {
- in.Resolver = protoregistry.GlobalTypes
- }
- o, st := mi.validate(in.Buf, 0, unmarshalOptions{
- flags: in.Flags,
- resolver: in.Resolver,
- })
- if o.initialized {
- out.Flags |= protoiface.UnmarshalInitialized
- }
- return out, st
-}
-
-type validationInfo struct {
- mi *MessageInfo
- typ validationType
- keyType, valType validationType
-
- // For non-required fields, requiredBit is 0.
- //
- // For required fields, requiredBit's nth bit is set, where n is a
- // unique index in the range [0, MessageInfo.numRequiredFields).
- //
- // If there are more than 64 required fields, requiredBit is 0.
- requiredBit uint64
-}
-
-type validationType uint8
-
-const (
- validationTypeOther validationType = iota
- validationTypeMessage
- validationTypeGroup
- validationTypeMap
- validationTypeRepeatedVarint
- validationTypeRepeatedFixed32
- validationTypeRepeatedFixed64
- validationTypeVarint
- validationTypeFixed32
- validationTypeFixed64
- validationTypeBytes
- validationTypeUTF8String
- validationTypeMessageSetItem
-)
-
-func newFieldValidationInfo(mi *MessageInfo, si structInfo, fd protoreflect.FieldDescriptor, ft reflect.Type) validationInfo {
- var vi validationInfo
- switch {
- case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():
- switch fd.Kind() {
- case protoreflect.MessageKind:
- vi.typ = validationTypeMessage
- if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok {
- vi.mi = getMessageInfo(ot.Field(0).Type)
- }
- case protoreflect.GroupKind:
- vi.typ = validationTypeGroup
- if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok {
- vi.mi = getMessageInfo(ot.Field(0).Type)
- }
- case protoreflect.StringKind:
- if strs.EnforceUTF8(fd) {
- vi.typ = validationTypeUTF8String
- }
- }
- default:
- vi = newValidationInfo(fd, ft)
- }
- if fd.Cardinality() == protoreflect.Required {
- // Avoid overflow. The required field check is done with a 64-bit mask, with
- // any message containing more than 64 required fields always reported as
- // potentially uninitialized, so it is not important to get a precise count
- // of the required fields past 64.
- if mi.numRequiredFields < math.MaxUint8 {
- mi.numRequiredFields++
- vi.requiredBit = 1 << (mi.numRequiredFields - 1)
- }
- }
- return vi
-}
-
-func newValidationInfo(fd protoreflect.FieldDescriptor, ft reflect.Type) validationInfo {
- var vi validationInfo
- switch {
- case fd.IsList():
- switch fd.Kind() {
- case protoreflect.MessageKind:
- vi.typ = validationTypeMessage
-
- if ft.Kind() == reflect.Ptr {
- // Repeated opaque message fields are *[]*T.
- ft = ft.Elem()
- }
-
- if ft.Kind() == reflect.Slice {
- vi.mi = getMessageInfo(ft.Elem())
- }
- case protoreflect.GroupKind:
- vi.typ = validationTypeGroup
-
- if ft.Kind() == reflect.Ptr {
- // Repeated opaque message fields are *[]*T.
- ft = ft.Elem()
- }
-
- if ft.Kind() == reflect.Slice {
- vi.mi = getMessageInfo(ft.Elem())
- }
- case protoreflect.StringKind:
- vi.typ = validationTypeBytes
- if strs.EnforceUTF8(fd) {
- vi.typ = validationTypeUTF8String
- }
- default:
- switch wireTypes[fd.Kind()] {
- case protowire.VarintType:
- vi.typ = validationTypeRepeatedVarint
- case protowire.Fixed32Type:
- vi.typ = validationTypeRepeatedFixed32
- case protowire.Fixed64Type:
- vi.typ = validationTypeRepeatedFixed64
- }
- }
- case fd.IsMap():
- vi.typ = validationTypeMap
- switch fd.MapKey().Kind() {
- case protoreflect.StringKind:
- if strs.EnforceUTF8(fd) {
- vi.keyType = validationTypeUTF8String
- }
- }
- switch fd.MapValue().Kind() {
- case protoreflect.MessageKind:
- vi.valType = validationTypeMessage
- if ft.Kind() == reflect.Map {
- vi.mi = getMessageInfo(ft.Elem())
- }
- case protoreflect.StringKind:
- if strs.EnforceUTF8(fd) {
- vi.valType = validationTypeUTF8String
- }
- }
- default:
- switch fd.Kind() {
- case protoreflect.MessageKind:
- vi.typ = validationTypeMessage
- if !fd.IsWeak() {
- vi.mi = getMessageInfo(ft)
- }
- case protoreflect.GroupKind:
- vi.typ = validationTypeGroup
- vi.mi = getMessageInfo(ft)
- case protoreflect.StringKind:
- vi.typ = validationTypeBytes
- if strs.EnforceUTF8(fd) {
- vi.typ = validationTypeUTF8String
- }
- default:
- switch wireTypes[fd.Kind()] {
- case protowire.VarintType:
- vi.typ = validationTypeVarint
- case protowire.Fixed32Type:
- vi.typ = validationTypeFixed32
- case protowire.Fixed64Type:
- vi.typ = validationTypeFixed64
- case protowire.BytesType:
- vi.typ = validationTypeBytes
- }
- }
- }
- return vi
-}
-
-func (mi *MessageInfo) validate(b []byte, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, result ValidationStatus) {
- mi.init()
- type validationState struct {
- typ validationType
- keyType, valType validationType
- endGroup protowire.Number
- mi *MessageInfo
- tail []byte
- requiredMask uint64
- }
-
- // Pre-allocate some slots to avoid repeated slice reallocation.
- states := make([]validationState, 0, 16)
- states = append(states, validationState{
- typ: validationTypeMessage,
- mi: mi,
- })
- if groupTag > 0 {
- states[0].typ = validationTypeGroup
- states[0].endGroup = groupTag
- }
- initialized := true
- start := len(b)
-State:
- for len(states) > 0 {
- st := &states[len(states)-1]
- for len(b) > 0 {
- // Parse the tag (field number and wire type).
- var tag uint64
- if b[0] < 0x80 {
- tag = uint64(b[0])
- b = b[1:]
- } else if len(b) >= 2 && b[1] < 128 {
- tag = uint64(b[0]&0x7f) + uint64(b[1])<<7
- b = b[2:]
- } else {
- var n int
- tag, n = protowire.ConsumeVarint(b)
- if n < 0 {
- return out, ValidationInvalid
- }
- b = b[n:]
- }
- var num protowire.Number
- if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {
- return out, ValidationInvalid
- } else {
- num = protowire.Number(n)
- }
- wtyp := protowire.Type(tag & 7)
-
- if wtyp == protowire.EndGroupType {
- if st.endGroup == num {
- goto PopState
- }
- return out, ValidationInvalid
- }
- var vi validationInfo
- switch {
- case st.typ == validationTypeMap:
- switch num {
- case genid.MapEntry_Key_field_number:
- vi.typ = st.keyType
- case genid.MapEntry_Value_field_number:
- vi.typ = st.valType
- vi.mi = st.mi
- vi.requiredBit = 1
- }
- case flags.ProtoLegacy && st.mi.isMessageSet:
- switch num {
- case messageset.FieldItem:
- vi.typ = validationTypeMessageSetItem
- }
- default:
- var f *coderFieldInfo
- if int(num) < len(st.mi.denseCoderFields) {
- f = st.mi.denseCoderFields[num]
- } else {
- f = st.mi.coderFields[num]
- }
- if f != nil {
- vi = f.validation
- if vi.typ == validationTypeMessage && vi.mi == nil {
- // Probable weak field.
- //
- // TODO: Consider storing the results of this lookup somewhere
- // rather than recomputing it on every validation.
- fd := st.mi.Desc.Fields().ByNumber(num)
- if fd == nil || !fd.IsWeak() {
- break
- }
- messageName := fd.Message().FullName()
- messageType, err := protoregistry.GlobalTypes.FindMessageByName(messageName)
- switch err {
- case nil:
- vi.mi, _ = messageType.(*MessageInfo)
- case protoregistry.NotFound:
- vi.typ = validationTypeBytes
- default:
- return out, ValidationUnknown
- }
- }
- break
- }
- // Possible extension field.
- //
- // TODO: We should return ValidationUnknown when:
- // 1. The resolver is not frozen. (More extensions may be added to it.)
- // 2. The resolver returns preg.NotFound.
- // In this case, a type added to the resolver in the future could cause
- // unmarshaling to begin failing. Supporting this requires some way to
- // determine if the resolver is frozen.
- xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), num)
- if err != nil && err != protoregistry.NotFound {
- return out, ValidationUnknown
- }
- if err == nil {
- vi = getExtensionFieldInfo(xt).validation
- }
- }
- if vi.requiredBit != 0 {
- // Check that the field has a compatible wire type.
- // We only need to consider non-repeated field types,
- // since repeated fields (and maps) can never be required.
- ok := false
- switch vi.typ {
- case validationTypeVarint:
- ok = wtyp == protowire.VarintType
- case validationTypeFixed32:
- ok = wtyp == protowire.Fixed32Type
- case validationTypeFixed64:
- ok = wtyp == protowire.Fixed64Type
- case validationTypeBytes, validationTypeUTF8String, validationTypeMessage:
- ok = wtyp == protowire.BytesType
- case validationTypeGroup:
- ok = wtyp == protowire.StartGroupType
- }
- if ok {
- st.requiredMask |= vi.requiredBit
- }
- }
-
- switch wtyp {
- case protowire.VarintType:
- if len(b) >= 10 {
- switch {
- case b[0] < 0x80:
- b = b[1:]
- case b[1] < 0x80:
- b = b[2:]
- case b[2] < 0x80:
- b = b[3:]
- case b[3] < 0x80:
- b = b[4:]
- case b[4] < 0x80:
- b = b[5:]
- case b[5] < 0x80:
- b = b[6:]
- case b[6] < 0x80:
- b = b[7:]
- case b[7] < 0x80:
- b = b[8:]
- case b[8] < 0x80:
- b = b[9:]
- case b[9] < 0x80 && b[9] < 2:
- b = b[10:]
- default:
- return out, ValidationInvalid
- }
- } else {
- switch {
- case len(b) > 0 && b[0] < 0x80:
- b = b[1:]
- case len(b) > 1 && b[1] < 0x80:
- b = b[2:]
- case len(b) > 2 && b[2] < 0x80:
- b = b[3:]
- case len(b) > 3 && b[3] < 0x80:
- b = b[4:]
- case len(b) > 4 && b[4] < 0x80:
- b = b[5:]
- case len(b) > 5 && b[5] < 0x80:
- b = b[6:]
- case len(b) > 6 && b[6] < 0x80:
- b = b[7:]
- case len(b) > 7 && b[7] < 0x80:
- b = b[8:]
- case len(b) > 8 && b[8] < 0x80:
- b = b[9:]
- case len(b) > 9 && b[9] < 2:
- b = b[10:]
- default:
- return out, ValidationInvalid
- }
- }
- continue State
- case protowire.BytesType:
- var size uint64
- if len(b) >= 1 && b[0] < 0x80 {
- size = uint64(b[0])
- b = b[1:]
- } else if len(b) >= 2 && b[1] < 128 {
- size = uint64(b[0]&0x7f) + uint64(b[1])<<7
- b = b[2:]
- } else {
- var n int
- size, n = protowire.ConsumeVarint(b)
- if n < 0 {
- return out, ValidationInvalid
- }
- b = b[n:]
- }
- if size > uint64(len(b)) {
- return out, ValidationInvalid
- }
- v := b[:size]
- b = b[size:]
- switch vi.typ {
- case validationTypeMessage:
- if vi.mi == nil {
- return out, ValidationUnknown
- }
- vi.mi.init()
- fallthrough
- case validationTypeMap:
- if vi.mi != nil {
- vi.mi.init()
- }
- states = append(states, validationState{
- typ: vi.typ,
- keyType: vi.keyType,
- valType: vi.valType,
- mi: vi.mi,
- tail: b,
- })
- b = v
- continue State
- case validationTypeRepeatedVarint:
- // Packed field.
- for len(v) > 0 {
- _, n := protowire.ConsumeVarint(v)
- if n < 0 {
- return out, ValidationInvalid
- }
- v = v[n:]
- }
- case validationTypeRepeatedFixed32:
- // Packed field.
- if len(v)%4 != 0 {
- return out, ValidationInvalid
- }
- case validationTypeRepeatedFixed64:
- // Packed field.
- if len(v)%8 != 0 {
- return out, ValidationInvalid
- }
- case validationTypeUTF8String:
- if !utf8.Valid(v) {
- return out, ValidationInvalid
- }
- }
- case protowire.Fixed32Type:
- if len(b) < 4 {
- return out, ValidationInvalid
- }
- b = b[4:]
- case protowire.Fixed64Type:
- if len(b) < 8 {
- return out, ValidationInvalid
- }
- b = b[8:]
- case protowire.StartGroupType:
- switch {
- case vi.typ == validationTypeGroup:
- if vi.mi == nil {
- return out, ValidationUnknown
- }
- vi.mi.init()
- states = append(states, validationState{
- typ: validationTypeGroup,
- mi: vi.mi,
- endGroup: num,
- })
- continue State
- case flags.ProtoLegacy && vi.typ == validationTypeMessageSetItem:
- typeid, v, n, err := messageset.ConsumeFieldValue(b, false)
- if err != nil {
- return out, ValidationInvalid
- }
- xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), typeid)
- switch {
- case err == protoregistry.NotFound:
- b = b[n:]
- case err != nil:
- return out, ValidationUnknown
- default:
- xvi := getExtensionFieldInfo(xt).validation
- if xvi.mi != nil {
- xvi.mi.init()
- }
- states = append(states, validationState{
- typ: xvi.typ,
- mi: xvi.mi,
- tail: b[n:],
- })
- b = v
- continue State
- }
- default:
- n := protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return out, ValidationInvalid
- }
- b = b[n:]
- }
- default:
- return out, ValidationInvalid
- }
- }
- if st.endGroup != 0 {
- return out, ValidationInvalid
- }
- if len(b) != 0 {
- return out, ValidationInvalid
- }
- b = st.tail
- PopState:
- numRequiredFields := 0
- switch st.typ {
- case validationTypeMessage, validationTypeGroup:
- numRequiredFields = int(st.mi.numRequiredFields)
- case validationTypeMap:
- // If this is a map field with a message value that contains
- // required fields, require that the value be present.
- if st.mi != nil && st.mi.numRequiredFields > 0 {
- numRequiredFields = 1
- }
- }
- // If there are more than 64 required fields, this check will
- // always fail and we will report that the message is potentially
- // uninitialized.
- if numRequiredFields > 0 && bits.OnesCount64(st.requiredMask) != numRequiredFields {
- initialized = false
- }
- states = states[:len(states)-1]
- }
- out.n = start - len(b)
- if initialized {
- out.initialized = true
- }
- return out, ValidationValid
-}
diff --git a/vendor/google.golang.org/protobuf/internal/impl/weak.go b/vendor/google.golang.org/protobuf/internal/impl/weak.go
deleted file mode 100644
index eb79a7ba9..000000000
--- a/vendor/google.golang.org/protobuf/internal/impl/weak.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package impl
-
-import (
- "fmt"
-
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-// weakFields adds methods to the exported WeakFields type for internal use.
-//
-// The exported type is an alias to an unnamed type, so methods can't be
-// defined directly on it.
-type weakFields WeakFields
-
-func (w weakFields) get(num protoreflect.FieldNumber) (protoreflect.ProtoMessage, bool) {
- m, ok := w[int32(num)]
- return m, ok
-}
-
-func (w *weakFields) set(num protoreflect.FieldNumber, m protoreflect.ProtoMessage) {
- if *w == nil {
- *w = make(weakFields)
- }
- (*w)[int32(num)] = m
-}
-
-func (w *weakFields) clear(num protoreflect.FieldNumber) {
- delete(*w, int32(num))
-}
-
-func (Export) HasWeak(w WeakFields, num protoreflect.FieldNumber) bool {
- _, ok := w[int32(num)]
- return ok
-}
-
-func (Export) ClearWeak(w *WeakFields, num protoreflect.FieldNumber) {
- delete(*w, int32(num))
-}
-
-func (Export) GetWeak(w WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName) protoreflect.ProtoMessage {
- if m, ok := w[int32(num)]; ok {
- return m
- }
- mt, _ := protoregistry.GlobalTypes.FindMessageByName(name)
- if mt == nil {
- panic(fmt.Sprintf("message %v for weak field is not linked in", name))
- }
- return mt.Zero().Interface()
-}
-
-func (Export) SetWeak(w *WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName, m protoreflect.ProtoMessage) {
- if m != nil {
- mt, _ := protoregistry.GlobalTypes.FindMessageByName(name)
- if mt == nil {
- panic(fmt.Sprintf("message %v for weak field is not linked in", name))
- }
- if mt != m.ProtoReflect().Type() {
- panic(fmt.Sprintf("invalid message type for weak field: got %T, want %T", m, mt.Zero().Interface()))
- }
- }
- if m == nil || !m.ProtoReflect().IsValid() {
- delete(*w, int32(num))
- return
- }
- if *w == nil {
- *w = make(weakFields)
- }
- (*w)[int32(num)] = m
-}
diff --git a/vendor/google.golang.org/protobuf/internal/order/order.go b/vendor/google.golang.org/protobuf/internal/order/order.go
deleted file mode 100644
index dea522e12..000000000
--- a/vendor/google.golang.org/protobuf/internal/order/order.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package order
-
-import (
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// FieldOrder specifies the ordering to visit message fields.
-// It is a function that reports whether x is ordered before y.
-type FieldOrder func(x, y protoreflect.FieldDescriptor) bool
-
-var (
- // AnyFieldOrder specifies no specific field ordering.
- AnyFieldOrder FieldOrder = nil
-
- // LegacyFieldOrder sorts fields in the same ordering as emitted by
- // wire serialization in the github.com/golang/protobuf implementation.
- LegacyFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool {
- ox, oy := x.ContainingOneof(), y.ContainingOneof()
- inOneof := func(od protoreflect.OneofDescriptor) bool {
- return od != nil && !od.IsSynthetic()
- }
-
- // Extension fields sort before non-extension fields.
- if x.IsExtension() != y.IsExtension() {
- return x.IsExtension() && !y.IsExtension()
- }
- // Fields not within a oneof sort before those within a oneof.
- if inOneof(ox) != inOneof(oy) {
- return !inOneof(ox) && inOneof(oy)
- }
- // Fields in disjoint oneof sets are sorted by declaration index.
- if inOneof(ox) && inOneof(oy) && ox != oy {
- return ox.Index() < oy.Index()
- }
- // Fields sorted by field number.
- return x.Number() < y.Number()
- }
-
- // NumberFieldOrder sorts fields by their field number.
- NumberFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool {
- return x.Number() < y.Number()
- }
-
- // IndexNameFieldOrder sorts non-extension fields before extension fields.
- // Non-extensions are sorted according to their declaration index.
- // Extensions are sorted according to their full name.
- IndexNameFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool {
- // Non-extension fields sort before extension fields.
- if x.IsExtension() != y.IsExtension() {
- return !x.IsExtension() && y.IsExtension()
- }
- // Extensions sorted by fullname.
- if x.IsExtension() && y.IsExtension() {
- return x.FullName() < y.FullName()
- }
- // Non-extensions sorted by declaration index.
- return x.Index() < y.Index()
- }
-)
-
-// KeyOrder specifies the ordering to visit map entries.
-// It is a function that reports whether x is ordered before y.
-type KeyOrder func(x, y protoreflect.MapKey) bool
-
-var (
- // AnyKeyOrder specifies no specific key ordering.
- AnyKeyOrder KeyOrder = nil
-
- // GenericKeyOrder sorts false before true, numeric keys in ascending order,
- // and strings in lexicographical ordering according to UTF-8 codepoints.
- GenericKeyOrder KeyOrder = func(x, y protoreflect.MapKey) bool {
- switch x.Interface().(type) {
- case bool:
- return !x.Bool() && y.Bool()
- case int32, int64:
- return x.Int() < y.Int()
- case uint32, uint64:
- return x.Uint() < y.Uint()
- case string:
- return x.String() < y.String()
- default:
- panic("invalid map key type")
- }
- }
-)
diff --git a/vendor/google.golang.org/protobuf/internal/order/range.go b/vendor/google.golang.org/protobuf/internal/order/range.go
deleted file mode 100644
index a1f09162d..000000000
--- a/vendor/google.golang.org/protobuf/internal/order/range.go
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package order provides ordered access to messages and maps.
-package order
-
-import (
- "sort"
- "sync"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type messageField struct {
- fd protoreflect.FieldDescriptor
- v protoreflect.Value
-}
-
-var messageFieldPool = sync.Pool{
- New: func() any { return new([]messageField) },
-}
-
-type (
- // FieldRnger is an interface for visiting all fields in a message.
- // The protoreflect.Message type implements this interface.
- FieldRanger interface{ Range(VisitField) }
- // VisitField is called every time a message field is visited.
- VisitField = func(protoreflect.FieldDescriptor, protoreflect.Value) bool
-)
-
-// RangeFields iterates over the fields of fs according to the specified order.
-func RangeFields(fs FieldRanger, less FieldOrder, fn VisitField) {
- if less == nil {
- fs.Range(fn)
- return
- }
-
- // Obtain a pre-allocated scratch buffer.
- p := messageFieldPool.Get().(*[]messageField)
- fields := (*p)[:0]
- defer func() {
- if cap(fields) < 1024 {
- *p = fields
- messageFieldPool.Put(p)
- }
- }()
-
- // Collect all fields in the message and sort them.
- fs.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- fields = append(fields, messageField{fd, v})
- return true
- })
- sort.Slice(fields, func(i, j int) bool {
- return less(fields[i].fd, fields[j].fd)
- })
-
- // Visit the fields in the specified ordering.
- for _, f := range fields {
- if !fn(f.fd, f.v) {
- return
- }
- }
-}
-
-type mapEntry struct {
- k protoreflect.MapKey
- v protoreflect.Value
-}
-
-var mapEntryPool = sync.Pool{
- New: func() any { return new([]mapEntry) },
-}
-
-type (
- // EntryRanger is an interface for visiting all fields in a message.
- // The protoreflect.Map type implements this interface.
- EntryRanger interface{ Range(VisitEntry) }
- // VisitEntry is called every time a map entry is visited.
- VisitEntry = func(protoreflect.MapKey, protoreflect.Value) bool
-)
-
-// RangeEntries iterates over the entries of es according to the specified order.
-func RangeEntries(es EntryRanger, less KeyOrder, fn VisitEntry) {
- if less == nil {
- es.Range(fn)
- return
- }
-
- // Obtain a pre-allocated scratch buffer.
- p := mapEntryPool.Get().(*[]mapEntry)
- entries := (*p)[:0]
- defer func() {
- if cap(entries) < 1024 {
- *p = entries
- mapEntryPool.Put(p)
- }
- }()
-
- // Collect all entries in the map and sort them.
- es.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
- entries = append(entries, mapEntry{k, v})
- return true
- })
- sort.Slice(entries, func(i, j int) bool {
- return less(entries[i].k, entries[j].k)
- })
-
- // Visit the entries in the specified ordering.
- for _, e := range entries {
- if !fn(e.k, e.v) {
- return
- }
- }
-}
diff --git a/vendor/google.golang.org/protobuf/internal/pragma/pragma.go b/vendor/google.golang.org/protobuf/internal/pragma/pragma.go
deleted file mode 100644
index 49dc4fcd9..000000000
--- a/vendor/google.golang.org/protobuf/internal/pragma/pragma.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package pragma provides types that can be embedded into a struct to
-// statically enforce or prevent certain language properties.
-package pragma
-
-import "sync"
-
-// NoUnkeyedLiterals can be embedded in a struct to prevent unkeyed literals.
-type NoUnkeyedLiterals struct{}
-
-// DoNotImplement can be embedded in an interface to prevent trivial
-// implementations of the interface.
-//
-// This is useful to prevent unauthorized implementations of an interface
-// so that it can be extended in the future for any protobuf language changes.
-type DoNotImplement interface{ ProtoInternal(DoNotImplement) }
-
-// DoNotCompare can be embedded in a struct to prevent comparability.
-type DoNotCompare [0]func()
-
-// DoNotCopy can be embedded in a struct to help prevent shallow copies.
-// This does not rely on a Go language feature, but rather a special case
-// within the vet checker.
-//
-// See https://golang.org/issues/8005.
-type DoNotCopy [0]sync.Mutex
diff --git a/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go b/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go
deleted file mode 100644
index 82e5cab4a..000000000
--- a/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Helper code for parsing a protocol buffer
-
-package protolazy
-
-import (
- "errors"
- "fmt"
- "io"
-
- "google.golang.org/protobuf/encoding/protowire"
-)
-
-// BufferReader is a structure encapsulating a protobuf and a current position
-type BufferReader struct {
- Buf []byte
- Pos int
-}
-
-// NewBufferReader creates a new BufferRead from a protobuf
-func NewBufferReader(buf []byte) BufferReader {
- return BufferReader{Buf: buf, Pos: 0}
-}
-
-var errOutOfBounds = errors.New("protobuf decoding: out of bounds")
-var errOverflow = errors.New("proto: integer overflow")
-
-func (b *BufferReader) DecodeVarintSlow() (x uint64, err error) {
- i := b.Pos
- l := len(b.Buf)
-
- for shift := uint(0); shift < 64; shift += 7 {
- if i >= l {
- err = io.ErrUnexpectedEOF
- return
- }
- v := b.Buf[i]
- i++
- x |= (uint64(v) & 0x7F) << shift
- if v < 0x80 {
- b.Pos = i
- return
- }
- }
-
- // The number is too large to represent in a 64-bit value.
- err = errOverflow
- return
-}
-
-// decodeVarint decodes a varint at the current position
-func (b *BufferReader) DecodeVarint() (x uint64, err error) {
- i := b.Pos
- buf := b.Buf
-
- if i >= len(buf) {
- return 0, io.ErrUnexpectedEOF
- } else if buf[i] < 0x80 {
- b.Pos++
- return uint64(buf[i]), nil
- } else if len(buf)-i < 10 {
- return b.DecodeVarintSlow()
- }
-
- var v uint64
- // we already checked the first byte
- x = uint64(buf[i]) & 127
- i++
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 7
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 14
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 21
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 28
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 35
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 42
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 49
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 56
- if v < 128 {
- goto done
- }
-
- v = uint64(buf[i])
- i++
- x |= (v & 127) << 63
- if v < 128 {
- goto done
- }
-
- return 0, errOverflow
-
-done:
- b.Pos = i
- return
-}
-
-// decodeVarint32 decodes a varint32 at the current position
-func (b *BufferReader) DecodeVarint32() (x uint32, err error) {
- i := b.Pos
- buf := b.Buf
-
- if i >= len(buf) {
- return 0, io.ErrUnexpectedEOF
- } else if buf[i] < 0x80 {
- b.Pos++
- return uint32(buf[i]), nil
- } else if len(buf)-i < 5 {
- v, err := b.DecodeVarintSlow()
- return uint32(v), err
- }
-
- var v uint32
- // we already checked the first byte
- x = uint32(buf[i]) & 127
- i++
-
- v = uint32(buf[i])
- i++
- x |= (v & 127) << 7
- if v < 128 {
- goto done
- }
-
- v = uint32(buf[i])
- i++
- x |= (v & 127) << 14
- if v < 128 {
- goto done
- }
-
- v = uint32(buf[i])
- i++
- x |= (v & 127) << 21
- if v < 128 {
- goto done
- }
-
- v = uint32(buf[i])
- i++
- x |= (v & 127) << 28
- if v < 128 {
- goto done
- }
-
- return 0, errOverflow
-
-done:
- b.Pos = i
- return
-}
-
-// skipValue skips a value in the protobuf, based on the specified tag
-func (b *BufferReader) SkipValue(tag uint32) (err error) {
- wireType := tag & 0x7
- switch protowire.Type(wireType) {
- case protowire.VarintType:
- err = b.SkipVarint()
- case protowire.Fixed64Type:
- err = b.SkipFixed64()
- case protowire.BytesType:
- var n uint32
- n, err = b.DecodeVarint32()
- if err == nil {
- err = b.Skip(int(n))
- }
- case protowire.StartGroupType:
- err = b.SkipGroup(tag)
- case protowire.Fixed32Type:
- err = b.SkipFixed32()
- default:
- err = fmt.Errorf("Unexpected wire type (%d)", wireType)
- }
- return
-}
-
-// skipGroup skips a group with the specified tag. It executes efficiently using a tag stack
-func (b *BufferReader) SkipGroup(tag uint32) (err error) {
- tagStack := make([]uint32, 0, 16)
- tagStack = append(tagStack, tag)
- var n uint32
- for len(tagStack) > 0 {
- tag, err = b.DecodeVarint32()
- if err != nil {
- return err
- }
- switch protowire.Type(tag & 0x7) {
- case protowire.VarintType:
- err = b.SkipVarint()
- case protowire.Fixed64Type:
- err = b.Skip(8)
- case protowire.BytesType:
- n, err = b.DecodeVarint32()
- if err == nil {
- err = b.Skip(int(n))
- }
- case protowire.StartGroupType:
- tagStack = append(tagStack, tag)
- case protowire.Fixed32Type:
- err = b.SkipFixed32()
- case protowire.EndGroupType:
- if protoFieldNumber(tagStack[len(tagStack)-1]) == protoFieldNumber(tag) {
- tagStack = tagStack[:len(tagStack)-1]
- } else {
- err = fmt.Errorf("end group tag %d does not match begin group tag %d at pos %d",
- protoFieldNumber(tag), protoFieldNumber(tagStack[len(tagStack)-1]), b.Pos)
- }
- }
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-// skipVarint effiently skips a varint
-func (b *BufferReader) SkipVarint() (err error) {
- i := b.Pos
-
- if len(b.Buf)-i < 10 {
- // Use DecodeVarintSlow() to check for buffer overflow, but ignore result
- if _, err := b.DecodeVarintSlow(); err != nil {
- return err
- }
- return nil
- }
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if b.Buf[i] < 0x80 {
- goto out
- }
- return errOverflow
-
-out:
- b.Pos = i + 1
- return nil
-}
-
-// skip skips the specified number of bytes
-func (b *BufferReader) Skip(n int) (err error) {
- if len(b.Buf) < b.Pos+n {
- return io.ErrUnexpectedEOF
- }
- b.Pos += n
- return
-}
-
-// skipFixed64 skips a fixed64
-func (b *BufferReader) SkipFixed64() (err error) {
- return b.Skip(8)
-}
-
-// skipFixed32 skips a fixed32
-func (b *BufferReader) SkipFixed32() (err error) {
- return b.Skip(4)
-}
-
-// skipBytes skips a set of bytes
-func (b *BufferReader) SkipBytes() (err error) {
- n, err := b.DecodeVarint32()
- if err != nil {
- return err
- }
- return b.Skip(int(n))
-}
-
-// Done returns whether we are at the end of the protobuf
-func (b *BufferReader) Done() bool {
- return b.Pos == len(b.Buf)
-}
-
-// Remaining returns how many bytes remain
-func (b *BufferReader) Remaining() int {
- return len(b.Buf) - b.Pos
-}
diff --git a/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go b/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go
deleted file mode 100644
index ff4d4834b..000000000
--- a/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protolazy contains internal data structures for lazy message decoding.
-package protolazy
-
-import (
- "fmt"
- "sort"
-
- "google.golang.org/protobuf/encoding/protowire"
- piface "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// IndexEntry is the structure for an index of the fields in a message of a
-// proto (not descending to sub-messages)
-type IndexEntry struct {
- FieldNum uint32
- // first byte of this tag/field
- Start uint32
- // first byte after a contiguous sequence of bytes for this tag/field, which could
- // include a single encoding of the field, or multiple encodings for the field
- End uint32
- // True if this protobuf segment includes multiple encodings of the field
- MultipleContiguous bool
-}
-
-// XXX_lazyUnmarshalInfo has information about a particular lazily decoded message
-//
-// Deprecated: Do not use. This will be deleted in the near future.
-type XXX_lazyUnmarshalInfo struct {
- // Index of fields and their positions in the protobuf for this
- // message. Make index be a pointer to a slice so it can be updated
- // atomically. The index pointer is only set once (lazily when/if
- // the index is first needed), and must always be SET and LOADED
- // ATOMICALLY.
- index *[]IndexEntry
- // The protobuf associated with this lazily decoded message. It is
- // only set during proto.Unmarshal(). It doesn't need to be set and
- // loaded atomically, since any simultaneous set (Unmarshal) and read
- // (during a get) would already be a race in the app code.
- Protobuf []byte
- // The flags present when Unmarshal was originally called for this particular message
- unmarshalFlags piface.UnmarshalInputFlags
-}
-
-// The Buffer and SetBuffer methods let v2/internal/impl interact with
-// XXX_lazyUnmarshalInfo via an interface, to avoid an import cycle.
-
-// Buffer returns the lazy unmarshal buffer.
-//
-// Deprecated: Do not use. This will be deleted in the near future.
-func (lazy *XXX_lazyUnmarshalInfo) Buffer() []byte {
- return lazy.Protobuf
-}
-
-// SetBuffer sets the lazy unmarshal buffer.
-//
-// Deprecated: Do not use. This will be deleted in the near future.
-func (lazy *XXX_lazyUnmarshalInfo) SetBuffer(b []byte) {
- lazy.Protobuf = b
-}
-
-// SetUnmarshalFlags is called to set a copy of the original unmarshalInputFlags.
-// The flags should reflect how Unmarshal was called.
-func (lazy *XXX_lazyUnmarshalInfo) SetUnmarshalFlags(f piface.UnmarshalInputFlags) {
- lazy.unmarshalFlags = f
-}
-
-// UnmarshalFlags returns the original unmarshalInputFlags.
-func (lazy *XXX_lazyUnmarshalInfo) UnmarshalFlags() piface.UnmarshalInputFlags {
- return lazy.unmarshalFlags
-}
-
-// AllowedPartial returns true if the user originally unmarshalled this message with
-// AllowPartial set to true
-func (lazy *XXX_lazyUnmarshalInfo) AllowedPartial() bool {
- return (lazy.unmarshalFlags & piface.UnmarshalCheckRequired) == 0
-}
-
-func protoFieldNumber(tag uint32) uint32 {
- return tag >> 3
-}
-
-// buildIndex builds an index of the specified protobuf, return the index
-// array and an error.
-func buildIndex(buf []byte) ([]IndexEntry, error) {
- index := make([]IndexEntry, 0, 16)
- var lastProtoFieldNum uint32
- var outOfOrder bool
-
- var r BufferReader = NewBufferReader(buf)
-
- for !r.Done() {
- var tag uint32
- var err error
- var curPos = r.Pos
- // INLINED: tag, err = r.DecodeVarint32()
- {
- i := r.Pos
- buf := r.Buf
-
- if i >= len(buf) {
- return nil, errOutOfBounds
- } else if buf[i] < 0x80 {
- r.Pos++
- tag = uint32(buf[i])
- } else if r.Remaining() < 5 {
- var v uint64
- v, err = r.DecodeVarintSlow()
- tag = uint32(v)
- } else {
- var v uint32
- // we already checked the first byte
- tag = uint32(buf[i]) & 127
- i++
-
- v = uint32(buf[i])
- i++
- tag |= (v & 127) << 7
- if v < 128 {
- goto done
- }
-
- v = uint32(buf[i])
- i++
- tag |= (v & 127) << 14
- if v < 128 {
- goto done
- }
-
- v = uint32(buf[i])
- i++
- tag |= (v & 127) << 21
- if v < 128 {
- goto done
- }
-
- v = uint32(buf[i])
- i++
- tag |= (v & 127) << 28
- if v < 128 {
- goto done
- }
-
- return nil, errOutOfBounds
-
- done:
- r.Pos = i
- }
- }
- // DONE: tag, err = r.DecodeVarint32()
-
- fieldNum := protoFieldNumber(tag)
- if fieldNum < lastProtoFieldNum {
- outOfOrder = true
- }
-
- // Skip the current value -- will skip over an entire group as well.
- // INLINED: err = r.SkipValue(tag)
- wireType := tag & 0x7
- switch protowire.Type(wireType) {
- case protowire.VarintType:
- // INLINED: err = r.SkipVarint()
- i := r.Pos
-
- if len(r.Buf)-i < 10 {
- // Use DecodeVarintSlow() to skip while
- // checking for buffer overflow, but ignore result
- _, err = r.DecodeVarintSlow()
- goto out2
- }
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- i++
-
- if r.Buf[i] < 0x80 {
- goto out
- }
- return nil, errOverflow
- out:
- r.Pos = i + 1
- // DONE: err = r.SkipVarint()
- case protowire.Fixed64Type:
- err = r.SkipFixed64()
- case protowire.BytesType:
- var n uint32
- n, err = r.DecodeVarint32()
- if err == nil {
- err = r.Skip(int(n))
- }
- case protowire.StartGroupType:
- err = r.SkipGroup(tag)
- case protowire.Fixed32Type:
- err = r.SkipFixed32()
- default:
- err = fmt.Errorf("Unexpected wire type (%d)", wireType)
- }
- // DONE: err = r.SkipValue(tag)
-
- out2:
- if err != nil {
- return nil, err
- }
- if fieldNum != lastProtoFieldNum {
- index = append(index, IndexEntry{FieldNum: fieldNum,
- Start: uint32(curPos),
- End: uint32(r.Pos)},
- )
- } else {
- index[len(index)-1].End = uint32(r.Pos)
- index[len(index)-1].MultipleContiguous = true
- }
- lastProtoFieldNum = fieldNum
- }
- if outOfOrder {
- sort.Slice(index, func(i, j int) bool {
- return index[i].FieldNum < index[j].FieldNum ||
- (index[i].FieldNum == index[j].FieldNum &&
- index[i].Start < index[j].Start)
- })
- }
- return index, nil
-}
-
-func (lazy *XXX_lazyUnmarshalInfo) SizeField(num uint32) (size int) {
- start, end, found, _, multipleEntries := lazy.FindFieldInProto(num)
- if multipleEntries != nil {
- for _, entry := range multipleEntries {
- size += int(entry.End - entry.Start)
- }
- return size
- }
- if !found {
- return 0
- }
- return int(end - start)
-}
-
-func (lazy *XXX_lazyUnmarshalInfo) AppendField(b []byte, num uint32) ([]byte, bool) {
- start, end, found, _, multipleEntries := lazy.FindFieldInProto(num)
- if multipleEntries != nil {
- for _, entry := range multipleEntries {
- b = append(b, lazy.Protobuf[entry.Start:entry.End]...)
- }
- return b, true
- }
- if !found {
- return nil, false
- }
- b = append(b, lazy.Protobuf[start:end]...)
- return b, true
-}
-
-func (lazy *XXX_lazyUnmarshalInfo) SetIndex(index []IndexEntry) {
- atomicStoreIndex(&lazy.index, &index)
-}
-
-// FindFieldInProto looks for field fieldNum in lazyUnmarshalInfo information
-// (including protobuf), returns startOffset/endOffset/found.
-func (lazy *XXX_lazyUnmarshalInfo) FindFieldInProto(fieldNum uint32) (start, end uint32, found, multipleContiguous bool, multipleEntries []IndexEntry) {
- if lazy.Protobuf == nil {
- // There is no backing protobuf for this message -- it was made from a builder
- return 0, 0, false, false, nil
- }
- index := atomicLoadIndex(&lazy.index)
- if index == nil {
- r, err := buildIndex(lazy.Protobuf)
- if err != nil {
- panic(fmt.Sprintf("findFieldInfo: error building index when looking for field %d: %v", fieldNum, err))
- }
- // lazy.index is a pointer to the slice returned by BuildIndex
- index = &r
- atomicStoreIndex(&lazy.index, index)
- }
- return lookupField(index, fieldNum)
-}
-
-// lookupField returns the offset at which the indicated field starts using
-// the index, offset immediately after field ends (including all instances of
-// a repeated field), and bools indicating if field was found and if there
-// are multiple encodings of the field in the byte range.
-//
-// To hande the uncommon case where there are repeated encodings for the same
-// field which are not consecutive in the protobuf (so we need to returns
-// multiple start/end offsets), we also return a slice multipleEntries. If
-// multipleEntries is non-nil, then multiple entries were found, and the
-// values in the slice should be used, rather than start/end/found.
-func lookupField(indexp *[]IndexEntry, fieldNum uint32) (start, end uint32, found bool, multipleContiguous bool, multipleEntries []IndexEntry) {
- // The pointer indexp to the index was already loaded atomically.
- // The slice is uniquely associated with the pointer, so it doesn't
- // need to be loaded atomically.
- index := *indexp
- for i, entry := range index {
- if fieldNum == entry.FieldNum {
- if i < len(index)-1 && entry.FieldNum == index[i+1].FieldNum {
- // Handle the uncommon case where there are
- // repeated entries for the same field which
- // are not contiguous in the protobuf.
- multiple := make([]IndexEntry, 1, 2)
- multiple[0] = IndexEntry{fieldNum, entry.Start, entry.End, entry.MultipleContiguous}
- i++
- for i < len(index) && index[i].FieldNum == fieldNum {
- multiple = append(multiple, IndexEntry{fieldNum, index[i].Start, index[i].End, index[i].MultipleContiguous})
- i++
- }
- return 0, 0, false, false, multiple
-
- }
- return entry.Start, entry.End, true, entry.MultipleContiguous, nil
- }
- if fieldNum < entry.FieldNum {
- return 0, 0, false, false, nil
- }
- }
- return 0, 0, false, false, nil
-}
diff --git a/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go
deleted file mode 100644
index dc2a64ca6..000000000
--- a/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protolazy
-
-import (
- "sync/atomic"
- "unsafe"
-)
-
-func atomicLoadIndex(p **[]IndexEntry) *[]IndexEntry {
- return (*[]IndexEntry)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
-}
-func atomicStoreIndex(p **[]IndexEntry, v *[]IndexEntry) {
- atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
-}
diff --git a/vendor/google.golang.org/protobuf/internal/set/ints.go b/vendor/google.golang.org/protobuf/internal/set/ints.go
deleted file mode 100644
index d3d7f89ab..000000000
--- a/vendor/google.golang.org/protobuf/internal/set/ints.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package set provides simple set data structures for uint64s.
-package set
-
-import "math/bits"
-
-// int64s represents a set of integers within the range of 0..63.
-type int64s uint64
-
-func (bs *int64s) Len() int {
- return bits.OnesCount64(uint64(*bs))
-}
-func (bs *int64s) Has(n uint64) bool {
- return uint64(*bs)&(uint64(1)<<n) > 0
-}
-func (bs *int64s) Set(n uint64) {
- *(*uint64)(bs) |= uint64(1) << n
-}
-func (bs *int64s) Clear(n uint64) {
- *(*uint64)(bs) &^= uint64(1) << n
-}
-
-// Ints represents a set of integers within the range of 0..math.MaxUint64.
-type Ints struct {
- lo int64s
- hi map[uint64]struct{}
-}
-
-func (bs *Ints) Len() int {
- return bs.lo.Len() + len(bs.hi)
-}
-func (bs *Ints) Has(n uint64) bool {
- if n < 64 {
- return bs.lo.Has(n)
- }
- _, ok := bs.hi[n]
- return ok
-}
-func (bs *Ints) Set(n uint64) {
- if n < 64 {
- bs.lo.Set(n)
- return
- }
- if bs.hi == nil {
- bs.hi = make(map[uint64]struct{})
- }
- bs.hi[n] = struct{}{}
-}
-func (bs *Ints) Clear(n uint64) {
- if n < 64 {
- bs.lo.Clear(n)
- return
- }
- delete(bs.hi, n)
-}
diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings.go b/vendor/google.golang.org/protobuf/internal/strs/strings.go
deleted file mode 100644
index a6e7df244..000000000
--- a/vendor/google.golang.org/protobuf/internal/strs/strings.go
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package strs provides string manipulation functionality specific to protobuf.
-package strs
-
-import (
- "go/token"
- "strings"
- "unicode"
- "unicode/utf8"
-
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// EnforceUTF8 reports whether to enforce strict UTF-8 validation.
-func EnforceUTF8(fd protoreflect.FieldDescriptor) bool {
- if flags.ProtoLegacy || fd.Syntax() == protoreflect.Editions {
- if fd, ok := fd.(interface{ EnforceUTF8() bool }); ok {
- return fd.EnforceUTF8()
- }
- }
- return fd.Syntax() == protoreflect.Proto3
-}
-
-// GoCamelCase camel-cases a protobuf name for use as a Go identifier.
-//
-// If there is an interior underscore followed by a lower case letter,
-// drop the underscore and convert the letter to upper case.
-func GoCamelCase(s string) string {
- // Invariant: if the next letter is lower case, it must be converted
- // to upper case.
- // That is, we process a word at a time, where words are marked by _ or
- // upper case letter. Digits are treated as words.
- var b []byte
- for i := 0; i < len(s); i++ {
- c := s[i]
- switch {
- case c == '.' && i+1 < len(s) && isASCIILower(s[i+1]):
- // Skip over '.' in ".{{lowercase}}".
- case c == '.':
- b = append(b, '_') // convert '.' to '_'
- case c == '_' && (i == 0 || s[i-1] == '.'):
- // Convert initial '_' to ensure we start with a capital letter.
- // Do the same for '_' after '.' to match historic behavior.
- b = append(b, 'X') // convert '_' to 'X'
- case c == '_' && i+1 < len(s) && isASCIILower(s[i+1]):
- // Skip over '_' in "_{{lowercase}}".
- case isASCIIDigit(c):
- b = append(b, c)
- default:
- // Assume we have a letter now - if not, it's a bogus identifier.
- // The next word is a sequence of characters that must start upper case.
- if isASCIILower(c) {
- c -= 'a' - 'A' // convert lowercase to uppercase
- }
- b = append(b, c)
-
- // Accept lower case sequence that follows.
- for ; i+1 < len(s) && isASCIILower(s[i+1]); i++ {
- b = append(b, s[i+1])
- }
- }
- }
- return string(b)
-}
-
-// GoSanitized converts a string to a valid Go identifier.
-func GoSanitized(s string) string {
- // Sanitize the input to the set of valid characters,
- // which must be '_' or be in the Unicode L or N categories.
- s = strings.Map(func(r rune) rune {
- if unicode.IsLetter(r) || unicode.IsDigit(r) {
- return r
- }
- return '_'
- }, s)
-
- // Prepend '_' in the event of a Go keyword conflict or if
- // the identifier is invalid (does not start in the Unicode L category).
- r, _ := utf8.DecodeRuneInString(s)
- if token.Lookup(s).IsKeyword() || !unicode.IsLetter(r) {
- return "_" + s
- }
- return s
-}
-
-// JSONCamelCase converts a snake_case identifier to a camelCase identifier,
-// according to the protobuf JSON specification.
-func JSONCamelCase(s string) string {
- var b []byte
- var wasUnderscore bool
- for i := 0; i < len(s); i++ { // proto identifiers are always ASCII
- c := s[i]
- if c != '_' {
- if wasUnderscore && isASCIILower(c) {
- c -= 'a' - 'A' // convert to uppercase
- }
- b = append(b, c)
- }
- wasUnderscore = c == '_'
- }
- return string(b)
-}
-
-// JSONSnakeCase converts a camelCase identifier to a snake_case identifier,
-// according to the protobuf JSON specification.
-func JSONSnakeCase(s string) string {
- var b []byte
- for i := 0; i < len(s); i++ { // proto identifiers are always ASCII
- c := s[i]
- if isASCIIUpper(c) {
- b = append(b, '_')
- c += 'a' - 'A' // convert to lowercase
- }
- b = append(b, c)
- }
- return string(b)
-}
-
-// MapEntryName derives the name of the map entry message given the field name.
-// See protoc v3.8.0: src/google/protobuf/descriptor.cc:254-276,6057
-func MapEntryName(s string) string {
- var b []byte
- upperNext := true
- for _, c := range s {
- switch {
- case c == '_':
- upperNext = true
- case upperNext:
- b = append(b, byte(unicode.ToUpper(c)))
- upperNext = false
- default:
- b = append(b, byte(c))
- }
- }
- b = append(b, "Entry"...)
- return string(b)
-}
-
-// EnumValueName derives the camel-cased enum value name.
-// See protoc v3.8.0: src/google/protobuf/descriptor.cc:297-313
-func EnumValueName(s string) string {
- var b []byte
- upperNext := true
- for _, c := range s {
- switch {
- case c == '_':
- upperNext = true
- case upperNext:
- b = append(b, byte(unicode.ToUpper(c)))
- upperNext = false
- default:
- b = append(b, byte(unicode.ToLower(c)))
- upperNext = false
- }
- }
- return string(b)
-}
-
-// TrimEnumPrefix trims the enum name prefix from an enum value name,
-// where the prefix is all lowercase without underscores.
-// See protoc v3.8.0: src/google/protobuf/descriptor.cc:330-375
-func TrimEnumPrefix(s, prefix string) string {
- s0 := s // original input
- for len(s) > 0 && len(prefix) > 0 {
- if s[0] == '_' {
- s = s[1:]
- continue
- }
- if unicode.ToLower(rune(s[0])) != rune(prefix[0]) {
- return s0 // no prefix match
- }
- s, prefix = s[1:], prefix[1:]
- }
- if len(prefix) > 0 {
- return s0 // no prefix match
- }
- s = strings.TrimLeft(s, "_")
- if len(s) == 0 {
- return s0 // avoid returning empty string
- }
- return s
-}
-
-func isASCIILower(c byte) bool {
- return 'a' <= c && c <= 'z'
-}
-func isASCIIUpper(c byte) bool {
- return 'A' <= c && c <= 'Z'
-}
-func isASCIIDigit(c byte) bool {
- return '0' <= c && c <= '9'
-}
diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
deleted file mode 100644
index 832a7988f..000000000
--- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.21
-
-package strs
-
-import (
- "unsafe"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-type (
- stringHeader struct {
- Data unsafe.Pointer
- Len int
- }
- sliceHeader struct {
- Data unsafe.Pointer
- Len int
- Cap int
- }
-)
-
-// UnsafeString returns an unsafe string reference of b.
-// The caller must treat the input slice as immutable.
-//
-// WARNING: Use carefully. The returned result must not leak to the end user
-// unless the input slice is provably immutable.
-func UnsafeString(b []byte) (s string) {
- src := (*sliceHeader)(unsafe.Pointer(&b))
- dst := (*stringHeader)(unsafe.Pointer(&s))
- dst.Data = src.Data
- dst.Len = src.Len
- return s
-}
-
-// UnsafeBytes returns an unsafe bytes slice reference of s.
-// The caller must treat returned slice as immutable.
-//
-// WARNING: Use carefully. The returned result must not leak to the end user.
-func UnsafeBytes(s string) (b []byte) {
- src := (*stringHeader)(unsafe.Pointer(&s))
- dst := (*sliceHeader)(unsafe.Pointer(&b))
- dst.Data = src.Data
- dst.Len = src.Len
- dst.Cap = src.Len
- return b
-}
-
-// Builder builds a set of strings with shared lifetime.
-// This differs from strings.Builder, which is for building a single string.
-type Builder struct {
- buf []byte
-}
-
-// AppendFullName is equivalent to protoreflect.FullName.Append,
-// but optimized for large batches where each name has a shared lifetime.
-func (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName {
- n := len(prefix) + len(".") + len(name)
- if len(prefix) == 0 {
- n -= len(".")
- }
- sb.grow(n)
- sb.buf = append(sb.buf, prefix...)
- sb.buf = append(sb.buf, '.')
- sb.buf = append(sb.buf, name...)
- return protoreflect.FullName(sb.last(n))
-}
-
-// MakeString is equivalent to string(b), but optimized for large batches
-// with a shared lifetime.
-func (sb *Builder) MakeString(b []byte) string {
- sb.grow(len(b))
- sb.buf = append(sb.buf, b...)
- return sb.last(len(b))
-}
-
-func (sb *Builder) grow(n int) {
- if cap(sb.buf)-len(sb.buf) >= n {
- return
- }
-
- // Unlike strings.Builder, we do not need to copy over the contents
- // of the old buffer since our builder provides no API for
- // retrieving previously created strings.
- sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n))
-}
-
-func (sb *Builder) last(n int) string {
- return UnsafeString(sb.buf[len(sb.buf)-n:])
-}
diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
deleted file mode 100644
index 1ffddf687..000000000
--- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.21
-
-package strs
-
-import (
- "unsafe"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// UnsafeString returns an unsafe string reference of b.
-// The caller must treat the input slice as immutable.
-//
-// WARNING: Use carefully. The returned result must not leak to the end user
-// unless the input slice is provably immutable.
-func UnsafeString(b []byte) string {
- return unsafe.String(unsafe.SliceData(b), len(b))
-}
-
-// UnsafeBytes returns an unsafe bytes slice reference of s.
-// The caller must treat returned slice as immutable.
-//
-// WARNING: Use carefully. The returned result must not leak to the end user.
-func UnsafeBytes(s string) []byte {
- return unsafe.Slice(unsafe.StringData(s), len(s))
-}
-
-// Builder builds a set of strings with shared lifetime.
-// This differs from strings.Builder, which is for building a single string.
-type Builder struct {
- buf []byte
-}
-
-// AppendFullName is equivalent to protoreflect.FullName.Append,
-// but optimized for large batches where each name has a shared lifetime.
-func (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName {
- n := len(prefix) + len(".") + len(name)
- if len(prefix) == 0 {
- n -= len(".")
- }
- sb.grow(n)
- sb.buf = append(sb.buf, prefix...)
- sb.buf = append(sb.buf, '.')
- sb.buf = append(sb.buf, name...)
- return protoreflect.FullName(sb.last(n))
-}
-
-// MakeString is equivalent to string(b), but optimized for large batches
-// with a shared lifetime.
-func (sb *Builder) MakeString(b []byte) string {
- sb.grow(len(b))
- sb.buf = append(sb.buf, b...)
- return sb.last(len(b))
-}
-
-func (sb *Builder) grow(n int) {
- if cap(sb.buf)-len(sb.buf) >= n {
- return
- }
-
- // Unlike strings.Builder, we do not need to copy over the contents
- // of the old buffer since our builder provides no API for
- // retrieving previously created strings.
- sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n))
-}
-
-func (sb *Builder) last(n int) string {
- return UnsafeString(sb.buf[len(sb.buf)-n:])
-}
diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go
deleted file mode 100644
index f5c06280f..000000000
--- a/vendor/google.golang.org/protobuf/internal/version/version.go
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package version records versioning information about this module.
-package version
-
-import (
- "fmt"
- "strings"
-)
-
-// These constants determine the current version of this module.
-//
-// For our release process, we enforce the following rules:
-// - Tagged releases use a tag that is identical to String.
-// - Tagged releases never reference a commit where the String
-// contains "devel".
-// - The set of all commits in this repository where String
-// does not contain "devel" must have a unique String.
-//
-// Steps for tagging a new release:
-//
-// 1. Create a new CL.
-//
-// 2. Update Minor, Patch, and/or PreRelease as necessary.
-// PreRelease must not contain the string "devel".
-//
-// 3. Since the last released minor version, have there been any changes to
-// generator that relies on new functionality in the runtime?
-// If yes, then increment RequiredGenerated.
-//
-// 4. Since the last released minor version, have there been any changes to
-// the runtime that removes support for old .pb.go source code?
-// If yes, then increment SupportMinimum.
-//
-// 5. Send out the CL for review and submit it.
-// Note that the next CL in step 8 must be submitted after this CL
-// without any other CLs in-between.
-//
-// 6. Tag a new version, where the tag is is the current String.
-//
-// 7. Write release notes for all notable changes
-// between this release and the last release.
-//
-// 8. Create a new CL.
-//
-// 9. Update PreRelease to include the string "devel".
-// For example: "" -> "devel" or "rc.1" -> "rc.1.devel"
-//
-// 10. Send out the CL for review and submit it.
-const (
- Major = 1
- Minor = 36
- Patch = 3
- PreRelease = ""
-)
-
-// String formats the version string for this module in semver format.
-//
-// Examples:
-//
-// v1.20.1
-// v1.21.0-rc.1
-func String() string {
- v := fmt.Sprintf("v%d.%d.%d", Major, Minor, Patch)
- if PreRelease != "" {
- v += "-" + PreRelease
-
- // TODO: Add metadata about the commit or build hash.
- // See https://golang.org/issue/29814
- // See https://golang.org/issue/33533
- var metadata string
- if strings.Contains(PreRelease, "devel") && metadata != "" {
- v += "+" + metadata
- }
- }
- return v
-}
diff --git a/vendor/google.golang.org/protobuf/proto/checkinit.go b/vendor/google.golang.org/protobuf/proto/checkinit.go
deleted file mode 100644
index 3e9a6a2f6..000000000
--- a/vendor/google.golang.org/protobuf/proto/checkinit.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// CheckInitialized returns an error if any required fields in m are not set.
-func CheckInitialized(m Message) error {
- // Treat a nil message interface as an "untyped" empty message,
- // which we assume to have no required fields.
- if m == nil {
- return nil
- }
-
- return checkInitialized(m.ProtoReflect())
-}
-
-// CheckInitialized returns an error if any required fields in m are not set.
-func checkInitialized(m protoreflect.Message) error {
- if methods := protoMethods(m); methods != nil && methods.CheckInitialized != nil {
- _, err := methods.CheckInitialized(protoiface.CheckInitializedInput{
- Message: m,
- })
- return err
- }
- return checkInitializedSlow(m)
-}
-
-func checkInitializedSlow(m protoreflect.Message) error {
- md := m.Descriptor()
- fds := md.Fields()
- for i, nums := 0, md.RequiredNumbers(); i < nums.Len(); i++ {
- fd := fds.ByNumber(nums.Get(i))
- if !m.Has(fd) {
- return errors.RequiredNotSet(string(fd.FullName()))
- }
- }
- var err error
- m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- switch {
- case fd.IsList():
- if fd.Message() == nil {
- return true
- }
- for i, list := 0, v.List(); i < list.Len() && err == nil; i++ {
- err = checkInitialized(list.Get(i).Message())
- }
- case fd.IsMap():
- if fd.MapValue().Message() == nil {
- return true
- }
- v.Map().Range(func(key protoreflect.MapKey, v protoreflect.Value) bool {
- err = checkInitialized(v.Message())
- return err == nil
- })
- default:
- if fd.Message() == nil {
- return true
- }
- err = checkInitialized(v.Message())
- }
- return err == nil
- })
- return err
-}
diff --git a/vendor/google.golang.org/protobuf/proto/decode.go b/vendor/google.golang.org/protobuf/proto/decode.go
deleted file mode 100644
index e28d7acb3..000000000
--- a/vendor/google.golang.org/protobuf/proto/decode.go
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/genid"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// UnmarshalOptions configures the unmarshaler.
-//
-// Example usage:
-//
-// err := UnmarshalOptions{DiscardUnknown: true}.Unmarshal(b, m)
-type UnmarshalOptions struct {
- pragma.NoUnkeyedLiterals
-
- // Merge merges the input into the destination message.
- // The default behavior is to always reset the message before unmarshaling,
- // unless Merge is specified.
- Merge bool
-
- // AllowPartial accepts input for messages that will result in missing
- // required fields. If AllowPartial is false (the default), Unmarshal will
- // return an error if there are any missing required fields.
- AllowPartial bool
-
- // If DiscardUnknown is set, unknown fields are ignored.
- DiscardUnknown bool
-
- // Resolver is used for looking up types when unmarshaling extension fields.
- // If nil, this defaults to using protoregistry.GlobalTypes.
- Resolver interface {
- FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
- FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
- }
-
- // RecursionLimit limits how deeply messages may be nested.
- // If zero, a default limit is applied.
- RecursionLimit int
-
- //
- // NoLazyDecoding turns off lazy decoding, which otherwise is enabled by
- // default. Lazy decoding only affects submessages (annotated with [lazy =
- // true] in the .proto file) within messages that use the Opaque API.
- NoLazyDecoding bool
-}
-
-// Unmarshal parses the wire-format message in b and places the result in m.
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-//
-// See the [UnmarshalOptions] type if you need more control.
-func Unmarshal(b []byte, m Message) error {
- _, err := UnmarshalOptions{RecursionLimit: protowire.DefaultRecursionLimit}.unmarshal(b, m.ProtoReflect())
- return err
-}
-
-// Unmarshal parses the wire-format message in b and places the result in m.
-// The provided message must be mutable (e.g., a non-nil pointer to a message).
-func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error {
- if o.RecursionLimit == 0 {
- o.RecursionLimit = protowire.DefaultRecursionLimit
- }
- _, err := o.unmarshal(b, m.ProtoReflect())
- return err
-}
-
-// UnmarshalState parses a wire-format message and places the result in m.
-//
-// This method permits fine-grained control over the unmarshaler.
-// Most users should use [Unmarshal] instead.
-func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
- if o.RecursionLimit == 0 {
- o.RecursionLimit = protowire.DefaultRecursionLimit
- }
- return o.unmarshal(in.Buf, in.Message)
-}
-
-// unmarshal is a centralized function that all unmarshal operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for unmarshal that do not go through this.
-func (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out protoiface.UnmarshalOutput, err error) {
- if o.Resolver == nil {
- o.Resolver = protoregistry.GlobalTypes
- }
- if !o.Merge {
- Reset(m.Interface())
- }
- allowPartial := o.AllowPartial
- o.Merge = true
- o.AllowPartial = true
- methods := protoMethods(m)
- if methods != nil && methods.Unmarshal != nil &&
- !(o.DiscardUnknown && methods.Flags&protoiface.SupportUnmarshalDiscardUnknown == 0) {
- in := protoiface.UnmarshalInput{
- Message: m,
- Buf: b,
- Resolver: o.Resolver,
- Depth: o.RecursionLimit,
- }
- if o.DiscardUnknown {
- in.Flags |= protoiface.UnmarshalDiscardUnknown
- }
-
- if !allowPartial {
- // This does not affect how current unmarshal functions work, it just allows them
- // to record this for lazy the decoding case.
- in.Flags |= protoiface.UnmarshalCheckRequired
- }
- if o.NoLazyDecoding {
- in.Flags |= protoiface.UnmarshalNoLazyDecoding
- }
-
- out, err = methods.Unmarshal(in)
- } else {
- o.RecursionLimit--
- if o.RecursionLimit < 0 {
- return out, errors.New("exceeded max recursion depth")
- }
- err = o.unmarshalMessageSlow(b, m)
- }
- if err != nil {
- return out, err
- }
- if allowPartial || (out.Flags&protoiface.UnmarshalInitialized != 0) {
- return out, nil
- }
- return out, checkInitialized(m)
-}
-
-func (o UnmarshalOptions) unmarshalMessage(b []byte, m protoreflect.Message) error {
- _, err := o.unmarshal(b, m)
- return err
-}
-
-func (o UnmarshalOptions) unmarshalMessageSlow(b []byte, m protoreflect.Message) error {
- md := m.Descriptor()
- if messageset.IsMessageSet(md) {
- return o.unmarshalMessageSet(b, m)
- }
- fields := md.Fields()
- for len(b) > 0 {
- // Parse the tag (field number and wire type).
- num, wtyp, tagLen := protowire.ConsumeTag(b)
- if tagLen < 0 {
- return errDecode
- }
- if num > protowire.MaxValidNumber {
- return errDecode
- }
-
- // Find the field descriptor for this field number.
- fd := fields.ByNumber(num)
- if fd == nil && md.ExtensionRanges().Has(num) {
- extType, err := o.Resolver.FindExtensionByNumber(md.FullName(), num)
- if err != nil && err != protoregistry.NotFound {
- return errors.New("%v: unable to resolve extension %v: %v", md.FullName(), num, err)
- }
- if extType != nil {
- fd = extType.TypeDescriptor()
- }
- }
- var err error
- if fd == nil {
- err = errUnknown
- } else if flags.ProtoLegacyWeak {
- if fd.IsWeak() && fd.Message().IsPlaceholder() {
- err = errUnknown // weak referent is not linked in
- }
- }
-
- // Parse the field value.
- var valLen int
- switch {
- case err != nil:
- case fd.IsList():
- valLen, err = o.unmarshalList(b[tagLen:], wtyp, m.Mutable(fd).List(), fd)
- case fd.IsMap():
- valLen, err = o.unmarshalMap(b[tagLen:], wtyp, m.Mutable(fd).Map(), fd)
- default:
- valLen, err = o.unmarshalSingular(b[tagLen:], wtyp, m, fd)
- }
- if err != nil {
- if err != errUnknown {
- return err
- }
- valLen = protowire.ConsumeFieldValue(num, wtyp, b[tagLen:])
- if valLen < 0 {
- return errDecode
- }
- if !o.DiscardUnknown {
- m.SetUnknown(append(m.GetUnknown(), b[:tagLen+valLen]...))
- }
- }
- b = b[tagLen+valLen:]
- }
- return nil
-}
-
-func (o UnmarshalOptions) unmarshalSingular(b []byte, wtyp protowire.Type, m protoreflect.Message, fd protoreflect.FieldDescriptor) (n int, err error) {
- v, n, err := o.unmarshalScalar(b, wtyp, fd)
- if err != nil {
- return 0, err
- }
- switch fd.Kind() {
- case protoreflect.GroupKind, protoreflect.MessageKind:
- m2 := m.Mutable(fd).Message()
- if err := o.unmarshalMessage(v.Bytes(), m2); err != nil {
- return n, err
- }
- default:
- // Non-message scalars replace the previous value.
- m.Set(fd, v)
- }
- return n, nil
-}
-
-func (o UnmarshalOptions) unmarshalMap(b []byte, wtyp protowire.Type, mapv protoreflect.Map, fd protoreflect.FieldDescriptor) (n int, err error) {
- if wtyp != protowire.BytesType {
- return 0, errUnknown
- }
- b, n = protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- var (
- keyField = fd.MapKey()
- valField = fd.MapValue()
- key protoreflect.Value
- val protoreflect.Value
- haveKey bool
- haveVal bool
- )
- switch valField.Kind() {
- case protoreflect.GroupKind, protoreflect.MessageKind:
- val = mapv.NewValue()
- }
- // Map entries are represented as a two-element message with fields
- // containing the key and value.
- for len(b) > 0 {
- num, wtyp, n := protowire.ConsumeTag(b)
- if n < 0 {
- return 0, errDecode
- }
- if num > protowire.MaxValidNumber {
- return 0, errDecode
- }
- b = b[n:]
- err = errUnknown
- switch num {
- case genid.MapEntry_Key_field_number:
- key, n, err = o.unmarshalScalar(b, wtyp, keyField)
- if err != nil {
- break
- }
- haveKey = true
- case genid.MapEntry_Value_field_number:
- var v protoreflect.Value
- v, n, err = o.unmarshalScalar(b, wtyp, valField)
- if err != nil {
- break
- }
- switch valField.Kind() {
- case protoreflect.GroupKind, protoreflect.MessageKind:
- if err := o.unmarshalMessage(v.Bytes(), val.Message()); err != nil {
- return 0, err
- }
- default:
- val = v
- }
- haveVal = true
- }
- if err == errUnknown {
- n = protowire.ConsumeFieldValue(num, wtyp, b)
- if n < 0 {
- return 0, errDecode
- }
- } else if err != nil {
- return 0, err
- }
- b = b[n:]
- }
- // Every map entry should have entries for key and value, but this is not strictly required.
- if !haveKey {
- key = keyField.Default()
- }
- if !haveVal {
- switch valField.Kind() {
- case protoreflect.GroupKind, protoreflect.MessageKind:
- default:
- val = valField.Default()
- }
- }
- mapv.Set(key.MapKey(), val)
- return n, nil
-}
-
-// errUnknown is used internally to indicate fields which should be added
-// to the unknown field set of a message. It is never returned from an exported
-// function.
-var errUnknown = errors.New("BUG: internal error (unknown)")
-
-var errDecode = errors.New("cannot parse invalid wire-format data")
diff --git a/vendor/google.golang.org/protobuf/proto/decode_gen.go b/vendor/google.golang.org/protobuf/proto/decode_gen.go
deleted file mode 100644
index 301eeb20f..000000000
--- a/vendor/google.golang.org/protobuf/proto/decode_gen.go
+++ /dev/null
@@ -1,603 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package proto
-
-import (
- "math"
- "unicode/utf8"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// unmarshalScalar decodes a value of the given kind.
-//
-// Message values are decoded into a []byte which aliases the input data.
-func (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp protowire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) {
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfBool(protowire.DecodeBool(v)), n, nil
- case protoreflect.EnumKind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), n, nil
- case protoreflect.Int32Kind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfInt32(int32(v)), n, nil
- case protoreflect.Sint32Kind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), n, nil
- case protoreflect.Uint32Kind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfUint32(uint32(v)), n, nil
- case protoreflect.Int64Kind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfInt64(int64(v)), n, nil
- case protoreflect.Sint64Kind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), n, nil
- case protoreflect.Uint64Kind:
- if wtyp != protowire.VarintType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfUint64(v), n, nil
- case protoreflect.Sfixed32Kind:
- if wtyp != protowire.Fixed32Type {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfInt32(int32(v)), n, nil
- case protoreflect.Fixed32Kind:
- if wtyp != protowire.Fixed32Type {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfUint32(uint32(v)), n, nil
- case protoreflect.FloatKind:
- if wtyp != protowire.Fixed32Type {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), n, nil
- case protoreflect.Sfixed64Kind:
- if wtyp != protowire.Fixed64Type {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfInt64(int64(v)), n, nil
- case protoreflect.Fixed64Kind:
- if wtyp != protowire.Fixed64Type {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfUint64(v), n, nil
- case protoreflect.DoubleKind:
- if wtyp != protowire.Fixed64Type {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfFloat64(math.Float64frombits(v)), n, nil
- case protoreflect.StringKind:
- if wtyp != protowire.BytesType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return val, 0, errDecode
- }
- if strs.EnforceUTF8(fd) && !utf8.Valid(v) {
- return protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName()))
- }
- return protoreflect.ValueOfString(string(v)), n, nil
- case protoreflect.BytesKind:
- if wtyp != protowire.BytesType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), n, nil
- case protoreflect.MessageKind:
- if wtyp != protowire.BytesType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfBytes(v), n, nil
- case protoreflect.GroupKind:
- if wtyp != protowire.StartGroupType {
- return val, 0, errUnknown
- }
- v, n := protowire.ConsumeGroup(fd.Number(), b)
- if n < 0 {
- return val, 0, errDecode
- }
- return protoreflect.ValueOfBytes(v), n, nil
- default:
- return val, 0, errUnknown
- }
-}
-
-func (o UnmarshalOptions) unmarshalList(b []byte, wtyp protowire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) {
- switch fd.Kind() {
- case protoreflect.BoolKind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))
- return n, nil
- case protoreflect.EnumKind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))
- return n, nil
- case protoreflect.Int32Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- return n, nil
- case protoreflect.Sint32Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))
- return n, nil
- case protoreflect.Uint32Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- return n, nil
- case protoreflect.Int64Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- return n, nil
- case protoreflect.Sint64Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))
- return n, nil
- case protoreflect.Uint64Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeVarint(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfUint64(v))
- }
- return n, nil
- }
- if wtyp != protowire.VarintType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeVarint(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfUint64(v))
- return n, nil
- case protoreflect.Sfixed32Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeFixed32(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- }
- return n, nil
- }
- if wtyp != protowire.Fixed32Type {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfInt32(int32(v)))
- return n, nil
- case protoreflect.Fixed32Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeFixed32(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- }
- return n, nil
- }
- if wtyp != protowire.Fixed32Type {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfUint32(uint32(v)))
- return n, nil
- case protoreflect.FloatKind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeFixed32(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
- }
- return n, nil
- }
- if wtyp != protowire.Fixed32Type {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeFixed32(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))
- return n, nil
- case protoreflect.Sfixed64Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeFixed64(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- }
- return n, nil
- }
- if wtyp != protowire.Fixed64Type {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfInt64(int64(v)))
- return n, nil
- case protoreflect.Fixed64Kind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeFixed64(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfUint64(v))
- }
- return n, nil
- }
- if wtyp != protowire.Fixed64Type {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfUint64(v))
- return n, nil
- case protoreflect.DoubleKind:
- if wtyp == protowire.BytesType {
- buf, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- for len(buf) > 0 {
- v, n := protowire.ConsumeFixed64(buf)
- if n < 0 {
- return 0, errDecode
- }
- buf = buf[n:]
- list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
- }
- return n, nil
- }
- if wtyp != protowire.Fixed64Type {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeFixed64(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))
- return n, nil
- case protoreflect.StringKind:
- if wtyp != protowire.BytesType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- if strs.EnforceUTF8(fd) && !utf8.Valid(v) {
- return 0, errors.InvalidUTF8(string(fd.FullName()))
- }
- list.Append(protoreflect.ValueOfString(string(v)))
- return n, nil
- case protoreflect.BytesKind:
- if wtyp != protowire.BytesType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))
- return n, nil
- case protoreflect.MessageKind:
- if wtyp != protowire.BytesType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeBytes(b)
- if n < 0 {
- return 0, errDecode
- }
- m := list.NewElement()
- if err := o.unmarshalMessage(v, m.Message()); err != nil {
- return 0, err
- }
- list.Append(m)
- return n, nil
- case protoreflect.GroupKind:
- if wtyp != protowire.StartGroupType {
- return 0, errUnknown
- }
- v, n := protowire.ConsumeGroup(fd.Number(), b)
- if n < 0 {
- return 0, errDecode
- }
- m := list.NewElement()
- if err := o.unmarshalMessage(v, m.Message()); err != nil {
- return 0, err
- }
- list.Append(m)
- return n, nil
- default:
- return 0, errUnknown
- }
-}
-
-// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.
-var emptyBuf [0]byte
diff --git a/vendor/google.golang.org/protobuf/proto/doc.go b/vendor/google.golang.org/protobuf/proto/doc.go
deleted file mode 100644
index 80ed16a0c..000000000
--- a/vendor/google.golang.org/protobuf/proto/doc.go
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package proto provides functions operating on protocol buffer messages.
-//
-// For documentation on protocol buffers in general, see:
-// https://protobuf.dev.
-//
-// For a tutorial on using protocol buffers with Go, see:
-// https://protobuf.dev/getting-started/gotutorial.
-//
-// For a guide to generated Go protocol buffer code, see:
-// https://protobuf.dev/reference/go/go-generated.
-//
-// # Binary serialization
-//
-// This package contains functions to convert to and from the wire format,
-// an efficient binary serialization of protocol buffers.
-//
-// - [Size] reports the size of a message in the wire format.
-//
-// - [Marshal] converts a message to the wire format.
-// The [MarshalOptions] type provides more control over wire marshaling.
-//
-// - [Unmarshal] converts a message from the wire format.
-// The [UnmarshalOptions] type provides more control over wire unmarshaling.
-//
-// # Basic message operations
-//
-// - [Clone] makes a deep copy of a message.
-//
-// - [Merge] merges the content of a message into another.
-//
-// - [Equal] compares two messages. For more control over comparisons
-// and detailed reporting of differences, see package
-// [google.golang.org/protobuf/testing/protocmp].
-//
-// - [Reset] clears the content of a message.
-//
-// - [CheckInitialized] reports whether all required fields in a message are set.
-//
-// # Optional scalar constructors
-//
-// The API for some generated messages represents optional scalar fields
-// as pointers to a value. For example, an optional string field has the
-// Go type *string.
-//
-// - [Bool], [Int32], [Int64], [Uint32], [Uint64], [Float32], [Float64], and [String]
-// take a value and return a pointer to a new instance of it,
-// to simplify construction of optional field values.
-//
-// Generated enum types usually have an Enum method which performs the
-// same operation.
-//
-// Optional scalar fields are only supported in proto2.
-//
-// # Extension accessors
-//
-// - [HasExtension], [GetExtension], [SetExtension], and [ClearExtension]
-// access extension field values in a protocol buffer message.
-//
-// Extension fields are only supported in proto2.
-//
-// # Related packages
-//
-// - Package [google.golang.org/protobuf/encoding/protojson] converts messages to
-// and from JSON.
-//
-// - Package [google.golang.org/protobuf/encoding/prototext] converts messages to
-// and from the text format.
-//
-// - Package [google.golang.org/protobuf/reflect/protoreflect] provides a
-// reflection interface for protocol buffer data types.
-//
-// - Package [google.golang.org/protobuf/testing/protocmp] provides features
-// to compare protocol buffer messages with the [github.com/google/go-cmp/cmp]
-// package.
-//
-// - Package [google.golang.org/protobuf/types/dynamicpb] provides a dynamic
-// message type, suitable for working with messages where the protocol buffer
-// type is only known at runtime.
-//
-// This module contains additional packages for more specialized use cases.
-// Consult the individual package documentation for details.
-package proto
diff --git a/vendor/google.golang.org/protobuf/proto/encode.go b/vendor/google.golang.org/protobuf/proto/encode.go
deleted file mode 100644
index f0473c586..000000000
--- a/vendor/google.golang.org/protobuf/proto/encode.go
+++ /dev/null
@@ -1,355 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "errors"
- "fmt"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/order"
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-
- protoerrors "google.golang.org/protobuf/internal/errors"
-)
-
-// MarshalOptions configures the marshaler.
-//
-// Example usage:
-//
-// b, err := MarshalOptions{Deterministic: true}.Marshal(m)
-type MarshalOptions struct {
- pragma.NoUnkeyedLiterals
-
- // AllowPartial allows messages that have missing required fields to marshal
- // without returning an error. If AllowPartial is false (the default),
- // Marshal will return an error if there are any missing required fields.
- AllowPartial bool
-
- // Deterministic controls whether the same message will always be
- // serialized to the same bytes within the same binary.
- //
- // Setting this option guarantees that repeated serialization of
- // the same message will return the same bytes, and that different
- // processes of the same binary (which may be executing on different
- // machines) will serialize equal messages to the same bytes.
- // It has no effect on the resulting size of the encoded message compared
- // to a non-deterministic marshal.
- //
- // Note that the deterministic serialization is NOT canonical across
- // languages. It is not guaranteed to remain stable over time. It is
- // unstable across different builds with schema changes due to unknown
- // fields. Users who need canonical serialization (e.g., persistent
- // storage in a canonical form, fingerprinting, etc.) must define
- // their own canonicalization specification and implement their own
- // serializer rather than relying on this API.
- //
- // If deterministic serialization is requested, map entries will be
- // sorted by keys in lexographical order. This is an implementation
- // detail and subject to change.
- Deterministic bool
-
- // UseCachedSize indicates that the result of a previous Size call
- // may be reused.
- //
- // Setting this option asserts that:
- //
- // 1. Size has previously been called on this message with identical
- // options (except for UseCachedSize itself).
- //
- // 2. The message and all its submessages have not changed in any
- // way since the Size call. For lazily decoded messages, accessing
- // a message results in decoding the message, which is a change.
- //
- // If either of these invariants is violated,
- // the results are undefined and may include panics or corrupted output.
- //
- // Implementations MAY take this option into account to provide
- // better performance, but there is no guarantee that they will do so.
- // There is absolutely no guarantee that Size followed by Marshal with
- // UseCachedSize set will perform equivalently to Marshal alone.
- UseCachedSize bool
-}
-
-// flags turns the specified MarshalOptions (user-facing) into
-// protoiface.MarshalInputFlags (used internally by the marshaler).
-//
-// See impl.marshalOptions.Options for the inverse operation.
-func (o MarshalOptions) flags() protoiface.MarshalInputFlags {
- var flags protoiface.MarshalInputFlags
-
- // Note: o.AllowPartial is always forced to true by MarshalOptions.marshal,
- // which is why it is not a part of MarshalInputFlags.
-
- if o.Deterministic {
- flags |= protoiface.MarshalDeterministic
- }
-
- if o.UseCachedSize {
- flags |= protoiface.MarshalUseCachedSize
- }
-
- return flags
-}
-
-// Marshal returns the wire-format encoding of m.
-//
-// This is the most common entry point for encoding a Protobuf message.
-//
-// See the [MarshalOptions] type if you need more control.
-func Marshal(m Message) ([]byte, error) {
- // Treat nil message interface as an empty message; nothing to output.
- if m == nil {
- return nil, nil
- }
-
- out, err := MarshalOptions{}.marshal(nil, m.ProtoReflect())
- if len(out.Buf) == 0 && err == nil {
- out.Buf = emptyBytesForMessage(m)
- }
- return out.Buf, err
-}
-
-// Marshal returns the wire-format encoding of m.
-func (o MarshalOptions) Marshal(m Message) ([]byte, error) {
- // Treat nil message interface as an empty message; nothing to output.
- if m == nil {
- return nil, nil
- }
-
- out, err := o.marshal(nil, m.ProtoReflect())
- if len(out.Buf) == 0 && err == nil {
- out.Buf = emptyBytesForMessage(m)
- }
- return out.Buf, err
-}
-
-// emptyBytesForMessage returns a nil buffer if and only if m is invalid,
-// otherwise it returns a non-nil empty buffer.
-//
-// This is to assist the edge-case where user-code does the following:
-//
-// m1.OptionalBytes, _ = proto.Marshal(m2)
-//
-// where they expect the proto2 "optional_bytes" field to be populated
-// if any only if m2 is a valid message.
-func emptyBytesForMessage(m Message) []byte {
- if m == nil || !m.ProtoReflect().IsValid() {
- return nil
- }
- return emptyBuf[:]
-}
-
-// MarshalAppend appends the wire-format encoding of m to b,
-// returning the result.
-//
-// This is a less common entry point than [Marshal], which is only needed if you
-// need to supply your own buffers for performance reasons.
-func (o MarshalOptions) MarshalAppend(b []byte, m Message) ([]byte, error) {
- // Treat nil message interface as an empty message; nothing to append.
- if m == nil {
- return b, nil
- }
-
- out, err := o.marshal(b, m.ProtoReflect())
- return out.Buf, err
-}
-
-// MarshalState returns the wire-format encoding of a message.
-//
-// This method permits fine-grained control over the marshaler.
-// Most users should use [Marshal] instead.
-func (o MarshalOptions) MarshalState(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
- return o.marshal(in.Buf, in.Message)
-}
-
-// marshal is a centralized function that all marshal operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for marshal that do not go through this.
-func (o MarshalOptions) marshal(b []byte, m protoreflect.Message) (out protoiface.MarshalOutput, err error) {
- allowPartial := o.AllowPartial
- o.AllowPartial = true
- if methods := protoMethods(m); methods != nil && methods.Marshal != nil &&
- !(o.Deterministic && methods.Flags&protoiface.SupportMarshalDeterministic == 0) {
- in := protoiface.MarshalInput{
- Message: m,
- Buf: b,
- Flags: o.flags(),
- }
- if methods.Size != nil {
- sout := methods.Size(protoiface.SizeInput{
- Message: m,
- Flags: in.Flags,
- })
- if cap(b) < len(b)+sout.Size {
- in.Buf = make([]byte, len(b), growcap(cap(b), len(b)+sout.Size))
- copy(in.Buf, b)
- }
- in.Flags |= protoiface.MarshalUseCachedSize
- }
- out, err = methods.Marshal(in)
- } else {
- out.Buf, err = o.marshalMessageSlow(b, m)
- }
- if err != nil {
- var mismatch *protoerrors.SizeMismatchError
- if errors.As(err, &mismatch) {
- return out, fmt.Errorf("marshaling %s: %v", string(m.Descriptor().FullName()), err)
- }
- return out, err
- }
- if allowPartial {
- return out, nil
- }
- return out, checkInitialized(m)
-}
-
-func (o MarshalOptions) marshalMessage(b []byte, m protoreflect.Message) ([]byte, error) {
- out, err := o.marshal(b, m)
- return out.Buf, err
-}
-
-// growcap scales up the capacity of a slice.
-//
-// Given a slice with a current capacity of oldcap and a desired
-// capacity of wantcap, growcap returns a new capacity >= wantcap.
-//
-// The algorithm is mostly identical to the one used by append as of Go 1.14.
-func growcap(oldcap, wantcap int) (newcap int) {
- if wantcap > oldcap*2 {
- newcap = wantcap
- } else if oldcap < 1024 {
- // The Go 1.14 runtime takes this case when len(s) < 1024,
- // not when cap(s) < 1024. The difference doesn't seem
- // significant here.
- newcap = oldcap * 2
- } else {
- newcap = oldcap
- for 0 < newcap && newcap < wantcap {
- newcap += newcap / 4
- }
- if newcap <= 0 {
- newcap = wantcap
- }
- }
- return newcap
-}
-
-func (o MarshalOptions) marshalMessageSlow(b []byte, m protoreflect.Message) ([]byte, error) {
- if messageset.IsMessageSet(m.Descriptor()) {
- return o.marshalMessageSet(b, m)
- }
- fieldOrder := order.AnyFieldOrder
- if o.Deterministic {
- // TODO: This should use a more natural ordering like NumberFieldOrder,
- // but doing so breaks golden tests that make invalid assumption about
- // output stability of this implementation.
- fieldOrder = order.LegacyFieldOrder
- }
- var err error
- order.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- b, err = o.marshalField(b, fd, v)
- return err == nil
- })
- if err != nil {
- return b, err
- }
- b = append(b, m.GetUnknown()...)
- return b, nil
-}
-
-func (o MarshalOptions) marshalField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) {
- switch {
- case fd.IsList():
- return o.marshalList(b, fd, value.List())
- case fd.IsMap():
- return o.marshalMap(b, fd, value.Map())
- default:
- b = protowire.AppendTag(b, fd.Number(), wireTypes[fd.Kind()])
- return o.marshalSingular(b, fd, value)
- }
-}
-
-func (o MarshalOptions) marshalList(b []byte, fd protoreflect.FieldDescriptor, list protoreflect.List) ([]byte, error) {
- if fd.IsPacked() && list.Len() > 0 {
- b = protowire.AppendTag(b, fd.Number(), protowire.BytesType)
- b, pos := appendSpeculativeLength(b)
- for i, llen := 0, list.Len(); i < llen; i++ {
- var err error
- b, err = o.marshalSingular(b, fd, list.Get(i))
- if err != nil {
- return b, err
- }
- }
- b = finishSpeculativeLength(b, pos)
- return b, nil
- }
-
- kind := fd.Kind()
- for i, llen := 0, list.Len(); i < llen; i++ {
- var err error
- b = protowire.AppendTag(b, fd.Number(), wireTypes[kind])
- b, err = o.marshalSingular(b, fd, list.Get(i))
- if err != nil {
- return b, err
- }
- }
- return b, nil
-}
-
-func (o MarshalOptions) marshalMap(b []byte, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) ([]byte, error) {
- keyf := fd.MapKey()
- valf := fd.MapValue()
- keyOrder := order.AnyKeyOrder
- if o.Deterministic {
- keyOrder = order.GenericKeyOrder
- }
- var err error
- order.RangeEntries(mapv, keyOrder, func(key protoreflect.MapKey, value protoreflect.Value) bool {
- b = protowire.AppendTag(b, fd.Number(), protowire.BytesType)
- var pos int
- b, pos = appendSpeculativeLength(b)
-
- b, err = o.marshalField(b, keyf, key.Value())
- if err != nil {
- return false
- }
- b, err = o.marshalField(b, valf, value)
- if err != nil {
- return false
- }
- b = finishSpeculativeLength(b, pos)
- return true
- })
- return b, err
-}
-
-// When encoding length-prefixed fields, we speculatively set aside some number of bytes
-// for the length, encode the data, and then encode the length (shifting the data if necessary
-// to make room).
-const speculativeLength = 1
-
-func appendSpeculativeLength(b []byte) ([]byte, int) {
- pos := len(b)
- b = append(b, "\x00\x00\x00\x00"[:speculativeLength]...)
- return b, pos
-}
-
-func finishSpeculativeLength(b []byte, pos int) []byte {
- mlen := len(b) - pos - speculativeLength
- msiz := protowire.SizeVarint(uint64(mlen))
- if msiz != speculativeLength {
- for i := 0; i < msiz-speculativeLength; i++ {
- b = append(b, 0)
- }
- copy(b[pos+msiz:], b[pos+speculativeLength:])
- b = b[:pos+msiz+mlen]
- }
- protowire.AppendVarint(b[:pos], uint64(mlen))
- return b
-}
diff --git a/vendor/google.golang.org/protobuf/proto/encode_gen.go b/vendor/google.golang.org/protobuf/proto/encode_gen.go
deleted file mode 100644
index 185dacfb4..000000000
--- a/vendor/google.golang.org/protobuf/proto/encode_gen.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package proto
-
-import (
- "math"
- "unicode/utf8"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/strs"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-var wireTypes = map[protoreflect.Kind]protowire.Type{
- protoreflect.BoolKind: protowire.VarintType,
- protoreflect.EnumKind: protowire.VarintType,
- protoreflect.Int32Kind: protowire.VarintType,
- protoreflect.Sint32Kind: protowire.VarintType,
- protoreflect.Uint32Kind: protowire.VarintType,
- protoreflect.Int64Kind: protowire.VarintType,
- protoreflect.Sint64Kind: protowire.VarintType,
- protoreflect.Uint64Kind: protowire.VarintType,
- protoreflect.Sfixed32Kind: protowire.Fixed32Type,
- protoreflect.Fixed32Kind: protowire.Fixed32Type,
- protoreflect.FloatKind: protowire.Fixed32Type,
- protoreflect.Sfixed64Kind: protowire.Fixed64Type,
- protoreflect.Fixed64Kind: protowire.Fixed64Type,
- protoreflect.DoubleKind: protowire.Fixed64Type,
- protoreflect.StringKind: protowire.BytesType,
- protoreflect.BytesKind: protowire.BytesType,
- protoreflect.MessageKind: protowire.BytesType,
- protoreflect.GroupKind: protowire.StartGroupType,
-}
-
-func (o MarshalOptions) marshalSingular(b []byte, fd protoreflect.FieldDescriptor, v protoreflect.Value) ([]byte, error) {
- switch fd.Kind() {
- case protoreflect.BoolKind:
- b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))
- case protoreflect.EnumKind:
- b = protowire.AppendVarint(b, uint64(v.Enum()))
- case protoreflect.Int32Kind:
- b = protowire.AppendVarint(b, uint64(int32(v.Int())))
- case protoreflect.Sint32Kind:
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))
- case protoreflect.Uint32Kind:
- b = protowire.AppendVarint(b, uint64(uint32(v.Uint())))
- case protoreflect.Int64Kind:
- b = protowire.AppendVarint(b, uint64(v.Int()))
- case protoreflect.Sint64Kind:
- b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))
- case protoreflect.Uint64Kind:
- b = protowire.AppendVarint(b, v.Uint())
- case protoreflect.Sfixed32Kind:
- b = protowire.AppendFixed32(b, uint32(v.Int()))
- case protoreflect.Fixed32Kind:
- b = protowire.AppendFixed32(b, uint32(v.Uint()))
- case protoreflect.FloatKind:
- b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))
- case protoreflect.Sfixed64Kind:
- b = protowire.AppendFixed64(b, uint64(v.Int()))
- case protoreflect.Fixed64Kind:
- b = protowire.AppendFixed64(b, v.Uint())
- case protoreflect.DoubleKind:
- b = protowire.AppendFixed64(b, math.Float64bits(v.Float()))
- case protoreflect.StringKind:
- if strs.EnforceUTF8(fd) && !utf8.ValidString(v.String()) {
- return b, errors.InvalidUTF8(string(fd.FullName()))
- }
- b = protowire.AppendString(b, v.String())
- case protoreflect.BytesKind:
- b = protowire.AppendBytes(b, v.Bytes())
- case protoreflect.MessageKind:
- var pos int
- var err error
- b, pos = appendSpeculativeLength(b)
- b, err = o.marshalMessage(b, v.Message())
- if err != nil {
- return b, err
- }
- b = finishSpeculativeLength(b, pos)
- case protoreflect.GroupKind:
- var err error
- b, err = o.marshalMessage(b, v.Message())
- if err != nil {
- return b, err
- }
- b = protowire.AppendVarint(b, protowire.EncodeTag(fd.Number(), protowire.EndGroupType))
- default:
- return b, errors.New("invalid kind %v", fd.Kind())
- }
- return b, nil
-}
diff --git a/vendor/google.golang.org/protobuf/proto/equal.go b/vendor/google.golang.org/protobuf/proto/equal.go
deleted file mode 100644
index c36d4a9cd..000000000
--- a/vendor/google.golang.org/protobuf/proto/equal.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "reflect"
-
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// Equal reports whether two messages are equal,
-// by recursively comparing the fields of the message.
-//
-// - Bytes fields are equal if they contain identical bytes.
-// Empty bytes (regardless of nil-ness) are considered equal.
-//
-// - Floating-point fields are equal if they contain the same value.
-// Unlike the == operator, a NaN is equal to another NaN.
-//
-// - Other scalar fields are equal if they contain the same value.
-//
-// - Message fields are equal if they have
-// the same set of populated known and extension field values, and
-// the same set of unknown fields values.
-//
-// - Lists are equal if they are the same length and
-// each corresponding element is equal.
-//
-// - Maps are equal if they have the same set of keys and
-// the corresponding value for each key is equal.
-//
-// An invalid message is not equal to a valid message.
-// An invalid message is only equal to another invalid message of the
-// same type. An invalid message often corresponds to a nil pointer
-// of the concrete message type. For example, (*pb.M)(nil) is not equal
-// to &pb.M{}.
-// If two valid messages marshal to the same bytes under deterministic
-// serialization, then Equal is guaranteed to report true.
-func Equal(x, y Message) bool {
- if x == nil || y == nil {
- return x == nil && y == nil
- }
- if reflect.TypeOf(x).Kind() == reflect.Ptr && x == y {
- // Avoid an expensive comparison if both inputs are identical pointers.
- return true
- }
- mx := x.ProtoReflect()
- my := y.ProtoReflect()
- if mx.IsValid() != my.IsValid() {
- return false
- }
-
- // Only one of the messages needs to implement the fast-path for it to work.
- pmx := protoMethods(mx)
- pmy := protoMethods(my)
- if pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil {
- return pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal
- }
-
- vx := protoreflect.ValueOfMessage(mx)
- vy := protoreflect.ValueOfMessage(my)
- return vx.Equal(vy)
-}
diff --git a/vendor/google.golang.org/protobuf/proto/extension.go b/vendor/google.golang.org/protobuf/proto/extension.go
deleted file mode 100644
index 78445d116..000000000
--- a/vendor/google.golang.org/protobuf/proto/extension.go
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// HasExtension reports whether an extension field is populated.
-// It returns false if m is invalid or if xt does not extend m.
-func HasExtension(m Message, xt protoreflect.ExtensionType) bool {
- // Treat nil message interface or descriptor as an empty message; no populated
- // fields.
- if m == nil || xt == nil {
- return false
- }
-
- // As a special-case, we reports invalid or mismatching descriptors
- // as always not being populated (since they aren't).
- mr := m.ProtoReflect()
- xd := xt.TypeDescriptor()
- if mr.Descriptor() != xd.ContainingMessage() {
- return false
- }
-
- return mr.Has(xd)
-}
-
-// ClearExtension clears an extension field such that subsequent
-// [HasExtension] calls return false.
-// It panics if m is invalid or if xt does not extend m.
-func ClearExtension(m Message, xt protoreflect.ExtensionType) {
- m.ProtoReflect().Clear(xt.TypeDescriptor())
-}
-
-// GetExtension retrieves the value for an extension field.
-// If the field is unpopulated, it returns the default value for
-// scalars and an immutable, empty value for lists or messages.
-// It panics if xt does not extend m.
-//
-// The type of the value is dependent on the field type of the extension.
-// For extensions generated by protoc-gen-go, the Go type is as follows:
-//
-// ╔═══════════════════╤═════════════════════════╗
-// ║ Go type │ Protobuf kind ║
-// ╠═══════════════════╪═════════════════════════╣
-// ║ bool │ bool ║
-// ║ int32 │ int32, sint32, sfixed32 ║
-// ║ int64 │ int64, sint64, sfixed64 ║
-// ║ uint32 │ uint32, fixed32 ║
-// ║ uint64 │ uint64, fixed64 ║
-// ║ float32 │ float ║
-// ║ float64 │ double ║
-// ║ string │ string ║
-// ║ []byte │ bytes ║
-// ║ protoreflect.Enum │ enum ║
-// ║ proto.Message │ message, group ║
-// ╚═══════════════════╧═════════════════════════╝
-//
-// The protoreflect.Enum and proto.Message types are the concrete Go type
-// associated with the named enum or message. Repeated fields are represented
-// using a Go slice of the base element type.
-//
-// If a generated extension descriptor variable is directly passed to
-// GetExtension, then the call should be followed immediately by a
-// type assertion to the expected output value. For example:
-//
-// mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage)
-//
-// This pattern enables static analysis tools to verify that the asserted type
-// matches the Go type associated with the extension field and
-// also enables a possible future migration to a type-safe extension API.
-//
-// Since singular messages are the most common extension type, the pattern of
-// calling HasExtension followed by GetExtension may be simplified to:
-//
-// if mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil {
-// ... // make use of mm
-// }
-//
-// The mm variable is non-nil if and only if HasExtension reports true.
-func GetExtension(m Message, xt protoreflect.ExtensionType) any {
- // Treat nil message interface as an empty message; return the default.
- if m == nil {
- return xt.InterfaceOf(xt.Zero())
- }
-
- return xt.InterfaceOf(m.ProtoReflect().Get(xt.TypeDescriptor()))
-}
-
-// SetExtension stores the value of an extension field.
-// It panics if m is invalid, xt does not extend m, or if type of v
-// is invalid for the specified extension field.
-//
-// The type of the value is dependent on the field type of the extension.
-// For extensions generated by protoc-gen-go, the Go type is as follows:
-//
-// ╔═══════════════════╤═════════════════════════╗
-// ║ Go type │ Protobuf kind ║
-// ╠═══════════════════╪═════════════════════════╣
-// ║ bool │ bool ║
-// ║ int32 │ int32, sint32, sfixed32 ║
-// ║ int64 │ int64, sint64, sfixed64 ║
-// ║ uint32 │ uint32, fixed32 ║
-// ║ uint64 │ uint64, fixed64 ║
-// ║ float32 │ float ║
-// ║ float64 │ double ║
-// ║ string │ string ║
-// ║ []byte │ bytes ║
-// ║ protoreflect.Enum │ enum ║
-// ║ proto.Message │ message, group ║
-// ╚═══════════════════╧═════════════════════════╝
-//
-// The protoreflect.Enum and proto.Message types are the concrete Go type
-// associated with the named enum or message. Repeated fields are represented
-// using a Go slice of the base element type.
-//
-// If a generated extension descriptor variable is directly passed to
-// SetExtension (e.g., foopb.E_MyExtension), then the value should be a
-// concrete type that matches the expected Go type for the extension descriptor
-// so that static analysis tools can verify type correctness.
-// This also enables a possible future migration to a type-safe extension API.
-func SetExtension(m Message, xt protoreflect.ExtensionType, v any) {
- xd := xt.TypeDescriptor()
- pv := xt.ValueOf(v)
-
- // Specially treat an invalid list, map, or message as clear.
- isValid := true
- switch {
- case xd.IsList():
- isValid = pv.List().IsValid()
- case xd.IsMap():
- isValid = pv.Map().IsValid()
- case xd.Message() != nil:
- isValid = pv.Message().IsValid()
- }
- if !isValid {
- m.ProtoReflect().Clear(xd)
- return
- }
-
- m.ProtoReflect().Set(xd, pv)
-}
-
-// RangeExtensions iterates over every populated extension field in m in an
-// undefined order, calling f for each extension type and value encountered.
-// It returns immediately if f returns false.
-// While iterating, mutating operations may only be performed
-// on the current extension field.
-func RangeExtensions(m Message, f func(protoreflect.ExtensionType, any) bool) {
- // Treat nil message interface as an empty message; nothing to range over.
- if m == nil {
- return
- }
-
- m.ProtoReflect().Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- if fd.IsExtension() {
- xt := fd.(protoreflect.ExtensionTypeDescriptor).Type()
- vi := xt.InterfaceOf(v)
- return f(xt, vi)
- }
- return true
- })
-}
diff --git a/vendor/google.golang.org/protobuf/proto/merge.go b/vendor/google.golang.org/protobuf/proto/merge.go
deleted file mode 100644
index 3c6fe5780..000000000
--- a/vendor/google.golang.org/protobuf/proto/merge.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "fmt"
-
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// Merge merges src into dst, which must be a message with the same descriptor.
-//
-// Populated scalar fields in src are copied to dst, while populated
-// singular messages in src are merged into dst by recursively calling Merge.
-// The elements of every list field in src is appended to the corresponded
-// list fields in dst. The entries of every map field in src is copied into
-// the corresponding map field in dst, possibly replacing existing entries.
-// The unknown fields of src are appended to the unknown fields of dst.
-//
-// It is semantically equivalent to unmarshaling the encoded form of src
-// into dst with the [UnmarshalOptions.Merge] option specified.
-func Merge(dst, src Message) {
- // TODO: Should nil src be treated as semantically equivalent to a
- // untyped, read-only, empty message? What about a nil dst?
-
- dstMsg, srcMsg := dst.ProtoReflect(), src.ProtoReflect()
- if dstMsg.Descriptor() != srcMsg.Descriptor() {
- if got, want := dstMsg.Descriptor().FullName(), srcMsg.Descriptor().FullName(); got != want {
- panic(fmt.Sprintf("descriptor mismatch: %v != %v", got, want))
- }
- panic("descriptor mismatch")
- }
- mergeOptions{}.mergeMessage(dstMsg, srcMsg)
-}
-
-// Clone returns a deep copy of m.
-// If the top-level message is invalid, it returns an invalid message as well.
-func Clone(m Message) Message {
- // NOTE: Most usages of Clone assume the following properties:
- // t := reflect.TypeOf(m)
- // t == reflect.TypeOf(m.ProtoReflect().New().Interface())
- // t == reflect.TypeOf(m.ProtoReflect().Type().Zero().Interface())
- //
- // Embedding protobuf messages breaks this since the parent type will have
- // a forwarded ProtoReflect method, but the Interface method will return
- // the underlying embedded message type.
- if m == nil {
- return nil
- }
- src := m.ProtoReflect()
- if !src.IsValid() {
- return src.Type().Zero().Interface()
- }
- dst := src.New()
- mergeOptions{}.mergeMessage(dst, src)
- return dst.Interface()
-}
-
-// mergeOptions provides a namespace for merge functions, and can be
-// exported in the future if we add user-visible merge options.
-type mergeOptions struct{}
-
-func (o mergeOptions) mergeMessage(dst, src protoreflect.Message) {
- methods := protoMethods(dst)
- if methods != nil && methods.Merge != nil {
- in := protoiface.MergeInput{
- Destination: dst,
- Source: src,
- }
- out := methods.Merge(in)
- if out.Flags&protoiface.MergeComplete != 0 {
- return
- }
- }
-
- if !dst.IsValid() {
- panic(fmt.Sprintf("cannot merge into invalid %v message", dst.Descriptor().FullName()))
- }
-
- src.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- switch {
- case fd.IsList():
- o.mergeList(dst.Mutable(fd).List(), v.List(), fd)
- case fd.IsMap():
- o.mergeMap(dst.Mutable(fd).Map(), v.Map(), fd.MapValue())
- case fd.Message() != nil:
- o.mergeMessage(dst.Mutable(fd).Message(), v.Message())
- case fd.Kind() == protoreflect.BytesKind:
- dst.Set(fd, o.cloneBytes(v))
- default:
- dst.Set(fd, v)
- }
- return true
- })
-
- if len(src.GetUnknown()) > 0 {
- dst.SetUnknown(append(dst.GetUnknown(), src.GetUnknown()...))
- }
-}
-
-func (o mergeOptions) mergeList(dst, src protoreflect.List, fd protoreflect.FieldDescriptor) {
- // Merge semantics appends to the end of the existing list.
- for i, n := 0, src.Len(); i < n; i++ {
- switch v := src.Get(i); {
- case fd.Message() != nil:
- dstv := dst.NewElement()
- o.mergeMessage(dstv.Message(), v.Message())
- dst.Append(dstv)
- case fd.Kind() == protoreflect.BytesKind:
- dst.Append(o.cloneBytes(v))
- default:
- dst.Append(v)
- }
- }
-}
-
-func (o mergeOptions) mergeMap(dst, src protoreflect.Map, fd protoreflect.FieldDescriptor) {
- // Merge semantics replaces, rather than merges into existing entries.
- src.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
- switch {
- case fd.Message() != nil:
- dstv := dst.NewValue()
- o.mergeMessage(dstv.Message(), v.Message())
- dst.Set(k, dstv)
- case fd.Kind() == protoreflect.BytesKind:
- dst.Set(k, o.cloneBytes(v))
- default:
- dst.Set(k, v)
- }
- return true
- })
-}
-
-func (o mergeOptions) cloneBytes(v protoreflect.Value) protoreflect.Value {
- return protoreflect.ValueOfBytes(append([]byte{}, v.Bytes()...))
-}
diff --git a/vendor/google.golang.org/protobuf/proto/messageset.go b/vendor/google.golang.org/protobuf/proto/messageset.go
deleted file mode 100644
index 575d14831..000000000
--- a/vendor/google.golang.org/protobuf/proto/messageset.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/internal/order"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/reflect/protoregistry"
-)
-
-func (o MarshalOptions) sizeMessageSet(m protoreflect.Message) (size int) {
- m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- size += messageset.SizeField(fd.Number())
- size += protowire.SizeTag(messageset.FieldMessage)
- size += protowire.SizeBytes(o.size(v.Message()))
- return true
- })
- size += messageset.SizeUnknown(m.GetUnknown())
- return size
-}
-
-func (o MarshalOptions) marshalMessageSet(b []byte, m protoreflect.Message) ([]byte, error) {
- if !flags.ProtoLegacy {
- return b, errors.New("no support for message_set_wire_format")
- }
- fieldOrder := order.AnyFieldOrder
- if o.Deterministic {
- fieldOrder = order.NumberFieldOrder
- }
- var err error
- order.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- b, err = o.marshalMessageSetField(b, fd, v)
- return err == nil
- })
- if err != nil {
- return b, err
- }
- return messageset.AppendUnknown(b, m.GetUnknown())
-}
-
-func (o MarshalOptions) marshalMessageSetField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) {
- b = messageset.AppendFieldStart(b, fd.Number())
- b = protowire.AppendTag(b, messageset.FieldMessage, protowire.BytesType)
- calculatedSize := o.Size(value.Message().Interface())
- b = protowire.AppendVarint(b, uint64(calculatedSize))
- before := len(b)
- b, err := o.marshalMessage(b, value.Message())
- if err != nil {
- return b, err
- }
- if measuredSize := len(b) - before; calculatedSize != measuredSize {
- return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)
- }
- b = messageset.AppendFieldEnd(b)
- return b, nil
-}
-
-func (o UnmarshalOptions) unmarshalMessageSet(b []byte, m protoreflect.Message) error {
- if !flags.ProtoLegacy {
- return errors.New("no support for message_set_wire_format")
- }
- return messageset.Unmarshal(b, false, func(num protowire.Number, v []byte) error {
- err := o.unmarshalMessageSetField(m, num, v)
- if err == errUnknown {
- unknown := m.GetUnknown()
- unknown = protowire.AppendTag(unknown, num, protowire.BytesType)
- unknown = protowire.AppendBytes(unknown, v)
- m.SetUnknown(unknown)
- return nil
- }
- return err
- })
-}
-
-func (o UnmarshalOptions) unmarshalMessageSetField(m protoreflect.Message, num protowire.Number, v []byte) error {
- md := m.Descriptor()
- if !md.ExtensionRanges().Has(num) {
- return errUnknown
- }
- xt, err := o.Resolver.FindExtensionByNumber(md.FullName(), num)
- if err == protoregistry.NotFound {
- return errUnknown
- }
- if err != nil {
- return errors.New("%v: unable to resolve extension %v: %v", md.FullName(), num, err)
- }
- xd := xt.TypeDescriptor()
- if err := o.unmarshalMessage(v, m.Mutable(xd).Message()); err != nil {
- return err
- }
- return nil
-}
diff --git a/vendor/google.golang.org/protobuf/proto/proto.go b/vendor/google.golang.org/protobuf/proto/proto.go
deleted file mode 100644
index 7543ee6b2..000000000
--- a/vendor/google.golang.org/protobuf/proto/proto.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// Message is the top-level interface that all messages must implement.
-// It provides access to a reflective view of a message.
-// Any implementation of this interface may be used with all functions in the
-// protobuf module that accept a Message, except where otherwise specified.
-//
-// This is the v2 interface definition for protobuf messages.
-// The v1 interface definition is [github.com/golang/protobuf/proto.Message].
-//
-// - To convert a v1 message to a v2 message,
-// use [google.golang.org/protobuf/protoadapt.MessageV2Of].
-// - To convert a v2 message to a v1 message,
-// use [google.golang.org/protobuf/protoadapt.MessageV1Of].
-type Message = protoreflect.ProtoMessage
-
-// Error matches all errors produced by packages in the protobuf module
-// according to [errors.Is].
-//
-// Example usage:
-//
-// if errors.Is(err, proto.Error) { ... }
-var Error error
-
-func init() {
- Error = errors.Error
-}
-
-// MessageName returns the full name of m.
-// If m is nil, it returns an empty string.
-func MessageName(m Message) protoreflect.FullName {
- if m == nil {
- return ""
- }
- return m.ProtoReflect().Descriptor().FullName()
-}
diff --git a/vendor/google.golang.org/protobuf/proto/proto_methods.go b/vendor/google.golang.org/protobuf/proto/proto_methods.go
deleted file mode 100644
index 465e057b3..000000000
--- a/vendor/google.golang.org/protobuf/proto/proto_methods.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// The protoreflect build tag disables use of fast-path methods.
-//go:build !protoreflect
-// +build !protoreflect
-
-package proto
-
-import (
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-const hasProtoMethods = true
-
-func protoMethods(m protoreflect.Message) *protoiface.Methods {
- return m.ProtoMethods()
-}
diff --git a/vendor/google.golang.org/protobuf/proto/proto_reflect.go b/vendor/google.golang.org/protobuf/proto/proto_reflect.go
deleted file mode 100644
index 494d6ceef..000000000
--- a/vendor/google.golang.org/protobuf/proto/proto_reflect.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// The protoreflect build tag disables use of fast-path methods.
-//go:build protoreflect
-// +build protoreflect
-
-package proto
-
-import (
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-const hasProtoMethods = false
-
-func protoMethods(m protoreflect.Message) *protoiface.Methods {
- return nil
-}
diff --git a/vendor/google.golang.org/protobuf/proto/reset.go b/vendor/google.golang.org/protobuf/proto/reset.go
deleted file mode 100644
index 3d7f89436..000000000
--- a/vendor/google.golang.org/protobuf/proto/reset.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "fmt"
-
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// Reset clears every field in the message.
-// The resulting message shares no observable memory with its previous state
-// other than the memory for the message itself.
-func Reset(m Message) {
- if mr, ok := m.(interface{ Reset() }); ok && hasProtoMethods {
- mr.Reset()
- return
- }
- resetMessage(m.ProtoReflect())
-}
-
-func resetMessage(m protoreflect.Message) {
- if !m.IsValid() {
- panic(fmt.Sprintf("cannot reset invalid %v message", m.Descriptor().FullName()))
- }
-
- // Clear all known fields.
- fds := m.Descriptor().Fields()
- for i := 0; i < fds.Len(); i++ {
- m.Clear(fds.Get(i))
- }
-
- // Clear extension fields.
- m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool {
- m.Clear(fd)
- return true
- })
-
- // Clear unknown fields.
- m.SetUnknown(nil)
-}
diff --git a/vendor/google.golang.org/protobuf/proto/size.go b/vendor/google.golang.org/protobuf/proto/size.go
deleted file mode 100644
index c8675806c..000000000
--- a/vendor/google.golang.org/protobuf/proto/size.go
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-import (
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoiface"
-)
-
-// Size returns the size in bytes of the wire-format encoding of m.
-//
-// Note that Size might return more bytes than Marshal will write in the case of
-// lazily decoded messages that arrive in non-minimal wire format: see
-// https://protobuf.dev/reference/go/size/ for more details.
-func Size(m Message) int {
- return MarshalOptions{}.Size(m)
-}
-
-// Size returns the size in bytes of the wire-format encoding of m.
-//
-// Note that Size might return more bytes than Marshal will write in the case of
-// lazily decoded messages that arrive in non-minimal wire format: see
-// https://protobuf.dev/reference/go/size/ for more details.
-func (o MarshalOptions) Size(m Message) int {
- // Treat a nil message interface as an empty message; nothing to output.
- if m == nil {
- return 0
- }
-
- return o.size(m.ProtoReflect())
-}
-
-// size is a centralized function that all size operations go through.
-// For profiling purposes, avoid changing the name of this function or
-// introducing other code paths for size that do not go through this.
-func (o MarshalOptions) size(m protoreflect.Message) (size int) {
- methods := protoMethods(m)
- if methods != nil && methods.Size != nil {
- out := methods.Size(protoiface.SizeInput{
- Message: m,
- Flags: o.flags(),
- })
- return out.Size
- }
- if methods != nil && methods.Marshal != nil {
- // This is not efficient, but we don't have any choice.
- // This case is mainly used for legacy types with a Marshal method.
- out, _ := methods.Marshal(protoiface.MarshalInput{
- Message: m,
- Flags: o.flags(),
- })
- return len(out.Buf)
- }
- return o.sizeMessageSlow(m)
-}
-
-func (o MarshalOptions) sizeMessageSlow(m protoreflect.Message) (size int) {
- if messageset.IsMessageSet(m.Descriptor()) {
- return o.sizeMessageSet(m)
- }
- m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
- size += o.sizeField(fd, v)
- return true
- })
- size += len(m.GetUnknown())
- return size
-}
-
-func (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protoreflect.Value) (size int) {
- num := fd.Number()
- switch {
- case fd.IsList():
- return o.sizeList(num, fd, value.List())
- case fd.IsMap():
- return o.sizeMap(num, fd, value.Map())
- default:
- return protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), value)
- }
-}
-
-func (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) {
- sizeTag := protowire.SizeTag(num)
-
- if fd.IsPacked() && list.Len() > 0 {
- content := 0
- for i, llen := 0, list.Len(); i < llen; i++ {
- content += o.sizeSingular(num, fd.Kind(), list.Get(i))
- }
- return sizeTag + protowire.SizeBytes(content)
- }
-
- for i, llen := 0, list.Len(); i < llen; i++ {
- size += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i))
- }
- return size
-}
-
-func (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) {
- sizeTag := protowire.SizeTag(num)
-
- mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool {
- size += sizeTag
- size += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value))
- return true
- })
- return size
-}
diff --git a/vendor/google.golang.org/protobuf/proto/size_gen.go b/vendor/google.golang.org/protobuf/proto/size_gen.go
deleted file mode 100644
index 3cf61a824..000000000
--- a/vendor/google.golang.org/protobuf/proto/size_gen.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-types. DO NOT EDIT.
-
-package proto
-
-import (
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-func (o MarshalOptions) sizeSingular(num protowire.Number, kind protoreflect.Kind, v protoreflect.Value) int {
- switch kind {
- case protoreflect.BoolKind:
- return protowire.SizeVarint(protowire.EncodeBool(v.Bool()))
- case protoreflect.EnumKind:
- return protowire.SizeVarint(uint64(v.Enum()))
- case protoreflect.Int32Kind:
- return protowire.SizeVarint(uint64(int32(v.Int())))
- case protoreflect.Sint32Kind:
- return protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))
- case protoreflect.Uint32Kind:
- return protowire.SizeVarint(uint64(uint32(v.Uint())))
- case protoreflect.Int64Kind:
- return protowire.SizeVarint(uint64(v.Int()))
- case protoreflect.Sint64Kind:
- return protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))
- case protoreflect.Uint64Kind:
- return protowire.SizeVarint(v.Uint())
- case protoreflect.Sfixed32Kind:
- return protowire.SizeFixed32()
- case protoreflect.Fixed32Kind:
- return protowire.SizeFixed32()
- case protoreflect.FloatKind:
- return protowire.SizeFixed32()
- case protoreflect.Sfixed64Kind:
- return protowire.SizeFixed64()
- case protoreflect.Fixed64Kind:
- return protowire.SizeFixed64()
- case protoreflect.DoubleKind:
- return protowire.SizeFixed64()
- case protoreflect.StringKind:
- return protowire.SizeBytes(len(v.String()))
- case protoreflect.BytesKind:
- return protowire.SizeBytes(len(v.Bytes()))
- case protoreflect.MessageKind:
- return protowire.SizeBytes(o.size(v.Message()))
- case protoreflect.GroupKind:
- return protowire.SizeGroup(num, o.size(v.Message()))
- default:
- return 0
- }
-}
diff --git a/vendor/google.golang.org/protobuf/proto/wrapperopaque.go b/vendor/google.golang.org/protobuf/proto/wrapperopaque.go
deleted file mode 100644
index 267fd0f1f..000000000
--- a/vendor/google.golang.org/protobuf/proto/wrapperopaque.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-// ValueOrNil returns nil if has is false, or a pointer to a new variable
-// containing the value returned by the specified getter.
-//
-// This function is similar to the wrappers (proto.Int32(), proto.String(),
-// etc.), but is generic (works for any field type) and works with the hasser
-// and getter of a field, as opposed to a value.
-//
-// This is convenient when populating builder fields.
-//
-// Example:
-//
-// hop := attr.GetDirectHop()
-// injectedRoute := ripb.InjectedRoute_builder{
-// Prefixes: route.GetPrefixes(),
-// NextHop: proto.ValueOrNil(hop.HasAddress(), hop.GetAddress),
-// }
-func ValueOrNil[T any](has bool, getter func() T) *T {
- if !has {
- return nil
- }
- v := getter()
- return &v
-}
-
-// ValueOrDefault returns the protobuf message val if val is not nil, otherwise
-// it returns a pointer to an empty val message.
-//
-// This function allows for translating code from the old Open Struct API to the
-// new Opaque API.
-//
-// The old Open Struct API represented oneof fields with a wrapper struct:
-//
-// var signedImg *accountpb.SignedImage
-// profile := &accountpb.Profile{
-// // The Avatar oneof will be set, with an empty SignedImage.
-// Avatar: &accountpb.Profile_SignedImage{signedImg},
-// }
-//
-// The new Opaque API treats oneof fields like regular fields, there are no more
-// wrapper structs:
-//
-// var signedImg *accountpb.SignedImage
-// profile := &accountpb.Profile{}
-// profile.SetSignedImage(signedImg)
-//
-// For convenience, the Opaque API also offers Builders, which allow for a
-// direct translation of struct initialization. However, because Builders use
-// nilness to represent field presence (but there is no non-nil wrapper struct
-// anymore), Builders cannot distinguish between an unset oneof and a set oneof
-// with nil message. The above code would need to be translated with help of the
-// ValueOrDefault function to retain the same behavior:
-//
-// var signedImg *accountpb.SignedImage
-// return &accountpb.Profile_builder{
-// SignedImage: proto.ValueOrDefault(signedImg),
-// }.Build()
-func ValueOrDefault[T interface {
- *P
- Message
-}, P any](val T) T {
- if val == nil {
- return T(new(P))
- }
- return val
-}
-
-// ValueOrDefaultBytes is like ValueOrDefault but for working with fields of
-// type []byte.
-func ValueOrDefaultBytes(val []byte) []byte {
- if val == nil {
- return []byte{}
- }
- return val
-}
diff --git a/vendor/google.golang.org/protobuf/proto/wrappers.go b/vendor/google.golang.org/protobuf/proto/wrappers.go
deleted file mode 100644
index 653b12c3a..000000000
--- a/vendor/google.golang.org/protobuf/proto/wrappers.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proto
-
-// Bool stores v in a new bool value and returns a pointer to it.
-func Bool(v bool) *bool { return &v }
-
-// Int32 stores v in a new int32 value and returns a pointer to it.
-func Int32(v int32) *int32 { return &v }
-
-// Int64 stores v in a new int64 value and returns a pointer to it.
-func Int64(v int64) *int64 { return &v }
-
-// Float32 stores v in a new float32 value and returns a pointer to it.
-func Float32(v float32) *float32 { return &v }
-
-// Float64 stores v in a new float64 value and returns a pointer to it.
-func Float64(v float64) *float64 { return &v }
-
-// Uint32 stores v in a new uint32 value and returns a pointer to it.
-func Uint32(v uint32) *uint32 { return &v }
-
-// Uint64 stores v in a new uint64 value and returns a pointer to it.
-func Uint64(v uint64) *uint64 { return &v }
-
-// String stores v in a new string value and returns a pointer to it.
-func String(v string) *string { return &v }
diff --git a/vendor/google.golang.org/protobuf/protoadapt/convert.go b/vendor/google.golang.org/protobuf/protoadapt/convert.go
deleted file mode 100644
index ea276d15a..000000000
--- a/vendor/google.golang.org/protobuf/protoadapt/convert.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protoadapt bridges the original and new proto APIs.
-package protoadapt
-
-import (
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/runtime/protoiface"
- "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-// MessageV1 is the original [github.com/golang/protobuf/proto.Message] type.
-type MessageV1 = protoiface.MessageV1
-
-// MessageV2 is the [google.golang.org/protobuf/proto.Message] type used by the
-// current [google.golang.org/protobuf] module, adding support for reflection.
-type MessageV2 = proto.Message
-
-// MessageV1Of converts a v2 message to a v1 message.
-// It returns nil if m is nil.
-func MessageV1Of(m MessageV2) MessageV1 {
- return protoimpl.X.ProtoMessageV1Of(m)
-}
-
-// MessageV2Of converts a v1 message to a v2 message.
-// It returns nil if m is nil.
-func MessageV2Of(m MessageV1) MessageV2 {
- return protoimpl.X.ProtoMessageV2Of(m)
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
deleted file mode 100644
index 742cb518c..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoreflect
-
-import (
- "google.golang.org/protobuf/internal/pragma"
-)
-
-// The following types are used by the fast-path Message.ProtoMethods method.
-//
-// To avoid polluting the public protoreflect API with types used only by
-// low-level implementations, the canonical definitions of these types are
-// in the runtime/protoiface package. The definitions here and in protoiface
-// must be kept in sync.
-type (
- methods = struct {
- pragma.NoUnkeyedLiterals
- Flags supportFlags
- Size func(sizeInput) sizeOutput
- Marshal func(marshalInput) (marshalOutput, error)
- Unmarshal func(unmarshalInput) (unmarshalOutput, error)
- Merge func(mergeInput) mergeOutput
- CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)
- Equal func(equalInput) equalOutput
- }
- supportFlags = uint64
- sizeInput = struct {
- pragma.NoUnkeyedLiterals
- Message Message
- Flags uint8
- }
- sizeOutput = struct {
- pragma.NoUnkeyedLiterals
- Size int
- }
- marshalInput = struct {
- pragma.NoUnkeyedLiterals
- Message Message
- Buf []byte
- Flags uint8
- }
- marshalOutput = struct {
- pragma.NoUnkeyedLiterals
- Buf []byte
- }
- unmarshalInput = struct {
- pragma.NoUnkeyedLiterals
- Message Message
- Buf []byte
- Flags uint8
- Resolver interface {
- FindExtensionByName(field FullName) (ExtensionType, error)
- FindExtensionByNumber(message FullName, field FieldNumber) (ExtensionType, error)
- }
- Depth int
- }
- unmarshalOutput = struct {
- pragma.NoUnkeyedLiterals
- Flags uint8
- }
- mergeInput = struct {
- pragma.NoUnkeyedLiterals
- Source Message
- Destination Message
- }
- mergeOutput = struct {
- pragma.NoUnkeyedLiterals
- Flags uint8
- }
- checkInitializedInput = struct {
- pragma.NoUnkeyedLiterals
- Message Message
- }
- checkInitializedOutput = struct {
- pragma.NoUnkeyedLiterals
- }
- equalInput = struct {
- pragma.NoUnkeyedLiterals
- MessageA Message
- MessageB Message
- }
- equalOutput = struct {
- pragma.NoUnkeyedLiterals
- Equal bool
- }
-)
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go
deleted file mode 100644
index c85bfaa5b..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go
+++ /dev/null
@@ -1,513 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protoreflect provides interfaces to dynamically manipulate messages.
-//
-// This package includes type descriptors which describe the structure of types
-// defined in proto source files and value interfaces which provide the
-// ability to examine and manipulate the contents of messages.
-//
-// # Protocol Buffer Descriptors
-//
-// Protobuf descriptors (e.g., [EnumDescriptor] or [MessageDescriptor])
-// are immutable objects that represent protobuf type information.
-// They are wrappers around the messages declared in descriptor.proto.
-// Protobuf descriptors alone lack any information regarding Go types.
-//
-// Enums and messages generated by this module implement [Enum] and [ProtoMessage],
-// where the Descriptor and ProtoReflect.Descriptor accessors respectively
-// return the protobuf descriptor for the values.
-//
-// The protobuf descriptor interfaces are not meant to be implemented by
-// user code since they might need to be extended in the future to support
-// additions to the protobuf language.
-// The [google.golang.org/protobuf/reflect/protodesc] package converts between
-// google.protobuf.DescriptorProto messages and protobuf descriptors.
-//
-// # Go Type Descriptors
-//
-// A type descriptor (e.g., [EnumType] or [MessageType]) is a constructor for
-// a concrete Go type that represents the associated protobuf descriptor.
-// There is commonly a one-to-one relationship between protobuf descriptors and
-// Go type descriptors, but it can potentially be a one-to-many relationship.
-//
-// Enums and messages generated by this module implement [Enum] and [ProtoMessage],
-// where the Type and ProtoReflect.Type accessors respectively
-// return the protobuf descriptor for the values.
-//
-// The [google.golang.org/protobuf/types/dynamicpb] package can be used to
-// create Go type descriptors from protobuf descriptors.
-//
-// # Value Interfaces
-//
-// The [Enum] and [Message] interfaces provide a reflective view over an
-// enum or message instance. For enums, it provides the ability to retrieve
-// the enum value number for any concrete enum type. For messages, it provides
-// the ability to access or manipulate fields of the message.
-//
-// To convert a [google.golang.org/protobuf/proto.Message] to a [protoreflect.Message], use the
-// former's ProtoReflect method. Since the ProtoReflect method is new to the
-// v2 message interface, it may not be present on older message implementations.
-// The [github.com/golang/protobuf/proto.MessageReflect] function can be used
-// to obtain a reflective view on older messages.
-//
-// # Relationships
-//
-// The following diagrams demonstrate the relationships between
-// various types declared in this package.
-//
-// ┌───────────────────────────────────┐
-// V │
-// ┌────────────── New(n) ─────────────┐ │
-// │ │ │
-// │ ┌──── Descriptor() ──┐ │ ┌── Number() ──┐ │
-// │ │ V V │ V │
-// ╔════════════╗ ╔════════════════╗ ╔════════╗ ╔════════════╗
-// ║ EnumType ║ ║ EnumDescriptor ║ ║ Enum ║ ║ EnumNumber ║
-// ╚════════════╝ ╚════════════════╝ ╚════════╝ ╚════════════╝
-// Λ Λ │ │
-// │ └─── Descriptor() ──┘ │
-// │ │
-// └────────────────── Type() ───────┘
-//
-// • An [EnumType] describes a concrete Go enum type.
-// It has an EnumDescriptor and can construct an Enum instance.
-//
-// • An [EnumDescriptor] describes an abstract protobuf enum type.
-//
-// • An [Enum] is a concrete enum instance. Generated enums implement Enum.
-//
-// ┌──────────────── New() ─────────────────┐
-// │ │
-// │ ┌─── Descriptor() ─────┐ │ ┌── Interface() ───┐
-// │ │ V V │ V
-// ╔═════════════╗ ╔═══════════════════╗ ╔═════════╗ ╔══════════════╗
-// ║ MessageType ║ ║ MessageDescriptor ║ ║ Message ║ ║ ProtoMessage ║
-// ╚═════════════╝ ╚═══════════════════╝ ╚═════════╝ ╚══════════════╝
-// Λ Λ │ │ Λ │
-// │ └──── Descriptor() ────┘ │ └─ ProtoReflect() ─┘
-// │ │
-// └─────────────────── Type() ─────────┘
-//
-// • A [MessageType] describes a concrete Go message type.
-// It has a [MessageDescriptor] and can construct a [Message] instance.
-// Just as how Go's [reflect.Type] is a reflective description of a Go type,
-// a [MessageType] is a reflective description of a Go type for a protobuf message.
-//
-// • A [MessageDescriptor] describes an abstract protobuf message type.
-// It has no understanding of Go types. In order to construct a [MessageType]
-// from just a [MessageDescriptor], you can consider looking up the message type
-// in the global registry using the FindMessageByName method on
-// [google.golang.org/protobuf/reflect/protoregistry.GlobalTypes]
-// or constructing a dynamic [MessageType] using
-// [google.golang.org/protobuf/types/dynamicpb.NewMessageType].
-//
-// • A [Message] is a reflective view over a concrete message instance.
-// Generated messages implement [ProtoMessage], which can convert to a [Message].
-// Just as how Go's [reflect.Value] is a reflective view over a Go value,
-// a [Message] is a reflective view over a concrete protobuf message instance.
-// Using Go reflection as an analogy, the [ProtoMessage.ProtoReflect] method is similar to
-// calling [reflect.ValueOf], and the [Message.Interface] method is similar to
-// calling [reflect.Value.Interface].
-//
-// ┌── TypeDescriptor() ──┐ ┌───── Descriptor() ─────┐
-// │ V │ V
-// ╔═══════════════╗ ╔═════════════════════════╗ ╔═════════════════════╗
-// ║ ExtensionType ║ ║ ExtensionTypeDescriptor ║ ║ ExtensionDescriptor ║
-// ╚═══════════════╝ ╚═════════════════════════╝ ╚═════════════════════╝
-// Λ │ │ Λ │ Λ
-// └─────── Type() ───────┘ │ └─── may implement ────┘ │
-// │ │
-// └────── implements ────────┘
-//
-// • An [ExtensionType] describes a concrete Go implementation of an extension.
-// It has an [ExtensionTypeDescriptor] and can convert to/from
-// an abstract [Value] and a Go value.
-//
-// • An [ExtensionTypeDescriptor] is an [ExtensionDescriptor]
-// which also has an [ExtensionType].
-//
-// • An [ExtensionDescriptor] describes an abstract protobuf extension field and
-// may not always be an [ExtensionTypeDescriptor].
-package protoreflect
-
-import (
- "fmt"
- "strings"
-
- "google.golang.org/protobuf/encoding/protowire"
- "google.golang.org/protobuf/internal/pragma"
-)
-
-type doNotImplement pragma.DoNotImplement
-
-// ProtoMessage is the top-level interface that all proto messages implement.
-// This is declared in the protoreflect package to avoid a cyclic dependency;
-// use the [google.golang.org/protobuf/proto.Message] type instead, which aliases this type.
-type ProtoMessage interface{ ProtoReflect() Message }
-
-// Syntax is the language version of the proto file.
-type Syntax syntax
-
-type syntax int8 // keep exact type opaque as the int type may change
-
-const (
- Proto2 Syntax = 2
- Proto3 Syntax = 3
- Editions Syntax = 4
-)
-
-// IsValid reports whether the syntax is valid.
-func (s Syntax) IsValid() bool {
- switch s {
- case Proto2, Proto3, Editions:
- return true
- default:
- return false
- }
-}
-
-// String returns s as a proto source identifier (e.g., "proto2").
-func (s Syntax) String() string {
- switch s {
- case Proto2:
- return "proto2"
- case Proto3:
- return "proto3"
- case Editions:
- return "editions"
- default:
- return fmt.Sprintf("<unknown:%d>", s)
- }
-}
-
-// GoString returns s as a Go source identifier (e.g., "Proto2").
-func (s Syntax) GoString() string {
- switch s {
- case Proto2:
- return "Proto2"
- case Proto3:
- return "Proto3"
- default:
- return fmt.Sprintf("Syntax(%d)", s)
- }
-}
-
-// Cardinality determines whether a field is optional, required, or repeated.
-type Cardinality cardinality
-
-type cardinality int8 // keep exact type opaque as the int type may change
-
-// Constants as defined by the google.protobuf.Cardinality enumeration.
-const (
- Optional Cardinality = 1 // appears zero or one times
- Required Cardinality = 2 // appears exactly one time; invalid with Proto3
- Repeated Cardinality = 3 // appears zero or more times
-)
-
-// IsValid reports whether the cardinality is valid.
-func (c Cardinality) IsValid() bool {
- switch c {
- case Optional, Required, Repeated:
- return true
- default:
- return false
- }
-}
-
-// String returns c as a proto source identifier (e.g., "optional").
-func (c Cardinality) String() string {
- switch c {
- case Optional:
- return "optional"
- case Required:
- return "required"
- case Repeated:
- return "repeated"
- default:
- return fmt.Sprintf("<unknown:%d>", c)
- }
-}
-
-// GoString returns c as a Go source identifier (e.g., "Optional").
-func (c Cardinality) GoString() string {
- switch c {
- case Optional:
- return "Optional"
- case Required:
- return "Required"
- case Repeated:
- return "Repeated"
- default:
- return fmt.Sprintf("Cardinality(%d)", c)
- }
-}
-
-// Kind indicates the basic proto kind of a field.
-type Kind kind
-
-type kind int8 // keep exact type opaque as the int type may change
-
-// Constants as defined by the google.protobuf.Field.Kind enumeration.
-const (
- BoolKind Kind = 8
- EnumKind Kind = 14
- Int32Kind Kind = 5
- Sint32Kind Kind = 17
- Uint32Kind Kind = 13
- Int64Kind Kind = 3
- Sint64Kind Kind = 18
- Uint64Kind Kind = 4
- Sfixed32Kind Kind = 15
- Fixed32Kind Kind = 7
- FloatKind Kind = 2
- Sfixed64Kind Kind = 16
- Fixed64Kind Kind = 6
- DoubleKind Kind = 1
- StringKind Kind = 9
- BytesKind Kind = 12
- MessageKind Kind = 11
- GroupKind Kind = 10
-)
-
-// IsValid reports whether the kind is valid.
-func (k Kind) IsValid() bool {
- switch k {
- case BoolKind, EnumKind,
- Int32Kind, Sint32Kind, Uint32Kind,
- Int64Kind, Sint64Kind, Uint64Kind,
- Sfixed32Kind, Fixed32Kind, FloatKind,
- Sfixed64Kind, Fixed64Kind, DoubleKind,
- StringKind, BytesKind, MessageKind, GroupKind:
- return true
- default:
- return false
- }
-}
-
-// String returns k as a proto source identifier (e.g., "bool").
-func (k Kind) String() string {
- switch k {
- case BoolKind:
- return "bool"
- case EnumKind:
- return "enum"
- case Int32Kind:
- return "int32"
- case Sint32Kind:
- return "sint32"
- case Uint32Kind:
- return "uint32"
- case Int64Kind:
- return "int64"
- case Sint64Kind:
- return "sint64"
- case Uint64Kind:
- return "uint64"
- case Sfixed32Kind:
- return "sfixed32"
- case Fixed32Kind:
- return "fixed32"
- case FloatKind:
- return "float"
- case Sfixed64Kind:
- return "sfixed64"
- case Fixed64Kind:
- return "fixed64"
- case DoubleKind:
- return "double"
- case StringKind:
- return "string"
- case BytesKind:
- return "bytes"
- case MessageKind:
- return "message"
- case GroupKind:
- return "group"
- default:
- return fmt.Sprintf("<unknown:%d>", k)
- }
-}
-
-// GoString returns k as a Go source identifier (e.g., "BoolKind").
-func (k Kind) GoString() string {
- switch k {
- case BoolKind:
- return "BoolKind"
- case EnumKind:
- return "EnumKind"
- case Int32Kind:
- return "Int32Kind"
- case Sint32Kind:
- return "Sint32Kind"
- case Uint32Kind:
- return "Uint32Kind"
- case Int64Kind:
- return "Int64Kind"
- case Sint64Kind:
- return "Sint64Kind"
- case Uint64Kind:
- return "Uint64Kind"
- case Sfixed32Kind:
- return "Sfixed32Kind"
- case Fixed32Kind:
- return "Fixed32Kind"
- case FloatKind:
- return "FloatKind"
- case Sfixed64Kind:
- return "Sfixed64Kind"
- case Fixed64Kind:
- return "Fixed64Kind"
- case DoubleKind:
- return "DoubleKind"
- case StringKind:
- return "StringKind"
- case BytesKind:
- return "BytesKind"
- case MessageKind:
- return "MessageKind"
- case GroupKind:
- return "GroupKind"
- default:
- return fmt.Sprintf("Kind(%d)", k)
- }
-}
-
-// FieldNumber is the field number in a message.
-type FieldNumber = protowire.Number
-
-// FieldNumbers represent a list of field numbers.
-type FieldNumbers interface {
- // Len reports the number of fields in the list.
- Len() int
- // Get returns the ith field number. It panics if out of bounds.
- Get(i int) FieldNumber
- // Has reports whether n is within the list of fields.
- Has(n FieldNumber) bool
-
- doNotImplement
-}
-
-// FieldRanges represent a list of field number ranges.
-type FieldRanges interface {
- // Len reports the number of ranges in the list.
- Len() int
- // Get returns the ith range. It panics if out of bounds.
- Get(i int) [2]FieldNumber // start inclusive; end exclusive
- // Has reports whether n is within any of the ranges.
- Has(n FieldNumber) bool
-
- doNotImplement
-}
-
-// EnumNumber is the numeric value for an enum.
-type EnumNumber int32
-
-// EnumRanges represent a list of enum number ranges.
-type EnumRanges interface {
- // Len reports the number of ranges in the list.
- Len() int
- // Get returns the ith range. It panics if out of bounds.
- Get(i int) [2]EnumNumber // start inclusive; end inclusive
- // Has reports whether n is within any of the ranges.
- Has(n EnumNumber) bool
-
- doNotImplement
-}
-
-// Name is the short name for a proto declaration. This is not the name
-// as used in Go source code, which might not be identical to the proto name.
-type Name string // e.g., "Kind"
-
-// IsValid reports whether s is a syntactically valid name.
-// An empty name is invalid.
-func (s Name) IsValid() bool {
- return consumeIdent(string(s)) == len(s)
-}
-
-// Names represent a list of names.
-type Names interface {
- // Len reports the number of names in the list.
- Len() int
- // Get returns the ith name. It panics if out of bounds.
- Get(i int) Name
- // Has reports whether s matches any names in the list.
- Has(s Name) bool
-
- doNotImplement
-}
-
-// FullName is a qualified name that uniquely identifies a proto declaration.
-// A qualified name is the concatenation of the proto package along with the
-// fully-declared name (i.e., name of parent preceding the name of the child),
-// with a '.' delimiter placed between each [Name].
-//
-// This should not have any leading or trailing dots.
-type FullName string // e.g., "google.protobuf.Field.Kind"
-
-// IsValid reports whether s is a syntactically valid full name.
-// An empty full name is invalid.
-func (s FullName) IsValid() bool {
- i := consumeIdent(string(s))
- if i < 0 {
- return false
- }
- for len(s) > i {
- if s[i] != '.' {
- return false
- }
- i++
- n := consumeIdent(string(s[i:]))
- if n < 0 {
- return false
- }
- i += n
- }
- return true
-}
-
-func consumeIdent(s string) (i int) {
- if len(s) == 0 || !isLetter(s[i]) {
- return -1
- }
- i++
- for len(s) > i && isLetterDigit(s[i]) {
- i++
- }
- return i
-}
-func isLetter(c byte) bool {
- return c == '_' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')
-}
-func isLetterDigit(c byte) bool {
- return isLetter(c) || ('0' <= c && c <= '9')
-}
-
-// Name returns the short name, which is the last identifier segment.
-// A single segment FullName is the [Name] itself.
-func (n FullName) Name() Name {
- if i := strings.LastIndexByte(string(n), '.'); i >= 0 {
- return Name(n[i+1:])
- }
- return Name(n)
-}
-
-// Parent returns the full name with the trailing identifier removed.
-// A single segment FullName has no parent.
-func (n FullName) Parent() FullName {
- if i := strings.LastIndexByte(string(n), '.'); i >= 0 {
- return n[:i]
- }
- return ""
-}
-
-// Append returns the qualified name appended with the provided short name.
-//
-// Invariant: n == n.Parent().Append(n.Name()) // assuming n is valid
-func (n FullName) Append(s Name) FullName {
- if n == "" {
- return FullName(s)
- }
- return n + "." + FullName(s)
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go
deleted file mode 100644
index 0b9942885..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoreflect
-
-import (
- "strconv"
-)
-
-// SourceLocations is a list of source locations.
-type SourceLocations interface {
- // Len reports the number of source locations in the proto file.
- Len() int
- // Get returns the ith SourceLocation. It panics if out of bounds.
- Get(int) SourceLocation
-
- // ByPath returns the SourceLocation for the given path,
- // returning the first location if multiple exist for the same path.
- // If multiple locations exist for the same path,
- // then SourceLocation.Next index can be used to identify the
- // index of the next SourceLocation.
- // If no location exists for this path, it returns the zero value.
- ByPath(path SourcePath) SourceLocation
-
- // ByDescriptor returns the SourceLocation for the given descriptor,
- // returning the first location if multiple exist for the same path.
- // If no location exists for this descriptor, it returns the zero value.
- ByDescriptor(desc Descriptor) SourceLocation
-
- doNotImplement
-}
-
-// SourceLocation describes a source location and
-// corresponds with the google.protobuf.SourceCodeInfo.Location message.
-type SourceLocation struct {
- // Path is the path to the declaration from the root file descriptor.
- // The contents of this slice must not be mutated.
- Path SourcePath
-
- // StartLine and StartColumn are the zero-indexed starting location
- // in the source file for the declaration.
- StartLine, StartColumn int
- // EndLine and EndColumn are the zero-indexed ending location
- // in the source file for the declaration.
- // In the descriptor.proto, the end line may be omitted if it is identical
- // to the start line. Here, it is always populated.
- EndLine, EndColumn int
-
- // LeadingDetachedComments are the leading detached comments
- // for the declaration. The contents of this slice must not be mutated.
- LeadingDetachedComments []string
- // LeadingComments is the leading attached comment for the declaration.
- LeadingComments string
- // TrailingComments is the trailing attached comment for the declaration.
- TrailingComments string
-
- // Next is an index into SourceLocations for the next source location that
- // has the same Path. It is zero if there is no next location.
- Next int
-}
-
-// SourcePath identifies part of a file descriptor for a source location.
-// The SourcePath is a sequence of either field numbers or indexes into
-// a repeated field that form a path starting from the root file descriptor.
-//
-// See google.protobuf.SourceCodeInfo.Location.path.
-type SourcePath []int32
-
-// Equal reports whether p1 equals p2.
-func (p1 SourcePath) Equal(p2 SourcePath) bool {
- if len(p1) != len(p2) {
- return false
- }
- for i := range p1 {
- if p1[i] != p2[i] {
- return false
- }
- }
- return true
-}
-
-// String formats the path in a humanly readable manner.
-// The output is guaranteed to be deterministic,
-// making it suitable for use as a key into a Go map.
-// It is not guaranteed to be stable as the exact output could change
-// in a future version of this module.
-//
-// Example output:
-//
-// .message_type[6].nested_type[15].field[3]
-func (p SourcePath) String() string {
- b := p.appendFileDescriptorProto(nil)
- for _, i := range p {
- b = append(b, '.')
- b = strconv.AppendInt(b, int64(i), 10)
- }
- return string(b)
-}
-
-type appendFunc func(*SourcePath, []byte) []byte
-
-func (p *SourcePath) appendSingularField(b []byte, name string, f appendFunc) []byte {
- if len(*p) == 0 {
- return b
- }
- b = append(b, '.')
- b = append(b, name...)
- *p = (*p)[1:]
- if f != nil {
- b = f(p, b)
- }
- return b
-}
-
-func (p *SourcePath) appendRepeatedField(b []byte, name string, f appendFunc) []byte {
- b = p.appendSingularField(b, name, nil)
- if len(*p) == 0 || (*p)[0] < 0 {
- return b
- }
- b = append(b, '[')
- b = strconv.AppendUint(b, uint64((*p)[0]), 10)
- b = append(b, ']')
- *p = (*p)[1:]
- if f != nil {
- b = f(p, b)
- }
- return b
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go
deleted file mode 100644
index ea154eec4..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go
+++ /dev/null
@@ -1,573 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Code generated by generate-protos. DO NOT EDIT.
-
-package protoreflect
-
-func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendSingularField(b, "package", nil)
- case 3:
- b = p.appendRepeatedField(b, "dependency", nil)
- case 10:
- b = p.appendRepeatedField(b, "public_dependency", nil)
- case 11:
- b = p.appendRepeatedField(b, "weak_dependency", nil)
- case 4:
- b = p.appendRepeatedField(b, "message_type", (*SourcePath).appendDescriptorProto)
- case 5:
- b = p.appendRepeatedField(b, "enum_type", (*SourcePath).appendEnumDescriptorProto)
- case 6:
- b = p.appendRepeatedField(b, "service", (*SourcePath).appendServiceDescriptorProto)
- case 7:
- b = p.appendRepeatedField(b, "extension", (*SourcePath).appendFieldDescriptorProto)
- case 8:
- b = p.appendSingularField(b, "options", (*SourcePath).appendFileOptions)
- case 9:
- b = p.appendSingularField(b, "source_code_info", (*SourcePath).appendSourceCodeInfo)
- case 12:
- b = p.appendSingularField(b, "syntax", nil)
- case 14:
- b = p.appendSingularField(b, "edition", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendRepeatedField(b, "field", (*SourcePath).appendFieldDescriptorProto)
- case 6:
- b = p.appendRepeatedField(b, "extension", (*SourcePath).appendFieldDescriptorProto)
- case 3:
- b = p.appendRepeatedField(b, "nested_type", (*SourcePath).appendDescriptorProto)
- case 4:
- b = p.appendRepeatedField(b, "enum_type", (*SourcePath).appendEnumDescriptorProto)
- case 5:
- b = p.appendRepeatedField(b, "extension_range", (*SourcePath).appendDescriptorProto_ExtensionRange)
- case 8:
- b = p.appendRepeatedField(b, "oneof_decl", (*SourcePath).appendOneofDescriptorProto)
- case 7:
- b = p.appendSingularField(b, "options", (*SourcePath).appendMessageOptions)
- case 9:
- b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendDescriptorProto_ReservedRange)
- case 10:
- b = p.appendRepeatedField(b, "reserved_name", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendEnumDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendRepeatedField(b, "value", (*SourcePath).appendEnumValueDescriptorProto)
- case 3:
- b = p.appendSingularField(b, "options", (*SourcePath).appendEnumOptions)
- case 4:
- b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendEnumDescriptorProto_EnumReservedRange)
- case 5:
- b = p.appendRepeatedField(b, "reserved_name", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendServiceDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendRepeatedField(b, "method", (*SourcePath).appendMethodDescriptorProto)
- case 3:
- b = p.appendSingularField(b, "options", (*SourcePath).appendServiceOptions)
- }
- return b
-}
-
-func (p *SourcePath) appendFieldDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 3:
- b = p.appendSingularField(b, "number", nil)
- case 4:
- b = p.appendSingularField(b, "label", nil)
- case 5:
- b = p.appendSingularField(b, "type", nil)
- case 6:
- b = p.appendSingularField(b, "type_name", nil)
- case 2:
- b = p.appendSingularField(b, "extendee", nil)
- case 7:
- b = p.appendSingularField(b, "default_value", nil)
- case 9:
- b = p.appendSingularField(b, "oneof_index", nil)
- case 10:
- b = p.appendSingularField(b, "json_name", nil)
- case 8:
- b = p.appendSingularField(b, "options", (*SourcePath).appendFieldOptions)
- case 17:
- b = p.appendSingularField(b, "proto3_optional", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendFileOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "java_package", nil)
- case 8:
- b = p.appendSingularField(b, "java_outer_classname", nil)
- case 10:
- b = p.appendSingularField(b, "java_multiple_files", nil)
- case 20:
- b = p.appendSingularField(b, "java_generate_equals_and_hash", nil)
- case 27:
- b = p.appendSingularField(b, "java_string_check_utf8", nil)
- case 9:
- b = p.appendSingularField(b, "optimize_for", nil)
- case 11:
- b = p.appendSingularField(b, "go_package", nil)
- case 16:
- b = p.appendSingularField(b, "cc_generic_services", nil)
- case 17:
- b = p.appendSingularField(b, "java_generic_services", nil)
- case 18:
- b = p.appendSingularField(b, "py_generic_services", nil)
- case 23:
- b = p.appendSingularField(b, "deprecated", nil)
- case 31:
- b = p.appendSingularField(b, "cc_enable_arenas", nil)
- case 36:
- b = p.appendSingularField(b, "objc_class_prefix", nil)
- case 37:
- b = p.appendSingularField(b, "csharp_namespace", nil)
- case 39:
- b = p.appendSingularField(b, "swift_prefix", nil)
- case 40:
- b = p.appendSingularField(b, "php_class_prefix", nil)
- case 41:
- b = p.appendSingularField(b, "php_namespace", nil)
- case 44:
- b = p.appendSingularField(b, "php_metadata_namespace", nil)
- case 45:
- b = p.appendSingularField(b, "ruby_package", nil)
- case 50:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendSourceCodeInfo(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendRepeatedField(b, "location", (*SourcePath).appendSourceCodeInfo_Location)
- }
- return b
-}
-
-func (p *SourcePath) appendDescriptorProto_ExtensionRange(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "start", nil)
- case 2:
- b = p.appendSingularField(b, "end", nil)
- case 3:
- b = p.appendSingularField(b, "options", (*SourcePath).appendExtensionRangeOptions)
- }
- return b
-}
-
-func (p *SourcePath) appendOneofDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendSingularField(b, "options", (*SourcePath).appendOneofOptions)
- }
- return b
-}
-
-func (p *SourcePath) appendMessageOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "message_set_wire_format", nil)
- case 2:
- b = p.appendSingularField(b, "no_standard_descriptor_accessor", nil)
- case 3:
- b = p.appendSingularField(b, "deprecated", nil)
- case 7:
- b = p.appendSingularField(b, "map_entry", nil)
- case 11:
- b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil)
- case 12:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendDescriptorProto_ReservedRange(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "start", nil)
- case 2:
- b = p.appendSingularField(b, "end", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendEnumValueDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendSingularField(b, "number", nil)
- case 3:
- b = p.appendSingularField(b, "options", (*SourcePath).appendEnumValueOptions)
- }
- return b
-}
-
-func (p *SourcePath) appendEnumOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 2:
- b = p.appendSingularField(b, "allow_alias", nil)
- case 3:
- b = p.appendSingularField(b, "deprecated", nil)
- case 6:
- b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil)
- case 7:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendEnumDescriptorProto_EnumReservedRange(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "start", nil)
- case 2:
- b = p.appendSingularField(b, "end", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendMethodDescriptorProto(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name", nil)
- case 2:
- b = p.appendSingularField(b, "input_type", nil)
- case 3:
- b = p.appendSingularField(b, "output_type", nil)
- case 4:
- b = p.appendSingularField(b, "options", (*SourcePath).appendMethodOptions)
- case 5:
- b = p.appendSingularField(b, "client_streaming", nil)
- case 6:
- b = p.appendSingularField(b, "server_streaming", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendServiceOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 34:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 33:
- b = p.appendSingularField(b, "deprecated", nil)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendFieldOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "ctype", nil)
- case 2:
- b = p.appendSingularField(b, "packed", nil)
- case 6:
- b = p.appendSingularField(b, "jstype", nil)
- case 5:
- b = p.appendSingularField(b, "lazy", nil)
- case 15:
- b = p.appendSingularField(b, "unverified_lazy", nil)
- case 3:
- b = p.appendSingularField(b, "deprecated", nil)
- case 10:
- b = p.appendSingularField(b, "weak", nil)
- case 16:
- b = p.appendSingularField(b, "debug_redact", nil)
- case 17:
- b = p.appendSingularField(b, "retention", nil)
- case 19:
- b = p.appendRepeatedField(b, "targets", nil)
- case 20:
- b = p.appendRepeatedField(b, "edition_defaults", (*SourcePath).appendFieldOptions_EditionDefault)
- case 21:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 22:
- b = p.appendSingularField(b, "feature_support", (*SourcePath).appendFieldOptions_FeatureSupport)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendFeatureSet(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "field_presence", nil)
- case 2:
- b = p.appendSingularField(b, "enum_type", nil)
- case 3:
- b = p.appendSingularField(b, "repeated_field_encoding", nil)
- case 4:
- b = p.appendSingularField(b, "utf8_validation", nil)
- case 5:
- b = p.appendSingularField(b, "message_encoding", nil)
- case 6:
- b = p.appendSingularField(b, "json_format", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendUninterpretedOption(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 2:
- b = p.appendRepeatedField(b, "name", (*SourcePath).appendUninterpretedOption_NamePart)
- case 3:
- b = p.appendSingularField(b, "identifier_value", nil)
- case 4:
- b = p.appendSingularField(b, "positive_int_value", nil)
- case 5:
- b = p.appendSingularField(b, "negative_int_value", nil)
- case 6:
- b = p.appendSingularField(b, "double_value", nil)
- case 7:
- b = p.appendSingularField(b, "string_value", nil)
- case 8:
- b = p.appendSingularField(b, "aggregate_value", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendSourceCodeInfo_Location(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendRepeatedField(b, "path", nil)
- case 2:
- b = p.appendRepeatedField(b, "span", nil)
- case 3:
- b = p.appendSingularField(b, "leading_comments", nil)
- case 4:
- b = p.appendSingularField(b, "trailing_comments", nil)
- case 6:
- b = p.appendRepeatedField(b, "leading_detached_comments", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- case 2:
- b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration)
- case 50:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 3:
- b = p.appendSingularField(b, "verification", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendOneofOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendEnumValueOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "deprecated", nil)
- case 2:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 3:
- b = p.appendSingularField(b, "debug_redact", nil)
- case 4:
- b = p.appendSingularField(b, "feature_support", (*SourcePath).appendFieldOptions_FeatureSupport)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendMethodOptions(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 33:
- b = p.appendSingularField(b, "deprecated", nil)
- case 34:
- b = p.appendSingularField(b, "idempotency_level", nil)
- case 35:
- b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet)
- case 999:
- b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption)
- }
- return b
-}
-
-func (p *SourcePath) appendFieldOptions_EditionDefault(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 3:
- b = p.appendSingularField(b, "edition", nil)
- case 2:
- b = p.appendSingularField(b, "value", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendFieldOptions_FeatureSupport(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "edition_introduced", nil)
- case 2:
- b = p.appendSingularField(b, "edition_deprecated", nil)
- case 3:
- b = p.appendSingularField(b, "deprecation_warning", nil)
- case 4:
- b = p.appendSingularField(b, "edition_removed", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "name_part", nil)
- case 2:
- b = p.appendSingularField(b, "is_extension", nil)
- }
- return b
-}
-
-func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte {
- if len(*p) == 0 {
- return b
- }
- switch (*p)[0] {
- case 1:
- b = p.appendSingularField(b, "number", nil)
- case 2:
- b = p.appendSingularField(b, "full_name", nil)
- case 3:
- b = p.appendSingularField(b, "type", nil)
- case 5:
- b = p.appendSingularField(b, "reserved", nil)
- case 6:
- b = p.appendSingularField(b, "repeated", nil)
- }
- return b
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go
deleted file mode 100644
index cd8fadbaf..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go
+++ /dev/null
@@ -1,672 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoreflect
-
-// Descriptor provides a set of accessors that are common to every descriptor.
-// Each descriptor type wraps the equivalent google.protobuf.XXXDescriptorProto,
-// but provides efficient lookup and immutability.
-//
-// Each descriptor is comparable. Equality implies that the two types are
-// exactly identical. However, it is possible for the same semantically
-// identical proto type to be represented by multiple type descriptors.
-//
-// For example, suppose we have t1 and t2 which are both an [MessageDescriptor].
-// If t1 == t2, then the types are definitely equal and all accessors return
-// the same information. However, if t1 != t2, then it is still possible that
-// they still represent the same proto type (e.g., t1.FullName == t2.FullName).
-// This can occur if a descriptor type is created dynamically, or multiple
-// versions of the same proto type are accidentally linked into the Go binary.
-type Descriptor interface {
- // ParentFile returns the parent file descriptor that this descriptor
- // is declared within. The parent file for the file descriptor is itself.
- //
- // Support for this functionality is optional and may return nil.
- ParentFile() FileDescriptor
-
- // Parent returns the parent containing this descriptor declaration.
- // The following shows the mapping from child type to possible parent types:
- //
- // ╔═════════════════════╤═══════════════════════════════════╗
- // ║ Child type │ Possible parent types ║
- // ╠═════════════════════╪═══════════════════════════════════╣
- // ║ FileDescriptor │ nil ║
- // ║ MessageDescriptor │ FileDescriptor, MessageDescriptor ║
- // ║ FieldDescriptor │ FileDescriptor, MessageDescriptor ║
- // ║ OneofDescriptor │ MessageDescriptor ║
- // ║ EnumDescriptor │ FileDescriptor, MessageDescriptor ║
- // ║ EnumValueDescriptor │ EnumDescriptor ║
- // ║ ServiceDescriptor │ FileDescriptor ║
- // ║ MethodDescriptor │ ServiceDescriptor ║
- // ╚═════════════════════╧═══════════════════════════════════╝
- //
- // Support for this functionality is optional and may return nil.
- Parent() Descriptor
-
- // Index returns the index of this descriptor within its parent.
- // It returns 0 if the descriptor does not have a parent or if the parent
- // is unknown.
- Index() int
-
- // Syntax is the protobuf syntax.
- Syntax() Syntax // e.g., Proto2 or Proto3
-
- // Name is the short name of the declaration (i.e., FullName.Name).
- Name() Name // e.g., "Any"
-
- // FullName is the fully-qualified name of the declaration.
- //
- // The FullName is a concatenation of the full name of the type that this
- // type is declared within and the declaration name. For example,
- // field "foo_field" in message "proto.package.MyMessage" is
- // uniquely identified as "proto.package.MyMessage.foo_field".
- // Enum values are an exception to the rule (see EnumValueDescriptor).
- FullName() FullName // e.g., "google.protobuf.Any"
-
- // IsPlaceholder reports whether type information is missing since a
- // dependency is not resolved, in which case only name information is known.
- //
- // Placeholder types may only be returned by the following accessors
- // as a result of unresolved dependencies or weak imports:
- //
- // ╔═══════════════════════════════════╤═════════════════════╗
- // ║ Accessor │ Descriptor ║
- // ╠═══════════════════════════════════╪═════════════════════╣
- // ║ FileImports.FileDescriptor │ FileDescriptor ║
- // ║ FieldDescriptor.Enum │ EnumDescriptor ║
- // ║ FieldDescriptor.Message │ MessageDescriptor ║
- // ║ FieldDescriptor.DefaultEnumValue │ EnumValueDescriptor ║
- // ║ FieldDescriptor.ContainingMessage │ MessageDescriptor ║
- // ║ MethodDescriptor.Input │ MessageDescriptor ║
- // ║ MethodDescriptor.Output │ MessageDescriptor ║
- // ╚═══════════════════════════════════╧═════════════════════╝
- //
- // If true, only Name and FullName are valid.
- // For FileDescriptor, the Path is also valid.
- IsPlaceholder() bool
-
- // Options returns the descriptor options. The caller must not modify
- // the returned value.
- //
- // To avoid a dependency cycle, this function returns a proto.Message value.
- // The proto message type returned for each descriptor type is as follows:
- // ╔═════════════════════╤══════════════════════════════════════════╗
- // ║ Go type │ Protobuf message type ║
- // ╠═════════════════════╪══════════════════════════════════════════╣
- // ║ FileDescriptor │ google.protobuf.FileOptions ║
- // ║ EnumDescriptor │ google.protobuf.EnumOptions ║
- // ║ EnumValueDescriptor │ google.protobuf.EnumValueOptions ║
- // ║ MessageDescriptor │ google.protobuf.MessageOptions ║
- // ║ FieldDescriptor │ google.protobuf.FieldOptions ║
- // ║ OneofDescriptor │ google.protobuf.OneofOptions ║
- // ║ ServiceDescriptor │ google.protobuf.ServiceOptions ║
- // ║ MethodDescriptor │ google.protobuf.MethodOptions ║
- // ╚═════════════════════╧══════════════════════════════════════════╝
- //
- // This method returns a typed nil-pointer if no options are present.
- // The caller must import the descriptorpb package to use this.
- Options() ProtoMessage
-
- doNotImplement
-}
-
-// FileDescriptor describes the types in a complete proto file and
-// corresponds with the google.protobuf.FileDescriptorProto message.
-//
-// Top-level declarations:
-// [EnumDescriptor], [MessageDescriptor], [FieldDescriptor], and/or [ServiceDescriptor].
-type FileDescriptor interface {
- Descriptor // Descriptor.FullName is identical to Package
-
- // Path returns the file name, relative to the source tree root.
- Path() string // e.g., "path/to/file.proto"
- // Package returns the protobuf package namespace.
- Package() FullName // e.g., "google.protobuf"
-
- // Imports is a list of imported proto files.
- Imports() FileImports
-
- // Enums is a list of the top-level enum declarations.
- Enums() EnumDescriptors
- // Messages is a list of the top-level message declarations.
- Messages() MessageDescriptors
- // Extensions is a list of the top-level extension declarations.
- Extensions() ExtensionDescriptors
- // Services is a list of the top-level service declarations.
- Services() ServiceDescriptors
-
- // SourceLocations is a list of source locations.
- SourceLocations() SourceLocations
-
- isFileDescriptor
-}
-type isFileDescriptor interface{ ProtoType(FileDescriptor) }
-
-// FileImports is a list of file imports.
-type FileImports interface {
- // Len reports the number of files imported by this proto file.
- Len() int
- // Get returns the ith FileImport. It panics if out of bounds.
- Get(i int) FileImport
-
- doNotImplement
-}
-
-// FileImport is the declaration for a proto file import.
-type FileImport struct {
- // FileDescriptor is the file type for the given import.
- // It is a placeholder descriptor if IsWeak is set or if a dependency has
- // not been regenerated to implement the new reflection APIs.
- FileDescriptor
-
- // IsPublic reports whether this is a public import, which causes this file
- // to alias declarations within the imported file. The intended use cases
- // for this feature is the ability to move proto files without breaking
- // existing dependencies.
- //
- // The current file and the imported file must be within proto package.
- IsPublic bool
-
- // IsWeak reports whether this is a weak import, which does not impose
- // a direct dependency on the target file.
- //
- // Weak imports are a legacy proto1 feature. Equivalent behavior is
- // achieved using proto2 extension fields or proto3 Any messages.
- IsWeak bool
-}
-
-// MessageDescriptor describes a message and
-// corresponds with the google.protobuf.DescriptorProto message.
-//
-// Nested declarations:
-// [FieldDescriptor], [OneofDescriptor], [FieldDescriptor], [EnumDescriptor],
-// and/or [MessageDescriptor].
-type MessageDescriptor interface {
- Descriptor
-
- // IsMapEntry indicates that this is an auto-generated message type to
- // represent the entry type for a map field.
- //
- // Map entry messages have only two fields:
- // • a "key" field with a field number of 1
- // • a "value" field with a field number of 2
- // The key and value types are determined by these two fields.
- //
- // If IsMapEntry is true, it implies that FieldDescriptor.IsMap is true
- // for some field with this message type.
- IsMapEntry() bool
-
- // Fields is a list of nested field declarations.
- Fields() FieldDescriptors
- // Oneofs is a list of nested oneof declarations.
- Oneofs() OneofDescriptors
-
- // ReservedNames is a list of reserved field names.
- ReservedNames() Names
- // ReservedRanges is a list of reserved ranges of field numbers.
- ReservedRanges() FieldRanges
- // RequiredNumbers is a list of required field numbers.
- // In Proto3, it is always an empty list.
- RequiredNumbers() FieldNumbers
- // ExtensionRanges is the field ranges used for extension fields.
- // In Proto3, it is always an empty ranges.
- ExtensionRanges() FieldRanges
- // ExtensionRangeOptions returns the ith extension range options.
- //
- // To avoid a dependency cycle, this method returns a proto.Message] value,
- // which always contains a google.protobuf.ExtensionRangeOptions message.
- // This method returns a typed nil-pointer if no options are present.
- // The caller must import the descriptorpb package to use this.
- ExtensionRangeOptions(i int) ProtoMessage
-
- // Enums is a list of nested enum declarations.
- Enums() EnumDescriptors
- // Messages is a list of nested message declarations.
- Messages() MessageDescriptors
- // Extensions is a list of nested extension declarations.
- Extensions() ExtensionDescriptors
-
- isMessageDescriptor
-}
-type isMessageDescriptor interface{ ProtoType(MessageDescriptor) }
-
-// MessageType encapsulates a [MessageDescriptor] with a concrete Go implementation.
-// It is recommended that implementations of this interface also implement the
-// [MessageFieldTypes] interface.
-type MessageType interface {
- // New returns a newly allocated empty message.
- // It may return nil for synthetic messages representing a map entry.
- New() Message
-
- // Zero returns an empty, read-only message.
- // It may return nil for synthetic messages representing a map entry.
- Zero() Message
-
- // Descriptor returns the message descriptor.
- //
- // Invariant: t.Descriptor() == t.New().Descriptor()
- Descriptor() MessageDescriptor
-}
-
-// MessageFieldTypes extends a [MessageType] by providing type information
-// regarding enums and messages referenced by the message fields.
-type MessageFieldTypes interface {
- MessageType
-
- // Enum returns the EnumType for the ith field in MessageDescriptor.Fields.
- // It returns nil if the ith field is not an enum kind.
- // It panics if out of bounds.
- //
- // Invariant: mt.Enum(i).Descriptor() == mt.Descriptor().Fields(i).Enum()
- Enum(i int) EnumType
-
- // Message returns the MessageType for the ith field in MessageDescriptor.Fields.
- // It returns nil if the ith field is not a message or group kind.
- // It panics if out of bounds.
- //
- // Invariant: mt.Message(i).Descriptor() == mt.Descriptor().Fields(i).Message()
- Message(i int) MessageType
-}
-
-// MessageDescriptors is a list of message declarations.
-type MessageDescriptors interface {
- // Len reports the number of messages.
- Len() int
- // Get returns the ith MessageDescriptor. It panics if out of bounds.
- Get(i int) MessageDescriptor
- // ByName returns the MessageDescriptor for a message named s.
- // It returns nil if not found.
- ByName(s Name) MessageDescriptor
-
- doNotImplement
-}
-
-// FieldDescriptor describes a field within a message and
-// corresponds with the google.protobuf.FieldDescriptorProto message.
-//
-// It is used for both normal fields defined within the parent message
-// (e.g., [MessageDescriptor.Fields]) and fields that extend some remote message
-// (e.g., [FileDescriptor.Extensions] or [MessageDescriptor.Extensions]).
-type FieldDescriptor interface {
- Descriptor
-
- // Number reports the unique number for this field.
- Number() FieldNumber
- // Cardinality reports the cardinality for this field.
- Cardinality() Cardinality
- // Kind reports the basic kind for this field.
- Kind() Kind
-
- // HasJSONName reports whether this field has an explicitly set JSON name.
- HasJSONName() bool
-
- // JSONName reports the name used for JSON serialization.
- // It is usually the camel-cased form of the field name.
- // Extension fields are represented by the full name surrounded by brackets.
- JSONName() string
-
- // TextName reports the name used for text serialization.
- // It is usually the name of the field, except that groups use the name
- // of the inlined message, and extension fields are represented by the
- // full name surrounded by brackets.
- TextName() string
-
- // HasPresence reports whether the field distinguishes between unpopulated
- // and default values.
- HasPresence() bool
-
- // IsExtension reports whether this is an extension field. If false,
- // then Parent and ContainingMessage refer to the same message.
- // Otherwise, ContainingMessage and Parent likely differ.
- IsExtension() bool
-
- // HasOptionalKeyword reports whether the "optional" keyword was explicitly
- // specified in the source .proto file.
- HasOptionalKeyword() bool
-
- // IsWeak reports whether this is a weak field, which does not impose a
- // direct dependency on the target type.
- // If true, then Message returns a placeholder type.
- IsWeak() bool
-
- // IsPacked reports whether repeated primitive numeric kinds should be
- // serialized using a packed encoding.
- // If true, then it implies Cardinality is Repeated.
- IsPacked() bool
-
- // IsList reports whether this field represents a list,
- // where the value type for the associated field is a List.
- // It is equivalent to checking whether Cardinality is Repeated and
- // that IsMap reports false.
- IsList() bool
-
- // IsMap reports whether this field represents a map,
- // where the value type for the associated field is a Map.
- // It is equivalent to checking whether Cardinality is Repeated,
- // that the Kind is MessageKind, and that MessageDescriptor.IsMapEntry reports true.
- IsMap() bool
-
- // MapKey returns the field descriptor for the key in the map entry.
- // It returns nil if IsMap reports false.
- MapKey() FieldDescriptor
-
- // MapValue returns the field descriptor for the value in the map entry.
- // It returns nil if IsMap reports false.
- MapValue() FieldDescriptor
-
- // HasDefault reports whether this field has a default value.
- HasDefault() bool
-
- // Default returns the default value for scalar fields.
- // For proto2, it is the default value as specified in the proto file,
- // or the zero value if unspecified.
- // For proto3, it is always the zero value of the scalar.
- // The Value type is determined by the Kind.
- Default() Value
-
- // DefaultEnumValue returns the enum value descriptor for the default value
- // of an enum field, and is nil for any other kind of field.
- DefaultEnumValue() EnumValueDescriptor
-
- // ContainingOneof is the containing oneof that this field belongs to,
- // and is nil if this field is not part of a oneof.
- ContainingOneof() OneofDescriptor
-
- // ContainingMessage is the containing message that this field belongs to.
- // For extension fields, this may not necessarily be the parent message
- // that the field is declared within.
- ContainingMessage() MessageDescriptor
-
- // Enum is the enum descriptor if Kind is EnumKind.
- // It returns nil for any other Kind.
- Enum() EnumDescriptor
-
- // Message is the message descriptor if Kind is
- // MessageKind or GroupKind. It returns nil for any other Kind.
- Message() MessageDescriptor
-
- isFieldDescriptor
-}
-type isFieldDescriptor interface{ ProtoType(FieldDescriptor) }
-
-// FieldDescriptors is a list of field declarations.
-type FieldDescriptors interface {
- // Len reports the number of fields.
- Len() int
- // Get returns the ith FieldDescriptor. It panics if out of bounds.
- Get(i int) FieldDescriptor
- // ByName returns the FieldDescriptor for a field named s.
- // It returns nil if not found.
- ByName(s Name) FieldDescriptor
- // ByJSONName returns the FieldDescriptor for a field with s as the JSON name.
- // It returns nil if not found.
- ByJSONName(s string) FieldDescriptor
- // ByTextName returns the FieldDescriptor for a field with s as the text name.
- // It returns nil if not found.
- ByTextName(s string) FieldDescriptor
- // ByNumber returns the FieldDescriptor for a field numbered n.
- // It returns nil if not found.
- ByNumber(n FieldNumber) FieldDescriptor
-
- doNotImplement
-}
-
-// OneofDescriptor describes a oneof field set within a given message and
-// corresponds with the google.protobuf.OneofDescriptorProto message.
-type OneofDescriptor interface {
- Descriptor
-
- // IsSynthetic reports whether this is a synthetic oneof created to support
- // proto3 optional semantics. If true, Fields contains exactly one field
- // with FieldDescriptor.HasOptionalKeyword specified.
- IsSynthetic() bool
-
- // Fields is a list of fields belonging to this oneof.
- Fields() FieldDescriptors
-
- isOneofDescriptor
-}
-type isOneofDescriptor interface{ ProtoType(OneofDescriptor) }
-
-// OneofDescriptors is a list of oneof declarations.
-type OneofDescriptors interface {
- // Len reports the number of oneof fields.
- Len() int
- // Get returns the ith OneofDescriptor. It panics if out of bounds.
- Get(i int) OneofDescriptor
- // ByName returns the OneofDescriptor for a oneof named s.
- // It returns nil if not found.
- ByName(s Name) OneofDescriptor
-
- doNotImplement
-}
-
-// ExtensionDescriptor is an alias of [FieldDescriptor] for documentation.
-type ExtensionDescriptor = FieldDescriptor
-
-// ExtensionTypeDescriptor is an [ExtensionDescriptor] with an associated [ExtensionType].
-type ExtensionTypeDescriptor interface {
- ExtensionDescriptor
-
- // Type returns the associated ExtensionType.
- Type() ExtensionType
-
- // Descriptor returns the plain ExtensionDescriptor without the
- // associated ExtensionType.
- Descriptor() ExtensionDescriptor
-}
-
-// ExtensionDescriptors is a list of field declarations.
-type ExtensionDescriptors interface {
- // Len reports the number of fields.
- Len() int
- // Get returns the ith ExtensionDescriptor. It panics if out of bounds.
- Get(i int) ExtensionDescriptor
- // ByName returns the ExtensionDescriptor for a field named s.
- // It returns nil if not found.
- ByName(s Name) ExtensionDescriptor
-
- doNotImplement
-}
-
-// ExtensionType encapsulates an [ExtensionDescriptor] with a concrete
-// Go implementation. The nested field descriptor must be for a extension field.
-//
-// While a normal field is a member of the parent message that it is declared
-// within (see [Descriptor.Parent]), an extension field is a member of some other
-// target message (see [FieldDescriptor.ContainingMessage]) and may have no
-// relationship with the parent. However, the full name of an extension field is
-// relative to the parent that it is declared within.
-//
-// For example:
-//
-// syntax = "proto2";
-// package example;
-// message FooMessage {
-// extensions 100 to max;
-// }
-// message BarMessage {
-// extends FooMessage { optional BarMessage bar_field = 100; }
-// }
-//
-// Field "bar_field" is an extension of FooMessage, but its full name is
-// "example.BarMessage.bar_field" instead of "example.FooMessage.bar_field".
-type ExtensionType interface {
- // New returns a new value for the field.
- // For scalars, this returns the default value in native Go form.
- New() Value
-
- // Zero returns a new value for the field.
- // For scalars, this returns the default value in native Go form.
- // For composite types, this returns an empty, read-only message, list, or map.
- Zero() Value
-
- // TypeDescriptor returns the extension type descriptor.
- TypeDescriptor() ExtensionTypeDescriptor
-
- // ValueOf wraps the input and returns it as a Value.
- // ValueOf panics if the input value is invalid or not the appropriate type.
- //
- // ValueOf is more extensive than protoreflect.ValueOf for a given field's
- // value as it has more type information available.
- ValueOf(any) Value
-
- // InterfaceOf completely unwraps the Value to the underlying Go type.
- // InterfaceOf panics if the input is nil or does not represent the
- // appropriate underlying Go type. For composite types, it panics if the
- // value is not mutable.
- //
- // InterfaceOf is able to unwrap the Value further than Value.Interface
- // as it has more type information available.
- InterfaceOf(Value) any
-
- // IsValidValue reports whether the Value is valid to assign to the field.
- IsValidValue(Value) bool
-
- // IsValidInterface reports whether the input is valid to assign to the field.
- IsValidInterface(any) bool
-}
-
-// EnumDescriptor describes an enum and
-// corresponds with the google.protobuf.EnumDescriptorProto message.
-//
-// Nested declarations:
-// [EnumValueDescriptor].
-type EnumDescriptor interface {
- Descriptor
-
- // Values is a list of nested enum value declarations.
- Values() EnumValueDescriptors
-
- // ReservedNames is a list of reserved enum names.
- ReservedNames() Names
- // ReservedRanges is a list of reserved ranges of enum numbers.
- ReservedRanges() EnumRanges
-
- // IsClosed reports whether this enum uses closed semantics.
- // See https://protobuf.dev/programming-guides/enum/#definitions.
- // Note: the Go protobuf implementation is not spec compliant and treats
- // all enums as open enums.
- IsClosed() bool
-
- isEnumDescriptor
-}
-type isEnumDescriptor interface{ ProtoType(EnumDescriptor) }
-
-// EnumType encapsulates an [EnumDescriptor] with a concrete Go implementation.
-type EnumType interface {
- // New returns an instance of this enum type with its value set to n.
- New(n EnumNumber) Enum
-
- // Descriptor returns the enum descriptor.
- //
- // Invariant: t.Descriptor() == t.New(0).Descriptor()
- Descriptor() EnumDescriptor
-}
-
-// EnumDescriptors is a list of enum declarations.
-type EnumDescriptors interface {
- // Len reports the number of enum types.
- Len() int
- // Get returns the ith EnumDescriptor. It panics if out of bounds.
- Get(i int) EnumDescriptor
- // ByName returns the EnumDescriptor for an enum named s.
- // It returns nil if not found.
- ByName(s Name) EnumDescriptor
-
- doNotImplement
-}
-
-// EnumValueDescriptor describes an enum value and
-// corresponds with the google.protobuf.EnumValueDescriptorProto message.
-//
-// All other proto declarations are in the namespace of the parent.
-// However, enum values do not follow this rule and are within the namespace
-// of the parent's parent (i.e., they are a sibling of the containing enum).
-// Thus, a value named "FOO_VALUE" declared within an enum uniquely identified
-// as "proto.package.MyEnum" has a full name of "proto.package.FOO_VALUE".
-type EnumValueDescriptor interface {
- Descriptor
-
- // Number returns the enum value as an integer.
- Number() EnumNumber
-
- isEnumValueDescriptor
-}
-type isEnumValueDescriptor interface{ ProtoType(EnumValueDescriptor) }
-
-// EnumValueDescriptors is a list of enum value declarations.
-type EnumValueDescriptors interface {
- // Len reports the number of enum values.
- Len() int
- // Get returns the ith EnumValueDescriptor. It panics if out of bounds.
- Get(i int) EnumValueDescriptor
- // ByName returns the EnumValueDescriptor for the enum value named s.
- // It returns nil if not found.
- ByName(s Name) EnumValueDescriptor
- // ByNumber returns the EnumValueDescriptor for the enum value numbered n.
- // If multiple have the same number, the first one defined is returned
- // It returns nil if not found.
- ByNumber(n EnumNumber) EnumValueDescriptor
-
- doNotImplement
-}
-
-// ServiceDescriptor describes a service and
-// corresponds with the google.protobuf.ServiceDescriptorProto message.
-//
-// Nested declarations: [MethodDescriptor].
-type ServiceDescriptor interface {
- Descriptor
-
- // Methods is a list of nested message declarations.
- Methods() MethodDescriptors
-
- isServiceDescriptor
-}
-type isServiceDescriptor interface{ ProtoType(ServiceDescriptor) }
-
-// ServiceDescriptors is a list of service declarations.
-type ServiceDescriptors interface {
- // Len reports the number of services.
- Len() int
- // Get returns the ith ServiceDescriptor. It panics if out of bounds.
- Get(i int) ServiceDescriptor
- // ByName returns the ServiceDescriptor for a service named s.
- // It returns nil if not found.
- ByName(s Name) ServiceDescriptor
-
- doNotImplement
-}
-
-// MethodDescriptor describes a method and
-// corresponds with the google.protobuf.MethodDescriptorProto message.
-type MethodDescriptor interface {
- Descriptor
-
- // Input is the input message descriptor.
- Input() MessageDescriptor
- // Output is the output message descriptor.
- Output() MessageDescriptor
- // IsStreamingClient reports whether the client streams multiple messages.
- IsStreamingClient() bool
- // IsStreamingServer reports whether the server streams multiple messages.
- IsStreamingServer() bool
-
- isMethodDescriptor
-}
-type isMethodDescriptor interface{ ProtoType(MethodDescriptor) }
-
-// MethodDescriptors is a list of method declarations.
-type MethodDescriptors interface {
- // Len reports the number of methods.
- Len() int
- // Get returns the ith MethodDescriptor. It panics if out of bounds.
- Get(i int) MethodDescriptor
- // ByName returns the MethodDescriptor for a service method named s.
- // It returns nil if not found.
- ByName(s Name) MethodDescriptor
-
- doNotImplement
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go
deleted file mode 100644
index a4b78acef..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go
+++ /dev/null
@@ -1,285 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoreflect
-
-import "google.golang.org/protobuf/encoding/protowire"
-
-// Enum is a reflection interface for a concrete enum value,
-// which provides type information and a getter for the enum number.
-// Enum does not provide a mutable API since enums are commonly backed by
-// Go constants, which are not addressable.
-type Enum interface {
- // Descriptor returns enum descriptor, which contains only the protobuf
- // type information for the enum.
- Descriptor() EnumDescriptor
-
- // Type returns the enum type, which encapsulates both Go and protobuf
- // type information. If the Go type information is not needed,
- // it is recommended that the enum descriptor be used instead.
- Type() EnumType
-
- // Number returns the enum value as an integer.
- Number() EnumNumber
-}
-
-// Message is a reflective interface for a concrete message value,
-// encapsulating both type and value information for the message.
-//
-// Accessor/mutators for individual fields are keyed by [FieldDescriptor].
-// For non-extension fields, the descriptor must exactly match the
-// field known by the parent message.
-// For extension fields, the descriptor must implement [ExtensionTypeDescriptor],
-// extend the parent message (i.e., have the same message [FullName]), and
-// be within the parent's extension range.
-//
-// Each field [Value] can be a scalar or a composite type ([Message], [List], or [Map]).
-// See [Value] for the Go types associated with a [FieldDescriptor].
-// Providing a [Value] that is invalid or of an incorrect type panics.
-type Message interface {
- // Descriptor returns message descriptor, which contains only the protobuf
- // type information for the message.
- Descriptor() MessageDescriptor
-
- // Type returns the message type, which encapsulates both Go and protobuf
- // type information. If the Go type information is not needed,
- // it is recommended that the message descriptor be used instead.
- Type() MessageType
-
- // New returns a newly allocated and mutable empty message.
- New() Message
-
- // Interface unwraps the message reflection interface and
- // returns the underlying ProtoMessage interface.
- Interface() ProtoMessage
-
- // Range iterates over every populated field in an undefined order,
- // calling f for each field descriptor and value encountered.
- // Range returns immediately if f returns false.
- // While iterating, mutating operations may only be performed
- // on the current field descriptor.
- Range(f func(FieldDescriptor, Value) bool)
-
- // Has reports whether a field is populated.
- //
- // Some fields have the property of nullability where it is possible to
- // distinguish between the default value of a field and whether the field
- // was explicitly populated with the default value. Singular message fields,
- // member fields of a oneof, and proto2 scalar fields are nullable. Such
- // fields are populated only if explicitly set.
- //
- // In other cases (aside from the nullable cases above),
- // a proto3 scalar field is populated if it contains a non-zero value, and
- // a repeated field is populated if it is non-empty.
- Has(FieldDescriptor) bool
-
- // Clear clears the field such that a subsequent Has call reports false.
- //
- // Clearing an extension field clears both the extension type and value
- // associated with the given field number.
- //
- // Clear is a mutating operation and unsafe for concurrent use.
- Clear(FieldDescriptor)
-
- // Get retrieves the value for a field.
- //
- // For unpopulated scalars, it returns the default value, where
- // the default value of a bytes scalar is guaranteed to be a copy.
- // For unpopulated composite types, it returns an empty, read-only view
- // of the value; to obtain a mutable reference, use Mutable.
- Get(FieldDescriptor) Value
-
- // Set stores the value for a field.
- //
- // For a field belonging to a oneof, it implicitly clears any other field
- // that may be currently set within the same oneof.
- // For extension fields, it implicitly stores the provided ExtensionType.
- // When setting a composite type, it is unspecified whether the stored value
- // aliases the source's memory in any way. If the composite value is an
- // empty, read-only value, then it panics.
- //
- // Set is a mutating operation and unsafe for concurrent use.
- Set(FieldDescriptor, Value)
-
- // Mutable returns a mutable reference to a composite type.
- //
- // If the field is unpopulated, it may allocate a composite value.
- // For a field belonging to a oneof, it implicitly clears any other field
- // that may be currently set within the same oneof.
- // For extension fields, it implicitly stores the provided ExtensionType
- // if not already stored.
- // It panics if the field does not contain a composite type.
- //
- // Mutable is a mutating operation and unsafe for concurrent use.
- Mutable(FieldDescriptor) Value
-
- // NewField returns a new value that is assignable to the field
- // for the given descriptor. For scalars, this returns the default value.
- // For lists, maps, and messages, this returns a new, empty, mutable value.
- NewField(FieldDescriptor) Value
-
- // WhichOneof reports which field within the oneof is populated,
- // returning nil if none are populated.
- // It panics if the oneof descriptor does not belong to this message.
- WhichOneof(OneofDescriptor) FieldDescriptor
-
- // GetUnknown retrieves the entire list of unknown fields.
- // The caller may only mutate the contents of the RawFields
- // if the mutated bytes are stored back into the message with SetUnknown.
- GetUnknown() RawFields
-
- // SetUnknown stores an entire list of unknown fields.
- // The raw fields must be syntactically valid according to the wire format.
- // An implementation may panic if this is not the case.
- // Once stored, the caller must not mutate the content of the RawFields.
- // An empty RawFields may be passed to clear the fields.
- //
- // SetUnknown is a mutating operation and unsafe for concurrent use.
- SetUnknown(RawFields)
-
- // IsValid reports whether the message is valid.
- //
- // An invalid message is an empty, read-only value.
- //
- // An invalid message often corresponds to a nil pointer of the concrete
- // message type, but the details are implementation dependent.
- // Validity is not part of the protobuf data model, and may not
- // be preserved in marshaling or other operations.
- IsValid() bool
-
- // ProtoMethods returns optional fast-path implementations of various operations.
- // This method may return nil.
- //
- // The returned methods type is identical to
- // [google.golang.org/protobuf/runtime/protoiface.Methods].
- // Consult the protoiface package documentation for details.
- ProtoMethods() *methods
-}
-
-// RawFields is the raw bytes for an ordered sequence of fields.
-// Each field contains both the tag (representing field number and wire type),
-// and also the wire data itself.
-type RawFields []byte
-
-// IsValid reports whether b is syntactically correct wire format.
-func (b RawFields) IsValid() bool {
- for len(b) > 0 {
- _, _, n := protowire.ConsumeField(b)
- if n < 0 {
- return false
- }
- b = b[n:]
- }
- return true
-}
-
-// List is a zero-indexed, ordered list.
-// The element [Value] type is determined by [FieldDescriptor.Kind].
-// Providing a [Value] that is invalid or of an incorrect type panics.
-type List interface {
- // Len reports the number of entries in the List.
- // Get, Set, and Truncate panic with out of bound indexes.
- Len() int
-
- // Get retrieves the value at the given index.
- // It never returns an invalid value.
- Get(int) Value
-
- // Set stores a value for the given index.
- // When setting a composite type, it is unspecified whether the set
- // value aliases the source's memory in any way.
- //
- // Set is a mutating operation and unsafe for concurrent use.
- Set(int, Value)
-
- // Append appends the provided value to the end of the list.
- // When appending a composite type, it is unspecified whether the appended
- // value aliases the source's memory in any way.
- //
- // Append is a mutating operation and unsafe for concurrent use.
- Append(Value)
-
- // AppendMutable appends a new, empty, mutable message value to the end
- // of the list and returns it.
- // It panics if the list does not contain a message type.
- AppendMutable() Value
-
- // Truncate truncates the list to a smaller length.
- //
- // Truncate is a mutating operation and unsafe for concurrent use.
- Truncate(int)
-
- // NewElement returns a new value for a list element.
- // For enums, this returns the first enum value.
- // For other scalars, this returns the zero value.
- // For messages, this returns a new, empty, mutable value.
- NewElement() Value
-
- // IsValid reports whether the list is valid.
- //
- // An invalid list is an empty, read-only value.
- //
- // Validity is not part of the protobuf data model, and may not
- // be preserved in marshaling or other operations.
- IsValid() bool
-}
-
-// Map is an unordered, associative map.
-// The entry [MapKey] type is determined by [FieldDescriptor.MapKey].Kind.
-// The entry [Value] type is determined by [FieldDescriptor.MapValue].Kind.
-// Providing a [MapKey] or [Value] that is invalid or of an incorrect type panics.
-type Map interface {
- // Len reports the number of elements in the map.
- Len() int
-
- // Range iterates over every map entry in an undefined order,
- // calling f for each key and value encountered.
- // Range calls f Len times unless f returns false, which stops iteration.
- // While iterating, mutating operations may only be performed
- // on the current map key.
- Range(f func(MapKey, Value) bool)
-
- // Has reports whether an entry with the given key is in the map.
- Has(MapKey) bool
-
- // Clear clears the entry associated with they given key.
- // The operation does nothing if there is no entry associated with the key.
- //
- // Clear is a mutating operation and unsafe for concurrent use.
- Clear(MapKey)
-
- // Get retrieves the value for an entry with the given key.
- // It returns an invalid value for non-existent entries.
- Get(MapKey) Value
-
- // Set stores the value for an entry with the given key.
- // It panics when given a key or value that is invalid or the wrong type.
- // When setting a composite type, it is unspecified whether the set
- // value aliases the source's memory in any way.
- //
- // Set is a mutating operation and unsafe for concurrent use.
- Set(MapKey, Value)
-
- // Mutable retrieves a mutable reference to the entry for the given key.
- // If no entry exists for the key, it creates a new, empty, mutable value
- // and stores it as the entry for the key.
- // It panics if the map value is not a message.
- Mutable(MapKey) Value
-
- // NewValue returns a new value assignable as a map value.
- // For enums, this returns the first enum value.
- // For other scalars, this returns the zero value.
- // For messages, this returns a new, empty, mutable value.
- NewValue() Value
-
- // IsValid reports whether the map is valid.
- //
- // An invalid map is an empty, read-only value.
- //
- // An invalid message often corresponds to a nil Go map value,
- // but the details are implementation dependent.
- // Validity is not part of the protobuf data model, and may not
- // be preserved in marshaling or other operations.
- IsValid() bool
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go
deleted file mode 100644
index 654599d44..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2022 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoreflect
-
-import (
- "bytes"
- "fmt"
- "math"
- "reflect"
-
- "google.golang.org/protobuf/encoding/protowire"
-)
-
-// Equal reports whether v1 and v2 are recursively equal.
-//
-// - Values of different types are always unequal.
-//
-// - Bytes values are equal if they contain identical bytes.
-// Empty bytes (regardless of nil-ness) are considered equal.
-//
-// - Floating point values are equal if they contain the same value.
-// Unlike the == operator, a NaN is equal to another NaN.
-//
-// - Enums are equal if they contain the same number.
-// Since [Value] does not contain an enum descriptor,
-// enum values do not consider the type of the enum.
-//
-// - Other scalar values are equal if they contain the same value.
-//
-// - [Message] values are equal if they belong to the same message descriptor,
-// have the same set of populated known and extension field values,
-// and the same set of unknown fields values.
-//
-// - [List] values are equal if they are the same length and
-// each corresponding element is equal.
-//
-// - [Map] values are equal if they have the same set of keys and
-// the corresponding value for each key is equal.
-func (v1 Value) Equal(v2 Value) bool {
- return equalValue(v1, v2)
-}
-
-func equalValue(x, y Value) bool {
- eqType := x.typ == y.typ
- switch x.typ {
- case nilType:
- return eqType
- case boolType:
- return eqType && x.Bool() == y.Bool()
- case int32Type, int64Type:
- return eqType && x.Int() == y.Int()
- case uint32Type, uint64Type:
- return eqType && x.Uint() == y.Uint()
- case float32Type, float64Type:
- return eqType && equalFloat(x.Float(), y.Float())
- case stringType:
- return eqType && x.String() == y.String()
- case bytesType:
- return eqType && bytes.Equal(x.Bytes(), y.Bytes())
- case enumType:
- return eqType && x.Enum() == y.Enum()
- default:
- switch x := x.Interface().(type) {
- case Message:
- y, ok := y.Interface().(Message)
- return ok && equalMessage(x, y)
- case List:
- y, ok := y.Interface().(List)
- return ok && equalList(x, y)
- case Map:
- y, ok := y.Interface().(Map)
- return ok && equalMap(x, y)
- default:
- panic(fmt.Sprintf("unknown type: %T", x))
- }
- }
-}
-
-// equalFloat compares two floats, where NaNs are treated as equal.
-func equalFloat(x, y float64) bool {
- if math.IsNaN(x) || math.IsNaN(y) {
- return math.IsNaN(x) && math.IsNaN(y)
- }
- return x == y
-}
-
-// equalMessage compares two messages.
-func equalMessage(mx, my Message) bool {
- if mx.Descriptor() != my.Descriptor() {
- return false
- }
-
- nx := 0
- equal := true
- mx.Range(func(fd FieldDescriptor, vx Value) bool {
- nx++
- vy := my.Get(fd)
- equal = my.Has(fd) && equalValue(vx, vy)
- return equal
- })
- if !equal {
- return false
- }
- ny := 0
- my.Range(func(fd FieldDescriptor, vx Value) bool {
- ny++
- return true
- })
- if nx != ny {
- return false
- }
-
- return equalUnknown(mx.GetUnknown(), my.GetUnknown())
-}
-
-// equalList compares two lists.
-func equalList(x, y List) bool {
- if x.Len() != y.Len() {
- return false
- }
- for i := x.Len() - 1; i >= 0; i-- {
- if !equalValue(x.Get(i), y.Get(i)) {
- return false
- }
- }
- return true
-}
-
-// equalMap compares two maps.
-func equalMap(x, y Map) bool {
- if x.Len() != y.Len() {
- return false
- }
- equal := true
- x.Range(func(k MapKey, vx Value) bool {
- vy := y.Get(k)
- equal = y.Has(k) && equalValue(vx, vy)
- return equal
- })
- return equal
-}
-
-// equalUnknown compares unknown fields by direct comparison on the raw bytes
-// of each individual field number.
-func equalUnknown(x, y RawFields) bool {
- if len(x) != len(y) {
- return false
- }
- if bytes.Equal([]byte(x), []byte(y)) {
- return true
- }
-
- mx := make(map[FieldNumber]RawFields)
- my := make(map[FieldNumber]RawFields)
- for len(x) > 0 {
- fnum, _, n := protowire.ConsumeField(x)
- mx[fnum] = append(mx[fnum], x[:n]...)
- x = x[n:]
- }
- for len(y) > 0 {
- fnum, _, n := protowire.ConsumeField(y)
- my[fnum] = append(my[fnum], y[:n]...)
- y = y[n:]
- }
- return reflect.DeepEqual(mx, my)
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go
deleted file mode 100644
index 9fe83cef5..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go
+++ /dev/null
@@ -1,438 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoreflect
-
-import (
- "fmt"
- "math"
-)
-
-// Value is a union where only one Go type may be set at a time.
-// The Value is used to represent all possible values a field may take.
-// The following shows which Go type is used to represent each proto [Kind]:
-//
-// ╔════════════╤═════════════════════════════════════╗
-// ║ Go type │ Protobuf kind ║
-// ╠════════════╪═════════════════════════════════════╣
-// ║ bool │ BoolKind ║
-// ║ int32 │ Int32Kind, Sint32Kind, Sfixed32Kind ║
-// ║ int64 │ Int64Kind, Sint64Kind, Sfixed64Kind ║
-// ║ uint32 │ Uint32Kind, Fixed32Kind ║
-// ║ uint64 │ Uint64Kind, Fixed64Kind ║
-// ║ float32 │ FloatKind ║
-// ║ float64 │ DoubleKind ║
-// ║ string │ StringKind ║
-// ║ []byte │ BytesKind ║
-// ║ EnumNumber │ EnumKind ║
-// ║ Message │ MessageKind, GroupKind ║
-// ╚════════════╧═════════════════════════════════════╝
-//
-// Multiple protobuf Kinds may be represented by a single Go type if the type
-// can losslessly represent the information for the proto kind. For example,
-// [Int64Kind], [Sint64Kind], and [Sfixed64Kind] are all represented by int64,
-// but use different integer encoding methods.
-//
-// The [List] or [Map] types are used if the field cardinality is repeated.
-// A field is a [List] if [FieldDescriptor.IsList] reports true.
-// A field is a [Map] if [FieldDescriptor.IsMap] reports true.
-//
-// Converting to/from a Value and a concrete Go value panics on type mismatch.
-// For example, [ValueOf]("hello").Int() panics because this attempts to
-// retrieve an int64 from a string.
-//
-// [List], [Map], and [Message] Values are called "composite" values.
-//
-// A composite Value may alias (reference) memory at some location,
-// such that changes to the Value updates the that location.
-// A composite value acquired with a Mutable method, such as [Message.Mutable],
-// always references the source object.
-//
-// For example:
-//
-// // Append a 0 to a "repeated int32" field.
-// // Since the Value returned by Mutable is guaranteed to alias
-// // the source message, modifying the Value modifies the message.
-// message.Mutable(fieldDesc).List().Append(protoreflect.ValueOfInt32(0))
-//
-// // Assign [0] to a "repeated int32" field by creating a new Value,
-// // modifying it, and assigning it.
-// list := message.NewField(fieldDesc).List()
-// list.Append(protoreflect.ValueOfInt32(0))
-// message.Set(fieldDesc, list)
-// // ERROR: Since it is not defined whether Set aliases the source,
-// // appending to the List here may or may not modify the message.
-// list.Append(protoreflect.ValueOfInt32(0))
-//
-// Some operations, such as [Message.Get], may return an "empty, read-only"
-// composite Value. Modifying an empty, read-only value panics.
-type Value value
-
-// The protoreflect API uses a custom Value union type instead of any
-// to keep the future open for performance optimizations. Using an any
-// always incurs an allocation for primitives (e.g., int64) since it needs to
-// be boxed on the heap (as interfaces can only contain pointers natively).
-// Instead, we represent the Value union as a flat struct that internally keeps
-// track of which type is set. Using unsafe, the Value union can be reduced
-// down to 24B, which is identical in size to a slice.
-//
-// The latest compiler (Go1.11) currently suffers from some limitations:
-// • With inlining, the compiler should be able to statically prove that
-// only one of these switch cases are taken and inline one specific case.
-// See https://golang.org/issue/22310.
-
-// ValueOf returns a Value initialized with the concrete value stored in v.
-// This panics if the type does not match one of the allowed types in the
-// Value union.
-func ValueOf(v any) Value {
- switch v := v.(type) {
- case nil:
- return Value{}
- case bool:
- return ValueOfBool(v)
- case int32:
- return ValueOfInt32(v)
- case int64:
- return ValueOfInt64(v)
- case uint32:
- return ValueOfUint32(v)
- case uint64:
- return ValueOfUint64(v)
- case float32:
- return ValueOfFloat32(v)
- case float64:
- return ValueOfFloat64(v)
- case string:
- return ValueOfString(v)
- case []byte:
- return ValueOfBytes(v)
- case EnumNumber:
- return ValueOfEnum(v)
- case Message, List, Map:
- return valueOfIface(v)
- case ProtoMessage:
- panic(fmt.Sprintf("invalid proto.Message(%T) type, expected a protoreflect.Message type", v))
- default:
- panic(fmt.Sprintf("invalid type: %T", v))
- }
-}
-
-// ValueOfBool returns a new boolean value.
-func ValueOfBool(v bool) Value {
- if v {
- return Value{typ: boolType, num: 1}
- } else {
- return Value{typ: boolType, num: 0}
- }
-}
-
-// ValueOfInt32 returns a new int32 value.
-func ValueOfInt32(v int32) Value {
- return Value{typ: int32Type, num: uint64(v)}
-}
-
-// ValueOfInt64 returns a new int64 value.
-func ValueOfInt64(v int64) Value {
- return Value{typ: int64Type, num: uint64(v)}
-}
-
-// ValueOfUint32 returns a new uint32 value.
-func ValueOfUint32(v uint32) Value {
- return Value{typ: uint32Type, num: uint64(v)}
-}
-
-// ValueOfUint64 returns a new uint64 value.
-func ValueOfUint64(v uint64) Value {
- return Value{typ: uint64Type, num: v}
-}
-
-// ValueOfFloat32 returns a new float32 value.
-func ValueOfFloat32(v float32) Value {
- return Value{typ: float32Type, num: uint64(math.Float64bits(float64(v)))}
-}
-
-// ValueOfFloat64 returns a new float64 value.
-func ValueOfFloat64(v float64) Value {
- return Value{typ: float64Type, num: uint64(math.Float64bits(float64(v)))}
-}
-
-// ValueOfString returns a new string value.
-func ValueOfString(v string) Value {
- return valueOfString(v)
-}
-
-// ValueOfBytes returns a new bytes value.
-func ValueOfBytes(v []byte) Value {
- return valueOfBytes(v[:len(v):len(v)])
-}
-
-// ValueOfEnum returns a new enum value.
-func ValueOfEnum(v EnumNumber) Value {
- return Value{typ: enumType, num: uint64(v)}
-}
-
-// ValueOfMessage returns a new Message value.
-func ValueOfMessage(v Message) Value {
- return valueOfIface(v)
-}
-
-// ValueOfList returns a new List value.
-func ValueOfList(v List) Value {
- return valueOfIface(v)
-}
-
-// ValueOfMap returns a new Map value.
-func ValueOfMap(v Map) Value {
- return valueOfIface(v)
-}
-
-// IsValid reports whether v is populated with a value.
-func (v Value) IsValid() bool {
- return v.typ != nilType
-}
-
-// Interface returns v as an any.
-//
-// Invariant: v == ValueOf(v).Interface()
-func (v Value) Interface() any {
- switch v.typ {
- case nilType:
- return nil
- case boolType:
- return v.Bool()
- case int32Type:
- return int32(v.Int())
- case int64Type:
- return int64(v.Int())
- case uint32Type:
- return uint32(v.Uint())
- case uint64Type:
- return uint64(v.Uint())
- case float32Type:
- return float32(v.Float())
- case float64Type:
- return float64(v.Float())
- case stringType:
- return v.String()
- case bytesType:
- return v.Bytes()
- case enumType:
- return v.Enum()
- default:
- return v.getIface()
- }
-}
-
-func (v Value) typeName() string {
- switch v.typ {
- case nilType:
- return "nil"
- case boolType:
- return "bool"
- case int32Type:
- return "int32"
- case int64Type:
- return "int64"
- case uint32Type:
- return "uint32"
- case uint64Type:
- return "uint64"
- case float32Type:
- return "float32"
- case float64Type:
- return "float64"
- case stringType:
- return "string"
- case bytesType:
- return "bytes"
- case enumType:
- return "enum"
- default:
- switch v := v.getIface().(type) {
- case Message:
- return "message"
- case List:
- return "list"
- case Map:
- return "map"
- default:
- return fmt.Sprintf("<unknown: %T>", v)
- }
- }
-}
-
-func (v Value) panicMessage(what string) string {
- return fmt.Sprintf("type mismatch: cannot convert %v to %s", v.typeName(), what)
-}
-
-// Bool returns v as a bool and panics if the type is not a bool.
-func (v Value) Bool() bool {
- switch v.typ {
- case boolType:
- return v.num > 0
- default:
- panic(v.panicMessage("bool"))
- }
-}
-
-// Int returns v as a int64 and panics if the type is not a int32 or int64.
-func (v Value) Int() int64 {
- switch v.typ {
- case int32Type, int64Type:
- return int64(v.num)
- default:
- panic(v.panicMessage("int"))
- }
-}
-
-// Uint returns v as a uint64 and panics if the type is not a uint32 or uint64.
-func (v Value) Uint() uint64 {
- switch v.typ {
- case uint32Type, uint64Type:
- return uint64(v.num)
- default:
- panic(v.panicMessage("uint"))
- }
-}
-
-// Float returns v as a float64 and panics if the type is not a float32 or float64.
-func (v Value) Float() float64 {
- switch v.typ {
- case float32Type, float64Type:
- return math.Float64frombits(uint64(v.num))
- default:
- panic(v.panicMessage("float"))
- }
-}
-
-// String returns v as a string. Since this method implements [fmt.Stringer],
-// this returns the formatted string value for any non-string type.
-func (v Value) String() string {
- switch v.typ {
- case stringType:
- return v.getString()
- default:
- return fmt.Sprint(v.Interface())
- }
-}
-
-// Bytes returns v as a []byte and panics if the type is not a []byte.
-func (v Value) Bytes() []byte {
- switch v.typ {
- case bytesType:
- return v.getBytes()
- default:
- panic(v.panicMessage("bytes"))
- }
-}
-
-// Enum returns v as a [EnumNumber] and panics if the type is not a [EnumNumber].
-func (v Value) Enum() EnumNumber {
- switch v.typ {
- case enumType:
- return EnumNumber(v.num)
- default:
- panic(v.panicMessage("enum"))
- }
-}
-
-// Message returns v as a [Message] and panics if the type is not a [Message].
-func (v Value) Message() Message {
- switch vi := v.getIface().(type) {
- case Message:
- return vi
- default:
- panic(v.panicMessage("message"))
- }
-}
-
-// List returns v as a [List] and panics if the type is not a [List].
-func (v Value) List() List {
- switch vi := v.getIface().(type) {
- case List:
- return vi
- default:
- panic(v.panicMessage("list"))
- }
-}
-
-// Map returns v as a [Map] and panics if the type is not a [Map].
-func (v Value) Map() Map {
- switch vi := v.getIface().(type) {
- case Map:
- return vi
- default:
- panic(v.panicMessage("map"))
- }
-}
-
-// MapKey returns v as a [MapKey] and panics for invalid [MapKey] types.
-func (v Value) MapKey() MapKey {
- switch v.typ {
- case boolType, int32Type, int64Type, uint32Type, uint64Type, stringType:
- return MapKey(v)
- default:
- panic(v.panicMessage("map key"))
- }
-}
-
-// MapKey is used to index maps, where the Go type of the MapKey must match
-// the specified key [Kind] (see [MessageDescriptor.IsMapEntry]).
-// The following shows what Go type is used to represent each proto [Kind]:
-//
-// ╔═════════╤═════════════════════════════════════╗
-// ║ Go type │ Protobuf kind ║
-// ╠═════════╪═════════════════════════════════════╣
-// ║ bool │ BoolKind ║
-// ║ int32 │ Int32Kind, Sint32Kind, Sfixed32Kind ║
-// ║ int64 │ Int64Kind, Sint64Kind, Sfixed64Kind ║
-// ║ uint32 │ Uint32Kind, Fixed32Kind ║
-// ║ uint64 │ Uint64Kind, Fixed64Kind ║
-// ║ string │ StringKind ║
-// ╚═════════╧═════════════════════════════════════╝
-//
-// A MapKey is constructed and accessed through a [Value]:
-//
-// k := ValueOf("hash").MapKey() // convert string to MapKey
-// s := k.String() // convert MapKey to string
-//
-// The MapKey is a strict subset of valid types used in [Value];
-// converting a [Value] to a MapKey with an invalid type panics.
-type MapKey value
-
-// IsValid reports whether k is populated with a value.
-func (k MapKey) IsValid() bool {
- return Value(k).IsValid()
-}
-
-// Interface returns k as an any.
-func (k MapKey) Interface() any {
- return Value(k).Interface()
-}
-
-// Bool returns k as a bool and panics if the type is not a bool.
-func (k MapKey) Bool() bool {
- return Value(k).Bool()
-}
-
-// Int returns k as a int64 and panics if the type is not a int32 or int64.
-func (k MapKey) Int() int64 {
- return Value(k).Int()
-}
-
-// Uint returns k as a uint64 and panics if the type is not a uint32 or uint64.
-func (k MapKey) Uint() uint64 {
- return Value(k).Uint()
-}
-
-// String returns k as a string. Since this method implements [fmt.Stringer],
-// this returns the formatted string value for any non-string type.
-func (k MapKey) String() string {
- return Value(k).String()
-}
-
-// Value returns k as a [Value].
-func (k MapKey) Value() Value {
- return Value(k)
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
deleted file mode 100644
index 0015fcb35..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.21
-
-package protoreflect
-
-import (
- "unsafe"
-
- "google.golang.org/protobuf/internal/pragma"
-)
-
-type (
- stringHeader struct {
- Data unsafe.Pointer
- Len int
- }
- sliceHeader struct {
- Data unsafe.Pointer
- Len int
- Cap int
- }
- ifaceHeader struct {
- Type unsafe.Pointer
- Data unsafe.Pointer
- }
-)
-
-var (
- nilType = typeOf(nil)
- boolType = typeOf(*new(bool))
- int32Type = typeOf(*new(int32))
- int64Type = typeOf(*new(int64))
- uint32Type = typeOf(*new(uint32))
- uint64Type = typeOf(*new(uint64))
- float32Type = typeOf(*new(float32))
- float64Type = typeOf(*new(float64))
- stringType = typeOf(*new(string))
- bytesType = typeOf(*new([]byte))
- enumType = typeOf(*new(EnumNumber))
-)
-
-// typeOf returns a pointer to the Go type information.
-// The pointer is comparable and equal if and only if the types are identical.
-func typeOf(t any) unsafe.Pointer {
- return (*ifaceHeader)(unsafe.Pointer(&t)).Type
-}
-
-// value is a union where only one type can be represented at a time.
-// The struct is 24B large on 64-bit systems and requires the minimum storage
-// necessary to represent each possible type.
-//
-// The Go GC needs to be able to scan variables containing pointers.
-// As such, pointers and non-pointers cannot be intermixed.
-type value struct {
- pragma.DoNotCompare // 0B
-
- // typ stores the type of the value as a pointer to the Go type.
- typ unsafe.Pointer // 8B
-
- // ptr stores the data pointer for a String, Bytes, or interface value.
- ptr unsafe.Pointer // 8B
-
- // num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or
- // Enum value as a raw uint64.
- //
- // It is also used to store the length of a String or Bytes value;
- // the capacity is ignored.
- num uint64 // 8B
-}
-
-func valueOfString(v string) Value {
- p := (*stringHeader)(unsafe.Pointer(&v))
- return Value{typ: stringType, ptr: p.Data, num: uint64(len(v))}
-}
-func valueOfBytes(v []byte) Value {
- p := (*sliceHeader)(unsafe.Pointer(&v))
- return Value{typ: bytesType, ptr: p.Data, num: uint64(len(v))}
-}
-func valueOfIface(v any) Value {
- p := (*ifaceHeader)(unsafe.Pointer(&v))
- return Value{typ: p.Type, ptr: p.Data}
-}
-
-func (v Value) getString() (x string) {
- *(*stringHeader)(unsafe.Pointer(&x)) = stringHeader{Data: v.ptr, Len: int(v.num)}
- return x
-}
-func (v Value) getBytes() (x []byte) {
- *(*sliceHeader)(unsafe.Pointer(&x)) = sliceHeader{Data: v.ptr, Len: int(v.num), Cap: int(v.num)}
- return x
-}
-func (v Value) getIface() (x any) {
- *(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
- return x
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
deleted file mode 100644
index 479527b58..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.21
-
-package protoreflect
-
-import (
- "unsafe"
-
- "google.golang.org/protobuf/internal/pragma"
-)
-
-type (
- ifaceHeader struct {
- _ [0]any // if interfaces have greater alignment than unsafe.Pointer, this will enforce it.
- Type unsafe.Pointer
- Data unsafe.Pointer
- }
-)
-
-var (
- nilType = typeOf(nil)
- boolType = typeOf(*new(bool))
- int32Type = typeOf(*new(int32))
- int64Type = typeOf(*new(int64))
- uint32Type = typeOf(*new(uint32))
- uint64Type = typeOf(*new(uint64))
- float32Type = typeOf(*new(float32))
- float64Type = typeOf(*new(float64))
- stringType = typeOf(*new(string))
- bytesType = typeOf(*new([]byte))
- enumType = typeOf(*new(EnumNumber))
-)
-
-// typeOf returns a pointer to the Go type information.
-// The pointer is comparable and equal if and only if the types are identical.
-func typeOf(t any) unsafe.Pointer {
- return (*ifaceHeader)(unsafe.Pointer(&t)).Type
-}
-
-// value is a union where only one type can be represented at a time.
-// The struct is 24B large on 64-bit systems and requires the minimum storage
-// necessary to represent each possible type.
-//
-// The Go GC needs to be able to scan variables containing pointers.
-// As such, pointers and non-pointers cannot be intermixed.
-type value struct {
- pragma.DoNotCompare // 0B
-
- // typ stores the type of the value as a pointer to the Go type.
- typ unsafe.Pointer // 8B
-
- // ptr stores the data pointer for a String, Bytes, or interface value.
- ptr unsafe.Pointer // 8B
-
- // num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or
- // Enum value as a raw uint64.
- //
- // It is also used to store the length of a String or Bytes value;
- // the capacity is ignored.
- num uint64 // 8B
-}
-
-func valueOfString(v string) Value {
- return Value{typ: stringType, ptr: unsafe.Pointer(unsafe.StringData(v)), num: uint64(len(v))}
-}
-func valueOfBytes(v []byte) Value {
- return Value{typ: bytesType, ptr: unsafe.Pointer(unsafe.SliceData(v)), num: uint64(len(v))}
-}
-func valueOfIface(v any) Value {
- p := (*ifaceHeader)(unsafe.Pointer(&v))
- return Value{typ: p.Type, ptr: p.Data}
-}
-
-func (v Value) getString() string {
- return unsafe.String((*byte)(v.ptr), v.num)
-}
-func (v Value) getBytes() []byte {
- return unsafe.Slice((*byte)(v.ptr), v.num)
-}
-func (v Value) getIface() (x any) {
- *(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}
- return x
-}
diff --git a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go
deleted file mode 100644
index de1777339..000000000
--- a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go
+++ /dev/null
@@ -1,882 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protoregistry provides data structures to register and lookup
-// protobuf descriptor types.
-//
-// The [Files] registry contains file descriptors and provides the ability
-// to iterate over the files or lookup a specific descriptor within the files.
-// [Files] only contains protobuf descriptors and has no understanding of Go
-// type information that may be associated with each descriptor.
-//
-// The [Types] registry contains descriptor types for which there is a known
-// Go type associated with that descriptor. It provides the ability to iterate
-// over the registered types or lookup a type by name.
-package protoregistry
-
-import (
- "fmt"
- "os"
- "strings"
- "sync"
-
- "google.golang.org/protobuf/internal/encoding/messageset"
- "google.golang.org/protobuf/internal/errors"
- "google.golang.org/protobuf/internal/flags"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// conflictPolicy configures the policy for handling registration conflicts.
-//
-// It can be over-written at compile time with a linker-initialized variable:
-//
-// go build -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn"
-//
-// It can be over-written at program execution with an environment variable:
-//
-// GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn ./main
-//
-// Neither of the above are covered by the compatibility promise and
-// may be removed in a future release of this module.
-var conflictPolicy = "panic" // "panic" | "warn" | "ignore"
-
-// ignoreConflict reports whether to ignore a registration conflict
-// given the descriptor being registered and the error.
-// It is a variable so that the behavior is easily overridden in another file.
-var ignoreConflict = func(d protoreflect.Descriptor, err error) bool {
- const env = "GOLANG_PROTOBUF_REGISTRATION_CONFLICT"
- const faq = "https://protobuf.dev/reference/go/faq#namespace-conflict"
- policy := conflictPolicy
- if v := os.Getenv(env); v != "" {
- policy = v
- }
- switch policy {
- case "panic":
- panic(fmt.Sprintf("%v\nSee %v\n", err, faq))
- case "warn":
- fmt.Fprintf(os.Stderr, "WARNING: %v\nSee %v\n\n", err, faq)
- return true
- case "ignore":
- return true
- default:
- panic("invalid " + env + " value: " + os.Getenv(env))
- }
-}
-
-var globalMutex sync.RWMutex
-
-// GlobalFiles is a global registry of file descriptors.
-var GlobalFiles *Files = new(Files)
-
-// GlobalTypes is the registry used by default for type lookups
-// unless a local registry is provided by the user.
-var GlobalTypes *Types = new(Types)
-
-// NotFound is a sentinel error value to indicate that the type was not found.
-//
-// Since registry lookup can happen in the critical performance path, resolvers
-// must return this exact error value, not an error wrapping it.
-var NotFound = errors.New("not found")
-
-// Files is a registry for looking up or iterating over files and the
-// descriptors contained within them.
-// The Find and Range methods are safe for concurrent use.
-type Files struct {
- // The map of descsByName contains:
- // EnumDescriptor
- // EnumValueDescriptor
- // MessageDescriptor
- // ExtensionDescriptor
- // ServiceDescriptor
- // *packageDescriptor
- //
- // Note that files are stored as a slice, since a package may contain
- // multiple files. Only top-level declarations are registered.
- // Note that enum values are in the top-level since that are in the same
- // scope as the parent enum.
- descsByName map[protoreflect.FullName]any
- filesByPath map[string][]protoreflect.FileDescriptor
- numFiles int
-}
-
-type packageDescriptor struct {
- files []protoreflect.FileDescriptor
-}
-
-// RegisterFile registers the provided file descriptor.
-//
-// If any descriptor within the file conflicts with the descriptor of any
-// previously registered file (e.g., two enums with the same full name),
-// then the file is not registered and an error is returned.
-//
-// It is permitted for multiple files to have the same file path.
-func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error {
- if r == GlobalFiles {
- globalMutex.Lock()
- defer globalMutex.Unlock()
- }
- if r.descsByName == nil {
- r.descsByName = map[protoreflect.FullName]any{
- "": &packageDescriptor{},
- }
- r.filesByPath = make(map[string][]protoreflect.FileDescriptor)
- }
- path := file.Path()
- if prev := r.filesByPath[path]; len(prev) > 0 {
- r.checkGenProtoConflict(path)
- err := errors.New("file %q is already registered", file.Path())
- err = amendErrorWithCaller(err, prev[0], file)
- if !(r == GlobalFiles && ignoreConflict(file, err)) {
- return err
- }
- }
-
- for name := file.Package(); name != ""; name = name.Parent() {
- switch prev := r.descsByName[name]; prev.(type) {
- case nil, *packageDescriptor:
- default:
- err := errors.New("file %q has a package name conflict over %v", file.Path(), name)
- err = amendErrorWithCaller(err, prev, file)
- if r == GlobalFiles && ignoreConflict(file, err) {
- err = nil
- }
- return err
- }
- }
- var err error
- var hasConflict bool
- rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) {
- if prev := r.descsByName[d.FullName()]; prev != nil {
- hasConflict = true
- err = errors.New("file %q has a name conflict over %v", file.Path(), d.FullName())
- err = amendErrorWithCaller(err, prev, file)
- if r == GlobalFiles && ignoreConflict(d, err) {
- err = nil
- }
- }
- })
- if hasConflict {
- return err
- }
-
- for name := file.Package(); name != ""; name = name.Parent() {
- if r.descsByName[name] == nil {
- r.descsByName[name] = &packageDescriptor{}
- }
- }
- p := r.descsByName[file.Package()].(*packageDescriptor)
- p.files = append(p.files, file)
- rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) {
- r.descsByName[d.FullName()] = d
- })
- r.filesByPath[path] = append(r.filesByPath[path], file)
- r.numFiles++
- return nil
-}
-
-// Several well-known types were hosted in the google.golang.org/genproto module
-// but were later moved to this module. To avoid a weak dependency on the
-// genproto module (and its relatively large set of transitive dependencies),
-// we rely on a registration conflict to determine whether the genproto version
-// is too old (i.e., does not contain aliases to the new type declarations).
-func (r *Files) checkGenProtoConflict(path string) {
- if r != GlobalFiles {
- return
- }
- var prevPath string
- const prevModule = "google.golang.org/genproto"
- const prevVersion = "cb27e3aa (May 26th, 2020)"
- switch path {
- case "google/protobuf/field_mask.proto":
- prevPath = prevModule + "/protobuf/field_mask"
- case "google/protobuf/api.proto":
- prevPath = prevModule + "/protobuf/api"
- case "google/protobuf/type.proto":
- prevPath = prevModule + "/protobuf/ptype"
- case "google/protobuf/source_context.proto":
- prevPath = prevModule + "/protobuf/source_context"
- default:
- return
- }
- pkgName := strings.TrimSuffix(strings.TrimPrefix(path, "google/protobuf/"), ".proto")
- pkgName = strings.Replace(pkgName, "_", "", -1) + "pb" // e.g., "field_mask" => "fieldmaskpb"
- currPath := "google.golang.org/protobuf/types/known/" + pkgName
- panic(fmt.Sprintf(""+
- "duplicate registration of %q\n"+
- "\n"+
- "The generated definition for this file has moved:\n"+
- "\tfrom: %q\n"+
- "\tto: %q\n"+
- "A dependency on the %q module must\n"+
- "be at version %v or higher.\n"+
- "\n"+
- "Upgrade the dependency by running:\n"+
- "\tgo get -u %v\n",
- path, prevPath, currPath, prevModule, prevVersion, prevPath))
-}
-
-// FindDescriptorByName looks up a descriptor by the full name.
-//
-// This returns (nil, [NotFound]) if not found.
-func (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) {
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalFiles {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- prefix := name
- suffix := nameSuffix("")
- for prefix != "" {
- if d, ok := r.descsByName[prefix]; ok {
- switch d := d.(type) {
- case protoreflect.EnumDescriptor:
- if d.FullName() == name {
- return d, nil
- }
- case protoreflect.EnumValueDescriptor:
- if d.FullName() == name {
- return d, nil
- }
- case protoreflect.MessageDescriptor:
- if d.FullName() == name {
- return d, nil
- }
- if d := findDescriptorInMessage(d, suffix); d != nil && d.FullName() == name {
- return d, nil
- }
- case protoreflect.ExtensionDescriptor:
- if d.FullName() == name {
- return d, nil
- }
- case protoreflect.ServiceDescriptor:
- if d.FullName() == name {
- return d, nil
- }
- if d := d.Methods().ByName(suffix.Pop()); d != nil && d.FullName() == name {
- return d, nil
- }
- }
- return nil, NotFound
- }
- prefix = prefix.Parent()
- suffix = nameSuffix(name[len(prefix)+len("."):])
- }
- return nil, NotFound
-}
-
-func findDescriptorInMessage(md protoreflect.MessageDescriptor, suffix nameSuffix) protoreflect.Descriptor {
- name := suffix.Pop()
- if suffix == "" {
- if ed := md.Enums().ByName(name); ed != nil {
- return ed
- }
- for i := md.Enums().Len() - 1; i >= 0; i-- {
- if vd := md.Enums().Get(i).Values().ByName(name); vd != nil {
- return vd
- }
- }
- if xd := md.Extensions().ByName(name); xd != nil {
- return xd
- }
- if fd := md.Fields().ByName(name); fd != nil {
- return fd
- }
- if od := md.Oneofs().ByName(name); od != nil {
- return od
- }
- }
- if md := md.Messages().ByName(name); md != nil {
- if suffix == "" {
- return md
- }
- return findDescriptorInMessage(md, suffix)
- }
- return nil
-}
-
-type nameSuffix string
-
-func (s *nameSuffix) Pop() (name protoreflect.Name) {
- if i := strings.IndexByte(string(*s), '.'); i >= 0 {
- name, *s = protoreflect.Name((*s)[:i]), (*s)[i+1:]
- } else {
- name, *s = protoreflect.Name((*s)), ""
- }
- return name
-}
-
-// FindFileByPath looks up a file by the path.
-//
-// This returns (nil, [NotFound]) if not found.
-// This returns an error if multiple files have the same path.
-func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) {
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalFiles {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- fds := r.filesByPath[path]
- switch len(fds) {
- case 0:
- return nil, NotFound
- case 1:
- return fds[0], nil
- default:
- return nil, errors.New("multiple files named %q", path)
- }
-}
-
-// NumFiles reports the number of registered files,
-// including duplicate files with the same name.
-func (r *Files) NumFiles() int {
- if r == nil {
- return 0
- }
- if r == GlobalFiles {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- return r.numFiles
-}
-
-// RangeFiles iterates over all registered files while f returns true.
-// If multiple files have the same name, RangeFiles iterates over all of them.
-// The iteration order is undefined.
-func (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool) {
- if r == nil {
- return
- }
- if r == GlobalFiles {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- for _, files := range r.filesByPath {
- for _, file := range files {
- if !f(file) {
- return
- }
- }
- }
-}
-
-// NumFilesByPackage reports the number of registered files in a proto package.
-func (r *Files) NumFilesByPackage(name protoreflect.FullName) int {
- if r == nil {
- return 0
- }
- if r == GlobalFiles {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- p, ok := r.descsByName[name].(*packageDescriptor)
- if !ok {
- return 0
- }
- return len(p.files)
-}
-
-// RangeFilesByPackage iterates over all registered files in a given proto package
-// while f returns true. The iteration order is undefined.
-func (r *Files) RangeFilesByPackage(name protoreflect.FullName, f func(protoreflect.FileDescriptor) bool) {
- if r == nil {
- return
- }
- if r == GlobalFiles {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- p, ok := r.descsByName[name].(*packageDescriptor)
- if !ok {
- return
- }
- for _, file := range p.files {
- if !f(file) {
- return
- }
- }
-}
-
-// rangeTopLevelDescriptors iterates over all top-level descriptors in a file
-// which will be directly entered into the registry.
-func rangeTopLevelDescriptors(fd protoreflect.FileDescriptor, f func(protoreflect.Descriptor)) {
- eds := fd.Enums()
- for i := eds.Len() - 1; i >= 0; i-- {
- f(eds.Get(i))
- vds := eds.Get(i).Values()
- for i := vds.Len() - 1; i >= 0; i-- {
- f(vds.Get(i))
- }
- }
- mds := fd.Messages()
- for i := mds.Len() - 1; i >= 0; i-- {
- f(mds.Get(i))
- }
- xds := fd.Extensions()
- for i := xds.Len() - 1; i >= 0; i-- {
- f(xds.Get(i))
- }
- sds := fd.Services()
- for i := sds.Len() - 1; i >= 0; i-- {
- f(sds.Get(i))
- }
-}
-
-// MessageTypeResolver is an interface for looking up messages.
-//
-// A compliant implementation must deterministically return the same type
-// if no error is encountered.
-//
-// The [Types] type implements this interface.
-type MessageTypeResolver interface {
- // FindMessageByName looks up a message by its full name.
- // E.g., "google.protobuf.Any"
- //
- // This return (nil, NotFound) if not found.
- FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error)
-
- // FindMessageByURL looks up a message by a URL identifier.
- // See documentation on google.protobuf.Any.type_url for the URL format.
- //
- // This returns (nil, NotFound) if not found.
- FindMessageByURL(url string) (protoreflect.MessageType, error)
-}
-
-// ExtensionTypeResolver is an interface for looking up extensions.
-//
-// A compliant implementation must deterministically return the same type
-// if no error is encountered.
-//
-// The [Types] type implements this interface.
-type ExtensionTypeResolver interface {
- // FindExtensionByName looks up a extension field by the field's full name.
- // Note that this is the full name of the field as determined by
- // where the extension is declared and is unrelated to the full name of the
- // message being extended.
- //
- // This returns (nil, NotFound) if not found.
- FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
-
- // FindExtensionByNumber looks up a extension field by the field number
- // within some parent message, identified by full name.
- //
- // This returns (nil, NotFound) if not found.
- FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
-}
-
-var (
- _ MessageTypeResolver = (*Types)(nil)
- _ ExtensionTypeResolver = (*Types)(nil)
-)
-
-// Types is a registry for looking up or iterating over descriptor types.
-// The Find and Range methods are safe for concurrent use.
-type Types struct {
- typesByName typesByName
- extensionsByMessage extensionsByMessage
-
- numEnums int
- numMessages int
- numExtensions int
-}
-
-type (
- typesByName map[protoreflect.FullName]any
- extensionsByMessage map[protoreflect.FullName]extensionsByNumber
- extensionsByNumber map[protoreflect.FieldNumber]protoreflect.ExtensionType
-)
-
-// RegisterMessage registers the provided message type.
-//
-// If a naming conflict occurs, the type is not registered and an error is returned.
-func (r *Types) RegisterMessage(mt protoreflect.MessageType) error {
- // Under rare circumstances getting the descriptor might recursively
- // examine the registry, so fetch it before locking.
- md := mt.Descriptor()
-
- if r == GlobalTypes {
- globalMutex.Lock()
- defer globalMutex.Unlock()
- }
-
- if err := r.register("message", md, mt); err != nil {
- return err
- }
- r.numMessages++
- return nil
-}
-
-// RegisterEnum registers the provided enum type.
-//
-// If a naming conflict occurs, the type is not registered and an error is returned.
-func (r *Types) RegisterEnum(et protoreflect.EnumType) error {
- // Under rare circumstances getting the descriptor might recursively
- // examine the registry, so fetch it before locking.
- ed := et.Descriptor()
-
- if r == GlobalTypes {
- globalMutex.Lock()
- defer globalMutex.Unlock()
- }
-
- if err := r.register("enum", ed, et); err != nil {
- return err
- }
- r.numEnums++
- return nil
-}
-
-// RegisterExtension registers the provided extension type.
-//
-// If a naming conflict occurs, the type is not registered and an error is returned.
-func (r *Types) RegisterExtension(xt protoreflect.ExtensionType) error {
- // Under rare circumstances getting the descriptor might recursively
- // examine the registry, so fetch it before locking.
- //
- // A known case where this can happen: Fetching the TypeDescriptor for a
- // legacy ExtensionDesc can consult the global registry.
- xd := xt.TypeDescriptor()
-
- if r == GlobalTypes {
- globalMutex.Lock()
- defer globalMutex.Unlock()
- }
-
- field := xd.Number()
- message := xd.ContainingMessage().FullName()
- if prev := r.extensionsByMessage[message][field]; prev != nil {
- err := errors.New("extension number %d is already registered on message %v", field, message)
- err = amendErrorWithCaller(err, prev, xt)
- if !(r == GlobalTypes && ignoreConflict(xd, err)) {
- return err
- }
- }
-
- if err := r.register("extension", xd, xt); err != nil {
- return err
- }
- if r.extensionsByMessage == nil {
- r.extensionsByMessage = make(extensionsByMessage)
- }
- if r.extensionsByMessage[message] == nil {
- r.extensionsByMessage[message] = make(extensionsByNumber)
- }
- r.extensionsByMessage[message][field] = xt
- r.numExtensions++
- return nil
-}
-
-func (r *Types) register(kind string, desc protoreflect.Descriptor, typ any) error {
- name := desc.FullName()
- prev := r.typesByName[name]
- if prev != nil {
- err := errors.New("%v %v is already registered", kind, name)
- err = amendErrorWithCaller(err, prev, typ)
- if !(r == GlobalTypes && ignoreConflict(desc, err)) {
- return err
- }
- }
- if r.typesByName == nil {
- r.typesByName = make(typesByName)
- }
- r.typesByName[name] = typ
- return nil
-}
-
-// FindEnumByName looks up an enum by its full name.
-// E.g., "google.protobuf.Field.Kind".
-//
-// This returns (nil, [NotFound]) if not found.
-func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) {
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- if v := r.typesByName[enum]; v != nil {
- if et, _ := v.(protoreflect.EnumType); et != nil {
- return et, nil
- }
- return nil, errors.New("found wrong type: got %v, want enum", typeName(v))
- }
- return nil, NotFound
-}
-
-// FindMessageByName looks up a message by its full name,
-// e.g. "google.protobuf.Any".
-//
-// This returns (nil, [NotFound]) if not found.
-func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- if v := r.typesByName[message]; v != nil {
- if mt, _ := v.(protoreflect.MessageType); mt != nil {
- return mt, nil
- }
- return nil, errors.New("found wrong type: got %v, want message", typeName(v))
- }
- return nil, NotFound
-}
-
-// FindMessageByURL looks up a message by a URL identifier.
-// See documentation on google.protobuf.Any.type_url for the URL format.
-//
-// This returns (nil, [NotFound]) if not found.
-func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) {
- // This function is similar to FindMessageByName but
- // truncates anything before and including '/' in the URL.
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- message := protoreflect.FullName(url)
- if i := strings.LastIndexByte(url, '/'); i >= 0 {
- message = message[i+len("/"):]
- }
-
- if v := r.typesByName[message]; v != nil {
- if mt, _ := v.(protoreflect.MessageType); mt != nil {
- return mt, nil
- }
- return nil, errors.New("found wrong type: got %v, want message", typeName(v))
- }
- return nil, NotFound
-}
-
-// FindExtensionByName looks up a extension field by the field's full name.
-// Note that this is the full name of the field as determined by
-// where the extension is declared and is unrelated to the full name of the
-// message being extended.
-//
-// This returns (nil, [NotFound]) if not found.
-func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- if v := r.typesByName[field]; v != nil {
- if xt, _ := v.(protoreflect.ExtensionType); xt != nil {
- return xt, nil
- }
-
- // MessageSet extensions are special in that the name of the extension
- // is the name of the message type used to extend the MessageSet.
- // This naming scheme is used by text and JSON serialization.
- //
- // This feature is protected by the ProtoLegacy flag since MessageSets
- // are a proto1 feature that is long deprecated.
- if flags.ProtoLegacy {
- if _, ok := v.(protoreflect.MessageType); ok {
- field := field.Append(messageset.ExtensionName)
- if v := r.typesByName[field]; v != nil {
- if xt, _ := v.(protoreflect.ExtensionType); xt != nil {
- if messageset.IsMessageSetExtension(xt.TypeDescriptor()) {
- return xt, nil
- }
- }
- }
- }
- }
-
- return nil, errors.New("found wrong type: got %v, want extension", typeName(v))
- }
- return nil, NotFound
-}
-
-// FindExtensionByNumber looks up a extension field by the field number
-// within some parent message, identified by full name.
-//
-// This returns (nil, [NotFound]) if not found.
-func (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
- if r == nil {
- return nil, NotFound
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- if xt, ok := r.extensionsByMessage[message][field]; ok {
- return xt, nil
- }
- return nil, NotFound
-}
-
-// NumEnums reports the number of registered enums.
-func (r *Types) NumEnums() int {
- if r == nil {
- return 0
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- return r.numEnums
-}
-
-// RangeEnums iterates over all registered enums while f returns true.
-// Iteration order is undefined.
-func (r *Types) RangeEnums(f func(protoreflect.EnumType) bool) {
- if r == nil {
- return
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- for _, typ := range r.typesByName {
- if et, ok := typ.(protoreflect.EnumType); ok {
- if !f(et) {
- return
- }
- }
- }
-}
-
-// NumMessages reports the number of registered messages.
-func (r *Types) NumMessages() int {
- if r == nil {
- return 0
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- return r.numMessages
-}
-
-// RangeMessages iterates over all registered messages while f returns true.
-// Iteration order is undefined.
-func (r *Types) RangeMessages(f func(protoreflect.MessageType) bool) {
- if r == nil {
- return
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- for _, typ := range r.typesByName {
- if mt, ok := typ.(protoreflect.MessageType); ok {
- if !f(mt) {
- return
- }
- }
- }
-}
-
-// NumExtensions reports the number of registered extensions.
-func (r *Types) NumExtensions() int {
- if r == nil {
- return 0
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- return r.numExtensions
-}
-
-// RangeExtensions iterates over all registered extensions while f returns true.
-// Iteration order is undefined.
-func (r *Types) RangeExtensions(f func(protoreflect.ExtensionType) bool) {
- if r == nil {
- return
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- for _, typ := range r.typesByName {
- if xt, ok := typ.(protoreflect.ExtensionType); ok {
- if !f(xt) {
- return
- }
- }
- }
-}
-
-// NumExtensionsByMessage reports the number of registered extensions for
-// a given message type.
-func (r *Types) NumExtensionsByMessage(message protoreflect.FullName) int {
- if r == nil {
- return 0
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- return len(r.extensionsByMessage[message])
-}
-
-// RangeExtensionsByMessage iterates over all registered extensions filtered
-// by a given message type while f returns true. Iteration order is undefined.
-func (r *Types) RangeExtensionsByMessage(message protoreflect.FullName, f func(protoreflect.ExtensionType) bool) {
- if r == nil {
- return
- }
- if r == GlobalTypes {
- globalMutex.RLock()
- defer globalMutex.RUnlock()
- }
- for _, xt := range r.extensionsByMessage[message] {
- if !f(xt) {
- return
- }
- }
-}
-
-func typeName(t any) string {
- switch t.(type) {
- case protoreflect.EnumType:
- return "enum"
- case protoreflect.MessageType:
- return "message"
- case protoreflect.ExtensionType:
- return "extension"
- default:
- return fmt.Sprintf("%T", t)
- }
-}
-
-func amendErrorWithCaller(err error, prev, curr any) error {
- prevPkg := goPackage(prev)
- currPkg := goPackage(curr)
- if prevPkg == "" || currPkg == "" || prevPkg == currPkg {
- return err
- }
- return errors.New("%s\n\tpreviously from: %q\n\tcurrently from: %q", err, prevPkg, currPkg)
-}
-
-func goPackage(v any) string {
- switch d := v.(type) {
- case protoreflect.EnumType:
- v = d.Descriptor()
- case protoreflect.MessageType:
- v = d.Descriptor()
- case protoreflect.ExtensionType:
- v = d.TypeDescriptor()
- }
- if d, ok := v.(protoreflect.Descriptor); ok {
- v = d.ParentFile()
- }
- if d, ok := v.(interface{ GoPackagePath() string }); ok {
- return d.GoPackagePath()
- }
- return ""
-}
diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go b/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go
deleted file mode 100644
index c58727675..000000000
--- a/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoiface
-
-type MessageV1 interface {
- Reset()
- String() string
- ProtoMessage()
-}
-
-type ExtensionRangeV1 struct {
- Start, End int32 // both inclusive
-}
diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
deleted file mode 100644
index 28e9e9f03..000000000
--- a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protoiface contains types referenced or implemented by messages.
-//
-// WARNING: This package should only be imported by message implementations.
-// The functionality found in this package should be accessed through
-// higher-level abstractions provided by the proto package.
-package protoiface
-
-import (
- "google.golang.org/protobuf/internal/pragma"
- "google.golang.org/protobuf/reflect/protoreflect"
-)
-
-// Methods is a set of optional fast-path implementations of various operations.
-type Methods = struct {
- pragma.NoUnkeyedLiterals
-
- // Flags indicate support for optional features.
- Flags SupportFlags
-
- // Size returns the size in bytes of the wire-format encoding of a message.
- // Marshal must be provided if a custom Size is provided.
- Size func(SizeInput) SizeOutput
-
- // Marshal formats a message in the wire-format encoding to the provided buffer.
- // Size should be provided if a custom Marshal is provided.
- // It must not return an error for a partial message.
- Marshal func(MarshalInput) (MarshalOutput, error)
-
- // Unmarshal parses the wire-format encoding and merges the result into a message.
- // It must not reset the target message or return an error for a partial message.
- Unmarshal func(UnmarshalInput) (UnmarshalOutput, error)
-
- // Merge merges the contents of a source message into a destination message.
- Merge func(MergeInput) MergeOutput
-
- // CheckInitialized returns an error if any required fields in the message are not set.
- CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)
-
- // Equal compares two messages and returns EqualOutput.Equal == true if they are equal.
- Equal func(EqualInput) EqualOutput
-}
-
-// SupportFlags indicate support for optional features.
-type SupportFlags = uint64
-
-const (
- // SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported.
- SupportMarshalDeterministic SupportFlags = 1 << iota
-
- // SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported.
- SupportUnmarshalDiscardUnknown
-)
-
-// SizeInput is input to the Size method.
-type SizeInput = struct {
- pragma.NoUnkeyedLiterals
-
- Message protoreflect.Message
- Flags MarshalInputFlags
-}
-
-// SizeOutput is output from the Size method.
-type SizeOutput = struct {
- pragma.NoUnkeyedLiterals
-
- Size int
-}
-
-// MarshalInput is input to the Marshal method.
-type MarshalInput = struct {
- pragma.NoUnkeyedLiterals
-
- Message protoreflect.Message
- Buf []byte // output is appended to this buffer
- Flags MarshalInputFlags
-}
-
-// MarshalOutput is output from the Marshal method.
-type MarshalOutput = struct {
- pragma.NoUnkeyedLiterals
-
- Buf []byte // contains marshaled message
-}
-
-// MarshalInputFlags configure the marshaler.
-// Most flags correspond to fields in proto.MarshalOptions.
-type MarshalInputFlags = uint8
-
-const (
- MarshalDeterministic MarshalInputFlags = 1 << iota
- MarshalUseCachedSize
-)
-
-// UnmarshalInput is input to the Unmarshal method.
-type UnmarshalInput = struct {
- pragma.NoUnkeyedLiterals
-
- Message protoreflect.Message
- Buf []byte // input buffer
- Flags UnmarshalInputFlags
- Resolver interface {
- FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)
- FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)
- }
- Depth int
-}
-
-// UnmarshalOutput is output from the Unmarshal method.
-type UnmarshalOutput = struct {
- pragma.NoUnkeyedLiterals
-
- Flags UnmarshalOutputFlags
-}
-
-// UnmarshalInputFlags configure the unmarshaler.
-// Most flags correspond to fields in proto.UnmarshalOptions.
-type UnmarshalInputFlags = uint8
-
-const (
- UnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota
-
- // UnmarshalAliasBuffer permits unmarshal operations to alias the input buffer.
- // The unmarshaller must not modify the contents of the buffer.
- UnmarshalAliasBuffer
-
- // UnmarshalValidated indicates that validation has already been
- // performed on the input buffer.
- UnmarshalValidated
-
- // UnmarshalCheckRequired is set if this unmarshal operation ultimately will care if required fields are
- // initialized.
- UnmarshalCheckRequired
-
- // UnmarshalNoLazyDecoding is set if this unmarshal operation should not use
- // lazy decoding, even when otherwise available.
- UnmarshalNoLazyDecoding
-)
-
-// UnmarshalOutputFlags are output from the Unmarshal method.
-type UnmarshalOutputFlags = uint8
-
-const (
- // UnmarshalInitialized may be set on return if all required fields are known to be set.
- // If unset, then it does not necessarily indicate that the message is uninitialized,
- // only that its status could not be confirmed.
- UnmarshalInitialized UnmarshalOutputFlags = 1 << iota
-)
-
-// MergeInput is input to the Merge method.
-type MergeInput = struct {
- pragma.NoUnkeyedLiterals
-
- Source protoreflect.Message
- Destination protoreflect.Message
-}
-
-// MergeOutput is output from the Merge method.
-type MergeOutput = struct {
- pragma.NoUnkeyedLiterals
-
- Flags MergeOutputFlags
-}
-
-// MergeOutputFlags are output from the Merge method.
-type MergeOutputFlags = uint8
-
-const (
- // MergeComplete reports whether the merge was performed.
- // If unset, the merger must have made no changes to the destination.
- MergeComplete MergeOutputFlags = 1 << iota
-)
-
-// CheckInitializedInput is input to the CheckInitialized method.
-type CheckInitializedInput = struct {
- pragma.NoUnkeyedLiterals
-
- Message protoreflect.Message
-}
-
-// CheckInitializedOutput is output from the CheckInitialized method.
-type CheckInitializedOutput = struct {
- pragma.NoUnkeyedLiterals
-}
-
-// EqualInput is input to the Equal method.
-type EqualInput = struct {
- pragma.NoUnkeyedLiterals
-
- MessageA protoreflect.Message
- MessageB protoreflect.Message
-}
-
-// EqualOutput is output from the Equal method.
-type EqualOutput = struct {
- pragma.NoUnkeyedLiterals
-
- Equal bool
-}
diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go
deleted file mode 100644
index 93df1b569..000000000
--- a/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protoimpl contains the default implementation for messages
-// generated by protoc-gen-go.
-//
-// WARNING: This package should only ever be imported by generated messages.
-// The compatibility agreement covers nothing except for functionality needed
-// to keep existing generated messages operational. Breakages that occur due
-// to unauthorized usages of this package are not the author's responsibility.
-package protoimpl
-
-import (
- "google.golang.org/protobuf/internal/filedesc"
- "google.golang.org/protobuf/internal/filetype"
- "google.golang.org/protobuf/internal/impl"
- "google.golang.org/protobuf/internal/protolazy"
-)
-
-// UnsafeEnabled specifies whether package unsafe can be used.
-const UnsafeEnabled = impl.UnsafeEnabled
-
-type (
- // Types used by generated code in init functions.
- DescBuilder = filedesc.Builder
- TypeBuilder = filetype.Builder
-
- // Types used by generated code to implement EnumType, MessageType, and ExtensionType.
- EnumInfo = impl.EnumInfo
- MessageInfo = impl.MessageInfo
- ExtensionInfo = impl.ExtensionInfo
-
- // Types embedded in generated messages.
- MessageState = impl.MessageState
- SizeCache = impl.SizeCache
- WeakFields = impl.WeakFields
- UnknownFields = impl.UnknownFields
- ExtensionFields = impl.ExtensionFields
- ExtensionFieldV1 = impl.ExtensionField
-
- Pointer = impl.Pointer
-
- LazyUnmarshalInfo = *protolazy.XXX_lazyUnmarshalInfo
- RaceDetectHookData = impl.RaceDetectHookData
-)
-
-var X impl.Export
diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go
deleted file mode 100644
index a105cb23e..000000000
--- a/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protoimpl
-
-import (
- "google.golang.org/protobuf/internal/version"
-)
-
-const (
- // MaxVersion is the maximum supported version for generated .pb.go files.
- // It is always the current version of the module.
- MaxVersion = version.Minor
-
- // GenVersion is the runtime version required by generated .pb.go files.
- // This is incremented when generated code relies on new functionality
- // in the runtime.
- GenVersion = 20
-
- // MinVersion is the minimum supported version for generated .pb.go files.
- // This is incremented when the runtime drops support for old code.
- MinVersion = 0
-)
-
-// EnforceVersion is used by code generated by protoc-gen-go
-// to statically enforce minimum and maximum versions of this package.
-// A compilation failure implies either that:
-// - the runtime package is too old and needs to be updated OR
-// - the generated code is too old and needs to be regenerated.
-//
-// The runtime package can be upgraded by running:
-//
-// go get google.golang.org/protobuf
-//
-// The generated code can be regenerated by running:
-//
-// protoc --go_out=${PROTOC_GEN_GO_ARGS} ${PROTO_FILES}
-//
-// Example usage by generated code:
-//
-// const (
-// // Verify that this generated code is sufficiently up-to-date.
-// _ = protoimpl.EnforceVersion(genVersion - protoimpl.MinVersion)
-// // Verify that runtime/protoimpl is sufficiently up-to-date.
-// _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - genVersion)
-// )
-//
-// The genVersion is the current minor version used to generated the code.
-// This compile-time check relies on negative integer overflow of a uint
-// being a compilation failure (guaranteed by the Go specification).
-type EnforceVersion uint
-
-// This enforces the following invariant:
-//
-// MinVersion ≤ GenVersion ≤ MaxVersion
-const (
- _ = EnforceVersion(GenVersion - MinVersion)
- _ = EnforceVersion(MaxVersion - GenVersion)
-)
diff --git a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
deleted file mode 100644
index 191552cce..000000000
--- a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
+++ /dev/null
@@ -1,479 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/any.proto
-
-// Package anypb contains generated types for google/protobuf/any.proto.
-//
-// The Any message is a dynamic representation of any other message value.
-// It is functionally a tuple of the full name of the remote message type and
-// the serialized bytes of the remote message value.
-//
-// # Constructing an Any
-//
-// An Any message containing another message value is constructed using New:
-//
-// any, err := anypb.New(m)
-// if err != nil {
-// ... // handle error
-// }
-// ... // make use of any
-//
-// # Unmarshaling an Any
-//
-// With a populated Any message, the underlying message can be serialized into
-// a remote concrete message value in a few ways.
-//
-// If the exact concrete type is known, then a new (or pre-existing) instance
-// of that message can be passed to the UnmarshalTo method:
-//
-// m := new(foopb.MyMessage)
-// if err := any.UnmarshalTo(m); err != nil {
-// ... // handle error
-// }
-// ... // make use of m
-//
-// If the exact concrete type is not known, then the UnmarshalNew method can be
-// used to unmarshal the contents into a new instance of the remote message type:
-//
-// m, err := any.UnmarshalNew()
-// if err != nil {
-// ... // handle error
-// }
-// ... // make use of m
-//
-// UnmarshalNew uses the global type registry to resolve the message type and
-// construct a new instance of that message to unmarshal into. In order for a
-// message type to appear in the global registry, the Go type representing that
-// protobuf message type must be linked into the Go binary. For messages
-// generated by protoc-gen-go, this is achieved through an import of the
-// generated Go package representing a .proto file.
-//
-// A common pattern with UnmarshalNew is to use a type switch with the resulting
-// proto.Message value:
-//
-// switch m := m.(type) {
-// case *foopb.MyMessage:
-// ... // make use of m as a *foopb.MyMessage
-// case *barpb.OtherMessage:
-// ... // make use of m as a *barpb.OtherMessage
-// case *bazpb.SomeMessage:
-// ... // make use of m as a *bazpb.SomeMessage
-// }
-//
-// This pattern ensures that the generated packages containing the message types
-// listed in the case clauses are linked into the Go binary and therefore also
-// registered in the global registry.
-//
-// # Type checking an Any
-//
-// In order to type check whether an Any message represents some other message,
-// then use the MessageIs method:
-//
-// if any.MessageIs((*foopb.MyMessage)(nil)) {
-// ... // make use of any, knowing that it contains a foopb.MyMessage
-// }
-//
-// The MessageIs method can also be used with an allocated instance of the target
-// message type if the intention is to unmarshal into it if the type matches:
-//
-// m := new(foopb.MyMessage)
-// if any.MessageIs(m) {
-// if err := any.UnmarshalTo(m); err != nil {
-// ... // handle error
-// }
-// ... // make use of m
-// }
-package anypb
-
-import (
- proto "google.golang.org/protobuf/proto"
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoregistry "google.golang.org/protobuf/reflect/protoregistry"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- reflect "reflect"
- strings "strings"
- sync "sync"
-)
-
-// `Any` contains an arbitrary serialized protocol buffer message along with a
-// URL that describes the type of the serialized message.
-//
-// Protobuf library provides support to pack/unpack Any values in the form
-// of utility functions or additional generated methods of the Any type.
-//
-// Example 1: Pack and unpack a message in C++.
-//
-// Foo foo = ...;
-// Any any;
-// any.PackFrom(foo);
-// ...
-// if (any.UnpackTo(&foo)) {
-// ...
-// }
-//
-// Example 2: Pack and unpack a message in Java.
-//
-// Foo foo = ...;
-// Any any = Any.pack(foo);
-// ...
-// if (any.is(Foo.class)) {
-// foo = any.unpack(Foo.class);
-// }
-// // or ...
-// if (any.isSameTypeAs(Foo.getDefaultInstance())) {
-// foo = any.unpack(Foo.getDefaultInstance());
-// }
-//
-// Example 3: Pack and unpack a message in Python.
-//
-// foo = Foo(...)
-// any = Any()
-// any.Pack(foo)
-// ...
-// if any.Is(Foo.DESCRIPTOR):
-// any.Unpack(foo)
-// ...
-//
-// Example 4: Pack and unpack a message in Go
-//
-// foo := &pb.Foo{...}
-// any, err := anypb.New(foo)
-// if err != nil {
-// ...
-// }
-// ...
-// foo := &pb.Foo{}
-// if err := any.UnmarshalTo(foo); err != nil {
-// ...
-// }
-//
-// The pack methods provided by protobuf library will by default use
-// 'type.googleapis.com/full.type.name' as the type URL and the unpack
-// methods only use the fully qualified type name after the last '/'
-// in the type URL, for example "foo.bar.com/x/y.z" will yield type
-// name "y.z".
-//
-// JSON
-// ====
-// The JSON representation of an `Any` value uses the regular
-// representation of the deserialized, embedded message, with an
-// additional field `@type` which contains the type URL. Example:
-//
-// package google.profile;
-// message Person {
-// string first_name = 1;
-// string last_name = 2;
-// }
-//
-// {
-// "@type": "type.googleapis.com/google.profile.Person",
-// "firstName": <string>,
-// "lastName": <string>
-// }
-//
-// If the embedded message type is well-known and has a custom JSON
-// representation, that representation will be embedded adding a field
-// `value` which holds the custom JSON in addition to the `@type`
-// field. Example (for message [google.protobuf.Duration][]):
-//
-// {
-// "@type": "type.googleapis.com/google.protobuf.Duration",
-// "value": "1.212s"
-// }
-type Any struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // A URL/resource name that uniquely identifies the type of the serialized
- // protocol buffer message. This string must contain at least
- // one "/" character. The last segment of the URL's path must represent
- // the fully qualified name of the type (as in
- // `path/google.protobuf.Duration`). The name should be in a canonical form
- // (e.g., leading "." is not accepted).
- //
- // In practice, teams usually precompile into the binary all types that they
- // expect it to use in the context of Any. However, for URLs which use the
- // scheme `http`, `https`, or no scheme, one can optionally set up a type
- // server that maps type URLs to message definitions as follows:
- //
- // - If no scheme is provided, `https` is assumed.
- // - An HTTP GET on the URL must yield a [google.protobuf.Type][]
- // value in binary format, or produce an error.
- // - Applications are allowed to cache lookup results based on the
- // URL, or have them precompiled into a binary to avoid any
- // lookup. Therefore, binary compatibility needs to be preserved
- // on changes to types. (Use versioned type names to manage
- // breaking changes.)
- //
- // Note: this functionality is not currently available in the official
- // protobuf release, and it is not used for type URLs beginning with
- // type.googleapis.com. As of May 2023, there are no widely used type server
- // implementations and no plans to implement one.
- //
- // Schemes other than `http`, `https` (or the empty scheme) might be
- // used with implementation specific semantics.
- TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
- // Must be a valid serialized protocol buffer of the above specified type.
- Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// New marshals src into a new Any instance.
-func New(src proto.Message) (*Any, error) {
- dst := new(Any)
- if err := dst.MarshalFrom(src); err != nil {
- return nil, err
- }
- return dst, nil
-}
-
-// MarshalFrom marshals src into dst as the underlying message
-// using the provided marshal options.
-//
-// If no options are specified, call dst.MarshalFrom instead.
-func MarshalFrom(dst *Any, src proto.Message, opts proto.MarshalOptions) error {
- const urlPrefix = "type.googleapis.com/"
- if src == nil {
- return protoimpl.X.NewError("invalid nil source message")
- }
- b, err := opts.Marshal(src)
- if err != nil {
- return err
- }
- dst.TypeUrl = urlPrefix + string(src.ProtoReflect().Descriptor().FullName())
- dst.Value = b
- return nil
-}
-
-// UnmarshalTo unmarshals the underlying message from src into dst
-// using the provided unmarshal options.
-// It reports an error if dst is not of the right message type.
-//
-// If no options are specified, call src.UnmarshalTo instead.
-func UnmarshalTo(src *Any, dst proto.Message, opts proto.UnmarshalOptions) error {
- if src == nil {
- return protoimpl.X.NewError("invalid nil source message")
- }
- if !src.MessageIs(dst) {
- got := dst.ProtoReflect().Descriptor().FullName()
- want := src.MessageName()
- return protoimpl.X.NewError("mismatched message type: got %q, want %q", got, want)
- }
- return opts.Unmarshal(src.GetValue(), dst)
-}
-
-// UnmarshalNew unmarshals the underlying message from src into dst,
-// which is newly created message using a type resolved from the type URL.
-// The message type is resolved according to opt.Resolver,
-// which should implement protoregistry.MessageTypeResolver.
-// It reports an error if the underlying message type could not be resolved.
-//
-// If no options are specified, call src.UnmarshalNew instead.
-func UnmarshalNew(src *Any, opts proto.UnmarshalOptions) (dst proto.Message, err error) {
- if src.GetTypeUrl() == "" {
- return nil, protoimpl.X.NewError("invalid empty type URL")
- }
- if opts.Resolver == nil {
- opts.Resolver = protoregistry.GlobalTypes
- }
- r, ok := opts.Resolver.(protoregistry.MessageTypeResolver)
- if !ok {
- return nil, protoregistry.NotFound
- }
- mt, err := r.FindMessageByURL(src.GetTypeUrl())
- if err != nil {
- if err == protoregistry.NotFound {
- return nil, err
- }
- return nil, protoimpl.X.NewError("could not resolve %q: %v", src.GetTypeUrl(), err)
- }
- dst = mt.New().Interface()
- return dst, opts.Unmarshal(src.GetValue(), dst)
-}
-
-// MessageIs reports whether the underlying message is of the same type as m.
-func (x *Any) MessageIs(m proto.Message) bool {
- if m == nil {
- return false
- }
- url := x.GetTypeUrl()
- name := string(m.ProtoReflect().Descriptor().FullName())
- if !strings.HasSuffix(url, name) {
- return false
- }
- return len(url) == len(name) || url[len(url)-len(name)-1] == '/'
-}
-
-// MessageName reports the full name of the underlying message,
-// returning an empty string if invalid.
-func (x *Any) MessageName() protoreflect.FullName {
- url := x.GetTypeUrl()
- name := protoreflect.FullName(url)
- if i := strings.LastIndexByte(url, '/'); i >= 0 {
- name = name[i+len("/"):]
- }
- if !name.IsValid() {
- return ""
- }
- return name
-}
-
-// MarshalFrom marshals m into x as the underlying message.
-func (x *Any) MarshalFrom(m proto.Message) error {
- return MarshalFrom(x, m, proto.MarshalOptions{})
-}
-
-// UnmarshalTo unmarshals the contents of the underlying message of x into m.
-// It resets m before performing the unmarshal operation.
-// It reports an error if m is not of the right message type.
-func (x *Any) UnmarshalTo(m proto.Message) error {
- return UnmarshalTo(x, m, proto.UnmarshalOptions{})
-}
-
-// UnmarshalNew unmarshals the contents of the underlying message of x into
-// a newly allocated message of the specified type.
-// It reports an error if the underlying message type could not be resolved.
-func (x *Any) UnmarshalNew() (proto.Message, error) {
- return UnmarshalNew(x, proto.UnmarshalOptions{})
-}
-
-func (x *Any) Reset() {
- *x = Any{}
- mi := &file_google_protobuf_any_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Any) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Any) ProtoMessage() {}
-
-func (x *Any) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_any_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Any.ProtoReflect.Descriptor instead.
-func (*Any) Descriptor() ([]byte, []int) {
- return file_google_protobuf_any_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Any) GetTypeUrl() string {
- if x != nil {
- return x.TypeUrl
- }
- return ""
-}
-
-func (x *Any) GetValue() []byte {
- if x != nil {
- return x.Value
- }
- return nil
-}
-
-var File_google_protobuf_any_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_any_proto_rawDesc = []byte{
- 0x0a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x36, 0x0a, 0x03,
- 0x41, 0x6e, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x42, 0x76, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x08, 0x41, 0x6e, 0x79,
- 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f,
- 0x61, 0x6e, 0x79, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65,
- 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_protobuf_any_proto_rawDescOnce sync.Once
- file_google_protobuf_any_proto_rawDescData = file_google_protobuf_any_proto_rawDesc
-)
-
-func file_google_protobuf_any_proto_rawDescGZIP() []byte {
- file_google_protobuf_any_proto_rawDescOnce.Do(func() {
- file_google_protobuf_any_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_any_proto_rawDescData)
- })
- return file_google_protobuf_any_proto_rawDescData
-}
-
-var file_google_protobuf_any_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_google_protobuf_any_proto_goTypes = []any{
- (*Any)(nil), // 0: google.protobuf.Any
-}
-var file_google_protobuf_any_proto_depIdxs = []int32{
- 0, // [0:0] is the sub-list for method output_type
- 0, // [0:0] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_any_proto_init() }
-func file_google_protobuf_any_proto_init() {
- if File_google_protobuf_any_proto != nil {
- return
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_protobuf_any_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_protobuf_any_proto_goTypes,
- DependencyIndexes: file_google_protobuf_any_proto_depIdxs,
- MessageInfos: file_google_protobuf_any_proto_msgTypes,
- }.Build()
- File_google_protobuf_any_proto = out.File
- file_google_protobuf_any_proto_rawDesc = nil
- file_google_protobuf_any_proto_goTypes = nil
- file_google_protobuf_any_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
deleted file mode 100644
index 34d76e6cd..000000000
--- a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
+++ /dev/null
@@ -1,357 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/duration.proto
-
-// Package durationpb contains generated types for google/protobuf/duration.proto.
-//
-// The Duration message represents a signed span of time.
-//
-// # Conversion to a Go Duration
-//
-// The AsDuration method can be used to convert a Duration message to a
-// standard Go time.Duration value:
-//
-// d := dur.AsDuration()
-// ... // make use of d as a time.Duration
-//
-// Converting to a time.Duration is a common operation so that the extensive
-// set of time-based operations provided by the time package can be leveraged.
-// See https://golang.org/pkg/time for more information.
-//
-// The AsDuration method performs the conversion on a best-effort basis.
-// Durations with denormal values (e.g., nanoseconds beyond -99999999 and
-// +99999999, inclusive; or seconds and nanoseconds with opposite signs)
-// are normalized during the conversion to a time.Duration. To manually check for
-// invalid Duration per the documented limitations in duration.proto,
-// additionally call the CheckValid method:
-//
-// if err := dur.CheckValid(); err != nil {
-// ... // handle error
-// }
-//
-// Note that the documented limitations in duration.proto does not protect a
-// Duration from overflowing the representable range of a time.Duration in Go.
-// The AsDuration method uses saturation arithmetic such that an overflow clamps
-// the resulting value to the closest representable value (e.g., math.MaxInt64
-// for positive overflow and math.MinInt64 for negative overflow).
-//
-// # Conversion from a Go Duration
-//
-// The durationpb.New function can be used to construct a Duration message
-// from a standard Go time.Duration value:
-//
-// dur := durationpb.New(d)
-// ... // make use of d as a *durationpb.Duration
-package durationpb
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- math "math"
- reflect "reflect"
- sync "sync"
- time "time"
-)
-
-// A Duration represents a signed, fixed-length span of time represented
-// as a count of seconds and fractions of seconds at nanosecond
-// resolution. It is independent of any calendar and concepts like "day"
-// or "month". It is related to Timestamp in that the difference between
-// two Timestamp values is a Duration and it can be added or subtracted
-// from a Timestamp. Range is approximately +-10,000 years.
-//
-// # Examples
-//
-// Example 1: Compute Duration from two Timestamps in pseudo code.
-//
-// Timestamp start = ...;
-// Timestamp end = ...;
-// Duration duration = ...;
-//
-// duration.seconds = end.seconds - start.seconds;
-// duration.nanos = end.nanos - start.nanos;
-//
-// if (duration.seconds < 0 && duration.nanos > 0) {
-// duration.seconds += 1;
-// duration.nanos -= 1000000000;
-// } else if (duration.seconds > 0 && duration.nanos < 0) {
-// duration.seconds -= 1;
-// duration.nanos += 1000000000;
-// }
-//
-// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
-//
-// Timestamp start = ...;
-// Duration duration = ...;
-// Timestamp end = ...;
-//
-// end.seconds = start.seconds + duration.seconds;
-// end.nanos = start.nanos + duration.nanos;
-//
-// if (end.nanos < 0) {
-// end.seconds -= 1;
-// end.nanos += 1000000000;
-// } else if (end.nanos >= 1000000000) {
-// end.seconds += 1;
-// end.nanos -= 1000000000;
-// }
-//
-// Example 3: Compute Duration from datetime.timedelta in Python.
-//
-// td = datetime.timedelta(days=3, minutes=10)
-// duration = Duration()
-// duration.FromTimedelta(td)
-//
-// # JSON Mapping
-//
-// In JSON format, the Duration type is encoded as a string rather than an
-// object, where the string ends in the suffix "s" (indicating seconds) and
-// is preceded by the number of seconds, with nanoseconds expressed as
-// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
-// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
-// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
-// microsecond should be expressed in JSON format as "3.000001s".
-type Duration struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // Signed seconds of the span of time. Must be from -315,576,000,000
- // to +315,576,000,000 inclusive. Note: these bounds are computed from:
- // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
- Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
- // Signed fractions of a second at nanosecond resolution of the span
- // of time. Durations less than one second are represented with a 0
- // `seconds` field and a positive or negative `nanos` field. For durations
- // of one second or more, a non-zero value for the `nanos` field must be
- // of the same sign as the `seconds` field. Must be from -999,999,999
- // to +999,999,999 inclusive.
- Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// New constructs a new Duration from the provided time.Duration.
-func New(d time.Duration) *Duration {
- nanos := d.Nanoseconds()
- secs := nanos / 1e9
- nanos -= secs * 1e9
- return &Duration{Seconds: int64(secs), Nanos: int32(nanos)}
-}
-
-// AsDuration converts x to a time.Duration,
-// returning the closest duration value in the event of overflow.
-func (x *Duration) AsDuration() time.Duration {
- secs := x.GetSeconds()
- nanos := x.GetNanos()
- d := time.Duration(secs) * time.Second
- overflow := d/time.Second != time.Duration(secs)
- d += time.Duration(nanos) * time.Nanosecond
- overflow = overflow || (secs < 0 && nanos < 0 && d > 0)
- overflow = overflow || (secs > 0 && nanos > 0 && d < 0)
- if overflow {
- switch {
- case secs < 0:
- return time.Duration(math.MinInt64)
- case secs > 0:
- return time.Duration(math.MaxInt64)
- }
- }
- return d
-}
-
-// IsValid reports whether the duration is valid.
-// It is equivalent to CheckValid == nil.
-func (x *Duration) IsValid() bool {
- return x.check() == 0
-}
-
-// CheckValid returns an error if the duration is invalid.
-// In particular, it checks whether the value is within the range of
-// -10000 years to +10000 years inclusive.
-// An error is reported for a nil Duration.
-func (x *Duration) CheckValid() error {
- switch x.check() {
- case invalidNil:
- return protoimpl.X.NewError("invalid nil Duration")
- case invalidUnderflow:
- return protoimpl.X.NewError("duration (%v) exceeds -10000 years", x)
- case invalidOverflow:
- return protoimpl.X.NewError("duration (%v) exceeds +10000 years", x)
- case invalidNanosRange:
- return protoimpl.X.NewError("duration (%v) has out-of-range nanos", x)
- case invalidNanosSign:
- return protoimpl.X.NewError("duration (%v) has seconds and nanos with different signs", x)
- default:
- return nil
- }
-}
-
-const (
- _ = iota
- invalidNil
- invalidUnderflow
- invalidOverflow
- invalidNanosRange
- invalidNanosSign
-)
-
-func (x *Duration) check() uint {
- const absDuration = 315576000000 // 10000yr * 365.25day/yr * 24hr/day * 60min/hr * 60sec/min
- secs := x.GetSeconds()
- nanos := x.GetNanos()
- switch {
- case x == nil:
- return invalidNil
- case secs < -absDuration:
- return invalidUnderflow
- case secs > +absDuration:
- return invalidOverflow
- case nanos <= -1e9 || nanos >= +1e9:
- return invalidNanosRange
- case (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0):
- return invalidNanosSign
- default:
- return 0
- }
-}
-
-func (x *Duration) Reset() {
- *x = Duration{}
- mi := &file_google_protobuf_duration_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Duration) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Duration) ProtoMessage() {}
-
-func (x *Duration) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_duration_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Duration.ProtoReflect.Descriptor instead.
-func (*Duration) Descriptor() ([]byte, []int) {
- return file_google_protobuf_duration_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Duration) GetSeconds() int64 {
- if x != nil {
- return x.Seconds
- }
- return 0
-}
-
-func (x *Duration) GetNanos() int32 {
- if x != nil {
- return x.Nanos
- }
- return 0
-}
-
-var File_google_protobuf_duration_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_duration_proto_rawDesc = []byte{
- 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x22, 0x3a, 0x0a, 0x08, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
- 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
- 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x83, 0x01,
- 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
- 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
- 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x64,
- 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47,
- 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79,
- 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_protobuf_duration_proto_rawDescOnce sync.Once
- file_google_protobuf_duration_proto_rawDescData = file_google_protobuf_duration_proto_rawDesc
-)
-
-func file_google_protobuf_duration_proto_rawDescGZIP() []byte {
- file_google_protobuf_duration_proto_rawDescOnce.Do(func() {
- file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_duration_proto_rawDescData)
- })
- return file_google_protobuf_duration_proto_rawDescData
-}
-
-var file_google_protobuf_duration_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_google_protobuf_duration_proto_goTypes = []any{
- (*Duration)(nil), // 0: google.protobuf.Duration
-}
-var file_google_protobuf_duration_proto_depIdxs = []int32{
- 0, // [0:0] is the sub-list for method output_type
- 0, // [0:0] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_duration_proto_init() }
-func file_google_protobuf_duration_proto_init() {
- if File_google_protobuf_duration_proto != nil {
- return
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_protobuf_duration_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_protobuf_duration_proto_goTypes,
- DependencyIndexes: file_google_protobuf_duration_proto_depIdxs,
- MessageInfos: file_google_protobuf_duration_proto_msgTypes,
- }.Build()
- File_google_protobuf_duration_proto = out.File
- file_google_protobuf_duration_proto_rawDesc = nil
- file_google_protobuf_duration_proto_goTypes = nil
- file_google_protobuf_duration_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go b/vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go
deleted file mode 100644
index e5d7da38c..000000000
--- a/vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go
+++ /dev/null
@@ -1,571 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/field_mask.proto
-
-// Package fieldmaskpb contains generated types for google/protobuf/field_mask.proto.
-//
-// The FieldMask message represents a set of symbolic field paths.
-// The paths are specific to some target message type,
-// which is not stored within the FieldMask message itself.
-//
-// # Constructing a FieldMask
-//
-// The New function is used construct a FieldMask:
-//
-// var messageType *descriptorpb.DescriptorProto
-// fm, err := fieldmaskpb.New(messageType, "field.name", "field.number")
-// if err != nil {
-// ... // handle error
-// }
-// ... // make use of fm
-//
-// The "field.name" and "field.number" paths are valid paths according to the
-// google.protobuf.DescriptorProto message. Use of a path that does not correlate
-// to valid fields reachable from DescriptorProto would result in an error.
-//
-// Once a FieldMask message has been constructed,
-// the Append method can be used to insert additional paths to the path set:
-//
-// var messageType *descriptorpb.DescriptorProto
-// if err := fm.Append(messageType, "options"); err != nil {
-// ... // handle error
-// }
-//
-// # Type checking a FieldMask
-//
-// In order to verify that a FieldMask represents a set of fields that are
-// reachable from some target message type, use the IsValid method:
-//
-// var messageType *descriptorpb.DescriptorProto
-// if fm.IsValid(messageType) {
-// ... // make use of fm
-// }
-//
-// IsValid needs to be passed the target message type as an input since the
-// FieldMask message itself does not store the message type that the set of paths
-// are for.
-package fieldmaskpb
-
-import (
- proto "google.golang.org/protobuf/proto"
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- reflect "reflect"
- sort "sort"
- strings "strings"
- sync "sync"
-)
-
-// `FieldMask` represents a set of symbolic field paths, for example:
-//
-// paths: "f.a"
-// paths: "f.b.d"
-//
-// Here `f` represents a field in some root message, `a` and `b`
-// fields in the message found in `f`, and `d` a field found in the
-// message in `f.b`.
-//
-// Field masks are used to specify a subset of fields that should be
-// returned by a get operation or modified by an update operation.
-// Field masks also have a custom JSON encoding (see below).
-//
-// # Field Masks in Projections
-//
-// When used in the context of a projection, a response message or
-// sub-message is filtered by the API to only contain those fields as
-// specified in the mask. For example, if the mask in the previous
-// example is applied to a response message as follows:
-//
-// f {
-// a : 22
-// b {
-// d : 1
-// x : 2
-// }
-// y : 13
-// }
-// z: 8
-//
-// The result will not contain specific values for fields x,y and z
-// (their value will be set to the default, and omitted in proto text
-// output):
-//
-// f {
-// a : 22
-// b {
-// d : 1
-// }
-// }
-//
-// A repeated field is not allowed except at the last position of a
-// paths string.
-//
-// If a FieldMask object is not present in a get operation, the
-// operation applies to all fields (as if a FieldMask of all fields
-// had been specified).
-//
-// Note that a field mask does not necessarily apply to the
-// top-level response message. In case of a REST get operation, the
-// field mask applies directly to the response, but in case of a REST
-// list operation, the mask instead applies to each individual message
-// in the returned resource list. In case of a REST custom method,
-// other definitions may be used. Where the mask applies will be
-// clearly documented together with its declaration in the API. In
-// any case, the effect on the returned resource/resources is required
-// behavior for APIs.
-//
-// # Field Masks in Update Operations
-//
-// A field mask in update operations specifies which fields of the
-// targeted resource are going to be updated. The API is required
-// to only change the values of the fields as specified in the mask
-// and leave the others untouched. If a resource is passed in to
-// describe the updated values, the API ignores the values of all
-// fields not covered by the mask.
-//
-// If a repeated field is specified for an update operation, new values will
-// be appended to the existing repeated field in the target resource. Note that
-// a repeated field is only allowed in the last position of a `paths` string.
-//
-// If a sub-message is specified in the last position of the field mask for an
-// update operation, then new value will be merged into the existing sub-message
-// in the target resource.
-//
-// For example, given the target message:
-//
-// f {
-// b {
-// d: 1
-// x: 2
-// }
-// c: [1]
-// }
-//
-// And an update message:
-//
-// f {
-// b {
-// d: 10
-// }
-// c: [2]
-// }
-//
-// then if the field mask is:
-//
-// paths: ["f.b", "f.c"]
-//
-// then the result will be:
-//
-// f {
-// b {
-// d: 10
-// x: 2
-// }
-// c: [1, 2]
-// }
-//
-// An implementation may provide options to override this default behavior for
-// repeated and message fields.
-//
-// In order to reset a field's value to the default, the field must
-// be in the mask and set to the default value in the provided resource.
-// Hence, in order to reset all fields of a resource, provide a default
-// instance of the resource and set all fields in the mask, or do
-// not provide a mask as described below.
-//
-// If a field mask is not present on update, the operation applies to
-// all fields (as if a field mask of all fields has been specified).
-// Note that in the presence of schema evolution, this may mean that
-// fields the client does not know and has therefore not filled into
-// the request will be reset to their default. If this is unwanted
-// behavior, a specific service may require a client to always specify
-// a field mask, producing an error if not.
-//
-// As with get operations, the location of the resource which
-// describes the updated values in the request message depends on the
-// operation kind. In any case, the effect of the field mask is
-// required to be honored by the API.
-//
-// ## Considerations for HTTP REST
-//
-// The HTTP kind of an update operation which uses a field mask must
-// be set to PATCH instead of PUT in order to satisfy HTTP semantics
-// (PUT must only be used for full updates).
-//
-// # JSON Encoding of Field Masks
-//
-// In JSON, a field mask is encoded as a single string where paths are
-// separated by a comma. Fields name in each path are converted
-// to/from lower-camel naming conventions.
-//
-// As an example, consider the following message declarations:
-//
-// message Profile {
-// User user = 1;
-// Photo photo = 2;
-// }
-// message User {
-// string display_name = 1;
-// string address = 2;
-// }
-//
-// In proto a field mask for `Profile` may look as such:
-//
-// mask {
-// paths: "user.display_name"
-// paths: "photo"
-// }
-//
-// In JSON, the same mask is represented as below:
-//
-// {
-// mask: "user.displayName,photo"
-// }
-//
-// # Field Masks and Oneof Fields
-//
-// Field masks treat fields in oneofs just as regular fields. Consider the
-// following message:
-//
-// message SampleMessage {
-// oneof test_oneof {
-// string name = 4;
-// SubMessage sub_message = 9;
-// }
-// }
-//
-// The field mask can be:
-//
-// mask {
-// paths: "name"
-// }
-//
-// Or:
-//
-// mask {
-// paths: "sub_message"
-// }
-//
-// Note that oneof type names ("test_oneof" in this case) cannot be used in
-// paths.
-//
-// ## Field Mask Verification
-//
-// The implementation of any API method which has a FieldMask type field in the
-// request should verify the included field paths, and return an
-// `INVALID_ARGUMENT` error if any path is unmappable.
-type FieldMask struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The set of field mask paths.
- Paths []string `protobuf:"bytes,1,rep,name=paths,proto3" json:"paths,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// New constructs a field mask from a list of paths and verifies that
-// each one is valid according to the specified message type.
-func New(m proto.Message, paths ...string) (*FieldMask, error) {
- x := new(FieldMask)
- return x, x.Append(m, paths...)
-}
-
-// Union returns the union of all the paths in the input field masks.
-func Union(mx *FieldMask, my *FieldMask, ms ...*FieldMask) *FieldMask {
- var out []string
- out = append(out, mx.GetPaths()...)
- out = append(out, my.GetPaths()...)
- for _, m := range ms {
- out = append(out, m.GetPaths()...)
- }
- return &FieldMask{Paths: normalizePaths(out)}
-}
-
-// Intersect returns the intersection of all the paths in the input field masks.
-func Intersect(mx *FieldMask, my *FieldMask, ms ...*FieldMask) *FieldMask {
- var ss1, ss2 []string // reused buffers for performance
- intersect := func(out, in []string) []string {
- ss1 = normalizePaths(append(ss1[:0], in...))
- ss2 = normalizePaths(append(ss2[:0], out...))
- out = out[:0]
- for i1, i2 := 0, 0; i1 < len(ss1) && i2 < len(ss2); {
- switch s1, s2 := ss1[i1], ss2[i2]; {
- case hasPathPrefix(s1, s2):
- out = append(out, s1)
- i1++
- case hasPathPrefix(s2, s1):
- out = append(out, s2)
- i2++
- case lessPath(s1, s2):
- i1++
- case lessPath(s2, s1):
- i2++
- }
- }
- return out
- }
-
- out := Union(mx, my, ms...).GetPaths()
- out = intersect(out, mx.GetPaths())
- out = intersect(out, my.GetPaths())
- for _, m := range ms {
- out = intersect(out, m.GetPaths())
- }
- return &FieldMask{Paths: normalizePaths(out)}
-}
-
-// IsValid reports whether all the paths are syntactically valid and
-// refer to known fields in the specified message type.
-// It reports false for a nil FieldMask.
-func (x *FieldMask) IsValid(m proto.Message) bool {
- paths := x.GetPaths()
- return x != nil && numValidPaths(m, paths) == len(paths)
-}
-
-// Append appends a list of paths to the mask and verifies that each one
-// is valid according to the specified message type.
-// An invalid path is not appended and breaks insertion of subsequent paths.
-func (x *FieldMask) Append(m proto.Message, paths ...string) error {
- numValid := numValidPaths(m, paths)
- x.Paths = append(x.Paths, paths[:numValid]...)
- paths = paths[numValid:]
- if len(paths) > 0 {
- name := m.ProtoReflect().Descriptor().FullName()
- return protoimpl.X.NewError("invalid path %q for message %q", paths[0], name)
- }
- return nil
-}
-
-func numValidPaths(m proto.Message, paths []string) int {
- md0 := m.ProtoReflect().Descriptor()
- for i, path := range paths {
- md := md0
- if !rangeFields(path, func(field string) bool {
- // Search the field within the message.
- if md == nil {
- return false // not within a message
- }
- fd := md.Fields().ByName(protoreflect.Name(field))
- // The real field name of a group is the message name.
- if fd == nil {
- gd := md.Fields().ByName(protoreflect.Name(strings.ToLower(field)))
- if gd != nil && gd.Kind() == protoreflect.GroupKind && string(gd.Message().Name()) == field {
- fd = gd
- }
- } else if fd.Kind() == protoreflect.GroupKind && string(fd.Message().Name()) != field {
- fd = nil
- }
- if fd == nil {
- return false // message has does not have this field
- }
-
- // Identify the next message to search within.
- md = fd.Message() // may be nil
-
- // Repeated fields are only allowed at the last position.
- if fd.IsList() || fd.IsMap() {
- md = nil
- }
-
- return true
- }) {
- return i
- }
- }
- return len(paths)
-}
-
-// Normalize converts the mask to its canonical form where all paths are sorted
-// and redundant paths are removed.
-func (x *FieldMask) Normalize() {
- x.Paths = normalizePaths(x.Paths)
-}
-
-func normalizePaths(paths []string) []string {
- sort.Slice(paths, func(i, j int) bool {
- return lessPath(paths[i], paths[j])
- })
-
- // Elide any path that is a prefix match on the previous.
- out := paths[:0]
- for _, path := range paths {
- if len(out) > 0 && hasPathPrefix(path, out[len(out)-1]) {
- continue
- }
- out = append(out, path)
- }
- return out
-}
-
-// hasPathPrefix is like strings.HasPrefix, but further checks for either
-// an exact matche or that the prefix is delimited by a dot.
-func hasPathPrefix(path, prefix string) bool {
- return strings.HasPrefix(path, prefix) && (len(path) == len(prefix) || path[len(prefix)] == '.')
-}
-
-// lessPath is a lexicographical comparison where dot is specially treated
-// as the smallest symbol.
-func lessPath(x, y string) bool {
- for i := 0; i < len(x) && i < len(y); i++ {
- if x[i] != y[i] {
- return (x[i] - '.') < (y[i] - '.')
- }
- }
- return len(x) < len(y)
-}
-
-// rangeFields is like strings.Split(path, "."), but avoids allocations by
-// iterating over each field in place and calling a iterator function.
-func rangeFields(path string, f func(field string) bool) bool {
- for {
- var field string
- if i := strings.IndexByte(path, '.'); i >= 0 {
- field, path = path[:i], path[i:]
- } else {
- field, path = path, ""
- }
-
- if !f(field) {
- return false
- }
-
- if len(path) == 0 {
- return true
- }
- path = strings.TrimPrefix(path, ".")
- }
-}
-
-func (x *FieldMask) Reset() {
- *x = FieldMask{}
- mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *FieldMask) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*FieldMask) ProtoMessage() {}
-
-func (x *FieldMask) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_field_mask_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use FieldMask.ProtoReflect.Descriptor instead.
-func (*FieldMask) Descriptor() ([]byte, []int) {
- return file_google_protobuf_field_mask_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *FieldMask) GetPaths() []string {
- if x != nil {
- return x.Paths
- }
- return nil
-}
-
-var File_google_protobuf_field_mask_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_field_mask_proto_rawDesc = []byte{
- 0x0a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x22, 0x21, 0x0a, 0x09, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b,
- 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x42, 0x85, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0e,
- 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
- 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e,
- 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70,
- 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61,
- 0x73, 0x6b, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e,
- 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_protobuf_field_mask_proto_rawDescOnce sync.Once
- file_google_protobuf_field_mask_proto_rawDescData = file_google_protobuf_field_mask_proto_rawDesc
-)
-
-func file_google_protobuf_field_mask_proto_rawDescGZIP() []byte {
- file_google_protobuf_field_mask_proto_rawDescOnce.Do(func() {
- file_google_protobuf_field_mask_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_field_mask_proto_rawDescData)
- })
- return file_google_protobuf_field_mask_proto_rawDescData
-}
-
-var file_google_protobuf_field_mask_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_google_protobuf_field_mask_proto_goTypes = []any{
- (*FieldMask)(nil), // 0: google.protobuf.FieldMask
-}
-var file_google_protobuf_field_mask_proto_depIdxs = []int32{
- 0, // [0:0] is the sub-list for method output_type
- 0, // [0:0] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_field_mask_proto_init() }
-func file_google_protobuf_field_mask_proto_init() {
- if File_google_protobuf_field_mask_proto != nil {
- return
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_protobuf_field_mask_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_protobuf_field_mask_proto_goTypes,
- DependencyIndexes: file_google_protobuf_field_mask_proto_depIdxs,
- MessageInfos: file_google_protobuf_field_mask_proto_msgTypes,
- }.Build()
- File_google_protobuf_field_mask_proto = out.File
- file_google_protobuf_field_mask_proto_rawDesc = nil
- file_google_protobuf_field_mask_proto_goTypes = nil
- file_google_protobuf_field_mask_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go b/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go
deleted file mode 100644
index f2c53ea33..000000000
--- a/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go
+++ /dev/null
@@ -1,791 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/struct.proto
-
-// Package structpb contains generated types for google/protobuf/struct.proto.
-//
-// The messages (i.e., Value, Struct, and ListValue) defined in struct.proto are
-// used to represent arbitrary JSON. The Value message represents a JSON value,
-// the Struct message represents a JSON object, and the ListValue message
-// represents a JSON array. See https://json.org for more information.
-//
-// The Value, Struct, and ListValue types have generated MarshalJSON and
-// UnmarshalJSON methods such that they serialize JSON equivalent to what the
-// messages themselves represent. Use of these types with the
-// "google.golang.org/protobuf/encoding/protojson" package
-// ensures that they will be serialized as their JSON equivalent.
-//
-// # Conversion to and from a Go interface
-//
-// The standard Go "encoding/json" package has functionality to serialize
-// arbitrary types to a large degree. The Value.AsInterface, Struct.AsMap, and
-// ListValue.AsSlice methods can convert the protobuf message representation into
-// a form represented by any, map[string]any, and []any.
-// This form can be used with other packages that operate on such data structures
-// and also directly with the standard json package.
-//
-// In order to convert the any, map[string]any, and []any
-// forms back as Value, Struct, and ListValue messages, use the NewStruct,
-// NewList, and NewValue constructor functions.
-//
-// # Example usage
-//
-// Consider the following example JSON object:
-//
-// {
-// "firstName": "John",
-// "lastName": "Smith",
-// "isAlive": true,
-// "age": 27,
-// "address": {
-// "streetAddress": "21 2nd Street",
-// "city": "New York",
-// "state": "NY",
-// "postalCode": "10021-3100"
-// },
-// "phoneNumbers": [
-// {
-// "type": "home",
-// "number": "212 555-1234"
-// },
-// {
-// "type": "office",
-// "number": "646 555-4567"
-// }
-// ],
-// "children": [],
-// "spouse": null
-// }
-//
-// To construct a Value message representing the above JSON object:
-//
-// m, err := structpb.NewValue(map[string]any{
-// "firstName": "John",
-// "lastName": "Smith",
-// "isAlive": true,
-// "age": 27,
-// "address": map[string]any{
-// "streetAddress": "21 2nd Street",
-// "city": "New York",
-// "state": "NY",
-// "postalCode": "10021-3100",
-// },
-// "phoneNumbers": []any{
-// map[string]any{
-// "type": "home",
-// "number": "212 555-1234",
-// },
-// map[string]any{
-// "type": "office",
-// "number": "646 555-4567",
-// },
-// },
-// "children": []any{},
-// "spouse": nil,
-// })
-// if err != nil {
-// ... // handle error
-// }
-// ... // make use of m as a *structpb.Value
-package structpb
-
-import (
- base64 "encoding/base64"
- json "encoding/json"
- protojson "google.golang.org/protobuf/encoding/protojson"
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- math "math"
- reflect "reflect"
- sync "sync"
- utf8 "unicode/utf8"
-)
-
-// `NullValue` is a singleton enumeration to represent the null value for the
-// `Value` type union.
-//
-// The JSON representation for `NullValue` is JSON `null`.
-type NullValue int32
-
-const (
- // Null value.
- NullValue_NULL_VALUE NullValue = 0
-)
-
-// Enum value maps for NullValue.
-var (
- NullValue_name = map[int32]string{
- 0: "NULL_VALUE",
- }
- NullValue_value = map[string]int32{
- "NULL_VALUE": 0,
- }
-)
-
-func (x NullValue) Enum() *NullValue {
- p := new(NullValue)
- *p = x
- return p
-}
-
-func (x NullValue) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (NullValue) Descriptor() protoreflect.EnumDescriptor {
- return file_google_protobuf_struct_proto_enumTypes[0].Descriptor()
-}
-
-func (NullValue) Type() protoreflect.EnumType {
- return &file_google_protobuf_struct_proto_enumTypes[0]
-}
-
-func (x NullValue) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use NullValue.Descriptor instead.
-func (NullValue) EnumDescriptor() ([]byte, []int) {
- return file_google_protobuf_struct_proto_rawDescGZIP(), []int{0}
-}
-
-// `Struct` represents a structured data value, consisting of fields
-// which map to dynamically typed values. In some languages, `Struct`
-// might be supported by a native representation. For example, in
-// scripting languages like JS a struct is represented as an
-// object. The details of that representation are described together
-// with the proto support for the language.
-//
-// The JSON representation for `Struct` is JSON object.
-type Struct struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // Unordered map of dynamically typed values.
- Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// NewStruct constructs a Struct from a general-purpose Go map.
-// The map keys must be valid UTF-8.
-// The map values are converted using NewValue.
-func NewStruct(v map[string]any) (*Struct, error) {
- x := &Struct{Fields: make(map[string]*Value, len(v))}
- for k, v := range v {
- if !utf8.ValidString(k) {
- return nil, protoimpl.X.NewError("invalid UTF-8 in string: %q", k)
- }
- var err error
- x.Fields[k], err = NewValue(v)
- if err != nil {
- return nil, err
- }
- }
- return x, nil
-}
-
-// AsMap converts x to a general-purpose Go map.
-// The map values are converted by calling Value.AsInterface.
-func (x *Struct) AsMap() map[string]any {
- f := x.GetFields()
- vs := make(map[string]any, len(f))
- for k, v := range f {
- vs[k] = v.AsInterface()
- }
- return vs
-}
-
-func (x *Struct) MarshalJSON() ([]byte, error) {
- return protojson.Marshal(x)
-}
-
-func (x *Struct) UnmarshalJSON(b []byte) error {
- return protojson.Unmarshal(b, x)
-}
-
-func (x *Struct) Reset() {
- *x = Struct{}
- mi := &file_google_protobuf_struct_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Struct) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Struct) ProtoMessage() {}
-
-func (x *Struct) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_struct_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Struct.ProtoReflect.Descriptor instead.
-func (*Struct) Descriptor() ([]byte, []int) {
- return file_google_protobuf_struct_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Struct) GetFields() map[string]*Value {
- if x != nil {
- return x.Fields
- }
- return nil
-}
-
-// `Value` represents a dynamically typed value which can be either
-// null, a number, a string, a boolean, a recursive struct value, or a
-// list of values. A producer of value is expected to set one of these
-// variants. Absence of any variant indicates an error.
-//
-// The JSON representation for `Value` is JSON value.
-type Value struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The kind of value.
- //
- // Types that are valid to be assigned to Kind:
- //
- // *Value_NullValue
- // *Value_NumberValue
- // *Value_StringValue
- // *Value_BoolValue
- // *Value_StructValue
- // *Value_ListValue
- Kind isValue_Kind `protobuf_oneof:"kind"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// NewValue constructs a Value from a general-purpose Go interface.
-//
-// ╔═══════════════════════════════════════╤════════════════════════════════════════════╗
-// ║ Go type │ Conversion ║
-// ╠═══════════════════════════════════════╪════════════════════════════════════════════╣
-// ║ nil │ stored as NullValue ║
-// ║ bool │ stored as BoolValue ║
-// ║ int, int8, int16, int32, int64 │ stored as NumberValue ║
-// ║ uint, uint8, uint16, uint32, uint64 │ stored as NumberValue ║
-// ║ float32, float64 │ stored as NumberValue ║
-// ║ json.Number │ stored as NumberValue ║
-// ║ string │ stored as StringValue; must be valid UTF-8 ║
-// ║ []byte │ stored as StringValue; base64-encoded ║
-// ║ map[string]any │ stored as StructValue ║
-// ║ []any │ stored as ListValue ║
-// ╚═══════════════════════════════════════╧════════════════════════════════════════════╝
-//
-// When converting an int64 or uint64 to a NumberValue, numeric precision loss
-// is possible since they are stored as a float64.
-func NewValue(v any) (*Value, error) {
- switch v := v.(type) {
- case nil:
- return NewNullValue(), nil
- case bool:
- return NewBoolValue(v), nil
- case int:
- return NewNumberValue(float64(v)), nil
- case int8:
- return NewNumberValue(float64(v)), nil
- case int16:
- return NewNumberValue(float64(v)), nil
- case int32:
- return NewNumberValue(float64(v)), nil
- case int64:
- return NewNumberValue(float64(v)), nil
- case uint:
- return NewNumberValue(float64(v)), nil
- case uint8:
- return NewNumberValue(float64(v)), nil
- case uint16:
- return NewNumberValue(float64(v)), nil
- case uint32:
- return NewNumberValue(float64(v)), nil
- case uint64:
- return NewNumberValue(float64(v)), nil
- case float32:
- return NewNumberValue(float64(v)), nil
- case float64:
- return NewNumberValue(float64(v)), nil
- case json.Number:
- n, err := v.Float64()
- if err != nil {
- return nil, protoimpl.X.NewError("invalid number format %q, expected a float64: %v", v, err)
- }
- return NewNumberValue(n), nil
- case string:
- if !utf8.ValidString(v) {
- return nil, protoimpl.X.NewError("invalid UTF-8 in string: %q", v)
- }
- return NewStringValue(v), nil
- case []byte:
- s := base64.StdEncoding.EncodeToString(v)
- return NewStringValue(s), nil
- case map[string]any:
- v2, err := NewStruct(v)
- if err != nil {
- return nil, err
- }
- return NewStructValue(v2), nil
- case []any:
- v2, err := NewList(v)
- if err != nil {
- return nil, err
- }
- return NewListValue(v2), nil
- default:
- return nil, protoimpl.X.NewError("invalid type: %T", v)
- }
-}
-
-// NewNullValue constructs a new null Value.
-func NewNullValue() *Value {
- return &Value{Kind: &Value_NullValue{NullValue: NullValue_NULL_VALUE}}
-}
-
-// NewBoolValue constructs a new boolean Value.
-func NewBoolValue(v bool) *Value {
- return &Value{Kind: &Value_BoolValue{BoolValue: v}}
-}
-
-// NewNumberValue constructs a new number Value.
-func NewNumberValue(v float64) *Value {
- return &Value{Kind: &Value_NumberValue{NumberValue: v}}
-}
-
-// NewStringValue constructs a new string Value.
-func NewStringValue(v string) *Value {
- return &Value{Kind: &Value_StringValue{StringValue: v}}
-}
-
-// NewStructValue constructs a new struct Value.
-func NewStructValue(v *Struct) *Value {
- return &Value{Kind: &Value_StructValue{StructValue: v}}
-}
-
-// NewListValue constructs a new list Value.
-func NewListValue(v *ListValue) *Value {
- return &Value{Kind: &Value_ListValue{ListValue: v}}
-}
-
-// AsInterface converts x to a general-purpose Go interface.
-//
-// Calling Value.MarshalJSON and "encoding/json".Marshal on this output produce
-// semantically equivalent JSON (assuming no errors occur).
-//
-// Floating-point values (i.e., "NaN", "Infinity", and "-Infinity") are
-// converted as strings to remain compatible with MarshalJSON.
-func (x *Value) AsInterface() any {
- switch v := x.GetKind().(type) {
- case *Value_NumberValue:
- if v != nil {
- switch {
- case math.IsNaN(v.NumberValue):
- return "NaN"
- case math.IsInf(v.NumberValue, +1):
- return "Infinity"
- case math.IsInf(v.NumberValue, -1):
- return "-Infinity"
- default:
- return v.NumberValue
- }
- }
- case *Value_StringValue:
- if v != nil {
- return v.StringValue
- }
- case *Value_BoolValue:
- if v != nil {
- return v.BoolValue
- }
- case *Value_StructValue:
- if v != nil {
- return v.StructValue.AsMap()
- }
- case *Value_ListValue:
- if v != nil {
- return v.ListValue.AsSlice()
- }
- }
- return nil
-}
-
-func (x *Value) MarshalJSON() ([]byte, error) {
- return protojson.Marshal(x)
-}
-
-func (x *Value) UnmarshalJSON(b []byte) error {
- return protojson.Unmarshal(b, x)
-}
-
-func (x *Value) Reset() {
- *x = Value{}
- mi := &file_google_protobuf_struct_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Value) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Value) ProtoMessage() {}
-
-func (x *Value) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_struct_proto_msgTypes[1]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Value.ProtoReflect.Descriptor instead.
-func (*Value) Descriptor() ([]byte, []int) {
- return file_google_protobuf_struct_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *Value) GetKind() isValue_Kind {
- if x != nil {
- return x.Kind
- }
- return nil
-}
-
-func (x *Value) GetNullValue() NullValue {
- if x != nil {
- if x, ok := x.Kind.(*Value_NullValue); ok {
- return x.NullValue
- }
- }
- return NullValue_NULL_VALUE
-}
-
-func (x *Value) GetNumberValue() float64 {
- if x != nil {
- if x, ok := x.Kind.(*Value_NumberValue); ok {
- return x.NumberValue
- }
- }
- return 0
-}
-
-func (x *Value) GetStringValue() string {
- if x != nil {
- if x, ok := x.Kind.(*Value_StringValue); ok {
- return x.StringValue
- }
- }
- return ""
-}
-
-func (x *Value) GetBoolValue() bool {
- if x != nil {
- if x, ok := x.Kind.(*Value_BoolValue); ok {
- return x.BoolValue
- }
- }
- return false
-}
-
-func (x *Value) GetStructValue() *Struct {
- if x != nil {
- if x, ok := x.Kind.(*Value_StructValue); ok {
- return x.StructValue
- }
- }
- return nil
-}
-
-func (x *Value) GetListValue() *ListValue {
- if x != nil {
- if x, ok := x.Kind.(*Value_ListValue); ok {
- return x.ListValue
- }
- }
- return nil
-}
-
-type isValue_Kind interface {
- isValue_Kind()
-}
-
-type Value_NullValue struct {
- // Represents a null value.
- NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"`
-}
-
-type Value_NumberValue struct {
- // Represents a double value.
- NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,proto3,oneof"`
-}
-
-type Value_StringValue struct {
- // Represents a string value.
- StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,proto3,oneof"`
-}
-
-type Value_BoolValue struct {
- // Represents a boolean value.
- BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,proto3,oneof"`
-}
-
-type Value_StructValue struct {
- // Represents a structured value.
- StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,proto3,oneof"`
-}
-
-type Value_ListValue struct {
- // Represents a repeated `Value`.
- ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,proto3,oneof"`
-}
-
-func (*Value_NullValue) isValue_Kind() {}
-
-func (*Value_NumberValue) isValue_Kind() {}
-
-func (*Value_StringValue) isValue_Kind() {}
-
-func (*Value_BoolValue) isValue_Kind() {}
-
-func (*Value_StructValue) isValue_Kind() {}
-
-func (*Value_ListValue) isValue_Kind() {}
-
-// `ListValue` is a wrapper around a repeated field of values.
-//
-// The JSON representation for `ListValue` is JSON array.
-type ListValue struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // Repeated field of dynamically typed values.
- Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// NewList constructs a ListValue from a general-purpose Go slice.
-// The slice elements are converted using NewValue.
-func NewList(v []any) (*ListValue, error) {
- x := &ListValue{Values: make([]*Value, len(v))}
- for i, v := range v {
- var err error
- x.Values[i], err = NewValue(v)
- if err != nil {
- return nil, err
- }
- }
- return x, nil
-}
-
-// AsSlice converts x to a general-purpose Go slice.
-// The slice elements are converted by calling Value.AsInterface.
-func (x *ListValue) AsSlice() []any {
- vals := x.GetValues()
- vs := make([]any, len(vals))
- for i, v := range vals {
- vs[i] = v.AsInterface()
- }
- return vs
-}
-
-func (x *ListValue) MarshalJSON() ([]byte, error) {
- return protojson.Marshal(x)
-}
-
-func (x *ListValue) UnmarshalJSON(b []byte) error {
- return protojson.Unmarshal(b, x)
-}
-
-func (x *ListValue) Reset() {
- *x = ListValue{}
- mi := &file_google_protobuf_struct_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *ListValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ListValue) ProtoMessage() {}
-
-func (x *ListValue) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_struct_proto_msgTypes[2]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use ListValue.ProtoReflect.Descriptor instead.
-func (*ListValue) Descriptor() ([]byte, []int) {
- return file_google_protobuf_struct_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *ListValue) GetValues() []*Value {
- if x != nil {
- return x.Values
- }
- return nil
-}
-
-var File_google_protobuf_struct_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_struct_proto_rawDesc = []byte{
- 0x0a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22,
- 0x98, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x06, 0x66, 0x69,
- 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
- 0x75, 0x63, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
- 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64,
- 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb2, 0x02, 0x0a, 0x05, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x62, 0x65,
- 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
- 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b,
- 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62,
- 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48,
- 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0c,
- 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73,
- 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6c, 0x69,
- 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69,
- 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22,
- 0x3b, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x06,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2a, 0x1b, 0x0a, 0x09,
- 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x55, 0x4c,
- 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x42, 0x7f, 0x0a, 0x13, 0x63, 0x6f, 0x6d,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x42, 0x0b, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
- 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f,
- 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65,
- 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x70, 0x62,
- 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67,
- 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c,
- 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x33,
-}
-
-var (
- file_google_protobuf_struct_proto_rawDescOnce sync.Once
- file_google_protobuf_struct_proto_rawDescData = file_google_protobuf_struct_proto_rawDesc
-)
-
-func file_google_protobuf_struct_proto_rawDescGZIP() []byte {
- file_google_protobuf_struct_proto_rawDescOnce.Do(func() {
- file_google_protobuf_struct_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_struct_proto_rawDescData)
- })
- return file_google_protobuf_struct_proto_rawDescData
-}
-
-var file_google_protobuf_struct_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_google_protobuf_struct_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
-var file_google_protobuf_struct_proto_goTypes = []any{
- (NullValue)(0), // 0: google.protobuf.NullValue
- (*Struct)(nil), // 1: google.protobuf.Struct
- (*Value)(nil), // 2: google.protobuf.Value
- (*ListValue)(nil), // 3: google.protobuf.ListValue
- nil, // 4: google.protobuf.Struct.FieldsEntry
-}
-var file_google_protobuf_struct_proto_depIdxs = []int32{
- 4, // 0: google.protobuf.Struct.fields:type_name -> google.protobuf.Struct.FieldsEntry
- 0, // 1: google.protobuf.Value.null_value:type_name -> google.protobuf.NullValue
- 1, // 2: google.protobuf.Value.struct_value:type_name -> google.protobuf.Struct
- 3, // 3: google.protobuf.Value.list_value:type_name -> google.protobuf.ListValue
- 2, // 4: google.protobuf.ListValue.values:type_name -> google.protobuf.Value
- 2, // 5: google.protobuf.Struct.FieldsEntry.value:type_name -> google.protobuf.Value
- 6, // [6:6] is the sub-list for method output_type
- 6, // [6:6] is the sub-list for method input_type
- 6, // [6:6] is the sub-list for extension type_name
- 6, // [6:6] is the sub-list for extension extendee
- 0, // [0:6] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_struct_proto_init() }
-func file_google_protobuf_struct_proto_init() {
- if File_google_protobuf_struct_proto != nil {
- return
- }
- file_google_protobuf_struct_proto_msgTypes[1].OneofWrappers = []any{
- (*Value_NullValue)(nil),
- (*Value_NumberValue)(nil),
- (*Value_StringValue)(nil),
- (*Value_BoolValue)(nil),
- (*Value_StructValue)(nil),
- (*Value_ListValue)(nil),
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_protobuf_struct_proto_rawDesc,
- NumEnums: 1,
- NumMessages: 4,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_protobuf_struct_proto_goTypes,
- DependencyIndexes: file_google_protobuf_struct_proto_depIdxs,
- EnumInfos: file_google_protobuf_struct_proto_enumTypes,
- MessageInfos: file_google_protobuf_struct_proto_msgTypes,
- }.Build()
- File_google_protobuf_struct_proto = out.File
- file_google_protobuf_struct_proto_rawDesc = nil
- file_google_protobuf_struct_proto_goTypes = nil
- file_google_protobuf_struct_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
deleted file mode 100644
index 9550109aa..000000000
--- a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
+++ /dev/null
@@ -1,366 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/timestamp.proto
-
-// Package timestamppb contains generated types for google/protobuf/timestamp.proto.
-//
-// The Timestamp message represents a timestamp,
-// an instant in time since the Unix epoch (January 1st, 1970).
-//
-// # Conversion to a Go Time
-//
-// The AsTime method can be used to convert a Timestamp message to a
-// standard Go time.Time value in UTC:
-//
-// t := ts.AsTime()
-// ... // make use of t as a time.Time
-//
-// Converting to a time.Time is a common operation so that the extensive
-// set of time-based operations provided by the time package can be leveraged.
-// See https://golang.org/pkg/time for more information.
-//
-// The AsTime method performs the conversion on a best-effort basis. Timestamps
-// with denormal values (e.g., nanoseconds beyond 0 and 99999999, inclusive)
-// are normalized during the conversion to a time.Time. To manually check for
-// invalid Timestamps per the documented limitations in timestamp.proto,
-// additionally call the CheckValid method:
-//
-// if err := ts.CheckValid(); err != nil {
-// ... // handle error
-// }
-//
-// # Conversion from a Go Time
-//
-// The timestamppb.New function can be used to construct a Timestamp message
-// from a standard Go time.Time value:
-//
-// ts := timestamppb.New(t)
-// ... // make use of ts as a *timestamppb.Timestamp
-//
-// In order to construct a Timestamp representing the current time, use Now:
-//
-// ts := timestamppb.Now()
-// ... // make use of ts as a *timestamppb.Timestamp
-package timestamppb
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- reflect "reflect"
- sync "sync"
- time "time"
-)
-
-// A Timestamp represents a point in time independent of any time zone or local
-// calendar, encoded as a count of seconds and fractions of seconds at
-// nanosecond resolution. The count is relative to an epoch at UTC midnight on
-// January 1, 1970, in the proleptic Gregorian calendar which extends the
-// Gregorian calendar backwards to year one.
-//
-// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
-// second table is needed for interpretation, using a [24-hour linear
-// smear](https://developers.google.com/time/smear).
-//
-// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
-// restricting to that range, we ensure that we can convert to and from [RFC
-// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
-//
-// # Examples
-//
-// Example 1: Compute Timestamp from POSIX `time()`.
-//
-// Timestamp timestamp;
-// timestamp.set_seconds(time(NULL));
-// timestamp.set_nanos(0);
-//
-// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
-//
-// struct timeval tv;
-// gettimeofday(&tv, NULL);
-//
-// Timestamp timestamp;
-// timestamp.set_seconds(tv.tv_sec);
-// timestamp.set_nanos(tv.tv_usec * 1000);
-//
-// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
-//
-// FILETIME ft;
-// GetSystemTimeAsFileTime(&ft);
-// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
-//
-// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
-// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
-// Timestamp timestamp;
-// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
-// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
-//
-// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
-//
-// long millis = System.currentTimeMillis();
-//
-// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
-// .setNanos((int) ((millis % 1000) * 1000000)).build();
-//
-// Example 5: Compute Timestamp from Java `Instant.now()`.
-//
-// Instant now = Instant.now();
-//
-// Timestamp timestamp =
-// Timestamp.newBuilder().setSeconds(now.getEpochSecond())
-// .setNanos(now.getNano()).build();
-//
-// Example 6: Compute Timestamp from current time in Python.
-//
-// timestamp = Timestamp()
-// timestamp.GetCurrentTime()
-//
-// # JSON Mapping
-//
-// In JSON format, the Timestamp type is encoded as a string in the
-// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
-// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
-// where {year} is always expressed using four digits while {month}, {day},
-// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
-// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
-// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
-// is required. A proto3 JSON serializer should always use UTC (as indicated by
-// "Z") when printing the Timestamp type and a proto3 JSON parser should be
-// able to accept both UTC and other timezones (as indicated by an offset).
-//
-// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
-// 01:30 UTC on January 15, 2017.
-//
-// In JavaScript, one can convert a Date object to this format using the
-// standard
-// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
-// method. In Python, a standard `datetime.datetime` object can be converted
-// to this format using
-// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
-// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
-// the Joda Time's [`ISODateTimeFormat.dateTime()`](
-// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
-// ) to obtain a formatter capable of generating timestamps in this format.
-type Timestamp struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // Represents seconds of UTC time since Unix epoch
- // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
- // 9999-12-31T23:59:59Z inclusive.
- Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
- // Non-negative fractions of a second at nanosecond resolution. Negative
- // second values with fractions must still have non-negative nanos values
- // that count forward in time. Must be from 0 to 999,999,999
- // inclusive.
- Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Now constructs a new Timestamp from the current time.
-func Now() *Timestamp {
- return New(time.Now())
-}
-
-// New constructs a new Timestamp from the provided time.Time.
-func New(t time.Time) *Timestamp {
- return &Timestamp{Seconds: int64(t.Unix()), Nanos: int32(t.Nanosecond())}
-}
-
-// AsTime converts x to a time.Time.
-func (x *Timestamp) AsTime() time.Time {
- return time.Unix(int64(x.GetSeconds()), int64(x.GetNanos())).UTC()
-}
-
-// IsValid reports whether the timestamp is valid.
-// It is equivalent to CheckValid == nil.
-func (x *Timestamp) IsValid() bool {
- return x.check() == 0
-}
-
-// CheckValid returns an error if the timestamp is invalid.
-// In particular, it checks whether the value represents a date that is
-// in the range of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
-// An error is reported for a nil Timestamp.
-func (x *Timestamp) CheckValid() error {
- switch x.check() {
- case invalidNil:
- return protoimpl.X.NewError("invalid nil Timestamp")
- case invalidUnderflow:
- return protoimpl.X.NewError("timestamp (%v) before 0001-01-01", x)
- case invalidOverflow:
- return protoimpl.X.NewError("timestamp (%v) after 9999-12-31", x)
- case invalidNanos:
- return protoimpl.X.NewError("timestamp (%v) has out-of-range nanos", x)
- default:
- return nil
- }
-}
-
-const (
- _ = iota
- invalidNil
- invalidUnderflow
- invalidOverflow
- invalidNanos
-)
-
-func (x *Timestamp) check() uint {
- const minTimestamp = -62135596800 // Seconds between 1970-01-01T00:00:00Z and 0001-01-01T00:00:00Z, inclusive
- const maxTimestamp = +253402300799 // Seconds between 1970-01-01T00:00:00Z and 9999-12-31T23:59:59Z, inclusive
- secs := x.GetSeconds()
- nanos := x.GetNanos()
- switch {
- case x == nil:
- return invalidNil
- case secs < minTimestamp:
- return invalidUnderflow
- case secs > maxTimestamp:
- return invalidOverflow
- case nanos < 0 || nanos >= 1e9:
- return invalidNanos
- default:
- return 0
- }
-}
-
-func (x *Timestamp) Reset() {
- *x = Timestamp{}
- mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Timestamp) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Timestamp) ProtoMessage() {}
-
-func (x *Timestamp) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_timestamp_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Timestamp.ProtoReflect.Descriptor instead.
-func (*Timestamp) Descriptor() ([]byte, []int) {
- return file_google_protobuf_timestamp_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Timestamp) GetSeconds() int64 {
- if x != nil {
- return x.Seconds
- }
- return 0
-}
-
-func (x *Timestamp) GetNanos() int32 {
- if x != nil {
- return x.Nanos
- }
- return 0
-}
-
-var File_google_protobuf_timestamp_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_timestamp_proto_rawDesc = []byte{
- 0x0a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x22, 0x3b, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
- 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e,
- 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42,
- 0x85, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
- 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77,
- 0x6e, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x70, 0x62, 0xf8, 0x01, 0x01,
- 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
- 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f,
- 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_protobuf_timestamp_proto_rawDescOnce sync.Once
- file_google_protobuf_timestamp_proto_rawDescData = file_google_protobuf_timestamp_proto_rawDesc
-)
-
-func file_google_protobuf_timestamp_proto_rawDescGZIP() []byte {
- file_google_protobuf_timestamp_proto_rawDescOnce.Do(func() {
- file_google_protobuf_timestamp_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_timestamp_proto_rawDescData)
- })
- return file_google_protobuf_timestamp_proto_rawDescData
-}
-
-var file_google_protobuf_timestamp_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
-var file_google_protobuf_timestamp_proto_goTypes = []any{
- (*Timestamp)(nil), // 0: google.protobuf.Timestamp
-}
-var file_google_protobuf_timestamp_proto_depIdxs = []int32{
- 0, // [0:0] is the sub-list for method output_type
- 0, // [0:0] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_timestamp_proto_init() }
-func file_google_protobuf_timestamp_proto_init() {
- if File_google_protobuf_timestamp_proto != nil {
- return
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_protobuf_timestamp_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 1,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_protobuf_timestamp_proto_goTypes,
- DependencyIndexes: file_google_protobuf_timestamp_proto_depIdxs,
- MessageInfos: file_google_protobuf_timestamp_proto_msgTypes,
- }.Build()
- File_google_protobuf_timestamp_proto = out.File
- file_google_protobuf_timestamp_proto_rawDesc = nil
- file_google_protobuf_timestamp_proto_goTypes = nil
- file_google_protobuf_timestamp_proto_depIdxs = nil
-}
diff --git a/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go b/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go
deleted file mode 100644
index 15b424ec1..000000000
--- a/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go
+++ /dev/null
@@ -1,623 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Wrappers for primitive (non-message) types. These types are useful
-// for embedding primitives in the `google.protobuf.Any` type and for places
-// where we need to distinguish between the absence of a primitive
-// typed field and its default value.
-//
-// These wrappers have no meaningful use within repeated fields as they lack
-// the ability to detect presence on individual elements.
-// These wrappers have no meaningful use within a map or a oneof since
-// individual entries of a map or fields of a oneof can already detect presence.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/wrappers.proto
-
-package wrapperspb
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- reflect "reflect"
- sync "sync"
-)
-
-// Wrapper message for `double`.
-//
-// The JSON representation for `DoubleValue` is JSON number.
-type DoubleValue struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The double value.
- Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Double stores v in a new DoubleValue and returns a pointer to it.
-func Double(v float64) *DoubleValue {
- return &DoubleValue{Value: v}
-}
-
-func (x *DoubleValue) Reset() {
- *x = DoubleValue{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *DoubleValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DoubleValue) ProtoMessage() {}
-
-func (x *DoubleValue) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[0]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use DoubleValue.ProtoReflect.Descriptor instead.
-func (*DoubleValue) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *DoubleValue) GetValue() float64 {
- if x != nil {
- return x.Value
- }
- return 0
-}
-
-// Wrapper message for `float`.
-//
-// The JSON representation for `FloatValue` is JSON number.
-type FloatValue struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The float value.
- Value float32 `protobuf:"fixed32,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Float stores v in a new FloatValue and returns a pointer to it.
-func Float(v float32) *FloatValue {
- return &FloatValue{Value: v}
-}
-
-func (x *FloatValue) Reset() {
- *x = FloatValue{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *FloatValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*FloatValue) ProtoMessage() {}
-
-func (x *FloatValue) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[1]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use FloatValue.ProtoReflect.Descriptor instead.
-func (*FloatValue) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *FloatValue) GetValue() float32 {
- if x != nil {
- return x.Value
- }
- return 0
-}
-
-// Wrapper message for `int64`.
-//
-// The JSON representation for `Int64Value` is JSON string.
-type Int64Value struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The int64 value.
- Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Int64 stores v in a new Int64Value and returns a pointer to it.
-func Int64(v int64) *Int64Value {
- return &Int64Value{Value: v}
-}
-
-func (x *Int64Value) Reset() {
- *x = Int64Value{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Int64Value) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Int64Value) ProtoMessage() {}
-
-func (x *Int64Value) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[2]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Int64Value.ProtoReflect.Descriptor instead.
-func (*Int64Value) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *Int64Value) GetValue() int64 {
- if x != nil {
- return x.Value
- }
- return 0
-}
-
-// Wrapper message for `uint64`.
-//
-// The JSON representation for `UInt64Value` is JSON string.
-type UInt64Value struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The uint64 value.
- Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// UInt64 stores v in a new UInt64Value and returns a pointer to it.
-func UInt64(v uint64) *UInt64Value {
- return &UInt64Value{Value: v}
-}
-
-func (x *UInt64Value) Reset() {
- *x = UInt64Value{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *UInt64Value) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UInt64Value) ProtoMessage() {}
-
-func (x *UInt64Value) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[3]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use UInt64Value.ProtoReflect.Descriptor instead.
-func (*UInt64Value) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *UInt64Value) GetValue() uint64 {
- if x != nil {
- return x.Value
- }
- return 0
-}
-
-// Wrapper message for `int32`.
-//
-// The JSON representation for `Int32Value` is JSON number.
-type Int32Value struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The int32 value.
- Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Int32 stores v in a new Int32Value and returns a pointer to it.
-func Int32(v int32) *Int32Value {
- return &Int32Value{Value: v}
-}
-
-func (x *Int32Value) Reset() {
- *x = Int32Value{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *Int32Value) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Int32Value) ProtoMessage() {}
-
-func (x *Int32Value) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[4]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Int32Value.ProtoReflect.Descriptor instead.
-func (*Int32Value) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *Int32Value) GetValue() int32 {
- if x != nil {
- return x.Value
- }
- return 0
-}
-
-// Wrapper message for `uint32`.
-//
-// The JSON representation for `UInt32Value` is JSON number.
-type UInt32Value struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The uint32 value.
- Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// UInt32 stores v in a new UInt32Value and returns a pointer to it.
-func UInt32(v uint32) *UInt32Value {
- return &UInt32Value{Value: v}
-}
-
-func (x *UInt32Value) Reset() {
- *x = UInt32Value{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *UInt32Value) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UInt32Value) ProtoMessage() {}
-
-func (x *UInt32Value) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[5]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use UInt32Value.ProtoReflect.Descriptor instead.
-func (*UInt32Value) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *UInt32Value) GetValue() uint32 {
- if x != nil {
- return x.Value
- }
- return 0
-}
-
-// Wrapper message for `bool`.
-//
-// The JSON representation for `BoolValue` is JSON `true` and `false`.
-type BoolValue struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The bool value.
- Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Bool stores v in a new BoolValue and returns a pointer to it.
-func Bool(v bool) *BoolValue {
- return &BoolValue{Value: v}
-}
-
-func (x *BoolValue) Reset() {
- *x = BoolValue{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *BoolValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BoolValue) ProtoMessage() {}
-
-func (x *BoolValue) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[6]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use BoolValue.ProtoReflect.Descriptor instead.
-func (*BoolValue) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *BoolValue) GetValue() bool {
- if x != nil {
- return x.Value
- }
- return false
-}
-
-// Wrapper message for `string`.
-//
-// The JSON representation for `StringValue` is JSON string.
-type StringValue struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The string value.
- Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// String stores v in a new StringValue and returns a pointer to it.
-func String(v string) *StringValue {
- return &StringValue{Value: v}
-}
-
-func (x *StringValue) Reset() {
- *x = StringValue{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *StringValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*StringValue) ProtoMessage() {}
-
-func (x *StringValue) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[7]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use StringValue.ProtoReflect.Descriptor instead.
-func (*StringValue) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *StringValue) GetValue() string {
- if x != nil {
- return x.Value
- }
- return ""
-}
-
-// Wrapper message for `bytes`.
-//
-// The JSON representation for `BytesValue` is JSON string.
-type BytesValue struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- // The bytes value.
- Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
-}
-
-// Bytes stores v in a new BytesValue and returns a pointer to it.
-func Bytes(v []byte) *BytesValue {
- return &BytesValue{Value: v}
-}
-
-func (x *BytesValue) Reset() {
- *x = BytesValue{}
- mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
-}
-
-func (x *BytesValue) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BytesValue) ProtoMessage() {}
-
-func (x *BytesValue) ProtoReflect() protoreflect.Message {
- mi := &file_google_protobuf_wrappers_proto_msgTypes[8]
- if x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use BytesValue.ProtoReflect.Descriptor instead.
-func (*BytesValue) Descriptor() ([]byte, []int) {
- return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *BytesValue) GetValue() []byte {
- if x != nil {
- return x.Value
- }
- return nil
-}
-
-var File_google_protobuf_wrappers_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_wrappers_proto_rawDesc = []byte{
- 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x22, 0x23, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x0a, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x0a, 0x49, 0x6e,
- 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23,
- 0x0a, 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x33,
- 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x21, 0x0a, 0x09,
- 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
- 0x23, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x0a, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x83, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x42, 0x0d, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
- 0x01, 0x5a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
- 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79,
- 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,
- 0x72, 0x73, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e,
- 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
- file_google_protobuf_wrappers_proto_rawDescOnce sync.Once
- file_google_protobuf_wrappers_proto_rawDescData = file_google_protobuf_wrappers_proto_rawDesc
-)
-
-func file_google_protobuf_wrappers_proto_rawDescGZIP() []byte {
- file_google_protobuf_wrappers_proto_rawDescOnce.Do(func() {
- file_google_protobuf_wrappers_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_wrappers_proto_rawDescData)
- })
- return file_google_protobuf_wrappers_proto_rawDescData
-}
-
-var file_google_protobuf_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
-var file_google_protobuf_wrappers_proto_goTypes = []any{
- (*DoubleValue)(nil), // 0: google.protobuf.DoubleValue
- (*FloatValue)(nil), // 1: google.protobuf.FloatValue
- (*Int64Value)(nil), // 2: google.protobuf.Int64Value
- (*UInt64Value)(nil), // 3: google.protobuf.UInt64Value
- (*Int32Value)(nil), // 4: google.protobuf.Int32Value
- (*UInt32Value)(nil), // 5: google.protobuf.UInt32Value
- (*BoolValue)(nil), // 6: google.protobuf.BoolValue
- (*StringValue)(nil), // 7: google.protobuf.StringValue
- (*BytesValue)(nil), // 8: google.protobuf.BytesValue
-}
-var file_google_protobuf_wrappers_proto_depIdxs = []int32{
- 0, // [0:0] is the sub-list for method output_type
- 0, // [0:0] is the sub-list for method input_type
- 0, // [0:0] is the sub-list for extension type_name
- 0, // [0:0] is the sub-list for extension extendee
- 0, // [0:0] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_wrappers_proto_init() }
-func file_google_protobuf_wrappers_proto_init() {
- if File_google_protobuf_wrappers_proto != nil {
- return
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_google_protobuf_wrappers_proto_rawDesc,
- NumEnums: 0,
- NumMessages: 9,
- NumExtensions: 0,
- NumServices: 0,
- },
- GoTypes: file_google_protobuf_wrappers_proto_goTypes,
- DependencyIndexes: file_google_protobuf_wrappers_proto_depIdxs,
- MessageInfos: file_google_protobuf_wrappers_proto_msgTypes,
- }.Build()
- File_google_protobuf_wrappers_proto = out.File
- file_google_protobuf_wrappers_proto_rawDesc = nil
- file_google_protobuf_wrappers_proto_goTypes = nil
- file_google_protobuf_wrappers_proto_depIdxs = nil
-}