diff --git a/lib/valkey.rb b/lib/valkey.rb index 0beee3b..369bc0c 100644 --- a/lib/valkey.rb +++ b/lib/valkey.rb @@ -1,15 +1,13 @@ # frozen_string_literal: true require "ffi" -require "google/protobuf" +require "json" +require "cgi" require "valkey/version" require "valkey/request_type" require "valkey/response_type" require "valkey/request_error_type" -require "valkey/protobuf/command_request_pb" -require "valkey/protobuf/connection_request_pb" -require "valkey/protobuf/response_pb" require "valkey/bindings" require "valkey/utils" require "valkey/commands" @@ -323,36 +321,112 @@ def initialize(options = {}) # Extract connection parameters host = options[:host] || "127.0.0.1" port = options[:port] || 6379 + database_id = options[:db] || 0 + + # Validate database ID + raise ArgumentError, "Database ID must be non-negative, got: #{database_id}" if database_id.negative? nodes = options[:nodes] || [{ host: host, port: port }] - cluster_mode_enabled = options[:cluster_mode] || false + # Validate nodes array + raise ArgumentError, "Nodes array cannot be empty" if nodes.empty? + + # Build URI string + # Use the first node for standalone mode, or first node for cluster discovery + first_node = nodes.first + raise ArgumentError, "First node cannot be nil" if first_node.nil? + + uri_host = first_node[:host] + uri_port = first_node[:port] + + # Validate host and port + raise ArgumentError, "Host cannot be nil" if uri_host.nil? + raise ArgumentError, "Port cannot be nil" if uri_port.nil? + raise ArgumentError, "Port must be a number" unless uri_port.is_a?(Integer) + + # Determine scheme based on TLS/SSL + scheme = [true, "true"].include?(options[:ssl]) ? "rediss" : "redis" + + # Build URI with authentication if provided + uri_parts = [scheme, "://"] + + # Add authentication to URI + if options[:username] && options[:password] + uri_parts << CGI.escape(options[:username]) + uri_parts << ":" + uri_parts << CGI.escape(options[:password]) + uri_parts << "@" + elsif options[:password] + uri_parts << ":" + uri_parts << CGI.escape(options[:password]) + uri_parts << "@" + end + + uri_parts << uri_host + uri_parts << ":" + uri_parts << uri_port.to_s + + # Add database ID to URI if specified + uri_parts << "/" << database_id.to_s if database_id.positive? + + uri_str = uri_parts.join + + # Build JSON options for additional configuration + json_options = {} + + # Cluster mode + json_options["cluster_mode_enabled"] = true if options[:cluster_mode] + + # Protocol + case options[:protocol] + when :resp3, "resp3", 3 + json_options["protocol"] = "RESP3" + when :resp2, "resp2", 2 + json_options["protocol"] = "RESP2" + end - # Protocol defaults to RESP2 - protocol = case options[:protocol] - when :resp3, "resp3", 3 - ConnectionRequest::ProtocolVersion::RESP3 - else - ConnectionRequest::ProtocolVersion::RESP2 - end + # Timeouts + request_timeout = options[:timeout] || 5.0 + + # Validate timeout types + unless request_timeout.is_a?(Numeric) + raise ArgumentError, "Timeout must be a number, got: #{request_timeout.class}" + end + raise ArgumentError, "Timeout must be positive, got: #{request_timeout}" if request_timeout <= 0 + + json_options["request_timeout"] = (request_timeout * 1000).to_i + + if options[:connect_timeout] + connect_timeout = options[:connect_timeout] + unless connect_timeout.is_a?(Numeric) + raise ArgumentError, "Connect timeout must be a number, got: #{connect_timeout.class}" + end + raise ArgumentError, "Connect timeout must be positive, got: #{connect_timeout}" if connect_timeout <= 0 + + json_options["connection_timeout"] = (connect_timeout * 1000).to_i + end - # TLS/SSL support - tls_mode = if [true, "true"].include?(options[:ssl]) - ConnectionRequest::TlsMode::SecureTls - else - ConnectionRequest::TlsMode::NoTls - end + # Client name + json_options["client_name"] = options[:client_name] if options[:client_name] - # SSL parameters - map ssl_params to protobuf root_certs + # TLS/SSL certificates root_certs = [] if options[:ssl_params].is_a?(Hash) # ca_file - read CA certificate file (PEM or DER format) - root_certs << File.binread(options[:ssl_params][:ca_file]) if options[:ssl_params][:ca_file] + if options[:ssl_params][:ca_file] + ca_file = options[:ssl_params][:ca_file] + raise ArgumentError, "CA file does not exist: #{ca_file}" unless File.exist?(ca_file) + raise ArgumentError, "CA file is not readable: #{ca_file}" unless File.readable?(ca_file) + root_certs << File.binread(ca_file) + end # cert - client certificate (file path or OpenSSL::X509::Certificate) if options[:ssl_params][:cert] cert_data = if options[:ssl_params][:cert].is_a?(String) - File.binread(options[:ssl_params][:cert]) + cert_file = options[:ssl_params][:cert] + raise ArgumentError, "Cert file does not exist: #{cert_file}" unless File.exist?(cert_file) + raise ArgumentError, "Cert file is not readable: #{cert_file}" unless File.readable?(cert_file) + File.binread(cert_file) elsif options[:ssl_params][:cert].respond_to?(:to_pem) options[:ssl_params][:cert].to_pem elsif options[:ssl_params][:cert].respond_to?(:to_der) @@ -366,7 +440,10 @@ def initialize(options = {}) # key - client key (file path or OpenSSL::PKey) if options[:ssl_params][:key] key_data = if options[:ssl_params][:key].is_a?(String) - File.binread(options[:ssl_params][:key]) + key_file = options[:ssl_params][:key] + raise ArgumentError, "Key file does not exist: #{key_file}" unless File.exist?(key_file) + raise ArgumentError, "Key file is not readable: #{key_file}" unless File.readable?(key_file) + File.binread(key_file) elsif options[:ssl_params][:key].respond_to?(:to_pem) options[:ssl_params][:key].to_pem elsif options[:ssl_params][:key].respond_to?(:to_der) @@ -379,11 +456,14 @@ def initialize(options = {}) # Additional root certificates from ca_path if options[:ssl_params][:ca_path] - Dir.glob(File.join(options[:ssl_params][:ca_path], "*.crt")).each do |cert_file| - root_certs << File.binread(cert_file) + ca_path = options[:ssl_params][:ca_path] + raise ArgumentError, "CA path does not exist: #{ca_path}" unless Dir.exist?(ca_path) + + Dir.glob(File.join(ca_path, "*.crt")).each do |cert_file| + root_certs << File.binread(cert_file) if File.readable?(cert_file) end - Dir.glob(File.join(options[:ssl_params][:ca_path], "*.pem")).each do |cert_file| - root_certs << File.binread(cert_file) + Dir.glob(File.join(ca_path, "*.pem")).each do |cert_file| + root_certs << File.binread(cert_file) if File.readable?(cert_file) end end @@ -391,42 +471,33 @@ def initialize(options = {}) root_certs.concat(options[:ssl_params][:root_certs]) if options[:ssl_params][:root_certs].is_a?(Array) end - # Authentication support - authentication_info = nil - if options[:password] || options[:username] - authentication_info = ConnectionRequest::AuthenticationInfo.new( - password: options[:password] || "", - username: options[:username] || "" - ) - end - - # Database selection - database_id = options[:db] || 0 - - # Client name - client_name = options[:client_name] || "" - - # Timeout handling - # :timeout sets the request timeout (for command execution) - # :connect_timeout sets the connection establishment timeout - # Default request timeout is 5.0 seconds - request_timeout = options[:timeout] || 5.0 - - # Connection timeout (milliseconds) - defaults to 0 (uses system default) - connection_timeout_ms = if options[:connect_timeout] - (options[:connect_timeout] * 1000).to_i - else - 0 - end + json_options["root_certs"] = root_certs unless root_certs.empty? # Connection retry strategy - connection_retry_strategy = nil if options[:reconnect_attempts] || options[:reconnect_delay] || options[:reconnect_delay_max] number_of_retries = options[:reconnect_attempts] || 1 base_delay = options[:reconnect_delay] || 0.5 max_delay = options[:reconnect_delay_max] + + # Validate reconnection parameters + unless number_of_retries.is_a?(Integer) + raise ArgumentError, "Reconnect attempts must be an integer, got: #{number_of_retries.class}" + end + raise ArgumentError, "Reconnect attempts must be non-negative, got: #{number_of_retries}" if number_of_retries.negative? + + unless base_delay.is_a?(Numeric) + raise ArgumentError, "Reconnect delay must be a number, got: #{base_delay.class}" + end + raise ArgumentError, "Reconnect delay must be positive, got: #{base_delay}" unless base_delay.positive? + + if max_delay + unless max_delay.is_a?(Numeric) + raise ArgumentError, "Reconnect delay max must be a number, got: #{max_delay.class}" + end + raise ArgumentError, "Reconnect delay max must be positive, got: #{max_delay}" unless max_delay.positive? + end + exponent_base = 2 - jitter_percent = 0 if max_delay && base_delay.positive? && number_of_retries.positive? calculated_base = (max_delay / base_delay)**(1.0 / number_of_retries.to_f) @@ -435,45 +506,29 @@ def initialize(options = {}) factor_ms = (base_delay * 1000).to_i - connection_retry_strategy = ConnectionRequest::ConnectionRetryStrategy.new( - number_of_retries: number_of_retries, - factor: factor_ms, - exponent_base: exponent_base, - jitter_percent: jitter_percent - ) + json_options["connection_retry_strategy"] = { + "number_of_retries" => number_of_retries, + "factor" => factor_ms, + "exponent_base" => exponent_base, + "jitter_percent" => 0 + } end - # Build connection request - request_params = { - cluster_mode_enabled: cluster_mode_enabled, - request_timeout: request_timeout, - protocol: protocol, - tls_mode: tls_mode, - addresses: nodes.map { |node| ConnectionRequest::NodeAddress.new(host: node[:host], port: node[:port]) } - } - - # Add optional fields only if they have values - request_params[:connection_timeout] = connection_timeout_ms if connection_timeout_ms.positive? - request_params[:database_id] = database_id if database_id.positive? - request_params[:client_name] = client_name unless client_name.empty? - request_params[:authentication_info] = authentication_info if authentication_info - request_params[:root_certs] = root_certs unless root_certs.empty? - request_params[:connection_retry_strategy] = connection_retry_strategy if connection_retry_strategy + # Multi-node addresses for cluster mode + if nodes.size > 1 + json_options["addresses"] = nodes.map { |node| { "host" => node[:host], "port" => node[:port] } } + end - request = ConnectionRequest::ConnectionRequest.new(request_params) + # Convert JSON options to string (pass nil if empty) + json_str = json_options.empty? ? nil : JSON.generate(json_options) + # Create client using URI-based FFI function client_type = Bindings::ClientType.new client_type[:tag] = 1 # SyncClient - request_str = ConnectionRequest::ConnectionRequest.encode(request) - request_buf = FFI::MemoryPointer.new(:char, request_str.bytesize) - request_buf.put_bytes(0, request_str) - - request_len = request_str.bytesize - - response_ptr = Bindings.create_client( - request_buf, - request_len, + response_ptr = Bindings.create_client_from_uri( + uri_str, + json_str, client_type, method(:pubsub_callback) ) diff --git a/lib/valkey/bindings.rb b/lib/valkey/bindings.rb index cf83da8..81fb36c 100644 --- a/lib/valkey/bindings.rb +++ b/lib/valkey/bindings.rb @@ -117,6 +117,13 @@ class CommandResult < FFI::Struct :pubsub_callback # callback ], :pointer # *const ConnectionResponse + attach_function :create_client_from_uri, [ + :string, # *const c_char (uri_str) + :string, # *const c_char (extra_options_json) + ClientType.by_ref, # *const ClientType + :pubsub_callback # callback + ], :pointer # *const ConnectionResponse + attach_function :close_client, [ :pointer # client_adapter_ptr ], :void diff --git a/lib/valkey/libglide_ffi.dylib b/lib/valkey/libglide_ffi.dylib index 7d1bca2..cf06ea7 100755 Binary files a/lib/valkey/libglide_ffi.dylib and b/lib/valkey/libglide_ffi.dylib differ diff --git a/lib/valkey/protobuf/command_request_pb.rb b/lib/valkey/protobuf/command_request_pb.rb deleted file mode 100644 index 1961529..0000000 --- a/lib/valkey/protobuf/command_request_pb.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: command_request.proto - -require 'google/protobuf' - - -descriptor_data = "\n\x15\x63ommand_request.proto\x12\x0f\x63ommand_request\"M\n\x0bSlotIdRoute\x12-\n\tslot_type\x18\x01 \x01(\x0e\x32\x1a.command_request.SlotTypes\x12\x0f\n\x07slot_id\x18\x02 \x01(\x05\"O\n\x0cSlotKeyRoute\x12-\n\tslot_type\x18\x01 \x01(\x0e\x32\x1a.command_request.SlotTypes\x12\x10\n\x08slot_key\x18\x02 \x01(\t\",\n\x0e\x42yAddressRoute\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"\xf6\x01\n\x06Routes\x12\x36\n\rsimple_routes\x18\x01 \x01(\x0e\x32\x1d.command_request.SimpleRoutesH\x00\x12\x37\n\x0eslot_key_route\x18\x02 \x01(\x0b\x32\x1d.command_request.SlotKeyRouteH\x00\x12\x35\n\rslot_id_route\x18\x03 \x01(\x0b\x32\x1c.command_request.SlotIdRouteH\x00\x12;\n\x10\x62y_address_route\x18\x04 \x01(\x0b\x32\x1f.command_request.ByAddressRouteH\x00\x42\x07\n\x05value\"\xb6\x01\n\x07\x43ommand\x12\x32\n\x0crequest_type\x18\x01 \x01(\x0e\x32\x1c.command_request.RequestType\x12\x38\n\nargs_array\x18\x02 \x01(\x0b\x32\".command_request.Command.ArgsArrayH\x00\x12\x1a\n\x10\x61rgs_vec_pointer\x18\x03 \x01(\x04H\x00\x1a\x19\n\tArgsArray\x12\x0c\n\x04\x61rgs\x18\x01 \x03(\x0c\x42\x06\n\x04\x61rgs\"\x80\x01\n\x18ScriptInvocationPointers\x12\x0c\n\x04hash\x18\x01 \x01(\t\x12\x19\n\x0ckeys_pointer\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x19\n\x0c\x61rgs_pointer\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\x0f\n\r_keys_pointerB\x0f\n\r_args_pointer\"<\n\x10ScriptInvocation\x12\x0c\n\x04hash\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\x0c\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\x0c\"\x90\x02\n\x05\x42\x61tch\x12\x11\n\tis_atomic\x18\x01 \x01(\x08\x12*\n\x08\x63ommands\x18\x02 \x03(\x0b\x32\x18.command_request.Command\x12\x1b\n\x0eraise_on_error\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12retry_server_error\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12#\n\x16retry_connection_error\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\x11\n\x0f_raise_on_errorB\n\n\x08_timeoutB\x15\n\x13_retry_server_errorB\x19\n\x17_retry_connection_error\"\xb4\x01\n\x0b\x43lusterScan\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\t\x12\x1a\n\rmatch_pattern\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x63ount\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12\x18\n\x0bobject_type\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1f\n\x17\x61llow_non_covered_slots\x18\x05 \x01(\x08\x42\x10\n\x0e_match_patternB\x08\n\x06_countB\x0e\n\x0c_object_type\"V\n\x18UpdateConnectionPassword\x12\x15\n\x08password\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eimmediate_auth\x18\x02 \x01(\x08\x42\x0b\n\t_password\"\x11\n\x0fRefreshIamToken\"\xbb\x04\n\x0e\x43ommandRequest\x12\x14\n\x0c\x63\x61llback_idx\x18\x01 \x01(\r\x12\x32\n\x0esingle_command\x18\x02 \x01(\x0b\x32\x18.command_request.CommandH\x00\x12\'\n\x05\x62\x61tch\x18\x03 \x01(\x0b\x32\x16.command_request.BatchH\x00\x12>\n\x11script_invocation\x18\x04 \x01(\x0b\x32!.command_request.ScriptInvocationH\x00\x12O\n\x1ascript_invocation_pointers\x18\x05 \x01(\x0b\x32).command_request.ScriptInvocationPointersH\x00\x12\x34\n\x0c\x63luster_scan\x18\x06 \x01(\x0b\x32\x1c.command_request.ClusterScanH\x00\x12O\n\x1aupdate_connection_password\x18\x07 \x01(\x0b\x32).command_request.UpdateConnectionPasswordH\x00\x12=\n\x11refresh_iam_token\x18\x08 \x01(\x0b\x32 .command_request.RefreshIamTokenH\x00\x12&\n\x05route\x18\t \x01(\x0b\x32\x17.command_request.Routes\x12\x1a\n\rroot_span_ptr\x18\n \x01(\x04H\x01\x88\x01\x01\x42\t\n\x07\x63ommandB\x10\n\x0e_root_span_ptr*:\n\x0cSimpleRoutes\x12\x0c\n\x08\x41llNodes\x10\x00\x12\x10\n\x0c\x41llPrimaries\x10\x01\x12\n\n\x06Random\x10\x02*%\n\tSlotTypes\x12\x0b\n\x07Primary\x10\x00\x12\x0b\n\x07Replica\x10\x01*\x9b\x32\n\x0bRequestType\x12\x12\n\x0eInvalidRequest\x10\x00\x12\x11\n\rCustomCommand\x10\x01\x12\x0c\n\x08\x42itCount\x10\x65\x12\x0c\n\x08\x42itField\x10\x66\x12\x14\n\x10\x42itFieldReadOnly\x10g\x12\t\n\x05\x42itOp\x10h\x12\n\n\x06\x42itPos\x10i\x12\n\n\x06GetBit\x10j\x12\n\n\x06SetBit\x10k\x12\x0b\n\x06\x41sking\x10\xc9\x01\x12\x14\n\x0f\x43lusterAddSlots\x10\xca\x01\x12\x19\n\x14\x43lusterAddSlotsRange\x10\xcb\x01\x12\x15\n\x10\x43lusterBumpEpoch\x10\xcc\x01\x12\x1f\n\x1a\x43lusterCountFailureReports\x10\xcd\x01\x12\x1b\n\x16\x43lusterCountKeysInSlot\x10\xce\x01\x12\x14\n\x0f\x43lusterDelSlots\x10\xcf\x01\x12\x19\n\x14\x43lusterDelSlotsRange\x10\xd0\x01\x12\x14\n\x0f\x43lusterFailover\x10\xd1\x01\x12\x16\n\x11\x43lusterFlushSlots\x10\xd2\x01\x12\x12\n\rClusterForget\x10\xd3\x01\x12\x19\n\x14\x43lusterGetKeysInSlot\x10\xd4\x01\x12\x10\n\x0b\x43lusterInfo\x10\xd5\x01\x12\x13\n\x0e\x43lusterKeySlot\x10\xd6\x01\x12\x11\n\x0c\x43lusterLinks\x10\xd7\x01\x12\x10\n\x0b\x43lusterMeet\x10\xd8\x01\x12\x10\n\x0b\x43lusterMyId\x10\xd9\x01\x12\x15\n\x10\x43lusterMyShardId\x10\xda\x01\x12\x11\n\x0c\x43lusterNodes\x10\xdb\x01\x12\x14\n\x0f\x43lusterReplicas\x10\xdc\x01\x12\x15\n\x10\x43lusterReplicate\x10\xdd\x01\x12\x11\n\x0c\x43lusterReset\x10\xde\x01\x12\x16\n\x11\x43lusterSaveConfig\x10\xdf\x01\x12\x1a\n\x15\x43lusterSetConfigEpoch\x10\xe0\x01\x12\x13\n\x0e\x43lusterSetslot\x10\xe1\x01\x12\x12\n\rClusterShards\x10\xe2\x01\x12\x12\n\rClusterSlaves\x10\xe3\x01\x12\x11\n\x0c\x43lusterSlots\x10\xe4\x01\x12\r\n\x08ReadOnly\x10\xe5\x01\x12\x0e\n\tReadWrite\x10\xe6\x01\x12\t\n\x04\x41uth\x10\xad\x02\x12\x12\n\rClientCaching\x10\xae\x02\x12\x12\n\rClientGetName\x10\xaf\x02\x12\x13\n\x0e\x43lientGetRedir\x10\xb0\x02\x12\r\n\x08\x43lientId\x10\xb1\x02\x12\x0f\n\nClientInfo\x10\xb2\x02\x12\x15\n\x10\x43lientKillSimple\x10\xb3\x02\x12\x0f\n\nClientKill\x10\xb4\x02\x12\x0f\n\nClientList\x10\xb5\x02\x12\x12\n\rClientNoEvict\x10\xb6\x02\x12\x12\n\rClientNoTouch\x10\xb7\x02\x12\x10\n\x0b\x43lientPause\x10\xb8\x02\x12\x10\n\x0b\x43lientReply\x10\xb9\x02\x12\x12\n\rClientSetInfo\x10\xba\x02\x12\x12\n\rClientSetName\x10\xbb\x02\x12\x13\n\x0e\x43lientTracking\x10\xbc\x02\x12\x17\n\x12\x43lientTrackingInfo\x10\xbd\x02\x12\x12\n\rClientUnblock\x10\xbe\x02\x12\x12\n\rClientUnpause\x10\xbf\x02\x12\t\n\x04\x45\x63ho\x10\xc0\x02\x12\n\n\x05Hello\x10\xc1\x02\x12\t\n\x04Ping\x10\xc2\x02\x12\t\n\x04Quit\x10\xc3\x02\x12\n\n\x05Reset\x10\xc4\x02\x12\x0b\n\x06Select\x10\xc5\x02\x12\t\n\x04\x43opy\x10\x91\x03\x12\x08\n\x03\x44\x65l\x10\x92\x03\x12\t\n\x04\x44ump\x10\x93\x03\x12\x0b\n\x06\x45xists\x10\x94\x03\x12\x0b\n\x06\x45xpire\x10\x95\x03\x12\r\n\x08\x45xpireAt\x10\x96\x03\x12\x0f\n\nExpireTime\x10\x97\x03\x12\t\n\x04Keys\x10\x98\x03\x12\x0c\n\x07Migrate\x10\x99\x03\x12\t\n\x04Move\x10\x9a\x03\x12\x13\n\x0eObjectEncoding\x10\x9b\x03\x12\x0f\n\nObjectFreq\x10\x9c\x03\x12\x13\n\x0eObjectIdleTime\x10\x9d\x03\x12\x13\n\x0eObjectRefCount\x10\x9e\x03\x12\x0c\n\x07Persist\x10\x9f\x03\x12\x0c\n\x07PExpire\x10\xa0\x03\x12\x0e\n\tPExpireAt\x10\xa1\x03\x12\x10\n\x0bPExpireTime\x10\xa2\x03\x12\t\n\x04PTTL\x10\xa3\x03\x12\x0e\n\tRandomKey\x10\xa4\x03\x12\x0b\n\x06Rename\x10\xa5\x03\x12\r\n\x08RenameNX\x10\xa6\x03\x12\x0c\n\x07Restore\x10\xa7\x03\x12\t\n\x04Scan\x10\xa8\x03\x12\t\n\x04Sort\x10\xa9\x03\x12\x11\n\x0cSortReadOnly\x10\xaa\x03\x12\n\n\x05Touch\x10\xab\x03\x12\x08\n\x03TTL\x10\xac\x03\x12\t\n\x04Type\x10\xad\x03\x12\x0b\n\x06Unlink\x10\xae\x03\x12\t\n\x04Wait\x10\xaf\x03\x12\x0c\n\x07WaitAof\x10\xb0\x03\x12\x0b\n\x06GeoAdd\x10\xf5\x03\x12\x0c\n\x07GeoDist\x10\xf6\x03\x12\x0c\n\x07GeoHash\x10\xf7\x03\x12\x0b\n\x06GeoPos\x10\xf8\x03\x12\x0e\n\tGeoRadius\x10\xf9\x03\x12\x16\n\x11GeoRadiusReadOnly\x10\xfa\x03\x12\x16\n\x11GeoRadiusByMember\x10\xfb\x03\x12\x1e\n\x19GeoRadiusByMemberReadOnly\x10\xfc\x03\x12\x0e\n\tGeoSearch\x10\xfd\x03\x12\x13\n\x0eGeoSearchStore\x10\xfe\x03\x12\t\n\x04HDel\x10\xd9\x04\x12\x0c\n\x07HExists\x10\xda\x04\x12\t\n\x04HGet\x10\xdb\x04\x12\x0c\n\x07HGetAll\x10\xdc\x04\x12\x0c\n\x07HIncrBy\x10\xdd\x04\x12\x11\n\x0cHIncrByFloat\x10\xde\x04\x12\n\n\x05HKeys\x10\xdf\x04\x12\t\n\x04HLen\x10\xe0\x04\x12\n\n\x05HMGet\x10\xe1\x04\x12\n\n\x05HMSet\x10\xe2\x04\x12\x0f\n\nHRandField\x10\xe3\x04\x12\n\n\x05HScan\x10\xe4\x04\x12\t\n\x04HSet\x10\xe5\x04\x12\x0b\n\x06HSetNX\x10\xe6\x04\x12\x0c\n\x07HStrlen\x10\xe7\x04\x12\n\n\x05HVals\x10\xe8\x04\x12\x0b\n\x06HSetEx\x10\xe9\x04\x12\x0b\n\x06HGetEx\x10\xea\x04\x12\x0c\n\x07HExpire\x10\xeb\x04\x12\x0e\n\tHExpireAt\x10\xec\x04\x12\r\n\x08HPExpire\x10\xed\x04\x12\x0f\n\nHPExpireAt\x10\xee\x04\x12\r\n\x08HPersist\x10\xef\x04\x12\t\n\x04HTtl\x10\xf0\x04\x12\n\n\x05HPTtl\x10\xf1\x04\x12\x10\n\x0bHExpireTime\x10\xf2\x04\x12\x11\n\x0cHPExpireTime\x10\xf3\x04\x12\n\n\x05PfAdd\x10\xbd\x05\x12\x0c\n\x07PfCount\x10\xbe\x05\x12\x0c\n\x07PfMerge\x10\xbf\x05\x12\x0b\n\x06\x42LMove\x10\xa1\x06\x12\x0b\n\x06\x42LMPop\x10\xa2\x06\x12\n\n\x05\x42LPop\x10\xa3\x06\x12\n\n\x05\x42RPop\x10\xa4\x06\x12\x0f\n\nBRPopLPush\x10\xa5\x06\x12\x0b\n\x06LIndex\x10\xa6\x06\x12\x0c\n\x07LInsert\x10\xa7\x06\x12\t\n\x04LLen\x10\xa8\x06\x12\n\n\x05LMove\x10\xa9\x06\x12\n\n\x05LMPop\x10\xaa\x06\x12\t\n\x04LPop\x10\xab\x06\x12\t\n\x04LPos\x10\xac\x06\x12\n\n\x05LPush\x10\xad\x06\x12\x0b\n\x06LPushX\x10\xae\x06\x12\x0b\n\x06LRange\x10\xaf\x06\x12\t\n\x04LRem\x10\xb0\x06\x12\t\n\x04LSet\x10\xb1\x06\x12\n\n\x05LTrim\x10\xb2\x06\x12\t\n\x04RPop\x10\xb3\x06\x12\x0e\n\tRPopLPush\x10\xb4\x06\x12\n\n\x05RPush\x10\xb5\x06\x12\x0b\n\x06RPushX\x10\xb6\x06\x12\x0f\n\nPSubscribe\x10\x85\x07\x12\x0c\n\x07Publish\x10\x86\x07\x12\x13\n\x0ePubSubChannels\x10\x87\x07\x12\x11\n\x0cPubSubNumPat\x10\x88\x07\x12\x11\n\x0cPubSubNumSub\x10\x89\x07\x12\x18\n\x13PubSubShardChannels\x10\x8a\x07\x12\x16\n\x11PubSubShardNumSub\x10\x8b\x07\x12\x11\n\x0cPUnsubscribe\x10\x8c\x07\x12\r\n\x08SPublish\x10\x8d\x07\x12\x0f\n\nSSubscribe\x10\x8e\x07\x12\x0e\n\tSubscribe\x10\x8f\x07\x12\x11\n\x0cSUnsubscribe\x10\x90\x07\x12\x10\n\x0bUnsubscribe\x10\x91\x07\x12\x16\n\x11SubscribeBlocking\x10\x92\x07\x12\x18\n\x13UnsubscribeBlocking\x10\x93\x07\x12\x17\n\x12PSubscribeBlocking\x10\x94\x07\x12\x19\n\x14PUnsubscribeBlocking\x10\x95\x07\x12\x17\n\x12SSubscribeBlocking\x10\x96\x07\x12\x19\n\x14SUnsubscribeBlocking\x10\x97\x07\x12\x15\n\x10GetSubscriptions\x10\x98\x07\x12\t\n\x04\x45val\x10\xe9\x07\x12\x11\n\x0c\x45valReadOnly\x10\xea\x07\x12\x0c\n\x07\x45valSha\x10\xeb\x07\x12\x14\n\x0f\x45valShaReadOnly\x10\xec\x07\x12\n\n\x05\x46\x43\x61ll\x10\xed\x07\x12\x12\n\rFCallReadOnly\x10\xee\x07\x12\x13\n\x0e\x46unctionDelete\x10\xef\x07\x12\x11\n\x0c\x46unctionDump\x10\xf0\x07\x12\x12\n\rFunctionFlush\x10\xf1\x07\x12\x11\n\x0c\x46unctionKill\x10\xf2\x07\x12\x11\n\x0c\x46unctionList\x10\xf3\x07\x12\x11\n\x0c\x46unctionLoad\x10\xf4\x07\x12\x14\n\x0f\x46unctionRestore\x10\xf5\x07\x12\x12\n\rFunctionStats\x10\xf6\x07\x12\x10\n\x0bScriptDebug\x10\xf7\x07\x12\x11\n\x0cScriptExists\x10\xf8\x07\x12\x10\n\x0bScriptFlush\x10\xf9\x07\x12\x0f\n\nScriptKill\x10\xfa\x07\x12\x0f\n\nScriptLoad\x10\xfb\x07\x12\x0f\n\nScriptShow\x10\xfc\x07\x12\x0b\n\x06\x41\x63lCat\x10\xcd\x08\x12\x0f\n\nAclDelUser\x10\xce\x08\x12\x0e\n\tAclDryRun\x10\xcf\x08\x12\x0f\n\nAclGenPass\x10\xd0\x08\x12\x0f\n\nAclGetUser\x10\xd1\x08\x12\x0c\n\x07\x41\x63lList\x10\xd2\x08\x12\x0c\n\x07\x41\x63lLoad\x10\xd3\x08\x12\x0b\n\x06\x41\x63lLog\x10\xd4\x08\x12\x0c\n\x07\x41\x63lSave\x10\xd5\x08\x12\x0f\n\nAclSetSser\x10\xd6\x08\x12\r\n\x08\x41\x63lUsers\x10\xd7\x08\x12\x0e\n\tAclWhoami\x10\xd8\x08\x12\x11\n\x0c\x42gRewriteAof\x10\xd9\x08\x12\x0b\n\x06\x42gSave\x10\xda\x08\x12\r\n\x08\x43ommand_\x10\xdb\x08\x12\x11\n\x0c\x43ommandCount\x10\xdc\x08\x12\x10\n\x0b\x43ommandDocs\x10\xdd\x08\x12\x13\n\x0e\x43ommandGetKeys\x10\xde\x08\x12\x1b\n\x16\x43ommandGetKeysAndFlags\x10\xdf\x08\x12\x10\n\x0b\x43ommandInfo\x10\xe0\x08\x12\x10\n\x0b\x43ommandList\x10\xe1\x08\x12\x0e\n\tConfigGet\x10\xe2\x08\x12\x14\n\x0f\x43onfigResetStat\x10\xe3\x08\x12\x12\n\rConfigRewrite\x10\xe4\x08\x12\x0e\n\tConfigSet\x10\xe5\x08\x12\x0b\n\x06\x44\x42Size\x10\xe6\x08\x12\r\n\x08\x46\x61ilOver\x10\xe7\x08\x12\r\n\x08\x46lushAll\x10\xe8\x08\x12\x0c\n\x07\x46lushDB\x10\xe9\x08\x12\t\n\x04Info\x10\xea\x08\x12\r\n\x08LastSave\x10\xeb\x08\x12\x12\n\rLatencyDoctor\x10\xec\x08\x12\x11\n\x0cLatencyGraph\x10\xed\x08\x12\x15\n\x10LatencyHistogram\x10\xee\x08\x12\x13\n\x0eLatencyHistory\x10\xef\x08\x12\x12\n\rLatencyLatest\x10\xf0\x08\x12\x11\n\x0cLatencyReset\x10\xf1\x08\x12\x0b\n\x06Lolwut\x10\xf2\x08\x12\x11\n\x0cMemoryDoctor\x10\xf3\x08\x12\x16\n\x11MemoryMallocStats\x10\xf4\x08\x12\x10\n\x0bMemoryPurge\x10\xf5\x08\x12\x10\n\x0bMemoryStats\x10\xf6\x08\x12\x10\n\x0bMemoryUsage\x10\xf7\x08\x12\x0f\n\nModuleList\x10\xf8\x08\x12\x0f\n\nModuleLoad\x10\xf9\x08\x12\x11\n\x0cModuleLoadEx\x10\xfa\x08\x12\x11\n\x0cModuleUnload\x10\xfb\x08\x12\x0c\n\x07Monitor\x10\xfc\x08\x12\n\n\x05PSync\x10\xfd\x08\x12\r\n\x08ReplConf\x10\xfe\x08\x12\x0e\n\tReplicaOf\x10\xff\x08\x12\x12\n\rRestoreAsking\x10\x80\t\x12\t\n\x04Role\x10\x81\t\x12\t\n\x04Save\x10\x82\t\x12\r\n\x08ShutDown\x10\x83\t\x12\x0c\n\x07SlaveOf\x10\x84\t\x12\x0f\n\nSlowLogGet\x10\x85\t\x12\x0f\n\nSlowLogLen\x10\x86\t\x12\x11\n\x0cSlowLogReset\x10\x87\t\x12\x0b\n\x06SwapDb\x10\x88\t\x12\t\n\x04Sync\x10\x89\t\x12\t\n\x04Time\x10\x8a\t\x12\t\n\x04SAdd\x10\xb1\t\x12\n\n\x05SCard\x10\xb2\t\x12\n\n\x05SDiff\x10\xb3\t\x12\x0f\n\nSDiffStore\x10\xb4\t\x12\x0b\n\x06SInter\x10\xb5\t\x12\x0f\n\nSInterCard\x10\xb6\t\x12\x10\n\x0bSInterStore\x10\xb7\t\x12\x0e\n\tSIsMember\x10\xb8\t\x12\r\n\x08SMembers\x10\xb9\t\x12\x0f\n\nSMIsMember\x10\xba\t\x12\n\n\x05SMove\x10\xbb\t\x12\t\n\x04SPop\x10\xbc\t\x12\x10\n\x0bSRandMember\x10\xbd\t\x12\t\n\x04SRem\x10\xbe\t\x12\n\n\x05SScan\x10\xbf\t\x12\x0b\n\x06SUnion\x10\xc0\t\x12\x10\n\x0bSUnionStore\x10\xc1\t\x12\x0b\n\x06\x42ZMPop\x10\x95\n\x12\r\n\x08\x42ZPopMax\x10\x96\n\x12\r\n\x08\x42ZPopMin\x10\x97\n\x12\t\n\x04ZAdd\x10\x98\n\x12\n\n\x05ZCard\x10\x99\n\x12\x0b\n\x06ZCount\x10\x9a\n\x12\n\n\x05ZDiff\x10\x9b\n\x12\x0f\n\nZDiffStore\x10\x9c\n\x12\x0c\n\x07ZIncrBy\x10\x9d\n\x12\x0b\n\x06ZInter\x10\x9e\n\x12\x0f\n\nZInterCard\x10\x9f\n\x12\x10\n\x0bZInterStore\x10\xa0\n\x12\x0e\n\tZLexCount\x10\xa1\n\x12\n\n\x05ZMPop\x10\xa2\n\x12\x0c\n\x07ZMScore\x10\xa3\n\x12\x0c\n\x07ZPopMax\x10\xa4\n\x12\x0c\n\x07ZPopMin\x10\xa5\n\x12\x10\n\x0bZRandMember\x10\xa6\n\x12\x0b\n\x06ZRange\x10\xa7\n\x12\x10\n\x0bZRangeByLex\x10\xa8\n\x12\x12\n\rZRangeByScore\x10\xa9\n\x12\x10\n\x0bZRangeStore\x10\xaa\n\x12\n\n\x05ZRank\x10\xab\n\x12\t\n\x04ZRem\x10\xac\n\x12\x13\n\x0eZRemRangeByLex\x10\xad\n\x12\x14\n\x0fZRemRangeByRank\x10\xae\n\x12\x15\n\x10ZRemRangeByScore\x10\xaf\n\x12\x0e\n\tZRevRange\x10\xb0\n\x12\x13\n\x0eZRevRangeByLex\x10\xb1\n\x12\x15\n\x10ZRevRangeByScore\x10\xb2\n\x12\r\n\x08ZRevRank\x10\xb3\n\x12\n\n\x05ZScan\x10\xb4\n\x12\x0b\n\x06ZScore\x10\xb5\n\x12\x0b\n\x06ZUnion\x10\xb6\n\x12\x10\n\x0bZUnionStore\x10\xb7\n\x12\t\n\x04XAck\x10\xf9\n\x12\t\n\x04XAdd\x10\xfa\n\x12\x0f\n\nXAutoClaim\x10\xfb\n\x12\x0b\n\x06XClaim\x10\xfc\n\x12\t\n\x04XDel\x10\xfd\n\x12\x11\n\x0cXGroupCreate\x10\xfe\n\x12\x19\n\x14XGroupCreateConsumer\x10\xff\n\x12\x16\n\x11XGroupDelConsumer\x10\x80\x0b\x12\x12\n\rXGroupDestroy\x10\x81\x0b\x12\x10\n\x0bXGroupSetId\x10\x82\x0b\x12\x13\n\x0eXInfoConsumers\x10\x83\x0b\x12\x10\n\x0bXInfoGroups\x10\x84\x0b\x12\x10\n\x0bXInfoStream\x10\x85\x0b\x12\t\n\x04XLen\x10\x86\x0b\x12\r\n\x08XPending\x10\x87\x0b\x12\x0b\n\x06XRange\x10\x88\x0b\x12\n\n\x05XRead\x10\x89\x0b\x12\x0f\n\nXReadGroup\x10\x8a\x0b\x12\x0e\n\tXRevRange\x10\x8b\x0b\x12\x0b\n\x06XSetId\x10\x8c\x0b\x12\n\n\x05XTrim\x10\x8d\x0b\x12\x0b\n\x06\x41ppend\x10\xdd\x0b\x12\t\n\x04\x44\x65\x63r\x10\xde\x0b\x12\x0b\n\x06\x44\x65\x63rBy\x10\xdf\x0b\x12\x08\n\x03Get\x10\xe0\x0b\x12\x0b\n\x06GetDel\x10\xe1\x0b\x12\n\n\x05GetEx\x10\xe2\x0b\x12\r\n\x08GetRange\x10\xe3\x0b\x12\x0b\n\x06GetSet\x10\xe4\x0b\x12\t\n\x04Incr\x10\xe5\x0b\x12\x0b\n\x06IncrBy\x10\xe6\x0b\x12\x10\n\x0bIncrByFloat\x10\xe7\x0b\x12\x08\n\x03LCS\x10\xe8\x0b\x12\t\n\x04MGet\x10\xe9\x0b\x12\t\n\x04MSet\x10\xea\x0b\x12\x0b\n\x06MSetNX\x10\xeb\x0b\x12\x0b\n\x06PSetEx\x10\xec\x0b\x12\x08\n\x03Set\x10\xed\x0b\x12\n\n\x05SetEx\x10\xee\x0b\x12\n\n\x05SetNX\x10\xef\x0b\x12\r\n\x08SetRange\x10\xf0\x0b\x12\x0b\n\x06Strlen\x10\xf1\x0b\x12\x0b\n\x06Substr\x10\xf2\x0b\x12\x0c\n\x07\x44iscard\x10\xc1\x0c\x12\t\n\x04\x45xec\x10\xc2\x0c\x12\n\n\x05Multi\x10\xc3\x0c\x12\x0c\n\x07UnWatch\x10\xc4\x0c\x12\n\n\x05Watch\x10\xc5\x0c\x12\x12\n\rJsonArrAppend\x10\xd1\x0f\x12\x11\n\x0cJsonArrIndex\x10\xd2\x0f\x12\x12\n\rJsonArrInsert\x10\xd3\x0f\x12\x0f\n\nJsonArrLen\x10\xd4\x0f\x12\x0f\n\nJsonArrPop\x10\xd5\x0f\x12\x10\n\x0bJsonArrTrim\x10\xd6\x0f\x12\x0e\n\tJsonClear\x10\xd7\x0f\x12\x0e\n\tJsonDebug\x10\xd8\x0f\x12\x0c\n\x07JsonDel\x10\xd9\x0f\x12\x0f\n\nJsonForget\x10\xda\x0f\x12\x0c\n\x07JsonGet\x10\xdb\x0f\x12\r\n\x08JsonMGet\x10\xdc\x0f\x12\x12\n\rJsonNumIncrBy\x10\xdd\x0f\x12\x12\n\rJsonNumMultBy\x10\xde\x0f\x12\x10\n\x0bJsonObjKeys\x10\xdf\x0f\x12\x0f\n\nJsonObjLen\x10\xe0\x0f\x12\r\n\x08JsonResp\x10\xe1\x0f\x12\x0c\n\x07JsonSet\x10\xe2\x0f\x12\x12\n\rJsonStrAppend\x10\xe3\x0f\x12\x0f\n\nJsonStrLen\x10\xe4\x0f\x12\x0f\n\nJsonToggle\x10\xe5\x0f\x12\r\n\x08JsonType\x10\xe6\x0f\x12\x0b\n\x06\x46tList\x10\xb5\x10\x12\x10\n\x0b\x46tAggregate\x10\xb6\x10\x12\x0f\n\nFtAliasAdd\x10\xb7\x10\x12\x0f\n\nFtAliasDel\x10\xb8\x10\x12\x10\n\x0b\x46tAliasList\x10\xb9\x10\x12\x12\n\rFtAliasUpdate\x10\xba\x10\x12\r\n\x08\x46tCreate\x10\xbb\x10\x12\x10\n\x0b\x46tDropIndex\x10\xbc\x10\x12\x0e\n\tFtExplain\x10\xbd\x10\x12\x11\n\x0c\x46tExplainCli\x10\xbe\x10\x12\x0b\n\x06\x46tInfo\x10\xbf\x10\x12\x0e\n\tFtProfile\x10\xc0\x10\x12\r\n\x08\x46tSearch\x10\xc1\x10\x62\x06proto3" - -pool = Google::Protobuf::DescriptorPool.generated_pool - -begin - pool.add_serialized_file(descriptor_data) -rescue TypeError - # Compatibility code: will be removed in the next major version. - require 'google/protobuf/descriptor_pb' - parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data) - parsed.clear_dependency - serialized = parsed.class.encode(parsed) - file = pool.add_serialized_file(serialized) - warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}" - imports = [ - ] - imports.each do |type_name, expected_filename| - import_file = pool.lookup(type_name).file_descriptor - if import_file.name != expected_filename - warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}" - end - end - warn "Each proto file must use a consistent fully-qualified name." - warn "This will become an error in the next major version." -end - -module CommandRequest - SlotIdRoute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.SlotIdRoute").msgclass - SlotKeyRoute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.SlotKeyRoute").msgclass - ByAddressRoute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.ByAddressRoute").msgclass - Routes = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.Routes").msgclass - Command = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.Command").msgclass - Command::ArgsArray = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.Command.ArgsArray").msgclass - ScriptInvocationPointers = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.ScriptInvocationPointers").msgclass - ScriptInvocation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.ScriptInvocation").msgclass - Batch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.Batch").msgclass - ClusterScan = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.ClusterScan").msgclass - UpdateConnectionPassword = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.UpdateConnectionPassword").msgclass - RefreshIamToken = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.RefreshIamToken").msgclass - CommandRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.CommandRequest").msgclass - SimpleRoutes = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.SimpleRoutes").enummodule - SlotTypes = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.SlotTypes").enummodule - RequestType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("command_request.RequestType").enummodule -end diff --git a/lib/valkey/protobuf/connection_request_pb.rb b/lib/valkey/protobuf/connection_request_pb.rb deleted file mode 100644 index efd2f11..0000000 --- a/lib/valkey/protobuf/connection_request_pb.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: connection_request.proto - -require 'google/protobuf' - - -descriptor_data = "\n\x18\x63onnection_request.proto\x12\x12\x63onnection_request\")\n\x0bNodeAddress\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\"\x8e\x01\n\x12\x41uthenticationInfo\x12\x10\n\x08password\x18\x01 \x01(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12@\n\x0fiam_credentials\x18\x03 \x01(\x0b\x32\".connection_request.IamCredentialsH\x00\x88\x01\x01\x42\x12\n\x10_iam_credentials\"\xb1\x01\n\x0eIamCredentials\x12\x14\n\x0c\x63luster_name\x18\x01 \x01(\t\x12\x0e\n\x06region\x18\x02 \x01(\t\x12\x35\n\x0cservice_type\x18\x03 \x01(\x0e\x32\x1f.connection_request.ServiceType\x12%\n\x18refresh_interval_seconds\x18\x04 \x01(\rH\x00\x88\x01\x01\x42\x1b\n\x19_refresh_interval_seconds\"7\n\x1cPeriodicChecksManualInterval\x12\x17\n\x0f\x64uration_in_sec\x18\x01 \x01(\r\"\x18\n\x16PeriodicChecksDisabled\"\xb1\x01\n\x11\x43ompressionConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x37\n\x07\x62\x61\x63kend\x18\x02 \x01(\x0e\x32&.connection_request.CompressionBackend\x12\x1e\n\x11\x63ompression_level\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x14min_compression_size\x18\x04 \x01(\rB\x14\n\x12_compression_level\"8\n\x18PubSubChannelsOrPatterns\x12\x1c\n\x14\x63hannels_or_patterns\x18\x01 \x03(\x0c\"\xf1\x01\n\x13PubSubSubscriptions\x12k\n\x1c\x63hannels_or_patterns_by_type\x18\x01 \x03(\x0b\x32\x45.connection_request.PubSubSubscriptions.ChannelsOrPatternsByTypeEntry\x1am\n\x1d\x43hannelsOrPatternsByTypeEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12;\n\x05value\x18\x02 \x01(\x0b\x32,.connection_request.PubSubChannelsOrPatterns:\x02\x38\x01\"\x9c\t\n\x11\x43onnectionRequest\x12\x32\n\taddresses\x18\x01 \x03(\x0b\x32\x1f.connection_request.NodeAddress\x12-\n\x08tls_mode\x18\x02 \x01(\x0e\x32\x1b.connection_request.TlsMode\x12\x1c\n\x14\x63luster_mode_enabled\x18\x03 \x01(\x08\x12\x17\n\x0frequest_timeout\x18\x04 \x01(\r\x12/\n\tread_from\x18\x05 \x01(\x0e\x32\x1c.connection_request.ReadFrom\x12N\n\x19\x63onnection_retry_strategy\x18\x06 \x01(\x0b\x32+.connection_request.ConnectionRetryStrategy\x12\x43\n\x13\x61uthentication_info\x18\x07 \x01(\x0b\x32&.connection_request.AuthenticationInfo\x12\x13\n\x0b\x64\x61tabase_id\x18\x08 \x01(\r\x12\x35\n\x08protocol\x18\t \x01(\x0e\x32#.connection_request.ProtocolVersion\x12\x13\n\x0b\x63lient_name\x18\n \x01(\t\x12[\n\x1fperiodic_checks_manual_interval\x18\x0b \x01(\x0b\x32\x30.connection_request.PeriodicChecksManualIntervalH\x00\x12N\n\x18periodic_checks_disabled\x18\x0c \x01(\x0b\x32*.connection_request.PeriodicChecksDisabledH\x00\x12\x45\n\x14pubsub_subscriptions\x18\r \x01(\x0b\x32\'.connection_request.PubSubSubscriptions\x12\x1f\n\x17inflight_requests_limit\x18\x0e \x01(\r\x12\x11\n\tclient_az\x18\x0f \x01(\t\x12\x1a\n\x12\x63onnection_timeout\x18\x10 \x01(\r\x12\x14\n\x0clazy_connect\x18\x11 \x01(\x08\x12+\n#refresh_topology_from_initial_nodes\x18\x12 \x01(\x08\x12\x10\n\x08lib_name\x18\x13 \x01(\t\x12\x12\n\nroot_certs\x18\x14 \x03(\x0c\x12\x46\n\x12\x63ompression_config\x18\x15 \x01(\x0b\x32%.connection_request.CompressionConfigH\x01\x88\x01\x01\x12\x13\n\x0b\x63lient_cert\x18\x16 \x01(\x0c\x12\x12\n\nclient_key\x18\x17 \x01(\x0c\x12\x18\n\x0btcp_nodelay\x18\x18 \x01(\x08H\x02\x88\x01\x01\x12.\n!pubsub_reconciliation_interval_ms\x18\x19 \x01(\rH\x03\x88\x01\x01\x42\x11\n\x0fperiodic_checksB\x15\n\x13_compression_configB\x0e\n\x0c_tcp_nodelayB$\n\"_pubsub_reconciliation_interval_ms\"\x8b\x01\n\x17\x43onnectionRetryStrategy\x12\x19\n\x11number_of_retries\x18\x01 \x01(\r\x12\x0e\n\x06\x66\x61\x63tor\x18\x02 \x01(\r\x12\x15\n\rexponent_base\x18\x03 \x01(\r\x12\x1b\n\x0ejitter_percent\x18\x04 \x01(\rH\x00\x88\x01\x01\x42\x11\n\x0f_jitter_percent*o\n\x08ReadFrom\x12\x0b\n\x07Primary\x10\x00\x12\x11\n\rPreferReplica\x10\x01\x12\x11\n\rLowestLatency\x10\x02\x12\x0e\n\nAZAffinity\x10\x03\x12 \n\x1c\x41ZAffinityReplicasAndPrimary\x10\x04*4\n\x07TlsMode\x12\t\n\x05NoTls\x10\x00\x12\r\n\tSecureTls\x10\x01\x12\x0f\n\x0bInsecureTls\x10\x02*,\n\x0bServiceType\x12\x0f\n\x0b\x45LASTICACHE\x10\x00\x12\x0c\n\x08MEMORYDB\x10\x01*\'\n\x0fProtocolVersion\x12\t\n\x05RESP3\x10\x00\x12\t\n\x05RESP2\x10\x01*8\n\x11PubSubChannelType\x12\t\n\x05\x45xact\x10\x00\x12\x0b\n\x07Pattern\x10\x01\x12\x0b\n\x07Sharded\x10\x02*\'\n\x12\x43ompressionBackend\x12\x08\n\x04ZSTD\x10\x00\x12\x07\n\x03LZ4\x10\x01\x62\x06proto3" - -pool = Google::Protobuf::DescriptorPool.generated_pool - -begin - pool.add_serialized_file(descriptor_data) -rescue TypeError - # Compatibility code: will be removed in the next major version. - require 'google/protobuf/descriptor_pb' - parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data) - parsed.clear_dependency - serialized = parsed.class.encode(parsed) - file = pool.add_serialized_file(serialized) - warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}" - imports = [ - ] - imports.each do |type_name, expected_filename| - import_file = pool.lookup(type_name).file_descriptor - if import_file.name != expected_filename - warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}" - end - end - warn "Each proto file must use a consistent fully-qualified name." - warn "This will become an error in the next major version." -end - -module ConnectionRequest - NodeAddress = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.NodeAddress").msgclass - AuthenticationInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.AuthenticationInfo").msgclass - IamCredentials = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.IamCredentials").msgclass - PeriodicChecksManualInterval = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.PeriodicChecksManualInterval").msgclass - PeriodicChecksDisabled = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.PeriodicChecksDisabled").msgclass - CompressionConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.CompressionConfig").msgclass - PubSubChannelsOrPatterns = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.PubSubChannelsOrPatterns").msgclass - PubSubSubscriptions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.PubSubSubscriptions").msgclass - ConnectionRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.ConnectionRequest").msgclass - ConnectionRetryStrategy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.ConnectionRetryStrategy").msgclass - ReadFrom = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.ReadFrom").enummodule - TlsMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.TlsMode").enummodule - ServiceType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.ServiceType").enummodule - ProtocolVersion = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.ProtocolVersion").enummodule - PubSubChannelType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.PubSubChannelType").enummodule - CompressionBackend = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("connection_request.CompressionBackend").enummodule -end diff --git a/lib/valkey/protobuf/response_pb.rb b/lib/valkey/protobuf/response_pb.rb deleted file mode 100644 index 25a4be2..0000000 --- a/lib/valkey/protobuf/response_pb.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: response.proto - -require 'google/protobuf' - - -descriptor_data = "\n\x0eresponse.proto\x12\x08response\"I\n\x0cRequestError\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x1a.response.RequestErrorType\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x83\x02\n\x08Response\x12\x14\n\x0c\x63\x61llback_idx\x18\x01 \x01(\r\x12\x16\n\x0cresp_pointer\x18\x02 \x01(\x04H\x00\x12\x37\n\x11\x63onstant_response\x18\x03 \x01(\x0e\x32\x1a.response.ConstantResponseH\x00\x12/\n\rrequest_error\x18\x04 \x01(\x0b\x32\x16.response.RequestErrorH\x00\x12\x17\n\rclosing_error\x18\x05 \x01(\tH\x00\x12\x0f\n\x07is_push\x18\x06 \x01(\x08\x12\x1a\n\rroot_span_ptr\x18\x07 \x01(\x04H\x01\x88\x01\x01\x42\x07\n\x05valueB\x10\n\x0e_root_span_ptr*O\n\x10RequestErrorType\x12\x0f\n\x0bUnspecified\x10\x00\x12\r\n\tExecAbort\x10\x01\x12\x0b\n\x07Timeout\x10\x02\x12\x0e\n\nDisconnect\x10\x03*\x1a\n\x10\x43onstantResponse\x12\x06\n\x02OK\x10\x00\x62\x06proto3" - -pool = Google::Protobuf::DescriptorPool.generated_pool - -begin - pool.add_serialized_file(descriptor_data) -rescue TypeError - # Compatibility code: will be removed in the next major version. - require 'google/protobuf/descriptor_pb' - parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data) - parsed.clear_dependency - serialized = parsed.class.encode(parsed) - file = pool.add_serialized_file(serialized) - warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}" - imports = [ - ] - imports.each do |type_name, expected_filename| - import_file = pool.lookup(type_name).file_descriptor - if import_file.name != expected_filename - warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}" - end - end - warn "Each proto file must use a consistent fully-qualified name." - warn "This will become an error in the next major version." -end - -module Response - RequestError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("response.RequestError").msgclass - Response = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("response.Response").msgclass - RequestErrorType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("response.RequestErrorType").enummodule - ConstantResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("response.ConstantResponse").enummodule -end diff --git a/valkey.gemspec b/valkey.gemspec index e9326de..a4323e5 100644 --- a/valkey.gemspec +++ b/valkey.gemspec @@ -29,5 +29,4 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.add_dependency "ffi", "~> 1.17.0" - spec.add_dependency "google-protobuf", "~> 3.23", ">= 3.23.4" end