diff --git a/clients/ember-go/ember.go b/clients/ember-go/ember.go index 7c5ec4dd..1a3994ff 100644 --- a/clients/ember-go/ember.go +++ b/clients/ember-go/ember.go @@ -455,3 +455,180 @@ func (c *Client) DBSize(ctx context.Context) (int64, error) { } return resp.Value, nil } + +// Echo sends a message and returns it back. +func (c *Client) Echo(ctx context.Context, message string) (string, error) { + resp, err := c.rpc.Echo(c.ctx(ctx), &pb.EchoRequest{Message: message}) + if err != nil { + return "", err + } + return resp.Message, nil +} + +// Decr decrements a key by 1 and returns the new value. +func (c *Client) Decr(ctx context.Context, key string) (int64, error) { + resp, err := c.rpc.Decr(c.ctx(ctx), &pb.DecrRequest{Key: key}) + if err != nil { + return 0, err + } + return resp.Value, nil +} + +// Unlink removes keys asynchronously (background deallocation). Returns the +// number of keys removed. +func (c *Client) Unlink(ctx context.Context, keys ...string) (int64, error) { + resp, err := c.rpc.Unlink(c.ctx(ctx), &pb.UnlinkRequest{Keys: keys}) + if err != nil { + return 0, err + } + return resp.Deleted, nil +} + +// BgSave triggers a background snapshot. +func (c *Client) BgSave(ctx context.Context) (string, error) { + resp, err := c.rpc.BgSave(c.ctx(ctx), &pb.BgSaveRequest{}) + if err != nil { + return "", err + } + return resp.Status, nil +} + +// BgRewriteAof triggers a background AOF rewrite. +func (c *Client) BgRewriteAof(ctx context.Context) (string, error) { + resp, err := c.rpc.BgRewriteAof(c.ctx(ctx), &pb.BgRewriteAofRequest{}) + if err != nil { + return "", err + } + return resp.Status, nil +} + +// SlowLogEntry represents a single entry in the slow log. +type SlowLogEntry struct { + ID uint64 + TimestampUnix uint64 + DurationMicro uint64 + Command string +} + +// SlowLogGet returns slow log entries. +func (c *Client) SlowLogGet(ctx context.Context, count *uint32) ([]SlowLogEntry, error) { + req := &pb.SlowLogGetRequest{} + if count != nil { + req.Count = count + } + resp, err := c.rpc.SlowLogGet(c.ctx(ctx), req) + if err != nil { + return nil, err + } + entries := make([]SlowLogEntry, len(resp.Entries)) + for i, e := range resp.Entries { + entries[i] = SlowLogEntry{ + ID: e.Id, + TimestampUnix: e.TimestampUnix, + DurationMicro: e.DurationMicros, + Command: e.Command, + } + } + return entries, nil +} + +// SlowLogLen returns the number of slow log entries. +func (c *Client) SlowLogLen(ctx context.Context) (int64, error) { + resp, err := c.rpc.SlowLogLen(c.ctx(ctx), &pb.SlowLogLenRequest{}) + if err != nil { + return 0, err + } + return resp.Value, nil +} + +// SlowLogReset clears the slow log. +func (c *Client) SlowLogReset(ctx context.Context) error { + _, err := c.rpc.SlowLogReset(c.ctx(ctx), &pb.SlowLogResetRequest{}) + return err +} + +// Publish sends a message to a channel. Returns the number of subscribers +// that received the message. +func (c *Client) Publish(ctx context.Context, channel string, message []byte) (int64, error) { + resp, err := c.rpc.Publish(c.ctx(ctx), &pb.PublishRequest{ + Channel: channel, + Message: message, + }) + if err != nil { + return 0, err + } + return resp.Value, nil +} + +// SubscribeEvent represents a message received on a subscription. +type SubscribeEvent struct { + Kind string // "message" or "pmessage" + Channel string + Data []byte + Pattern string // only set for pmessage +} + +// Subscribe opens a server-streaming subscription for the given channels +// and/or patterns. Returns a channel that yields events until the context +// is cancelled or the stream ends. +func (c *Client) Subscribe(ctx context.Context, channels []string, patterns []string) (<-chan SubscribeEvent, error) { + stream, err := c.rpc.Subscribe(c.ctx(ctx), &pb.SubscribeRequest{ + Channels: channels, + Patterns: patterns, + }) + if err != nil { + return nil, err + } + + ch := make(chan SubscribeEvent, 64) + go func() { + defer close(ch) + for { + evt, err := stream.Recv() + if err != nil { + return + } + se := SubscribeEvent{ + Kind: evt.Kind, + Channel: evt.Channel, + Data: evt.Data, + } + if evt.Pattern != nil { + se.Pattern = *evt.Pattern + } + select { + case ch <- se: + case <-ctx.Done(): + return + } + } + }() + + return ch, nil +} + +// PubSubChannels returns active channel names, optionally filtered by pattern. +func (c *Client) PubSubChannels(ctx context.Context, pattern *string) ([]string, error) { + req := &pb.PubSubChannelsRequest{} + if pattern != nil { + req.Pattern = pattern + } + resp, err := c.rpc.PubSubChannels(c.ctx(ctx), req) + if err != nil { + return nil, err + } + return resp.Keys, nil +} + +// PubSubNumSub returns subscriber counts for the given channels. +func (c *Client) PubSubNumSub(ctx context.Context, channels ...string) (map[string]int64, error) { + resp, err := c.rpc.PubSubNumSub(c.ctx(ctx), &pb.PubSubNumSubRequest{Channels: channels}) + if err != nil { + return nil, err + } + result := make(map[string]int64, len(resp.Counts)) + for _, c := range resp.Counts { + result[c.Channel] = c.Count + } + return result, nil +} diff --git a/clients/ember-go/proto/ember/v1/ember.pb.go b/clients/ember-go/proto/ember/v1/ember.pb.go index 55f2dcc0..823da814 100644 --- a/clients/ember-go/proto/ember/v1/ember.pb.go +++ b/clients/ember-go/proto/ember/v1/ember.pb.go @@ -4503,6 +4503,876 @@ func (x *InfoResponse) GetInfo() string { return "" } +type EchoRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EchoRequest) Reset() { + *x = EchoRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EchoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EchoRequest) ProtoMessage() {} + +func (x *EchoRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[88] + 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 EchoRequest.ProtoReflect.Descriptor instead. +func (*EchoRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{88} +} + +func (x *EchoRequest) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type EchoResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EchoResponse) Reset() { + *x = EchoResponse{} + mi := &file_ember_v1_ember_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EchoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EchoResponse) ProtoMessage() {} + +func (x *EchoResponse) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[89] + 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 EchoResponse.ProtoReflect.Descriptor instead. +func (*EchoResponse) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{89} +} + +func (x *EchoResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type DecrRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DecrRequest) Reset() { + *x = DecrRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DecrRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DecrRequest) ProtoMessage() {} + +func (x *DecrRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[90] + 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 DecrRequest.ProtoReflect.Descriptor instead. +func (*DecrRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{90} +} + +func (x *DecrRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +type UnlinkRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UnlinkRequest) Reset() { + *x = UnlinkRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UnlinkRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlinkRequest) ProtoMessage() {} + +func (x *UnlinkRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[91] + 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 UnlinkRequest.ProtoReflect.Descriptor instead. +func (*UnlinkRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{91} +} + +func (x *UnlinkRequest) GetKeys() []string { + if x != nil { + return x.Keys + } + return nil +} + +type BgSaveRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BgSaveRequest) Reset() { + *x = BgSaveRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BgSaveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BgSaveRequest) ProtoMessage() {} + +func (x *BgSaveRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[92] + 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 BgSaveRequest.ProtoReflect.Descriptor instead. +func (*BgSaveRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{92} +} + +type BgRewriteAofRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BgRewriteAofRequest) Reset() { + *x = BgRewriteAofRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BgRewriteAofRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BgRewriteAofRequest) ProtoMessage() {} + +func (x *BgRewriteAofRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[93] + 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 BgRewriteAofRequest.ProtoReflect.Descriptor instead. +func (*BgRewriteAofRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{93} +} + +type SlowLogGetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Count *uint32 `protobuf:"varint,1,opt,name=count,proto3,oneof" json:"count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SlowLogGetRequest) Reset() { + *x = SlowLogGetRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SlowLogGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SlowLogGetRequest) ProtoMessage() {} + +func (x *SlowLogGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[94] + 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 SlowLogGetRequest.ProtoReflect.Descriptor instead. +func (*SlowLogGetRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{94} +} + +func (x *SlowLogGetRequest) GetCount() uint32 { + if x != nil && x.Count != nil { + return *x.Count + } + return 0 +} + +type SlowLogGetResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Entries []*SlowLogEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SlowLogGetResponse) Reset() { + *x = SlowLogGetResponse{} + mi := &file_ember_v1_ember_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SlowLogGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SlowLogGetResponse) ProtoMessage() {} + +func (x *SlowLogGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[95] + 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 SlowLogGetResponse.ProtoReflect.Descriptor instead. +func (*SlowLogGetResponse) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{95} +} + +func (x *SlowLogGetResponse) GetEntries() []*SlowLogEntry { + if x != nil { + return x.Entries + } + return nil +} + +type SlowLogEntry struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + TimestampUnix uint64 `protobuf:"varint,2,opt,name=timestamp_unix,json=timestampUnix,proto3" json:"timestamp_unix,omitempty"` + DurationMicros uint64 `protobuf:"varint,3,opt,name=duration_micros,json=durationMicros,proto3" json:"duration_micros,omitempty"` + Command string `protobuf:"bytes,4,opt,name=command,proto3" json:"command,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SlowLogEntry) Reset() { + *x = SlowLogEntry{} + mi := &file_ember_v1_ember_proto_msgTypes[96] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SlowLogEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SlowLogEntry) ProtoMessage() {} + +func (x *SlowLogEntry) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[96] + 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 SlowLogEntry.ProtoReflect.Descriptor instead. +func (*SlowLogEntry) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{96} +} + +func (x *SlowLogEntry) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *SlowLogEntry) GetTimestampUnix() uint64 { + if x != nil { + return x.TimestampUnix + } + return 0 +} + +func (x *SlowLogEntry) GetDurationMicros() uint64 { + if x != nil { + return x.DurationMicros + } + return 0 +} + +func (x *SlowLogEntry) GetCommand() string { + if x != nil { + return x.Command + } + return "" +} + +type SlowLogLenRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SlowLogLenRequest) Reset() { + *x = SlowLogLenRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SlowLogLenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SlowLogLenRequest) ProtoMessage() {} + +func (x *SlowLogLenRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[97] + 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 SlowLogLenRequest.ProtoReflect.Descriptor instead. +func (*SlowLogLenRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{97} +} + +type SlowLogResetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SlowLogResetRequest) Reset() { + *x = SlowLogResetRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SlowLogResetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SlowLogResetRequest) ProtoMessage() {} + +func (x *SlowLogResetRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[98] + 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 SlowLogResetRequest.ProtoReflect.Descriptor instead. +func (*SlowLogResetRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{98} +} + +type PublishRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Channel string `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` + Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PublishRequest) Reset() { + *x = PublishRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PublishRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PublishRequest) ProtoMessage() {} + +func (x *PublishRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[99] + 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 PublishRequest.ProtoReflect.Descriptor instead. +func (*PublishRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{99} +} + +func (x *PublishRequest) GetChannel() string { + if x != nil { + return x.Channel + } + return "" +} + +func (x *PublishRequest) GetMessage() []byte { + if x != nil { + return x.Message + } + return nil +} + +type SubscribeRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Channels []string `protobuf:"bytes,1,rep,name=channels,proto3" json:"channels,omitempty"` + Patterns []string `protobuf:"bytes,2,rep,name=patterns,proto3" json:"patterns,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeRequest) Reset() { + *x = SubscribeRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeRequest) ProtoMessage() {} + +func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[100] + 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 SubscribeRequest.ProtoReflect.Descriptor instead. +func (*SubscribeRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{100} +} + +func (x *SubscribeRequest) GetChannels() []string { + if x != nil { + return x.Channels + } + return nil +} + +func (x *SubscribeRequest) GetPatterns() []string { + if x != nil { + return x.Patterns + } + return nil +} + +type SubscribeEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + // "message" for exact channel match, "pmessage" for pattern match. + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Channel string `protobuf:"bytes,2,opt,name=channel,proto3" json:"channel,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + // the pattern that matched (only set for pmessage). + Pattern *string `protobuf:"bytes,4,opt,name=pattern,proto3,oneof" json:"pattern,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeEvent) Reset() { + *x = SubscribeEvent{} + mi := &file_ember_v1_ember_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeEvent) ProtoMessage() {} + +func (x *SubscribeEvent) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[101] + 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 SubscribeEvent.ProtoReflect.Descriptor instead. +func (*SubscribeEvent) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{101} +} + +func (x *SubscribeEvent) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *SubscribeEvent) GetChannel() string { + if x != nil { + return x.Channel + } + return "" +} + +func (x *SubscribeEvent) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *SubscribeEvent) GetPattern() string { + if x != nil && x.Pattern != nil { + return *x.Pattern + } + return "" +} + +type PubSubChannelsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pattern *string `protobuf:"bytes,1,opt,name=pattern,proto3,oneof" json:"pattern,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PubSubChannelsRequest) Reset() { + *x = PubSubChannelsRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PubSubChannelsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PubSubChannelsRequest) ProtoMessage() {} + +func (x *PubSubChannelsRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[102] + 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 PubSubChannelsRequest.ProtoReflect.Descriptor instead. +func (*PubSubChannelsRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{102} +} + +func (x *PubSubChannelsRequest) GetPattern() string { + if x != nil && x.Pattern != nil { + return *x.Pattern + } + return "" +} + +type PubSubNumSubRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Channels []string `protobuf:"bytes,1,rep,name=channels,proto3" json:"channels,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PubSubNumSubRequest) Reset() { + *x = PubSubNumSubRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PubSubNumSubRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PubSubNumSubRequest) ProtoMessage() {} + +func (x *PubSubNumSubRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[103] + 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 PubSubNumSubRequest.ProtoReflect.Descriptor instead. +func (*PubSubNumSubRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{103} +} + +func (x *PubSubNumSubRequest) GetChannels() []string { + if x != nil { + return x.Channels + } + return nil +} + +type PubSubNumSubResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Counts []*ChannelCount `protobuf:"bytes,1,rep,name=counts,proto3" json:"counts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PubSubNumSubResponse) Reset() { + *x = PubSubNumSubResponse{} + mi := &file_ember_v1_ember_proto_msgTypes[104] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PubSubNumSubResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PubSubNumSubResponse) ProtoMessage() {} + +func (x *PubSubNumSubResponse) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[104] + 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 PubSubNumSubResponse.ProtoReflect.Descriptor instead. +func (*PubSubNumSubResponse) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{104} +} + +func (x *PubSubNumSubResponse) GetCounts() []*ChannelCount { + if x != nil { + return x.Counts + } + return nil +} + +type PubSubNumPatRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PubSubNumPatRequest) Reset() { + *x = PubSubNumPatRequest{} + mi := &file_ember_v1_ember_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PubSubNumPatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PubSubNumPatRequest) ProtoMessage() {} + +func (x *PubSubNumPatRequest) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[105] + 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 PubSubNumPatRequest.ProtoReflect.Descriptor instead. +func (*PubSubNumPatRequest) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{105} +} + +type ChannelCount struct { + state protoimpl.MessageState `protogen:"open.v1"` + Channel string `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` + Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChannelCount) Reset() { + *x = ChannelCount{} + mi := &file_ember_v1_ember_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChannelCount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelCount) ProtoMessage() {} + +func (x *ChannelCount) ProtoReflect() protoreflect.Message { + mi := &file_ember_v1_ember_proto_msgTypes[106] + 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 ChannelCount.ProtoReflect.Descriptor instead. +func (*ChannelCount) Descriptor() ([]byte, []int) { + return file_ember_v1_ember_proto_rawDescGZIP(), []int{106} +} + +func (x *ChannelCount) GetChannel() string { + if x != nil { + return x.Channel + } + return "" +} + +func (x *ChannelCount) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + type PipelineRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` @@ -4566,6 +5436,18 @@ type PipelineRequest struct { // *PipelineRequest_Keys // *PipelineRequest_Rename // *PipelineRequest_Scan + // *PipelineRequest_Echo + // *PipelineRequest_Decr + // *PipelineRequest_Unlink + // *PipelineRequest_Bgsave + // *PipelineRequest_Bgrewriteaof + // *PipelineRequest_SlowlogGet + // *PipelineRequest_SlowlogLen + // *PipelineRequest_SlowlogReset + // *PipelineRequest_Publish + // *PipelineRequest_PubsubChannels + // *PipelineRequest_PubsubNumsub + // *PipelineRequest_PubsubNumpat Command isPipelineRequest_Command `protobuf_oneof:"command"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -4573,7 +5455,7 @@ type PipelineRequest struct { func (x *PipelineRequest) Reset() { *x = PipelineRequest{} - mi := &file_ember_v1_ember_proto_msgTypes[88] + mi := &file_ember_v1_ember_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4585,7 +5467,7 @@ func (x *PipelineRequest) String() string { func (*PipelineRequest) ProtoMessage() {} func (x *PipelineRequest) ProtoReflect() protoreflect.Message { - mi := &file_ember_v1_ember_proto_msgTypes[88] + mi := &file_ember_v1_ember_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4598,7 +5480,7 @@ func (x *PipelineRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PipelineRequest.ProtoReflect.Descriptor instead. func (*PipelineRequest) Descriptor() ([]byte, []int) { - return file_ember_v1_ember_proto_rawDescGZIP(), []int{88} + return file_ember_v1_ember_proto_rawDescGZIP(), []int{107} } func (x *PipelineRequest) GetId() uint64 { @@ -5137,6 +6019,114 @@ func (x *PipelineRequest) GetScan() *ScanRequest { return nil } +func (x *PipelineRequest) GetEcho() *EchoRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_Echo); ok { + return x.Echo + } + } + return nil +} + +func (x *PipelineRequest) GetDecr() *DecrRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_Decr); ok { + return x.Decr + } + } + return nil +} + +func (x *PipelineRequest) GetUnlink() *UnlinkRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_Unlink); ok { + return x.Unlink + } + } + return nil +} + +func (x *PipelineRequest) GetBgsave() *BgSaveRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_Bgsave); ok { + return x.Bgsave + } + } + return nil +} + +func (x *PipelineRequest) GetBgrewriteaof() *BgRewriteAofRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_Bgrewriteaof); ok { + return x.Bgrewriteaof + } + } + return nil +} + +func (x *PipelineRequest) GetSlowlogGet() *SlowLogGetRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_SlowlogGet); ok { + return x.SlowlogGet + } + } + return nil +} + +func (x *PipelineRequest) GetSlowlogLen() *SlowLogLenRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_SlowlogLen); ok { + return x.SlowlogLen + } + } + return nil +} + +func (x *PipelineRequest) GetSlowlogReset() *SlowLogResetRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_SlowlogReset); ok { + return x.SlowlogReset + } + } + return nil +} + +func (x *PipelineRequest) GetPublish() *PublishRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_Publish); ok { + return x.Publish + } + } + return nil +} + +func (x *PipelineRequest) GetPubsubChannels() *PubSubChannelsRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_PubsubChannels); ok { + return x.PubsubChannels + } + } + return nil +} + +func (x *PipelineRequest) GetPubsubNumsub() *PubSubNumSubRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_PubsubNumsub); ok { + return x.PubsubNumsub + } + } + return nil +} + +func (x *PipelineRequest) GetPubsubNumpat() *PubSubNumPatRequest { + if x != nil { + if x, ok := x.Command.(*PipelineRequest_PubsubNumpat); ok { + return x.PubsubNumpat + } + } + return nil +} + type isPipelineRequest_Command interface { isPipelineRequest_Command() } @@ -5373,6 +6363,54 @@ type PipelineRequest_Scan struct { Scan *ScanRequest `protobuf:"bytes,59,opt,name=scan,proto3,oneof"` } +type PipelineRequest_Echo struct { + Echo *EchoRequest `protobuf:"bytes,60,opt,name=echo,proto3,oneof"` +} + +type PipelineRequest_Decr struct { + Decr *DecrRequest `protobuf:"bytes,61,opt,name=decr,proto3,oneof"` +} + +type PipelineRequest_Unlink struct { + Unlink *UnlinkRequest `protobuf:"bytes,62,opt,name=unlink,proto3,oneof"` +} + +type PipelineRequest_Bgsave struct { + Bgsave *BgSaveRequest `protobuf:"bytes,63,opt,name=bgsave,proto3,oneof"` +} + +type PipelineRequest_Bgrewriteaof struct { + Bgrewriteaof *BgRewriteAofRequest `protobuf:"bytes,64,opt,name=bgrewriteaof,proto3,oneof"` +} + +type PipelineRequest_SlowlogGet struct { + SlowlogGet *SlowLogGetRequest `protobuf:"bytes,65,opt,name=slowlog_get,json=slowlogGet,proto3,oneof"` +} + +type PipelineRequest_SlowlogLen struct { + SlowlogLen *SlowLogLenRequest `protobuf:"bytes,66,opt,name=slowlog_len,json=slowlogLen,proto3,oneof"` +} + +type PipelineRequest_SlowlogReset struct { + SlowlogReset *SlowLogResetRequest `protobuf:"bytes,67,opt,name=slowlog_reset,json=slowlogReset,proto3,oneof"` +} + +type PipelineRequest_Publish struct { + Publish *PublishRequest `protobuf:"bytes,68,opt,name=publish,proto3,oneof"` +} + +type PipelineRequest_PubsubChannels struct { + PubsubChannels *PubSubChannelsRequest `protobuf:"bytes,69,opt,name=pubsub_channels,json=pubsubChannels,proto3,oneof"` +} + +type PipelineRequest_PubsubNumsub struct { + PubsubNumsub *PubSubNumSubRequest `protobuf:"bytes,70,opt,name=pubsub_numsub,json=pubsubNumsub,proto3,oneof"` +} + +type PipelineRequest_PubsubNumpat struct { + PubsubNumpat *PubSubNumPatRequest `protobuf:"bytes,71,opt,name=pubsub_numpat,json=pubsubNumpat,proto3,oneof"` +} + func (*PipelineRequest_Get) isPipelineRequest_Command() {} func (*PipelineRequest_Set) isPipelineRequest_Command() {} @@ -5489,6 +6527,30 @@ func (*PipelineRequest_Rename) isPipelineRequest_Command() {} func (*PipelineRequest_Scan) isPipelineRequest_Command() {} +func (*PipelineRequest_Echo) isPipelineRequest_Command() {} + +func (*PipelineRequest_Decr) isPipelineRequest_Command() {} + +func (*PipelineRequest_Unlink) isPipelineRequest_Command() {} + +func (*PipelineRequest_Bgsave) isPipelineRequest_Command() {} + +func (*PipelineRequest_Bgrewriteaof) isPipelineRequest_Command() {} + +func (*PipelineRequest_SlowlogGet) isPipelineRequest_Command() {} + +func (*PipelineRequest_SlowlogLen) isPipelineRequest_Command() {} + +func (*PipelineRequest_SlowlogReset) isPipelineRequest_Command() {} + +func (*PipelineRequest_Publish) isPipelineRequest_Command() {} + +func (*PipelineRequest_PubsubChannels) isPipelineRequest_Command() {} + +func (*PipelineRequest_PubsubNumsub) isPipelineRequest_Command() {} + +func (*PipelineRequest_PubsubNumpat) isPipelineRequest_Command() {} + type PipelineResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` @@ -5519,6 +6581,9 @@ type PipelineResponse struct { // *PipelineResponse_Ping // *PipelineResponse_Error // *PipelineResponse_Info + // *PipelineResponse_Echo + // *PipelineResponse_SlowlogGet + // *PipelineResponse_PubsubNumsub Result isPipelineResponse_Result `protobuf_oneof:"result"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -5526,7 +6591,7 @@ type PipelineResponse struct { func (x *PipelineResponse) Reset() { *x = PipelineResponse{} - mi := &file_ember_v1_ember_proto_msgTypes[89] + mi := &file_ember_v1_ember_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5538,7 +6603,7 @@ func (x *PipelineResponse) String() string { func (*PipelineResponse) ProtoMessage() {} func (x *PipelineResponse) ProtoReflect() protoreflect.Message { - mi := &file_ember_v1_ember_proto_msgTypes[89] + mi := &file_ember_v1_ember_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5551,7 +6616,7 @@ func (x *PipelineResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PipelineResponse.ProtoReflect.Descriptor instead. func (*PipelineResponse) Descriptor() ([]byte, []int) { - return file_ember_v1_ember_proto_rawDescGZIP(), []int{89} + return file_ember_v1_ember_proto_rawDescGZIP(), []int{108} } func (x *PipelineResponse) GetId() uint64 { @@ -5793,6 +6858,33 @@ func (x *PipelineResponse) GetInfo() *InfoResponse { return nil } +func (x *PipelineResponse) GetEcho() *EchoResponse { + if x != nil { + if x, ok := x.Result.(*PipelineResponse_Echo); ok { + return x.Echo + } + } + return nil +} + +func (x *PipelineResponse) GetSlowlogGet() *SlowLogGetResponse { + if x != nil { + if x, ok := x.Result.(*PipelineResponse_SlowlogGet); ok { + return x.SlowlogGet + } + } + return nil +} + +func (x *PipelineResponse) GetPubsubNumsub() *PubSubNumSubResponse { + if x != nil { + if x, ok := x.Result.(*PipelineResponse_PubsubNumsub); ok { + return x.PubsubNumsub + } + } + return nil +} + type isPipelineResponse_Result interface { isPipelineResponse_Result() } @@ -5897,6 +6989,18 @@ type PipelineResponse_Info struct { Info *InfoResponse `protobuf:"bytes,26,opt,name=info,proto3,oneof"` } +type PipelineResponse_Echo struct { + Echo *EchoResponse `protobuf:"bytes,27,opt,name=echo,proto3,oneof"` +} + +type PipelineResponse_SlowlogGet struct { + SlowlogGet *SlowLogGetResponse `protobuf:"bytes,28,opt,name=slowlog_get,json=slowlogGet,proto3,oneof"` +} + +type PipelineResponse_PubsubNumsub struct { + PubsubNumsub *PubSubNumSubResponse `protobuf:"bytes,29,opt,name=pubsub_numsub,json=pubsubNumsub,proto3,oneof"` +} + func (*PipelineResponse_Get) isPipelineResponse_Result() {} func (*PipelineResponse_Set) isPipelineResponse_Result() {} @@ -5947,6 +7051,12 @@ func (*PipelineResponse_Error) isPipelineResponse_Result() {} func (*PipelineResponse_Info) isPipelineResponse_Result() {} +func (*PipelineResponse_Echo) isPipelineResponse_Result() {} + +func (*PipelineResponse_SlowlogGet) isPipelineResponse_Result() {} + +func (*PipelineResponse_PubsubNumsub) isPipelineResponse_Result() {} + type ErrorResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` @@ -5957,7 +7067,7 @@ type ErrorResponse struct { func (x *ErrorResponse) Reset() { *x = ErrorResponse{} - mi := &file_ember_v1_ember_proto_msgTypes[90] + mi := &file_ember_v1_ember_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5969,7 +7079,7 @@ func (x *ErrorResponse) String() string { func (*ErrorResponse) ProtoMessage() {} func (x *ErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_ember_v1_ember_proto_msgTypes[90] + mi := &file_ember_v1_ember_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5982,7 +7092,7 @@ func (x *ErrorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead. func (*ErrorResponse) Descriptor() ([]byte, []int) { - return file_ember_v1_ember_proto_rawDescGZIP(), []int{90} + return file_ember_v1_ember_proto_rawDescGZIP(), []int{109} } func (x *ErrorResponse) GetMessage() string { @@ -6257,7 +7367,54 @@ const file_ember_v1_ember_proto_rawDesc = "" + "\n" + "\b_section\"\"\n" + "\fInfoResponse\x12\x12\n" + - "\x04info\x18\x01 \x01(\tR\x04info\"\x9d\x16\n" + + "\x04info\x18\x01 \x01(\tR\x04info\"'\n" + + "\vEchoRequest\x12\x18\n" + + "\amessage\x18\x01 \x01(\tR\amessage\"(\n" + + "\fEchoResponse\x12\x18\n" + + "\amessage\x18\x01 \x01(\tR\amessage\"\x1f\n" + + "\vDecrRequest\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\"#\n" + + "\rUnlinkRequest\x12\x12\n" + + "\x04keys\x18\x01 \x03(\tR\x04keys\"\x0f\n" + + "\rBgSaveRequest\"\x15\n" + + "\x13BgRewriteAofRequest\"8\n" + + "\x11SlowLogGetRequest\x12\x19\n" + + "\x05count\x18\x01 \x01(\rH\x00R\x05count\x88\x01\x01B\b\n" + + "\x06_count\"F\n" + + "\x12SlowLogGetResponse\x120\n" + + "\aentries\x18\x01 \x03(\v2\x16.ember.v1.SlowLogEntryR\aentries\"\x88\x01\n" + + "\fSlowLogEntry\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x04R\x02id\x12%\n" + + "\x0etimestamp_unix\x18\x02 \x01(\x04R\rtimestampUnix\x12'\n" + + "\x0fduration_micros\x18\x03 \x01(\x04R\x0edurationMicros\x12\x18\n" + + "\acommand\x18\x04 \x01(\tR\acommand\"\x13\n" + + "\x11SlowLogLenRequest\"\x15\n" + + "\x13SlowLogResetRequest\"D\n" + + "\x0ePublishRequest\x12\x18\n" + + "\achannel\x18\x01 \x01(\tR\achannel\x12\x18\n" + + "\amessage\x18\x02 \x01(\fR\amessage\"J\n" + + "\x10SubscribeRequest\x12\x1a\n" + + "\bchannels\x18\x01 \x03(\tR\bchannels\x12\x1a\n" + + "\bpatterns\x18\x02 \x03(\tR\bpatterns\"}\n" + + "\x0eSubscribeEvent\x12\x12\n" + + "\x04kind\x18\x01 \x01(\tR\x04kind\x12\x18\n" + + "\achannel\x18\x02 \x01(\tR\achannel\x12\x12\n" + + "\x04data\x18\x03 \x01(\fR\x04data\x12\x1d\n" + + "\apattern\x18\x04 \x01(\tH\x00R\apattern\x88\x01\x01B\n" + + "\n" + + "\b_pattern\"B\n" + + "\x15PubSubChannelsRequest\x12\x1d\n" + + "\apattern\x18\x01 \x01(\tH\x00R\apattern\x88\x01\x01B\n" + + "\n" + + "\b_pattern\"1\n" + + "\x13PubSubNumSubRequest\x12\x1a\n" + + "\bchannels\x18\x01 \x03(\tR\bchannels\"F\n" + + "\x14PubSubNumSubResponse\x12.\n" + + "\x06counts\x18\x01 \x03(\v2\x16.ember.v1.ChannelCountR\x06counts\"\x15\n" + + "\x13PubSubNumPatRequest\">\n" + + "\fChannelCount\x12\x18\n" + + "\achannel\x18\x01 \x01(\tR\achannel\x12\x14\n" + + "\x05count\x18\x02 \x01(\x03R\x05count\"\xf6\x1b\n" + "\x0fPipelineRequest\x12\x0e\n" + "\x02id\x18\x01 \x01(\x04R\x02id\x12(\n" + "\x03get\x18\x02 \x01(\v2\x14.ember.v1.GetRequestH\x00R\x03get\x12(\n" + @@ -6318,9 +7475,22 @@ const file_ember_v1_ember_proto_rawDesc = "" + "\x04mset\x188 \x01(\v2\x15.ember.v1.MSetRequestH\x00R\x04mset\x12+\n" + "\x04keys\x189 \x01(\v2\x15.ember.v1.KeysRequestH\x00R\x04keys\x121\n" + "\x06rename\x18: \x01(\v2\x17.ember.v1.RenameRequestH\x00R\x06rename\x12+\n" + - "\x04scan\x18; \x01(\v2\x15.ember.v1.ScanRequestH\x00R\x04scanB\t\n" + - "\acommand\"\x96\n" + - "\n" + + "\x04scan\x18; \x01(\v2\x15.ember.v1.ScanRequestH\x00R\x04scan\x12+\n" + + "\x04echo\x18< \x01(\v2\x15.ember.v1.EchoRequestH\x00R\x04echo\x12+\n" + + "\x04decr\x18= \x01(\v2\x15.ember.v1.DecrRequestH\x00R\x04decr\x121\n" + + "\x06unlink\x18> \x01(\v2\x17.ember.v1.UnlinkRequestH\x00R\x06unlink\x121\n" + + "\x06bgsave\x18? \x01(\v2\x17.ember.v1.BgSaveRequestH\x00R\x06bgsave\x12C\n" + + "\fbgrewriteaof\x18@ \x01(\v2\x1d.ember.v1.BgRewriteAofRequestH\x00R\fbgrewriteaof\x12>\n" + + "\vslowlog_get\x18A \x01(\v2\x1b.ember.v1.SlowLogGetRequestH\x00R\n" + + "slowlogGet\x12>\n" + + "\vslowlog_len\x18B \x01(\v2\x1b.ember.v1.SlowLogLenRequestH\x00R\n" + + "slowlogLen\x12D\n" + + "\rslowlog_reset\x18C \x01(\v2\x1d.ember.v1.SlowLogResetRequestH\x00R\fslowlogReset\x124\n" + + "\apublish\x18D \x01(\v2\x18.ember.v1.PublishRequestH\x00R\apublish\x12J\n" + + "\x0fpubsub_channels\x18E \x01(\v2\x1f.ember.v1.PubSubChannelsRequestH\x00R\x0epubsubChannels\x12D\n" + + "\rpubsub_numsub\x18F \x01(\v2\x1d.ember.v1.PubSubNumSubRequestH\x00R\fpubsubNumsub\x12D\n" + + "\rpubsub_numpat\x18G \x01(\v2\x1d.ember.v1.PubSubNumPatRequestH\x00R\fpubsubNumpatB\t\n" + + "\acommand\"\xcc\v\n" + "\x10PipelineResponse\x12\x0e\n" + "\x02id\x18\x01 \x01(\x04R\x02id\x12)\n" + "\x03get\x18\x02 \x01(\v2\x15.ember.v1.GetResponseH\x00R\x03get\x12)\n" + @@ -6348,7 +7518,11 @@ const file_ember_v1_ember_proto_rawDesc = "" + "\x04mset\x18\x17 \x01(\v2\x16.ember.v1.MSetResponseH\x00R\x04mset\x12,\n" + "\x04ping\x18\x18 \x01(\v2\x16.ember.v1.PingResponseH\x00R\x04ping\x12/\n" + "\x05error\x18\x19 \x01(\v2\x17.ember.v1.ErrorResponseH\x00R\x05error\x12,\n" + - "\x04info\x18\x1a \x01(\v2\x16.ember.v1.InfoResponseH\x00R\x04infoB\b\n" + + "\x04info\x18\x1a \x01(\v2\x16.ember.v1.InfoResponseH\x00R\x04info\x12,\n" + + "\x04echo\x18\x1b \x01(\v2\x16.ember.v1.EchoResponseH\x00R\x04echo\x12?\n" + + "\vslowlog_get\x18\x1c \x01(\v2\x1c.ember.v1.SlowLogGetResponseH\x00R\n" + + "slowlogGet\x12E\n" + + "\rpubsub_numsub\x18\x1d \x01(\v2\x1e.ember.v1.PubSubNumSubResponseH\x00R\fpubsubNumsubB\b\n" + "\x06result\"R\n" + "\rErrorResponse\x12\x18\n" + "\amessage\x18\x01 \x01(\tR\amessage\x12'\n" + @@ -6366,7 +7540,7 @@ const file_ember_v1_ember_proto_rawDesc = "" + "\x15ERROR_KIND_WRONG_TYPE\x10\x01\x12\x1c\n" + "\x18ERROR_KIND_OUT_OF_MEMORY\x10\x02\x12\x17\n" + "\x13ERROR_KIND_INTERNAL\x10\x03\x12\x1f\n" + - "\x1bERROR_KIND_INVALID_ARGUMENT\x10\x042\x81\x1b\n" + + "\x1bERROR_KIND_INVALID_ARGUMENT\x10\x042\xe3!\n" + "\n" + "EmberCache\x122\n" + "\x03Get\x12\x14.ember.v1.GetRequest\x1a\x15.ember.v1.GetResponse\x122\n" + @@ -6424,10 +7598,25 @@ const file_ember_v1_ember_proto_rawDesc = "" + "\x05VCard\x12\x16.ember.v1.VCardRequest\x1a\x15.ember.v1.IntResponse\x124\n" + "\x04VDim\x12\x15.ember.v1.VDimRequest\x1a\x15.ember.v1.IntResponse\x128\n" + "\x05VInfo\x12\x16.ember.v1.VInfoRequest\x1a\x17.ember.v1.VInfoResponse\x125\n" + - "\x04Ping\x12\x15.ember.v1.PingRequest\x1a\x16.ember.v1.PingResponse\x12=\n" + + "\x04Ping\x12\x15.ember.v1.PingRequest\x1a\x16.ember.v1.PingResponse\x125\n" + + "\x04Echo\x12\x15.ember.v1.EchoRequest\x1a\x16.ember.v1.EchoResponse\x124\n" + + "\x04Decr\x12\x15.ember.v1.DecrRequest\x1a\x15.ember.v1.IntResponse\x128\n" + + "\x06Unlink\x12\x17.ember.v1.UnlinkRequest\x1a\x15.ember.v1.DelResponse\x12=\n" + "\aFlushDb\x12\x18.ember.v1.FlushDbRequest\x1a\x18.ember.v1.StatusResponse\x128\n" + "\x06DbSize\x12\x17.ember.v1.DbSizeRequest\x1a\x15.ember.v1.IntResponse\x125\n" + - "\x04Info\x12\x15.ember.v1.InfoRequest\x1a\x16.ember.v1.InfoResponse\x12E\n" + + "\x04Info\x12\x15.ember.v1.InfoRequest\x1a\x16.ember.v1.InfoResponse\x12;\n" + + "\x06BgSave\x12\x17.ember.v1.BgSaveRequest\x1a\x18.ember.v1.StatusResponse\x12G\n" + + "\fBgRewriteAof\x12\x1d.ember.v1.BgRewriteAofRequest\x1a\x18.ember.v1.StatusResponse\x12G\n" + + "\n" + + "SlowLogGet\x12\x1b.ember.v1.SlowLogGetRequest\x1a\x1c.ember.v1.SlowLogGetResponse\x12@\n" + + "\n" + + "SlowLogLen\x12\x1b.ember.v1.SlowLogLenRequest\x1a\x15.ember.v1.IntResponse\x12G\n" + + "\fSlowLogReset\x12\x1d.ember.v1.SlowLogResetRequest\x1a\x18.ember.v1.StatusResponse\x12:\n" + + "\aPublish\x12\x18.ember.v1.PublishRequest\x1a\x15.ember.v1.IntResponse\x12C\n" + + "\tSubscribe\x12\x1a.ember.v1.SubscribeRequest\x1a\x18.ember.v1.SubscribeEvent0\x01\x12I\n" + + "\x0ePubSubChannels\x12\x1f.ember.v1.PubSubChannelsRequest\x1a\x16.ember.v1.KeysResponse\x12M\n" + + "\fPubSubNumSub\x12\x1d.ember.v1.PubSubNumSubRequest\x1a\x1e.ember.v1.PubSubNumSubResponse\x12D\n" + + "\fPubSubNumPat\x12\x1d.ember.v1.PubSubNumPatRequest\x1a\x15.ember.v1.IntResponse\x12E\n" + "\bPipeline\x12\x19.ember.v1.PipelineRequest\x1a\x1a.ember.v1.PipelineResponse(\x010\x01B1Z/github.com/kacy/ember-go/proto/ember/v1;emberv1b\x06proto3" var ( @@ -6443,7 +7632,7 @@ func file_ember_v1_ember_proto_rawDescGZIP() []byte { } var file_ember_v1_ember_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_ember_v1_ember_proto_msgTypes = make([]protoimpl.MessageInfo, 91) +var file_ember_v1_ember_proto_msgTypes = make([]protoimpl.MessageInfo, 110) var file_ember_v1_ember_proto_goTypes = []any{ (VectorMetric)(0), // 0: ember.v1.VectorMetric (VectorQuantization)(0), // 1: ember.v1.VectorQuantization @@ -6536,9 +7725,28 @@ var file_ember_v1_ember_proto_goTypes = []any{ (*DbSizeRequest)(nil), // 88: ember.v1.DbSizeRequest (*InfoRequest)(nil), // 89: ember.v1.InfoRequest (*InfoResponse)(nil), // 90: ember.v1.InfoResponse - (*PipelineRequest)(nil), // 91: ember.v1.PipelineRequest - (*PipelineResponse)(nil), // 92: ember.v1.PipelineResponse - (*ErrorResponse)(nil), // 93: ember.v1.ErrorResponse + (*EchoRequest)(nil), // 91: ember.v1.EchoRequest + (*EchoResponse)(nil), // 92: ember.v1.EchoResponse + (*DecrRequest)(nil), // 93: ember.v1.DecrRequest + (*UnlinkRequest)(nil), // 94: ember.v1.UnlinkRequest + (*BgSaveRequest)(nil), // 95: ember.v1.BgSaveRequest + (*BgRewriteAofRequest)(nil), // 96: ember.v1.BgRewriteAofRequest + (*SlowLogGetRequest)(nil), // 97: ember.v1.SlowLogGetRequest + (*SlowLogGetResponse)(nil), // 98: ember.v1.SlowLogGetResponse + (*SlowLogEntry)(nil), // 99: ember.v1.SlowLogEntry + (*SlowLogLenRequest)(nil), // 100: ember.v1.SlowLogLenRequest + (*SlowLogResetRequest)(nil), // 101: ember.v1.SlowLogResetRequest + (*PublishRequest)(nil), // 102: ember.v1.PublishRequest + (*SubscribeRequest)(nil), // 103: ember.v1.SubscribeRequest + (*SubscribeEvent)(nil), // 104: ember.v1.SubscribeEvent + (*PubSubChannelsRequest)(nil), // 105: ember.v1.PubSubChannelsRequest + (*PubSubNumSubRequest)(nil), // 106: ember.v1.PubSubNumSubRequest + (*PubSubNumSubResponse)(nil), // 107: ember.v1.PubSubNumSubResponse + (*PubSubNumPatRequest)(nil), // 108: ember.v1.PubSubNumPatRequest + (*ChannelCount)(nil), // 109: ember.v1.ChannelCount + (*PipelineRequest)(nil), // 110: ember.v1.PipelineRequest + (*PipelineResponse)(nil), // 111: ember.v1.PipelineResponse + (*ErrorResponse)(nil), // 112: ember.v1.ErrorResponse } var file_ember_v1_ember_proto_depIdxs = []int32{ 15, // 0: ember.v1.MGetResponse.values:type_name -> ember.v1.OptionalValue @@ -6552,215 +7760,258 @@ var file_ember_v1_ember_proto_depIdxs = []int32{ 1, // 8: ember.v1.VAddRequest.quantization:type_name -> ember.v1.VectorQuantization 77, // 9: ember.v1.VSimResponse.results:type_name -> ember.v1.VSimResult 47, // 10: ember.v1.VInfoResponse.info:type_name -> ember.v1.FieldValue - 7, // 11: ember.v1.PipelineRequest.get:type_name -> ember.v1.GetRequest - 9, // 12: ember.v1.PipelineRequest.set:type_name -> ember.v1.SetRequest - 11, // 13: ember.v1.PipelineRequest.del:type_name -> ember.v1.DelRequest - 25, // 14: ember.v1.PipelineRequest.exists:type_name -> ember.v1.ExistsRequest - 19, // 15: ember.v1.PipelineRequest.incr:type_name -> ember.v1.IncrRequest - 20, // 16: ember.v1.PipelineRequest.incr_by:type_name -> ember.v1.IncrByRequest - 21, // 17: ember.v1.PipelineRequest.decr_by:type_name -> ember.v1.DecrByRequest - 22, // 18: ember.v1.PipelineRequest.incr_by_float:type_name -> ember.v1.IncrByFloatRequest - 23, // 19: ember.v1.PipelineRequest.append:type_name -> ember.v1.AppendRequest - 24, // 20: ember.v1.PipelineRequest.strlen:type_name -> ember.v1.StrlenRequest - 26, // 21: ember.v1.PipelineRequest.expire:type_name -> ember.v1.ExpireRequest - 27, // 22: ember.v1.PipelineRequest.pexpire:type_name -> ember.v1.PExpireRequest - 28, // 23: ember.v1.PipelineRequest.persist:type_name -> ember.v1.PersistRequest - 29, // 24: ember.v1.PipelineRequest.ttl:type_name -> ember.v1.TtlRequest - 30, // 25: ember.v1.PipelineRequest.pttl:type_name -> ember.v1.PTtlRequest - 32, // 26: ember.v1.PipelineRequest.type:type_name -> ember.v1.TypeRequest - 39, // 27: ember.v1.PipelineRequest.lpush:type_name -> ember.v1.LPushRequest - 40, // 28: ember.v1.PipelineRequest.rpush:type_name -> ember.v1.RPushRequest - 41, // 29: ember.v1.PipelineRequest.lpop:type_name -> ember.v1.LPopRequest - 42, // 30: ember.v1.PipelineRequest.rpop:type_name -> ember.v1.RPopRequest - 43, // 31: ember.v1.PipelineRequest.lrange:type_name -> ember.v1.LRangeRequest - 45, // 32: ember.v1.PipelineRequest.llen:type_name -> ember.v1.LLenRequest - 46, // 33: ember.v1.PipelineRequest.hset:type_name -> ember.v1.HSetRequest - 48, // 34: ember.v1.PipelineRequest.hget:type_name -> ember.v1.HGetRequest - 49, // 35: ember.v1.PipelineRequest.hgetall:type_name -> ember.v1.HGetAllRequest - 51, // 36: ember.v1.PipelineRequest.hdel:type_name -> ember.v1.HDelRequest - 52, // 37: ember.v1.PipelineRequest.hexists:type_name -> ember.v1.HExistsRequest - 53, // 38: ember.v1.PipelineRequest.hlen:type_name -> ember.v1.HLenRequest - 54, // 39: ember.v1.PipelineRequest.hincr_by:type_name -> ember.v1.HIncrByRequest - 55, // 40: ember.v1.PipelineRequest.hkeys:type_name -> ember.v1.HKeysRequest - 56, // 41: ember.v1.PipelineRequest.hvals:type_name -> ember.v1.HValsRequest - 57, // 42: ember.v1.PipelineRequest.hmget:type_name -> ember.v1.HMGetRequest - 59, // 43: ember.v1.PipelineRequest.sadd:type_name -> ember.v1.SAddRequest - 60, // 44: ember.v1.PipelineRequest.srem:type_name -> ember.v1.SRemRequest - 61, // 45: ember.v1.PipelineRequest.smembers:type_name -> ember.v1.SMembersRequest - 62, // 46: ember.v1.PipelineRequest.sismember:type_name -> ember.v1.SIsMemberRequest - 63, // 47: ember.v1.PipelineRequest.scard:type_name -> ember.v1.SCardRequest - 64, // 48: ember.v1.PipelineRequest.zadd:type_name -> ember.v1.ZAddRequest - 66, // 49: ember.v1.PipelineRequest.zrem:type_name -> ember.v1.ZRemRequest - 67, // 50: ember.v1.PipelineRequest.zscore:type_name -> ember.v1.ZScoreRequest - 69, // 51: ember.v1.PipelineRequest.zrank:type_name -> ember.v1.ZRankRequest - 71, // 52: ember.v1.PipelineRequest.zcard:type_name -> ember.v1.ZCardRequest - 72, // 53: ember.v1.PipelineRequest.zrange:type_name -> ember.v1.ZRangeRequest - 74, // 54: ember.v1.PipelineRequest.vadd:type_name -> ember.v1.VAddRequest - 75, // 55: ember.v1.PipelineRequest.vsim:type_name -> ember.v1.VSimRequest - 78, // 56: ember.v1.PipelineRequest.vrem:type_name -> ember.v1.VRemRequest - 79, // 57: ember.v1.PipelineRequest.vget:type_name -> ember.v1.VGetRequest - 81, // 58: ember.v1.PipelineRequest.vcard:type_name -> ember.v1.VCardRequest - 82, // 59: ember.v1.PipelineRequest.vdim:type_name -> ember.v1.VDimRequest - 83, // 60: ember.v1.PipelineRequest.vinfo:type_name -> ember.v1.VInfoRequest - 85, // 61: ember.v1.PipelineRequest.ping:type_name -> ember.v1.PingRequest - 87, // 62: ember.v1.PipelineRequest.flushdb:type_name -> ember.v1.FlushDbRequest - 88, // 63: ember.v1.PipelineRequest.dbsize:type_name -> ember.v1.DbSizeRequest - 13, // 64: ember.v1.PipelineRequest.mget:type_name -> ember.v1.MGetRequest - 16, // 65: ember.v1.PipelineRequest.mset:type_name -> ember.v1.MSetRequest - 34, // 66: ember.v1.PipelineRequest.keys:type_name -> ember.v1.KeysRequest - 36, // 67: ember.v1.PipelineRequest.rename:type_name -> ember.v1.RenameRequest - 37, // 68: ember.v1.PipelineRequest.scan:type_name -> ember.v1.ScanRequest - 8, // 69: ember.v1.PipelineResponse.get:type_name -> ember.v1.GetResponse - 10, // 70: ember.v1.PipelineResponse.set:type_name -> ember.v1.SetResponse - 12, // 71: ember.v1.PipelineResponse.del:type_name -> ember.v1.DelResponse - 3, // 72: ember.v1.PipelineResponse.int_val:type_name -> ember.v1.IntResponse - 4, // 73: ember.v1.PipelineResponse.bool_val:type_name -> ember.v1.BoolResponse - 5, // 74: ember.v1.PipelineResponse.float_val:type_name -> ember.v1.FloatResponse - 6, // 75: ember.v1.PipelineResponse.status:type_name -> ember.v1.StatusResponse - 31, // 76: ember.v1.PipelineResponse.ttl:type_name -> ember.v1.TtlResponse - 33, // 77: ember.v1.PipelineResponse.type:type_name -> ember.v1.TypeResponse - 44, // 78: ember.v1.PipelineResponse.array:type_name -> ember.v1.ArrayResponse - 50, // 79: ember.v1.PipelineResponse.hash:type_name -> ember.v1.HashResponse - 58, // 80: ember.v1.PipelineResponse.optional_array:type_name -> ember.v1.OptionalArrayResponse - 35, // 81: ember.v1.PipelineResponse.keys:type_name -> ember.v1.KeysResponse - 38, // 82: ember.v1.PipelineResponse.scan:type_name -> ember.v1.ScanResponse - 68, // 83: ember.v1.PipelineResponse.optional_float:type_name -> ember.v1.OptionalFloatResponse - 70, // 84: ember.v1.PipelineResponse.optional_int:type_name -> ember.v1.OptionalIntResponse - 73, // 85: ember.v1.PipelineResponse.zrange:type_name -> ember.v1.ZRangeResponse - 76, // 86: ember.v1.PipelineResponse.vsim:type_name -> ember.v1.VSimResponse - 80, // 87: ember.v1.PipelineResponse.vget:type_name -> ember.v1.VGetResponse - 84, // 88: ember.v1.PipelineResponse.vinfo:type_name -> ember.v1.VInfoResponse - 14, // 89: ember.v1.PipelineResponse.mget:type_name -> ember.v1.MGetResponse - 18, // 90: ember.v1.PipelineResponse.mset:type_name -> ember.v1.MSetResponse - 86, // 91: ember.v1.PipelineResponse.ping:type_name -> ember.v1.PingResponse - 93, // 92: ember.v1.PipelineResponse.error:type_name -> ember.v1.ErrorResponse - 90, // 93: ember.v1.PipelineResponse.info:type_name -> ember.v1.InfoResponse - 2, // 94: ember.v1.ErrorResponse.kind:type_name -> ember.v1.ErrorKind - 7, // 95: ember.v1.EmberCache.Get:input_type -> ember.v1.GetRequest - 9, // 96: ember.v1.EmberCache.Set:input_type -> ember.v1.SetRequest - 11, // 97: ember.v1.EmberCache.Del:input_type -> ember.v1.DelRequest - 13, // 98: ember.v1.EmberCache.MGet:input_type -> ember.v1.MGetRequest - 16, // 99: ember.v1.EmberCache.MSet:input_type -> ember.v1.MSetRequest - 19, // 100: ember.v1.EmberCache.Incr:input_type -> ember.v1.IncrRequest - 20, // 101: ember.v1.EmberCache.IncrBy:input_type -> ember.v1.IncrByRequest - 21, // 102: ember.v1.EmberCache.DecrBy:input_type -> ember.v1.DecrByRequest - 22, // 103: ember.v1.EmberCache.IncrByFloat:input_type -> ember.v1.IncrByFloatRequest - 23, // 104: ember.v1.EmberCache.Append:input_type -> ember.v1.AppendRequest - 24, // 105: ember.v1.EmberCache.Strlen:input_type -> ember.v1.StrlenRequest - 25, // 106: ember.v1.EmberCache.Exists:input_type -> ember.v1.ExistsRequest - 26, // 107: ember.v1.EmberCache.Expire:input_type -> ember.v1.ExpireRequest - 27, // 108: ember.v1.EmberCache.PExpire:input_type -> ember.v1.PExpireRequest - 28, // 109: ember.v1.EmberCache.Persist:input_type -> ember.v1.PersistRequest - 29, // 110: ember.v1.EmberCache.Ttl:input_type -> ember.v1.TtlRequest - 30, // 111: ember.v1.EmberCache.PTtl:input_type -> ember.v1.PTtlRequest - 32, // 112: ember.v1.EmberCache.Type:input_type -> ember.v1.TypeRequest - 34, // 113: ember.v1.EmberCache.Keys:input_type -> ember.v1.KeysRequest - 36, // 114: ember.v1.EmberCache.Rename:input_type -> ember.v1.RenameRequest - 37, // 115: ember.v1.EmberCache.Scan:input_type -> ember.v1.ScanRequest - 39, // 116: ember.v1.EmberCache.LPush:input_type -> ember.v1.LPushRequest - 40, // 117: ember.v1.EmberCache.RPush:input_type -> ember.v1.RPushRequest - 41, // 118: ember.v1.EmberCache.LPop:input_type -> ember.v1.LPopRequest - 42, // 119: ember.v1.EmberCache.RPop:input_type -> ember.v1.RPopRequest - 43, // 120: ember.v1.EmberCache.LRange:input_type -> ember.v1.LRangeRequest - 45, // 121: ember.v1.EmberCache.LLen:input_type -> ember.v1.LLenRequest - 46, // 122: ember.v1.EmberCache.HSet:input_type -> ember.v1.HSetRequest - 48, // 123: ember.v1.EmberCache.HGet:input_type -> ember.v1.HGetRequest - 49, // 124: ember.v1.EmberCache.HGetAll:input_type -> ember.v1.HGetAllRequest - 51, // 125: ember.v1.EmberCache.HDel:input_type -> ember.v1.HDelRequest - 52, // 126: ember.v1.EmberCache.HExists:input_type -> ember.v1.HExistsRequest - 53, // 127: ember.v1.EmberCache.HLen:input_type -> ember.v1.HLenRequest - 54, // 128: ember.v1.EmberCache.HIncrBy:input_type -> ember.v1.HIncrByRequest - 55, // 129: ember.v1.EmberCache.HKeys:input_type -> ember.v1.HKeysRequest - 56, // 130: ember.v1.EmberCache.HVals:input_type -> ember.v1.HValsRequest - 57, // 131: ember.v1.EmberCache.HMGet:input_type -> ember.v1.HMGetRequest - 59, // 132: ember.v1.EmberCache.SAdd:input_type -> ember.v1.SAddRequest - 60, // 133: ember.v1.EmberCache.SRem:input_type -> ember.v1.SRemRequest - 61, // 134: ember.v1.EmberCache.SMembers:input_type -> ember.v1.SMembersRequest - 62, // 135: ember.v1.EmberCache.SIsMember:input_type -> ember.v1.SIsMemberRequest - 63, // 136: ember.v1.EmberCache.SCard:input_type -> ember.v1.SCardRequest - 64, // 137: ember.v1.EmberCache.ZAdd:input_type -> ember.v1.ZAddRequest - 66, // 138: ember.v1.EmberCache.ZRem:input_type -> ember.v1.ZRemRequest - 67, // 139: ember.v1.EmberCache.ZScore:input_type -> ember.v1.ZScoreRequest - 69, // 140: ember.v1.EmberCache.ZRank:input_type -> ember.v1.ZRankRequest - 71, // 141: ember.v1.EmberCache.ZCard:input_type -> ember.v1.ZCardRequest - 72, // 142: ember.v1.EmberCache.ZRange:input_type -> ember.v1.ZRangeRequest - 74, // 143: ember.v1.EmberCache.VAdd:input_type -> ember.v1.VAddRequest - 75, // 144: ember.v1.EmberCache.VSim:input_type -> ember.v1.VSimRequest - 78, // 145: ember.v1.EmberCache.VRem:input_type -> ember.v1.VRemRequest - 79, // 146: ember.v1.EmberCache.VGet:input_type -> ember.v1.VGetRequest - 81, // 147: ember.v1.EmberCache.VCard:input_type -> ember.v1.VCardRequest - 82, // 148: ember.v1.EmberCache.VDim:input_type -> ember.v1.VDimRequest - 83, // 149: ember.v1.EmberCache.VInfo:input_type -> ember.v1.VInfoRequest - 85, // 150: ember.v1.EmberCache.Ping:input_type -> ember.v1.PingRequest - 87, // 151: ember.v1.EmberCache.FlushDb:input_type -> ember.v1.FlushDbRequest - 88, // 152: ember.v1.EmberCache.DbSize:input_type -> ember.v1.DbSizeRequest - 89, // 153: ember.v1.EmberCache.Info:input_type -> ember.v1.InfoRequest - 91, // 154: ember.v1.EmberCache.Pipeline:input_type -> ember.v1.PipelineRequest - 8, // 155: ember.v1.EmberCache.Get:output_type -> ember.v1.GetResponse - 10, // 156: ember.v1.EmberCache.Set:output_type -> ember.v1.SetResponse - 12, // 157: ember.v1.EmberCache.Del:output_type -> ember.v1.DelResponse - 14, // 158: ember.v1.EmberCache.MGet:output_type -> ember.v1.MGetResponse - 18, // 159: ember.v1.EmberCache.MSet:output_type -> ember.v1.MSetResponse - 3, // 160: ember.v1.EmberCache.Incr:output_type -> ember.v1.IntResponse - 3, // 161: ember.v1.EmberCache.IncrBy:output_type -> ember.v1.IntResponse - 3, // 162: ember.v1.EmberCache.DecrBy:output_type -> ember.v1.IntResponse - 5, // 163: ember.v1.EmberCache.IncrByFloat:output_type -> ember.v1.FloatResponse - 3, // 164: ember.v1.EmberCache.Append:output_type -> ember.v1.IntResponse - 3, // 165: ember.v1.EmberCache.Strlen:output_type -> ember.v1.IntResponse - 3, // 166: ember.v1.EmberCache.Exists:output_type -> ember.v1.IntResponse - 4, // 167: ember.v1.EmberCache.Expire:output_type -> ember.v1.BoolResponse - 4, // 168: ember.v1.EmberCache.PExpire:output_type -> ember.v1.BoolResponse - 4, // 169: ember.v1.EmberCache.Persist:output_type -> ember.v1.BoolResponse - 31, // 170: ember.v1.EmberCache.Ttl:output_type -> ember.v1.TtlResponse - 31, // 171: ember.v1.EmberCache.PTtl:output_type -> ember.v1.TtlResponse - 33, // 172: ember.v1.EmberCache.Type:output_type -> ember.v1.TypeResponse - 35, // 173: ember.v1.EmberCache.Keys:output_type -> ember.v1.KeysResponse - 6, // 174: ember.v1.EmberCache.Rename:output_type -> ember.v1.StatusResponse - 38, // 175: ember.v1.EmberCache.Scan:output_type -> ember.v1.ScanResponse - 3, // 176: ember.v1.EmberCache.LPush:output_type -> ember.v1.IntResponse - 3, // 177: ember.v1.EmberCache.RPush:output_type -> ember.v1.IntResponse - 8, // 178: ember.v1.EmberCache.LPop:output_type -> ember.v1.GetResponse - 8, // 179: ember.v1.EmberCache.RPop:output_type -> ember.v1.GetResponse - 44, // 180: ember.v1.EmberCache.LRange:output_type -> ember.v1.ArrayResponse - 3, // 181: ember.v1.EmberCache.LLen:output_type -> ember.v1.IntResponse - 3, // 182: ember.v1.EmberCache.HSet:output_type -> ember.v1.IntResponse - 8, // 183: ember.v1.EmberCache.HGet:output_type -> ember.v1.GetResponse - 50, // 184: ember.v1.EmberCache.HGetAll:output_type -> ember.v1.HashResponse - 3, // 185: ember.v1.EmberCache.HDel:output_type -> ember.v1.IntResponse - 4, // 186: ember.v1.EmberCache.HExists:output_type -> ember.v1.BoolResponse - 3, // 187: ember.v1.EmberCache.HLen:output_type -> ember.v1.IntResponse - 3, // 188: ember.v1.EmberCache.HIncrBy:output_type -> ember.v1.IntResponse - 35, // 189: ember.v1.EmberCache.HKeys:output_type -> ember.v1.KeysResponse - 44, // 190: ember.v1.EmberCache.HVals:output_type -> ember.v1.ArrayResponse - 58, // 191: ember.v1.EmberCache.HMGet:output_type -> ember.v1.OptionalArrayResponse - 3, // 192: ember.v1.EmberCache.SAdd:output_type -> ember.v1.IntResponse - 3, // 193: ember.v1.EmberCache.SRem:output_type -> ember.v1.IntResponse - 35, // 194: ember.v1.EmberCache.SMembers:output_type -> ember.v1.KeysResponse - 4, // 195: ember.v1.EmberCache.SIsMember:output_type -> ember.v1.BoolResponse - 3, // 196: ember.v1.EmberCache.SCard:output_type -> ember.v1.IntResponse - 3, // 197: ember.v1.EmberCache.ZAdd:output_type -> ember.v1.IntResponse - 3, // 198: ember.v1.EmberCache.ZRem:output_type -> ember.v1.IntResponse - 68, // 199: ember.v1.EmberCache.ZScore:output_type -> ember.v1.OptionalFloatResponse - 70, // 200: ember.v1.EmberCache.ZRank:output_type -> ember.v1.OptionalIntResponse - 3, // 201: ember.v1.EmberCache.ZCard:output_type -> ember.v1.IntResponse - 73, // 202: ember.v1.EmberCache.ZRange:output_type -> ember.v1.ZRangeResponse - 4, // 203: ember.v1.EmberCache.VAdd:output_type -> ember.v1.BoolResponse - 76, // 204: ember.v1.EmberCache.VSim:output_type -> ember.v1.VSimResponse - 4, // 205: ember.v1.EmberCache.VRem:output_type -> ember.v1.BoolResponse - 80, // 206: ember.v1.EmberCache.VGet:output_type -> ember.v1.VGetResponse - 3, // 207: ember.v1.EmberCache.VCard:output_type -> ember.v1.IntResponse - 3, // 208: ember.v1.EmberCache.VDim:output_type -> ember.v1.IntResponse - 84, // 209: ember.v1.EmberCache.VInfo:output_type -> ember.v1.VInfoResponse - 86, // 210: ember.v1.EmberCache.Ping:output_type -> ember.v1.PingResponse - 6, // 211: ember.v1.EmberCache.FlushDb:output_type -> ember.v1.StatusResponse - 3, // 212: ember.v1.EmberCache.DbSize:output_type -> ember.v1.IntResponse - 90, // 213: ember.v1.EmberCache.Info:output_type -> ember.v1.InfoResponse - 92, // 214: ember.v1.EmberCache.Pipeline:output_type -> ember.v1.PipelineResponse - 155, // [155:215] is the sub-list for method output_type - 95, // [95:155] is the sub-list for method input_type - 95, // [95:95] is the sub-list for extension type_name - 95, // [95:95] is the sub-list for extension extendee - 0, // [0:95] is the sub-list for field type_name + 99, // 11: ember.v1.SlowLogGetResponse.entries:type_name -> ember.v1.SlowLogEntry + 109, // 12: ember.v1.PubSubNumSubResponse.counts:type_name -> ember.v1.ChannelCount + 7, // 13: ember.v1.PipelineRequest.get:type_name -> ember.v1.GetRequest + 9, // 14: ember.v1.PipelineRequest.set:type_name -> ember.v1.SetRequest + 11, // 15: ember.v1.PipelineRequest.del:type_name -> ember.v1.DelRequest + 25, // 16: ember.v1.PipelineRequest.exists:type_name -> ember.v1.ExistsRequest + 19, // 17: ember.v1.PipelineRequest.incr:type_name -> ember.v1.IncrRequest + 20, // 18: ember.v1.PipelineRequest.incr_by:type_name -> ember.v1.IncrByRequest + 21, // 19: ember.v1.PipelineRequest.decr_by:type_name -> ember.v1.DecrByRequest + 22, // 20: ember.v1.PipelineRequest.incr_by_float:type_name -> ember.v1.IncrByFloatRequest + 23, // 21: ember.v1.PipelineRequest.append:type_name -> ember.v1.AppendRequest + 24, // 22: ember.v1.PipelineRequest.strlen:type_name -> ember.v1.StrlenRequest + 26, // 23: ember.v1.PipelineRequest.expire:type_name -> ember.v1.ExpireRequest + 27, // 24: ember.v1.PipelineRequest.pexpire:type_name -> ember.v1.PExpireRequest + 28, // 25: ember.v1.PipelineRequest.persist:type_name -> ember.v1.PersistRequest + 29, // 26: ember.v1.PipelineRequest.ttl:type_name -> ember.v1.TtlRequest + 30, // 27: ember.v1.PipelineRequest.pttl:type_name -> ember.v1.PTtlRequest + 32, // 28: ember.v1.PipelineRequest.type:type_name -> ember.v1.TypeRequest + 39, // 29: ember.v1.PipelineRequest.lpush:type_name -> ember.v1.LPushRequest + 40, // 30: ember.v1.PipelineRequest.rpush:type_name -> ember.v1.RPushRequest + 41, // 31: ember.v1.PipelineRequest.lpop:type_name -> ember.v1.LPopRequest + 42, // 32: ember.v1.PipelineRequest.rpop:type_name -> ember.v1.RPopRequest + 43, // 33: ember.v1.PipelineRequest.lrange:type_name -> ember.v1.LRangeRequest + 45, // 34: ember.v1.PipelineRequest.llen:type_name -> ember.v1.LLenRequest + 46, // 35: ember.v1.PipelineRequest.hset:type_name -> ember.v1.HSetRequest + 48, // 36: ember.v1.PipelineRequest.hget:type_name -> ember.v1.HGetRequest + 49, // 37: ember.v1.PipelineRequest.hgetall:type_name -> ember.v1.HGetAllRequest + 51, // 38: ember.v1.PipelineRequest.hdel:type_name -> ember.v1.HDelRequest + 52, // 39: ember.v1.PipelineRequest.hexists:type_name -> ember.v1.HExistsRequest + 53, // 40: ember.v1.PipelineRequest.hlen:type_name -> ember.v1.HLenRequest + 54, // 41: ember.v1.PipelineRequest.hincr_by:type_name -> ember.v1.HIncrByRequest + 55, // 42: ember.v1.PipelineRequest.hkeys:type_name -> ember.v1.HKeysRequest + 56, // 43: ember.v1.PipelineRequest.hvals:type_name -> ember.v1.HValsRequest + 57, // 44: ember.v1.PipelineRequest.hmget:type_name -> ember.v1.HMGetRequest + 59, // 45: ember.v1.PipelineRequest.sadd:type_name -> ember.v1.SAddRequest + 60, // 46: ember.v1.PipelineRequest.srem:type_name -> ember.v1.SRemRequest + 61, // 47: ember.v1.PipelineRequest.smembers:type_name -> ember.v1.SMembersRequest + 62, // 48: ember.v1.PipelineRequest.sismember:type_name -> ember.v1.SIsMemberRequest + 63, // 49: ember.v1.PipelineRequest.scard:type_name -> ember.v1.SCardRequest + 64, // 50: ember.v1.PipelineRequest.zadd:type_name -> ember.v1.ZAddRequest + 66, // 51: ember.v1.PipelineRequest.zrem:type_name -> ember.v1.ZRemRequest + 67, // 52: ember.v1.PipelineRequest.zscore:type_name -> ember.v1.ZScoreRequest + 69, // 53: ember.v1.PipelineRequest.zrank:type_name -> ember.v1.ZRankRequest + 71, // 54: ember.v1.PipelineRequest.zcard:type_name -> ember.v1.ZCardRequest + 72, // 55: ember.v1.PipelineRequest.zrange:type_name -> ember.v1.ZRangeRequest + 74, // 56: ember.v1.PipelineRequest.vadd:type_name -> ember.v1.VAddRequest + 75, // 57: ember.v1.PipelineRequest.vsim:type_name -> ember.v1.VSimRequest + 78, // 58: ember.v1.PipelineRequest.vrem:type_name -> ember.v1.VRemRequest + 79, // 59: ember.v1.PipelineRequest.vget:type_name -> ember.v1.VGetRequest + 81, // 60: ember.v1.PipelineRequest.vcard:type_name -> ember.v1.VCardRequest + 82, // 61: ember.v1.PipelineRequest.vdim:type_name -> ember.v1.VDimRequest + 83, // 62: ember.v1.PipelineRequest.vinfo:type_name -> ember.v1.VInfoRequest + 85, // 63: ember.v1.PipelineRequest.ping:type_name -> ember.v1.PingRequest + 87, // 64: ember.v1.PipelineRequest.flushdb:type_name -> ember.v1.FlushDbRequest + 88, // 65: ember.v1.PipelineRequest.dbsize:type_name -> ember.v1.DbSizeRequest + 13, // 66: ember.v1.PipelineRequest.mget:type_name -> ember.v1.MGetRequest + 16, // 67: ember.v1.PipelineRequest.mset:type_name -> ember.v1.MSetRequest + 34, // 68: ember.v1.PipelineRequest.keys:type_name -> ember.v1.KeysRequest + 36, // 69: ember.v1.PipelineRequest.rename:type_name -> ember.v1.RenameRequest + 37, // 70: ember.v1.PipelineRequest.scan:type_name -> ember.v1.ScanRequest + 91, // 71: ember.v1.PipelineRequest.echo:type_name -> ember.v1.EchoRequest + 93, // 72: ember.v1.PipelineRequest.decr:type_name -> ember.v1.DecrRequest + 94, // 73: ember.v1.PipelineRequest.unlink:type_name -> ember.v1.UnlinkRequest + 95, // 74: ember.v1.PipelineRequest.bgsave:type_name -> ember.v1.BgSaveRequest + 96, // 75: ember.v1.PipelineRequest.bgrewriteaof:type_name -> ember.v1.BgRewriteAofRequest + 97, // 76: ember.v1.PipelineRequest.slowlog_get:type_name -> ember.v1.SlowLogGetRequest + 100, // 77: ember.v1.PipelineRequest.slowlog_len:type_name -> ember.v1.SlowLogLenRequest + 101, // 78: ember.v1.PipelineRequest.slowlog_reset:type_name -> ember.v1.SlowLogResetRequest + 102, // 79: ember.v1.PipelineRequest.publish:type_name -> ember.v1.PublishRequest + 105, // 80: ember.v1.PipelineRequest.pubsub_channels:type_name -> ember.v1.PubSubChannelsRequest + 106, // 81: ember.v1.PipelineRequest.pubsub_numsub:type_name -> ember.v1.PubSubNumSubRequest + 108, // 82: ember.v1.PipelineRequest.pubsub_numpat:type_name -> ember.v1.PubSubNumPatRequest + 8, // 83: ember.v1.PipelineResponse.get:type_name -> ember.v1.GetResponse + 10, // 84: ember.v1.PipelineResponse.set:type_name -> ember.v1.SetResponse + 12, // 85: ember.v1.PipelineResponse.del:type_name -> ember.v1.DelResponse + 3, // 86: ember.v1.PipelineResponse.int_val:type_name -> ember.v1.IntResponse + 4, // 87: ember.v1.PipelineResponse.bool_val:type_name -> ember.v1.BoolResponse + 5, // 88: ember.v1.PipelineResponse.float_val:type_name -> ember.v1.FloatResponse + 6, // 89: ember.v1.PipelineResponse.status:type_name -> ember.v1.StatusResponse + 31, // 90: ember.v1.PipelineResponse.ttl:type_name -> ember.v1.TtlResponse + 33, // 91: ember.v1.PipelineResponse.type:type_name -> ember.v1.TypeResponse + 44, // 92: ember.v1.PipelineResponse.array:type_name -> ember.v1.ArrayResponse + 50, // 93: ember.v1.PipelineResponse.hash:type_name -> ember.v1.HashResponse + 58, // 94: ember.v1.PipelineResponse.optional_array:type_name -> ember.v1.OptionalArrayResponse + 35, // 95: ember.v1.PipelineResponse.keys:type_name -> ember.v1.KeysResponse + 38, // 96: ember.v1.PipelineResponse.scan:type_name -> ember.v1.ScanResponse + 68, // 97: ember.v1.PipelineResponse.optional_float:type_name -> ember.v1.OptionalFloatResponse + 70, // 98: ember.v1.PipelineResponse.optional_int:type_name -> ember.v1.OptionalIntResponse + 73, // 99: ember.v1.PipelineResponse.zrange:type_name -> ember.v1.ZRangeResponse + 76, // 100: ember.v1.PipelineResponse.vsim:type_name -> ember.v1.VSimResponse + 80, // 101: ember.v1.PipelineResponse.vget:type_name -> ember.v1.VGetResponse + 84, // 102: ember.v1.PipelineResponse.vinfo:type_name -> ember.v1.VInfoResponse + 14, // 103: ember.v1.PipelineResponse.mget:type_name -> ember.v1.MGetResponse + 18, // 104: ember.v1.PipelineResponse.mset:type_name -> ember.v1.MSetResponse + 86, // 105: ember.v1.PipelineResponse.ping:type_name -> ember.v1.PingResponse + 112, // 106: ember.v1.PipelineResponse.error:type_name -> ember.v1.ErrorResponse + 90, // 107: ember.v1.PipelineResponse.info:type_name -> ember.v1.InfoResponse + 92, // 108: ember.v1.PipelineResponse.echo:type_name -> ember.v1.EchoResponse + 98, // 109: ember.v1.PipelineResponse.slowlog_get:type_name -> ember.v1.SlowLogGetResponse + 107, // 110: ember.v1.PipelineResponse.pubsub_numsub:type_name -> ember.v1.PubSubNumSubResponse + 2, // 111: ember.v1.ErrorResponse.kind:type_name -> ember.v1.ErrorKind + 7, // 112: ember.v1.EmberCache.Get:input_type -> ember.v1.GetRequest + 9, // 113: ember.v1.EmberCache.Set:input_type -> ember.v1.SetRequest + 11, // 114: ember.v1.EmberCache.Del:input_type -> ember.v1.DelRequest + 13, // 115: ember.v1.EmberCache.MGet:input_type -> ember.v1.MGetRequest + 16, // 116: ember.v1.EmberCache.MSet:input_type -> ember.v1.MSetRequest + 19, // 117: ember.v1.EmberCache.Incr:input_type -> ember.v1.IncrRequest + 20, // 118: ember.v1.EmberCache.IncrBy:input_type -> ember.v1.IncrByRequest + 21, // 119: ember.v1.EmberCache.DecrBy:input_type -> ember.v1.DecrByRequest + 22, // 120: ember.v1.EmberCache.IncrByFloat:input_type -> ember.v1.IncrByFloatRequest + 23, // 121: ember.v1.EmberCache.Append:input_type -> ember.v1.AppendRequest + 24, // 122: ember.v1.EmberCache.Strlen:input_type -> ember.v1.StrlenRequest + 25, // 123: ember.v1.EmberCache.Exists:input_type -> ember.v1.ExistsRequest + 26, // 124: ember.v1.EmberCache.Expire:input_type -> ember.v1.ExpireRequest + 27, // 125: ember.v1.EmberCache.PExpire:input_type -> ember.v1.PExpireRequest + 28, // 126: ember.v1.EmberCache.Persist:input_type -> ember.v1.PersistRequest + 29, // 127: ember.v1.EmberCache.Ttl:input_type -> ember.v1.TtlRequest + 30, // 128: ember.v1.EmberCache.PTtl:input_type -> ember.v1.PTtlRequest + 32, // 129: ember.v1.EmberCache.Type:input_type -> ember.v1.TypeRequest + 34, // 130: ember.v1.EmberCache.Keys:input_type -> ember.v1.KeysRequest + 36, // 131: ember.v1.EmberCache.Rename:input_type -> ember.v1.RenameRequest + 37, // 132: ember.v1.EmberCache.Scan:input_type -> ember.v1.ScanRequest + 39, // 133: ember.v1.EmberCache.LPush:input_type -> ember.v1.LPushRequest + 40, // 134: ember.v1.EmberCache.RPush:input_type -> ember.v1.RPushRequest + 41, // 135: ember.v1.EmberCache.LPop:input_type -> ember.v1.LPopRequest + 42, // 136: ember.v1.EmberCache.RPop:input_type -> ember.v1.RPopRequest + 43, // 137: ember.v1.EmberCache.LRange:input_type -> ember.v1.LRangeRequest + 45, // 138: ember.v1.EmberCache.LLen:input_type -> ember.v1.LLenRequest + 46, // 139: ember.v1.EmberCache.HSet:input_type -> ember.v1.HSetRequest + 48, // 140: ember.v1.EmberCache.HGet:input_type -> ember.v1.HGetRequest + 49, // 141: ember.v1.EmberCache.HGetAll:input_type -> ember.v1.HGetAllRequest + 51, // 142: ember.v1.EmberCache.HDel:input_type -> ember.v1.HDelRequest + 52, // 143: ember.v1.EmberCache.HExists:input_type -> ember.v1.HExistsRequest + 53, // 144: ember.v1.EmberCache.HLen:input_type -> ember.v1.HLenRequest + 54, // 145: ember.v1.EmberCache.HIncrBy:input_type -> ember.v1.HIncrByRequest + 55, // 146: ember.v1.EmberCache.HKeys:input_type -> ember.v1.HKeysRequest + 56, // 147: ember.v1.EmberCache.HVals:input_type -> ember.v1.HValsRequest + 57, // 148: ember.v1.EmberCache.HMGet:input_type -> ember.v1.HMGetRequest + 59, // 149: ember.v1.EmberCache.SAdd:input_type -> ember.v1.SAddRequest + 60, // 150: ember.v1.EmberCache.SRem:input_type -> ember.v1.SRemRequest + 61, // 151: ember.v1.EmberCache.SMembers:input_type -> ember.v1.SMembersRequest + 62, // 152: ember.v1.EmberCache.SIsMember:input_type -> ember.v1.SIsMemberRequest + 63, // 153: ember.v1.EmberCache.SCard:input_type -> ember.v1.SCardRequest + 64, // 154: ember.v1.EmberCache.ZAdd:input_type -> ember.v1.ZAddRequest + 66, // 155: ember.v1.EmberCache.ZRem:input_type -> ember.v1.ZRemRequest + 67, // 156: ember.v1.EmberCache.ZScore:input_type -> ember.v1.ZScoreRequest + 69, // 157: ember.v1.EmberCache.ZRank:input_type -> ember.v1.ZRankRequest + 71, // 158: ember.v1.EmberCache.ZCard:input_type -> ember.v1.ZCardRequest + 72, // 159: ember.v1.EmberCache.ZRange:input_type -> ember.v1.ZRangeRequest + 74, // 160: ember.v1.EmberCache.VAdd:input_type -> ember.v1.VAddRequest + 75, // 161: ember.v1.EmberCache.VSim:input_type -> ember.v1.VSimRequest + 78, // 162: ember.v1.EmberCache.VRem:input_type -> ember.v1.VRemRequest + 79, // 163: ember.v1.EmberCache.VGet:input_type -> ember.v1.VGetRequest + 81, // 164: ember.v1.EmberCache.VCard:input_type -> ember.v1.VCardRequest + 82, // 165: ember.v1.EmberCache.VDim:input_type -> ember.v1.VDimRequest + 83, // 166: ember.v1.EmberCache.VInfo:input_type -> ember.v1.VInfoRequest + 85, // 167: ember.v1.EmberCache.Ping:input_type -> ember.v1.PingRequest + 91, // 168: ember.v1.EmberCache.Echo:input_type -> ember.v1.EchoRequest + 93, // 169: ember.v1.EmberCache.Decr:input_type -> ember.v1.DecrRequest + 94, // 170: ember.v1.EmberCache.Unlink:input_type -> ember.v1.UnlinkRequest + 87, // 171: ember.v1.EmberCache.FlushDb:input_type -> ember.v1.FlushDbRequest + 88, // 172: ember.v1.EmberCache.DbSize:input_type -> ember.v1.DbSizeRequest + 89, // 173: ember.v1.EmberCache.Info:input_type -> ember.v1.InfoRequest + 95, // 174: ember.v1.EmberCache.BgSave:input_type -> ember.v1.BgSaveRequest + 96, // 175: ember.v1.EmberCache.BgRewriteAof:input_type -> ember.v1.BgRewriteAofRequest + 97, // 176: ember.v1.EmberCache.SlowLogGet:input_type -> ember.v1.SlowLogGetRequest + 100, // 177: ember.v1.EmberCache.SlowLogLen:input_type -> ember.v1.SlowLogLenRequest + 101, // 178: ember.v1.EmberCache.SlowLogReset:input_type -> ember.v1.SlowLogResetRequest + 102, // 179: ember.v1.EmberCache.Publish:input_type -> ember.v1.PublishRequest + 103, // 180: ember.v1.EmberCache.Subscribe:input_type -> ember.v1.SubscribeRequest + 105, // 181: ember.v1.EmberCache.PubSubChannels:input_type -> ember.v1.PubSubChannelsRequest + 106, // 182: ember.v1.EmberCache.PubSubNumSub:input_type -> ember.v1.PubSubNumSubRequest + 108, // 183: ember.v1.EmberCache.PubSubNumPat:input_type -> ember.v1.PubSubNumPatRequest + 110, // 184: ember.v1.EmberCache.Pipeline:input_type -> ember.v1.PipelineRequest + 8, // 185: ember.v1.EmberCache.Get:output_type -> ember.v1.GetResponse + 10, // 186: ember.v1.EmberCache.Set:output_type -> ember.v1.SetResponse + 12, // 187: ember.v1.EmberCache.Del:output_type -> ember.v1.DelResponse + 14, // 188: ember.v1.EmberCache.MGet:output_type -> ember.v1.MGetResponse + 18, // 189: ember.v1.EmberCache.MSet:output_type -> ember.v1.MSetResponse + 3, // 190: ember.v1.EmberCache.Incr:output_type -> ember.v1.IntResponse + 3, // 191: ember.v1.EmberCache.IncrBy:output_type -> ember.v1.IntResponse + 3, // 192: ember.v1.EmberCache.DecrBy:output_type -> ember.v1.IntResponse + 5, // 193: ember.v1.EmberCache.IncrByFloat:output_type -> ember.v1.FloatResponse + 3, // 194: ember.v1.EmberCache.Append:output_type -> ember.v1.IntResponse + 3, // 195: ember.v1.EmberCache.Strlen:output_type -> ember.v1.IntResponse + 3, // 196: ember.v1.EmberCache.Exists:output_type -> ember.v1.IntResponse + 4, // 197: ember.v1.EmberCache.Expire:output_type -> ember.v1.BoolResponse + 4, // 198: ember.v1.EmberCache.PExpire:output_type -> ember.v1.BoolResponse + 4, // 199: ember.v1.EmberCache.Persist:output_type -> ember.v1.BoolResponse + 31, // 200: ember.v1.EmberCache.Ttl:output_type -> ember.v1.TtlResponse + 31, // 201: ember.v1.EmberCache.PTtl:output_type -> ember.v1.TtlResponse + 33, // 202: ember.v1.EmberCache.Type:output_type -> ember.v1.TypeResponse + 35, // 203: ember.v1.EmberCache.Keys:output_type -> ember.v1.KeysResponse + 6, // 204: ember.v1.EmberCache.Rename:output_type -> ember.v1.StatusResponse + 38, // 205: ember.v1.EmberCache.Scan:output_type -> ember.v1.ScanResponse + 3, // 206: ember.v1.EmberCache.LPush:output_type -> ember.v1.IntResponse + 3, // 207: ember.v1.EmberCache.RPush:output_type -> ember.v1.IntResponse + 8, // 208: ember.v1.EmberCache.LPop:output_type -> ember.v1.GetResponse + 8, // 209: ember.v1.EmberCache.RPop:output_type -> ember.v1.GetResponse + 44, // 210: ember.v1.EmberCache.LRange:output_type -> ember.v1.ArrayResponse + 3, // 211: ember.v1.EmberCache.LLen:output_type -> ember.v1.IntResponse + 3, // 212: ember.v1.EmberCache.HSet:output_type -> ember.v1.IntResponse + 8, // 213: ember.v1.EmberCache.HGet:output_type -> ember.v1.GetResponse + 50, // 214: ember.v1.EmberCache.HGetAll:output_type -> ember.v1.HashResponse + 3, // 215: ember.v1.EmberCache.HDel:output_type -> ember.v1.IntResponse + 4, // 216: ember.v1.EmberCache.HExists:output_type -> ember.v1.BoolResponse + 3, // 217: ember.v1.EmberCache.HLen:output_type -> ember.v1.IntResponse + 3, // 218: ember.v1.EmberCache.HIncrBy:output_type -> ember.v1.IntResponse + 35, // 219: ember.v1.EmberCache.HKeys:output_type -> ember.v1.KeysResponse + 44, // 220: ember.v1.EmberCache.HVals:output_type -> ember.v1.ArrayResponse + 58, // 221: ember.v1.EmberCache.HMGet:output_type -> ember.v1.OptionalArrayResponse + 3, // 222: ember.v1.EmberCache.SAdd:output_type -> ember.v1.IntResponse + 3, // 223: ember.v1.EmberCache.SRem:output_type -> ember.v1.IntResponse + 35, // 224: ember.v1.EmberCache.SMembers:output_type -> ember.v1.KeysResponse + 4, // 225: ember.v1.EmberCache.SIsMember:output_type -> ember.v1.BoolResponse + 3, // 226: ember.v1.EmberCache.SCard:output_type -> ember.v1.IntResponse + 3, // 227: ember.v1.EmberCache.ZAdd:output_type -> ember.v1.IntResponse + 3, // 228: ember.v1.EmberCache.ZRem:output_type -> ember.v1.IntResponse + 68, // 229: ember.v1.EmberCache.ZScore:output_type -> ember.v1.OptionalFloatResponse + 70, // 230: ember.v1.EmberCache.ZRank:output_type -> ember.v1.OptionalIntResponse + 3, // 231: ember.v1.EmberCache.ZCard:output_type -> ember.v1.IntResponse + 73, // 232: ember.v1.EmberCache.ZRange:output_type -> ember.v1.ZRangeResponse + 4, // 233: ember.v1.EmberCache.VAdd:output_type -> ember.v1.BoolResponse + 76, // 234: ember.v1.EmberCache.VSim:output_type -> ember.v1.VSimResponse + 4, // 235: ember.v1.EmberCache.VRem:output_type -> ember.v1.BoolResponse + 80, // 236: ember.v1.EmberCache.VGet:output_type -> ember.v1.VGetResponse + 3, // 237: ember.v1.EmberCache.VCard:output_type -> ember.v1.IntResponse + 3, // 238: ember.v1.EmberCache.VDim:output_type -> ember.v1.IntResponse + 84, // 239: ember.v1.EmberCache.VInfo:output_type -> ember.v1.VInfoResponse + 86, // 240: ember.v1.EmberCache.Ping:output_type -> ember.v1.PingResponse + 92, // 241: ember.v1.EmberCache.Echo:output_type -> ember.v1.EchoResponse + 3, // 242: ember.v1.EmberCache.Decr:output_type -> ember.v1.IntResponse + 12, // 243: ember.v1.EmberCache.Unlink:output_type -> ember.v1.DelResponse + 6, // 244: ember.v1.EmberCache.FlushDb:output_type -> ember.v1.StatusResponse + 3, // 245: ember.v1.EmberCache.DbSize:output_type -> ember.v1.IntResponse + 90, // 246: ember.v1.EmberCache.Info:output_type -> ember.v1.InfoResponse + 6, // 247: ember.v1.EmberCache.BgSave:output_type -> ember.v1.StatusResponse + 6, // 248: ember.v1.EmberCache.BgRewriteAof:output_type -> ember.v1.StatusResponse + 98, // 249: ember.v1.EmberCache.SlowLogGet:output_type -> ember.v1.SlowLogGetResponse + 3, // 250: ember.v1.EmberCache.SlowLogLen:output_type -> ember.v1.IntResponse + 6, // 251: ember.v1.EmberCache.SlowLogReset:output_type -> ember.v1.StatusResponse + 3, // 252: ember.v1.EmberCache.Publish:output_type -> ember.v1.IntResponse + 104, // 253: ember.v1.EmberCache.Subscribe:output_type -> ember.v1.SubscribeEvent + 35, // 254: ember.v1.EmberCache.PubSubChannels:output_type -> ember.v1.KeysResponse + 107, // 255: ember.v1.EmberCache.PubSubNumSub:output_type -> ember.v1.PubSubNumSubResponse + 3, // 256: ember.v1.EmberCache.PubSubNumPat:output_type -> ember.v1.IntResponse + 111, // 257: ember.v1.EmberCache.Pipeline:output_type -> ember.v1.PipelineResponse + 185, // [185:258] is the sub-list for method output_type + 112, // [112:185] is the sub-list for method input_type + 112, // [112:112] is the sub-list for extension type_name + 112, // [112:112] is the sub-list for extension extendee + 0, // [0:112] is the sub-list for field type_name } func init() { file_ember_v1_ember_proto_init() } @@ -6778,7 +8029,10 @@ func file_ember_v1_ember_proto_init() { file_ember_v1_ember_proto_msgTypes[77].OneofWrappers = []any{} file_ember_v1_ember_proto_msgTypes[82].OneofWrappers = []any{} file_ember_v1_ember_proto_msgTypes[86].OneofWrappers = []any{} - file_ember_v1_ember_proto_msgTypes[88].OneofWrappers = []any{ + file_ember_v1_ember_proto_msgTypes[94].OneofWrappers = []any{} + file_ember_v1_ember_proto_msgTypes[101].OneofWrappers = []any{} + file_ember_v1_ember_proto_msgTypes[102].OneofWrappers = []any{} + file_ember_v1_ember_proto_msgTypes[107].OneofWrappers = []any{ (*PipelineRequest_Get)(nil), (*PipelineRequest_Set)(nil), (*PipelineRequest_Del)(nil), @@ -6837,8 +8091,20 @@ func file_ember_v1_ember_proto_init() { (*PipelineRequest_Keys)(nil), (*PipelineRequest_Rename)(nil), (*PipelineRequest_Scan)(nil), - } - file_ember_v1_ember_proto_msgTypes[89].OneofWrappers = []any{ + (*PipelineRequest_Echo)(nil), + (*PipelineRequest_Decr)(nil), + (*PipelineRequest_Unlink)(nil), + (*PipelineRequest_Bgsave)(nil), + (*PipelineRequest_Bgrewriteaof)(nil), + (*PipelineRequest_SlowlogGet)(nil), + (*PipelineRequest_SlowlogLen)(nil), + (*PipelineRequest_SlowlogReset)(nil), + (*PipelineRequest_Publish)(nil), + (*PipelineRequest_PubsubChannels)(nil), + (*PipelineRequest_PubsubNumsub)(nil), + (*PipelineRequest_PubsubNumpat)(nil), + } + file_ember_v1_ember_proto_msgTypes[108].OneofWrappers = []any{ (*PipelineResponse_Get)(nil), (*PipelineResponse_Set)(nil), (*PipelineResponse_Del)(nil), @@ -6864,6 +8130,9 @@ func file_ember_v1_ember_proto_init() { (*PipelineResponse_Ping)(nil), (*PipelineResponse_Error)(nil), (*PipelineResponse_Info)(nil), + (*PipelineResponse_Echo)(nil), + (*PipelineResponse_SlowlogGet)(nil), + (*PipelineResponse_PubsubNumsub)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -6871,7 +8140,7 @@ func file_ember_v1_ember_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_ember_v1_ember_proto_rawDesc), len(file_ember_v1_ember_proto_rawDesc)), NumEnums: 3, - NumMessages: 91, + NumMessages: 110, NumExtensions: 0, NumServices: 1, }, diff --git a/clients/ember-go/proto/ember/v1/ember_grpc.pb.go b/clients/ember-go/proto/ember/v1/ember_grpc.pb.go index b97274f1..b1da762c 100644 --- a/clients/ember-go/proto/ember/v1/ember_grpc.pb.go +++ b/clients/ember-go/proto/ember/v1/ember_grpc.pb.go @@ -19,66 +19,79 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - EmberCache_Get_FullMethodName = "/ember.v1.EmberCache/Get" - EmberCache_Set_FullMethodName = "/ember.v1.EmberCache/Set" - EmberCache_Del_FullMethodName = "/ember.v1.EmberCache/Del" - EmberCache_MGet_FullMethodName = "/ember.v1.EmberCache/MGet" - EmberCache_MSet_FullMethodName = "/ember.v1.EmberCache/MSet" - EmberCache_Incr_FullMethodName = "/ember.v1.EmberCache/Incr" - EmberCache_IncrBy_FullMethodName = "/ember.v1.EmberCache/IncrBy" - EmberCache_DecrBy_FullMethodName = "/ember.v1.EmberCache/DecrBy" - EmberCache_IncrByFloat_FullMethodName = "/ember.v1.EmberCache/IncrByFloat" - EmberCache_Append_FullMethodName = "/ember.v1.EmberCache/Append" - EmberCache_Strlen_FullMethodName = "/ember.v1.EmberCache/Strlen" - EmberCache_Exists_FullMethodName = "/ember.v1.EmberCache/Exists" - EmberCache_Expire_FullMethodName = "/ember.v1.EmberCache/Expire" - EmberCache_PExpire_FullMethodName = "/ember.v1.EmberCache/PExpire" - EmberCache_Persist_FullMethodName = "/ember.v1.EmberCache/Persist" - EmberCache_Ttl_FullMethodName = "/ember.v1.EmberCache/Ttl" - EmberCache_PTtl_FullMethodName = "/ember.v1.EmberCache/PTtl" - EmberCache_Type_FullMethodName = "/ember.v1.EmberCache/Type" - EmberCache_Keys_FullMethodName = "/ember.v1.EmberCache/Keys" - EmberCache_Rename_FullMethodName = "/ember.v1.EmberCache/Rename" - EmberCache_Scan_FullMethodName = "/ember.v1.EmberCache/Scan" - EmberCache_LPush_FullMethodName = "/ember.v1.EmberCache/LPush" - EmberCache_RPush_FullMethodName = "/ember.v1.EmberCache/RPush" - EmberCache_LPop_FullMethodName = "/ember.v1.EmberCache/LPop" - EmberCache_RPop_FullMethodName = "/ember.v1.EmberCache/RPop" - EmberCache_LRange_FullMethodName = "/ember.v1.EmberCache/LRange" - EmberCache_LLen_FullMethodName = "/ember.v1.EmberCache/LLen" - EmberCache_HSet_FullMethodName = "/ember.v1.EmberCache/HSet" - EmberCache_HGet_FullMethodName = "/ember.v1.EmberCache/HGet" - EmberCache_HGetAll_FullMethodName = "/ember.v1.EmberCache/HGetAll" - EmberCache_HDel_FullMethodName = "/ember.v1.EmberCache/HDel" - EmberCache_HExists_FullMethodName = "/ember.v1.EmberCache/HExists" - EmberCache_HLen_FullMethodName = "/ember.v1.EmberCache/HLen" - EmberCache_HIncrBy_FullMethodName = "/ember.v1.EmberCache/HIncrBy" - EmberCache_HKeys_FullMethodName = "/ember.v1.EmberCache/HKeys" - EmberCache_HVals_FullMethodName = "/ember.v1.EmberCache/HVals" - EmberCache_HMGet_FullMethodName = "/ember.v1.EmberCache/HMGet" - EmberCache_SAdd_FullMethodName = "/ember.v1.EmberCache/SAdd" - EmberCache_SRem_FullMethodName = "/ember.v1.EmberCache/SRem" - EmberCache_SMembers_FullMethodName = "/ember.v1.EmberCache/SMembers" - EmberCache_SIsMember_FullMethodName = "/ember.v1.EmberCache/SIsMember" - EmberCache_SCard_FullMethodName = "/ember.v1.EmberCache/SCard" - EmberCache_ZAdd_FullMethodName = "/ember.v1.EmberCache/ZAdd" - EmberCache_ZRem_FullMethodName = "/ember.v1.EmberCache/ZRem" - EmberCache_ZScore_FullMethodName = "/ember.v1.EmberCache/ZScore" - EmberCache_ZRank_FullMethodName = "/ember.v1.EmberCache/ZRank" - EmberCache_ZCard_FullMethodName = "/ember.v1.EmberCache/ZCard" - EmberCache_ZRange_FullMethodName = "/ember.v1.EmberCache/ZRange" - EmberCache_VAdd_FullMethodName = "/ember.v1.EmberCache/VAdd" - EmberCache_VSim_FullMethodName = "/ember.v1.EmberCache/VSim" - EmberCache_VRem_FullMethodName = "/ember.v1.EmberCache/VRem" - EmberCache_VGet_FullMethodName = "/ember.v1.EmberCache/VGet" - EmberCache_VCard_FullMethodName = "/ember.v1.EmberCache/VCard" - EmberCache_VDim_FullMethodName = "/ember.v1.EmberCache/VDim" - EmberCache_VInfo_FullMethodName = "/ember.v1.EmberCache/VInfo" - EmberCache_Ping_FullMethodName = "/ember.v1.EmberCache/Ping" - EmberCache_FlushDb_FullMethodName = "/ember.v1.EmberCache/FlushDb" - EmberCache_DbSize_FullMethodName = "/ember.v1.EmberCache/DbSize" - EmberCache_Info_FullMethodName = "/ember.v1.EmberCache/Info" - EmberCache_Pipeline_FullMethodName = "/ember.v1.EmberCache/Pipeline" + EmberCache_Get_FullMethodName = "/ember.v1.EmberCache/Get" + EmberCache_Set_FullMethodName = "/ember.v1.EmberCache/Set" + EmberCache_Del_FullMethodName = "/ember.v1.EmberCache/Del" + EmberCache_MGet_FullMethodName = "/ember.v1.EmberCache/MGet" + EmberCache_MSet_FullMethodName = "/ember.v1.EmberCache/MSet" + EmberCache_Incr_FullMethodName = "/ember.v1.EmberCache/Incr" + EmberCache_IncrBy_FullMethodName = "/ember.v1.EmberCache/IncrBy" + EmberCache_DecrBy_FullMethodName = "/ember.v1.EmberCache/DecrBy" + EmberCache_IncrByFloat_FullMethodName = "/ember.v1.EmberCache/IncrByFloat" + EmberCache_Append_FullMethodName = "/ember.v1.EmberCache/Append" + EmberCache_Strlen_FullMethodName = "/ember.v1.EmberCache/Strlen" + EmberCache_Exists_FullMethodName = "/ember.v1.EmberCache/Exists" + EmberCache_Expire_FullMethodName = "/ember.v1.EmberCache/Expire" + EmberCache_PExpire_FullMethodName = "/ember.v1.EmberCache/PExpire" + EmberCache_Persist_FullMethodName = "/ember.v1.EmberCache/Persist" + EmberCache_Ttl_FullMethodName = "/ember.v1.EmberCache/Ttl" + EmberCache_PTtl_FullMethodName = "/ember.v1.EmberCache/PTtl" + EmberCache_Type_FullMethodName = "/ember.v1.EmberCache/Type" + EmberCache_Keys_FullMethodName = "/ember.v1.EmberCache/Keys" + EmberCache_Rename_FullMethodName = "/ember.v1.EmberCache/Rename" + EmberCache_Scan_FullMethodName = "/ember.v1.EmberCache/Scan" + EmberCache_LPush_FullMethodName = "/ember.v1.EmberCache/LPush" + EmberCache_RPush_FullMethodName = "/ember.v1.EmberCache/RPush" + EmberCache_LPop_FullMethodName = "/ember.v1.EmberCache/LPop" + EmberCache_RPop_FullMethodName = "/ember.v1.EmberCache/RPop" + EmberCache_LRange_FullMethodName = "/ember.v1.EmberCache/LRange" + EmberCache_LLen_FullMethodName = "/ember.v1.EmberCache/LLen" + EmberCache_HSet_FullMethodName = "/ember.v1.EmberCache/HSet" + EmberCache_HGet_FullMethodName = "/ember.v1.EmberCache/HGet" + EmberCache_HGetAll_FullMethodName = "/ember.v1.EmberCache/HGetAll" + EmberCache_HDel_FullMethodName = "/ember.v1.EmberCache/HDel" + EmberCache_HExists_FullMethodName = "/ember.v1.EmberCache/HExists" + EmberCache_HLen_FullMethodName = "/ember.v1.EmberCache/HLen" + EmberCache_HIncrBy_FullMethodName = "/ember.v1.EmberCache/HIncrBy" + EmberCache_HKeys_FullMethodName = "/ember.v1.EmberCache/HKeys" + EmberCache_HVals_FullMethodName = "/ember.v1.EmberCache/HVals" + EmberCache_HMGet_FullMethodName = "/ember.v1.EmberCache/HMGet" + EmberCache_SAdd_FullMethodName = "/ember.v1.EmberCache/SAdd" + EmberCache_SRem_FullMethodName = "/ember.v1.EmberCache/SRem" + EmberCache_SMembers_FullMethodName = "/ember.v1.EmberCache/SMembers" + EmberCache_SIsMember_FullMethodName = "/ember.v1.EmberCache/SIsMember" + EmberCache_SCard_FullMethodName = "/ember.v1.EmberCache/SCard" + EmberCache_ZAdd_FullMethodName = "/ember.v1.EmberCache/ZAdd" + EmberCache_ZRem_FullMethodName = "/ember.v1.EmberCache/ZRem" + EmberCache_ZScore_FullMethodName = "/ember.v1.EmberCache/ZScore" + EmberCache_ZRank_FullMethodName = "/ember.v1.EmberCache/ZRank" + EmberCache_ZCard_FullMethodName = "/ember.v1.EmberCache/ZCard" + EmberCache_ZRange_FullMethodName = "/ember.v1.EmberCache/ZRange" + EmberCache_VAdd_FullMethodName = "/ember.v1.EmberCache/VAdd" + EmberCache_VSim_FullMethodName = "/ember.v1.EmberCache/VSim" + EmberCache_VRem_FullMethodName = "/ember.v1.EmberCache/VRem" + EmberCache_VGet_FullMethodName = "/ember.v1.EmberCache/VGet" + EmberCache_VCard_FullMethodName = "/ember.v1.EmberCache/VCard" + EmberCache_VDim_FullMethodName = "/ember.v1.EmberCache/VDim" + EmberCache_VInfo_FullMethodName = "/ember.v1.EmberCache/VInfo" + EmberCache_Ping_FullMethodName = "/ember.v1.EmberCache/Ping" + EmberCache_Echo_FullMethodName = "/ember.v1.EmberCache/Echo" + EmberCache_Decr_FullMethodName = "/ember.v1.EmberCache/Decr" + EmberCache_Unlink_FullMethodName = "/ember.v1.EmberCache/Unlink" + EmberCache_FlushDb_FullMethodName = "/ember.v1.EmberCache/FlushDb" + EmberCache_DbSize_FullMethodName = "/ember.v1.EmberCache/DbSize" + EmberCache_Info_FullMethodName = "/ember.v1.EmberCache/Info" + EmberCache_BgSave_FullMethodName = "/ember.v1.EmberCache/BgSave" + EmberCache_BgRewriteAof_FullMethodName = "/ember.v1.EmberCache/BgRewriteAof" + EmberCache_SlowLogGet_FullMethodName = "/ember.v1.EmberCache/SlowLogGet" + EmberCache_SlowLogLen_FullMethodName = "/ember.v1.EmberCache/SlowLogLen" + EmberCache_SlowLogReset_FullMethodName = "/ember.v1.EmberCache/SlowLogReset" + EmberCache_Publish_FullMethodName = "/ember.v1.EmberCache/Publish" + EmberCache_Subscribe_FullMethodName = "/ember.v1.EmberCache/Subscribe" + EmberCache_PubSubChannels_FullMethodName = "/ember.v1.EmberCache/PubSubChannels" + EmberCache_PubSubNumSub_FullMethodName = "/ember.v1.EmberCache/PubSubNumSub" + EmberCache_PubSubNumPat_FullMethodName = "/ember.v1.EmberCache/PubSubNumPat" + EmberCache_Pipeline_FullMethodName = "/ember.v1.EmberCache/Pipeline" ) // EmberCacheClient is the client API for EmberCache service. @@ -145,9 +158,22 @@ type EmberCacheClient interface { VDim(ctx context.Context, in *VDimRequest, opts ...grpc.CallOption) (*IntResponse, error) VInfo(ctx context.Context, in *VInfoRequest, opts ...grpc.CallOption) (*VInfoResponse, error) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) + Echo(ctx context.Context, in *EchoRequest, opts ...grpc.CallOption) (*EchoResponse, error) + Decr(ctx context.Context, in *DecrRequest, opts ...grpc.CallOption) (*IntResponse, error) + Unlink(ctx context.Context, in *UnlinkRequest, opts ...grpc.CallOption) (*DelResponse, error) FlushDb(ctx context.Context, in *FlushDbRequest, opts ...grpc.CallOption) (*StatusResponse, error) DbSize(ctx context.Context, in *DbSizeRequest, opts ...grpc.CallOption) (*IntResponse, error) Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error) + BgSave(ctx context.Context, in *BgSaveRequest, opts ...grpc.CallOption) (*StatusResponse, error) + BgRewriteAof(ctx context.Context, in *BgRewriteAofRequest, opts ...grpc.CallOption) (*StatusResponse, error) + SlowLogGet(ctx context.Context, in *SlowLogGetRequest, opts ...grpc.CallOption) (*SlowLogGetResponse, error) + SlowLogLen(ctx context.Context, in *SlowLogLenRequest, opts ...grpc.CallOption) (*IntResponse, error) + SlowLogReset(ctx context.Context, in *SlowLogResetRequest, opts ...grpc.CallOption) (*StatusResponse, error) + Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*IntResponse, error) + Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscribeEvent], error) + PubSubChannels(ctx context.Context, in *PubSubChannelsRequest, opts ...grpc.CallOption) (*KeysResponse, error) + PubSubNumSub(ctx context.Context, in *PubSubNumSubRequest, opts ...grpc.CallOption) (*PubSubNumSubResponse, error) + PubSubNumPat(ctx context.Context, in *PubSubNumPatRequest, opts ...grpc.CallOption) (*IntResponse, error) Pipeline(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[PipelineRequest, PipelineResponse], error) } @@ -719,6 +745,36 @@ func (c *emberCacheClient) Ping(ctx context.Context, in *PingRequest, opts ...gr return out, nil } +func (c *emberCacheClient) Echo(ctx context.Context, in *EchoRequest, opts ...grpc.CallOption) (*EchoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(EchoResponse) + err := c.cc.Invoke(ctx, EmberCache_Echo_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) Decr(ctx context.Context, in *DecrRequest, opts ...grpc.CallOption) (*IntResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IntResponse) + err := c.cc.Invoke(ctx, EmberCache_Decr_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) Unlink(ctx context.Context, in *UnlinkRequest, opts ...grpc.CallOption) (*DelResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DelResponse) + err := c.cc.Invoke(ctx, EmberCache_Unlink_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *emberCacheClient) FlushDb(ctx context.Context, in *FlushDbRequest, opts ...grpc.CallOption) (*StatusResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(StatusResponse) @@ -749,9 +805,118 @@ func (c *emberCacheClient) Info(ctx context.Context, in *InfoRequest, opts ...gr return out, nil } +func (c *emberCacheClient) BgSave(ctx context.Context, in *BgSaveRequest, opts ...grpc.CallOption) (*StatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(StatusResponse) + err := c.cc.Invoke(ctx, EmberCache_BgSave_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) BgRewriteAof(ctx context.Context, in *BgRewriteAofRequest, opts ...grpc.CallOption) (*StatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(StatusResponse) + err := c.cc.Invoke(ctx, EmberCache_BgRewriteAof_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) SlowLogGet(ctx context.Context, in *SlowLogGetRequest, opts ...grpc.CallOption) (*SlowLogGetResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SlowLogGetResponse) + err := c.cc.Invoke(ctx, EmberCache_SlowLogGet_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) SlowLogLen(ctx context.Context, in *SlowLogLenRequest, opts ...grpc.CallOption) (*IntResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IntResponse) + err := c.cc.Invoke(ctx, EmberCache_SlowLogLen_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) SlowLogReset(ctx context.Context, in *SlowLogResetRequest, opts ...grpc.CallOption) (*StatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(StatusResponse) + err := c.cc.Invoke(ctx, EmberCache_SlowLogReset_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*IntResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IntResponse) + err := c.cc.Invoke(ctx, EmberCache_Publish_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscribeEvent], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &EmberCache_ServiceDesc.Streams[0], EmberCache_Subscribe_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[SubscribeRequest, SubscribeEvent]{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 EmberCache_SubscribeClient = grpc.ServerStreamingClient[SubscribeEvent] + +func (c *emberCacheClient) PubSubChannels(ctx context.Context, in *PubSubChannelsRequest, opts ...grpc.CallOption) (*KeysResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(KeysResponse) + err := c.cc.Invoke(ctx, EmberCache_PubSubChannels_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) PubSubNumSub(ctx context.Context, in *PubSubNumSubRequest, opts ...grpc.CallOption) (*PubSubNumSubResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PubSubNumSubResponse) + err := c.cc.Invoke(ctx, EmberCache_PubSubNumSub_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *emberCacheClient) PubSubNumPat(ctx context.Context, in *PubSubNumPatRequest, opts ...grpc.CallOption) (*IntResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IntResponse) + err := c.cc.Invoke(ctx, EmberCache_PubSubNumPat_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *emberCacheClient) Pipeline(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[PipelineRequest, PipelineResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - stream, err := c.cc.NewStream(ctx, &EmberCache_ServiceDesc.Streams[0], EmberCache_Pipeline_FullMethodName, cOpts...) + stream, err := c.cc.NewStream(ctx, &EmberCache_ServiceDesc.Streams[1], EmberCache_Pipeline_FullMethodName, cOpts...) if err != nil { return nil, err } @@ -826,9 +991,22 @@ type EmberCacheServer interface { VDim(context.Context, *VDimRequest) (*IntResponse, error) VInfo(context.Context, *VInfoRequest) (*VInfoResponse, error) Ping(context.Context, *PingRequest) (*PingResponse, error) + Echo(context.Context, *EchoRequest) (*EchoResponse, error) + Decr(context.Context, *DecrRequest) (*IntResponse, error) + Unlink(context.Context, *UnlinkRequest) (*DelResponse, error) FlushDb(context.Context, *FlushDbRequest) (*StatusResponse, error) DbSize(context.Context, *DbSizeRequest) (*IntResponse, error) Info(context.Context, *InfoRequest) (*InfoResponse, error) + BgSave(context.Context, *BgSaveRequest) (*StatusResponse, error) + BgRewriteAof(context.Context, *BgRewriteAofRequest) (*StatusResponse, error) + SlowLogGet(context.Context, *SlowLogGetRequest) (*SlowLogGetResponse, error) + SlowLogLen(context.Context, *SlowLogLenRequest) (*IntResponse, error) + SlowLogReset(context.Context, *SlowLogResetRequest) (*StatusResponse, error) + Publish(context.Context, *PublishRequest) (*IntResponse, error) + Subscribe(*SubscribeRequest, grpc.ServerStreamingServer[SubscribeEvent]) error + PubSubChannels(context.Context, *PubSubChannelsRequest) (*KeysResponse, error) + PubSubNumSub(context.Context, *PubSubNumSubRequest) (*PubSubNumSubResponse, error) + PubSubNumPat(context.Context, *PubSubNumPatRequest) (*IntResponse, error) Pipeline(grpc.BidiStreamingServer[PipelineRequest, PipelineResponse]) error mustEmbedUnimplementedEmberCacheServer() } @@ -1008,6 +1186,15 @@ func (UnimplementedEmberCacheServer) VInfo(context.Context, *VInfoRequest) (*VIn func (UnimplementedEmberCacheServer) Ping(context.Context, *PingRequest) (*PingResponse, error) { return nil, status.Error(codes.Unimplemented, "method Ping not implemented") } +func (UnimplementedEmberCacheServer) Echo(context.Context, *EchoRequest) (*EchoResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Echo not implemented") +} +func (UnimplementedEmberCacheServer) Decr(context.Context, *DecrRequest) (*IntResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Decr not implemented") +} +func (UnimplementedEmberCacheServer) Unlink(context.Context, *UnlinkRequest) (*DelResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Unlink not implemented") +} func (UnimplementedEmberCacheServer) FlushDb(context.Context, *FlushDbRequest) (*StatusResponse, error) { return nil, status.Error(codes.Unimplemented, "method FlushDb not implemented") } @@ -1017,6 +1204,36 @@ func (UnimplementedEmberCacheServer) DbSize(context.Context, *DbSizeRequest) (*I func (UnimplementedEmberCacheServer) Info(context.Context, *InfoRequest) (*InfoResponse, error) { return nil, status.Error(codes.Unimplemented, "method Info not implemented") } +func (UnimplementedEmberCacheServer) BgSave(context.Context, *BgSaveRequest) (*StatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method BgSave not implemented") +} +func (UnimplementedEmberCacheServer) BgRewriteAof(context.Context, *BgRewriteAofRequest) (*StatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method BgRewriteAof not implemented") +} +func (UnimplementedEmberCacheServer) SlowLogGet(context.Context, *SlowLogGetRequest) (*SlowLogGetResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SlowLogGet not implemented") +} +func (UnimplementedEmberCacheServer) SlowLogLen(context.Context, *SlowLogLenRequest) (*IntResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SlowLogLen not implemented") +} +func (UnimplementedEmberCacheServer) SlowLogReset(context.Context, *SlowLogResetRequest) (*StatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SlowLogReset not implemented") +} +func (UnimplementedEmberCacheServer) Publish(context.Context, *PublishRequest) (*IntResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Publish not implemented") +} +func (UnimplementedEmberCacheServer) Subscribe(*SubscribeRequest, grpc.ServerStreamingServer[SubscribeEvent]) error { + return status.Error(codes.Unimplemented, "method Subscribe not implemented") +} +func (UnimplementedEmberCacheServer) PubSubChannels(context.Context, *PubSubChannelsRequest) (*KeysResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PubSubChannels not implemented") +} +func (UnimplementedEmberCacheServer) PubSubNumSub(context.Context, *PubSubNumSubRequest) (*PubSubNumSubResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PubSubNumSub not implemented") +} +func (UnimplementedEmberCacheServer) PubSubNumPat(context.Context, *PubSubNumPatRequest) (*IntResponse, error) { + return nil, status.Error(codes.Unimplemented, "method PubSubNumPat not implemented") +} func (UnimplementedEmberCacheServer) Pipeline(grpc.BidiStreamingServer[PipelineRequest, PipelineResponse]) error { return status.Error(codes.Unimplemented, "method Pipeline not implemented") } @@ -2049,6 +2266,60 @@ func _EmberCache_Ping_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _EmberCache_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EchoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).Echo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_Echo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).Echo(ctx, req.(*EchoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_Decr_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DecrRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).Decr(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_Decr_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).Decr(ctx, req.(*DecrRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_Unlink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UnlinkRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).Unlink(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_Unlink_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).Unlink(ctx, req.(*UnlinkRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _EmberCache_FlushDb_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(FlushDbRequest) if err := dec(in); err != nil { @@ -2103,6 +2374,179 @@ func _EmberCache_Info_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _EmberCache_BgSave_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BgSaveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).BgSave(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_BgSave_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).BgSave(ctx, req.(*BgSaveRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_BgRewriteAof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BgRewriteAofRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).BgRewriteAof(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_BgRewriteAof_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).BgRewriteAof(ctx, req.(*BgRewriteAofRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_SlowLogGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SlowLogGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).SlowLogGet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_SlowLogGet_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).SlowLogGet(ctx, req.(*SlowLogGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_SlowLogLen_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SlowLogLenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).SlowLogLen(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_SlowLogLen_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).SlowLogLen(ctx, req.(*SlowLogLenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_SlowLogReset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SlowLogResetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).SlowLogReset(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_SlowLogReset_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).SlowLogReset(ctx, req.(*SlowLogResetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_Publish_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PublishRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).Publish(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_Publish_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).Publish(ctx, req.(*PublishRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribeRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(EmberCacheServer).Subscribe(m, &grpc.GenericServerStream[SubscribeRequest, SubscribeEvent]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type EmberCache_SubscribeServer = grpc.ServerStreamingServer[SubscribeEvent] + +func _EmberCache_PubSubChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PubSubChannelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).PubSubChannels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_PubSubChannels_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).PubSubChannels(ctx, req.(*PubSubChannelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_PubSubNumSub_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PubSubNumSubRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).PubSubNumSub(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_PubSubNumSub_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).PubSubNumSub(ctx, req.(*PubSubNumSubRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EmberCache_PubSubNumPat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PubSubNumPatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EmberCacheServer).PubSubNumPat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EmberCache_PubSubNumPat_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EmberCacheServer).PubSubNumPat(ctx, req.(*PubSubNumPatRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _EmberCache_Pipeline_Handler(srv interface{}, stream grpc.ServerStream) error { return srv.(EmberCacheServer).Pipeline(&grpc.GenericServerStream[PipelineRequest, PipelineResponse]{ServerStream: stream}) } @@ -2341,6 +2785,18 @@ var EmberCache_ServiceDesc = grpc.ServiceDesc{ MethodName: "Ping", Handler: _EmberCache_Ping_Handler, }, + { + MethodName: "Echo", + Handler: _EmberCache_Echo_Handler, + }, + { + MethodName: "Decr", + Handler: _EmberCache_Decr_Handler, + }, + { + MethodName: "Unlink", + Handler: _EmberCache_Unlink_Handler, + }, { MethodName: "FlushDb", Handler: _EmberCache_FlushDb_Handler, @@ -2353,8 +2809,49 @@ var EmberCache_ServiceDesc = grpc.ServiceDesc{ MethodName: "Info", Handler: _EmberCache_Info_Handler, }, + { + MethodName: "BgSave", + Handler: _EmberCache_BgSave_Handler, + }, + { + MethodName: "BgRewriteAof", + Handler: _EmberCache_BgRewriteAof_Handler, + }, + { + MethodName: "SlowLogGet", + Handler: _EmberCache_SlowLogGet_Handler, + }, + { + MethodName: "SlowLogLen", + Handler: _EmberCache_SlowLogLen_Handler, + }, + { + MethodName: "SlowLogReset", + Handler: _EmberCache_SlowLogReset_Handler, + }, + { + MethodName: "Publish", + Handler: _EmberCache_Publish_Handler, + }, + { + MethodName: "PubSubChannels", + Handler: _EmberCache_PubSubChannels_Handler, + }, + { + MethodName: "PubSubNumSub", + Handler: _EmberCache_PubSubNumSub_Handler, + }, + { + MethodName: "PubSubNumPat", + Handler: _EmberCache_PubSubNumPat_Handler, + }, }, Streams: []grpc.StreamDesc{ + { + StreamName: "Subscribe", + Handler: _EmberCache_Subscribe_Handler, + ServerStreams: true, + }, { StreamName: "Pipeline", Handler: _EmberCache_Pipeline_Handler, diff --git a/clients/ember-py/ember/client.py b/clients/ember-py/ember/client.py index 956a01d9..9352e086 100644 --- a/clients/ember-py/ember/client.py +++ b/clients/ember-py/ember/client.py @@ -342,3 +342,132 @@ def dbsize(self) -> int: metadata=self._metadata(), ) return resp.value + + def echo(self, message: str) -> str: + """Echo a message back.""" + resp = self._stub.Echo( + ember_pb2.EchoRequest(message=message), + metadata=self._metadata(), + ) + return resp.message + + def decr(self, key: str) -> int: + """Decrement a key by 1. Returns the new value.""" + resp = self._stub.Decr( + ember_pb2.DecrRequest(key=key), + metadata=self._metadata(), + ) + return resp.value + + def unlink(self, *keys: str) -> int: + """Async delete keys (background deallocation). Returns count removed.""" + resp = self._stub.Unlink( + ember_pb2.UnlinkRequest(keys=list(keys)), + metadata=self._metadata(), + ) + return resp.deleted + + def bgsave(self) -> str: + """Trigger a background snapshot.""" + resp = self._stub.BgSave( + ember_pb2.BgSaveRequest(), + metadata=self._metadata(), + ) + return resp.status + + def bgrewriteaof(self) -> str: + """Trigger a background AOF rewrite.""" + resp = self._stub.BgRewriteAof( + ember_pb2.BgRewriteAofRequest(), + metadata=self._metadata(), + ) + return resp.status + + # --- slowlog --- + + def slowlog_get(self, count: int | None = None) -> list[dict]: + """Get slow log entries.""" + req = ember_pb2.SlowLogGetRequest() + if count is not None: + req.count = count + resp = self._stub.SlowLogGet(req, metadata=self._metadata()) + return [ + { + "id": e.id, + "timestamp": e.timestamp_unix, + "duration_micros": e.duration_micros, + "command": e.command, + } + for e in resp.entries + ] + + def slowlog_len(self) -> int: + """Get the number of slow log entries.""" + resp = self._stub.SlowLogLen( + ember_pb2.SlowLogLenRequest(), + metadata=self._metadata(), + ) + return resp.value + + def slowlog_reset(self) -> None: + """Clear the slow log.""" + self._stub.SlowLogReset( + ember_pb2.SlowLogResetRequest(), + metadata=self._metadata(), + ) + + # --- pub/sub --- + + def publish(self, channel: str, message: bytes) -> int: + """Publish a message to a channel. Returns subscriber count.""" + resp = self._stub.Publish( + ember_pb2.PublishRequest(channel=channel, message=message), + metadata=self._metadata(), + ) + return resp.value + + def subscribe( + self, + channels: list[str] | None = None, + patterns: list[str] | None = None, + ): + """Subscribe to channels/patterns. Returns an iterator of events. + + Each event is a dict with keys: kind, channel, data, pattern. + """ + req = ember_pb2.SubscribeRequest( + channels=channels or [], + patterns=patterns or [], + ) + stream = self._stub.Subscribe(req, metadata=self._metadata()) + for event in stream: + yield { + "kind": event.kind, + "channel": event.channel, + "data": event.data, + "pattern": event.pattern if event.HasField("pattern") else None, + } + + def pubsub_channels(self, pattern: str | None = None) -> list[str]: + """List active channels, optionally filtered by glob pattern.""" + req = ember_pb2.PubSubChannelsRequest() + if pattern is not None: + req.pattern = pattern + resp = self._stub.PubSubChannels(req, metadata=self._metadata()) + return list(resp.keys) + + def pubsub_numsub(self, *channels: str) -> dict[str, int]: + """Get subscriber counts for channels.""" + resp = self._stub.PubSubNumSub( + ember_pb2.PubSubNumSubRequest(channels=list(channels)), + metadata=self._metadata(), + ) + return {c.channel: c.count for c in resp.counts} + + def pubsub_numpat(self) -> int: + """Get the number of active pattern subscriptions.""" + resp = self._stub.PubSubNumPat( + ember_pb2.PubSubNumPatRequest(), + metadata=self._metadata(), + ) + return resp.value diff --git a/clients/ember-py/ember/proto/ember/v1/ember_pb2.py b/clients/ember-py/ember/proto/ember/v1/ember_pb2.py index 3304b6ae..36e05b09 100644 --- a/clients/ember-py/ember/proto/ember/v1/ember_pb2.py +++ b/clients/ember-py/ember/proto/ember/v1/ember_pb2.py @@ -24,7 +24,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x65mber/v1/ember.proto\x12\x08\x65mber.v1\"\x1c\n\x0bIntResponse\x12\r\n\x05value\x18\x01 \x01(\x03\"\x1d\n\x0c\x42oolResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"\x1e\n\rFloatResponse\x12\r\n\x05value\x18\x01 \x01(\t\" \n\x0eStatusResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\x19\n\nGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"+\n\x0bGetResponse\x12\x12\n\x05value\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x08\n\x06_value\"o\n\nSetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x16\n\x0e\x65xpire_seconds\x18\x03 \x01(\x04\x12\x15\n\rexpire_millis\x18\x04 \x01(\x04\x12\n\n\x02nx\x18\x05 \x01(\x08\x12\n\n\x02xx\x18\x06 \x01(\x08\"\x19\n\x0bSetResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x1a\n\nDelRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"\x1e\n\x0b\x44\x65lResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x03\"\x1b\n\x0bMGetRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"7\n\x0cMGetResponse\x12\'\n\x06values\x18\x01 \x03(\x0b\x32\x17.ember.v1.OptionalValue\"-\n\rOptionalValue\x12\x12\n\x05value\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x08\n\x06_value\"0\n\x0bMSetRequest\x12!\n\x05pairs\x18\x01 \x03(\x0b\x32\x12.ember.v1.KeyValue\"&\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x0e\n\x0cMSetResponse\"\x1a\n\x0bIncrRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"+\n\rIncrByRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x03\"+\n\rDecrByRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x03\"0\n\x12IncrByFloatRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x01\"+\n\rAppendRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1c\n\rStrlenRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1d\n\rExistsRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"-\n\rExpireRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07seconds\x18\x02 \x01(\x04\"3\n\x0ePExpireRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x14\n\x0cmilliseconds\x18\x02 \x01(\x04\"\x1d\n\x0ePersistRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x19\n\nTtlRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1a\n\x0bPTtlRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1c\n\x0bTtlResponse\x12\r\n\x05value\x18\x01 \x01(\x03\"\x1a\n\x0bTypeRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"!\n\x0cTypeResponse\x12\x11\n\ttype_name\x18\x01 \x01(\t\"\x1e\n\x0bKeysRequest\x12\x0f\n\x07pattern\x18\x01 \x01(\t\"\x1c\n\x0cKeysResponse\x12\x0c\n\x04keys\x18\x01 \x03(\t\"-\n\rRenameRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07new_key\x18\x02 \x01(\t\"N\n\x0bScanRequest\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\x04\x12\r\n\x05\x63ount\x18\x02 \x01(\r\x12\x14\n\x07pattern\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_pattern\",\n\x0cScanResponse\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\x04\x12\x0c\n\x04keys\x18\x02 \x03(\t\"+\n\x0cLPushRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\x0c\"+\n\x0cRPushRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\x0c\"\x1a\n\x0bLPopRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1a\n\x0bRPopRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"9\n\rLRangeRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05start\x18\x02 \x01(\x03\x12\x0c\n\x04stop\x18\x03 \x01(\x03\"\x1f\n\rArrayResponse\x12\x0e\n\x06values\x18\x01 \x03(\x0c\"\x1a\n\x0bLLenRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"@\n\x0bHSetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x14.ember.v1.FieldValue\"*\n\nFieldValue\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\")\n\x0bHGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\"\x1d\n\x0eHGetAllRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"4\n\x0cHashResponse\x12$\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x14.ember.v1.FieldValue\"*\n\x0bHDelRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06\x66ields\x18\x02 \x03(\t\",\n\x0eHExistsRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\"\x1a\n\x0bHLenRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\";\n\x0eHIncrByRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x03 \x01(\x03\"\x1b\n\x0cHKeysRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1b\n\x0cHValsRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"+\n\x0cHMGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06\x66ields\x18\x02 \x03(\t\"@\n\x15OptionalArrayResponse\x12\'\n\x06values\x18\x01 \x03(\x0b\x32\x17.ember.v1.OptionalValue\"+\n\x0bSAddRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07members\x18\x02 \x03(\t\"+\n\x0bSRemRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07members\x18\x02 \x03(\t\"\x1e\n\x0fSMembersRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"/\n\x10SIsMemberRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06member\x18\x02 \x01(\t\"\x1b\n\x0cSCardRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"~\n\x0bZAddRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x07members\x18\x02 \x03(\x0b\x32\x15.ember.v1.ScoreMember\x12\n\n\x02nx\x18\x03 \x01(\x08\x12\n\n\x02xx\x18\x04 \x01(\x08\x12\n\n\x02gt\x18\x05 \x01(\x08\x12\n\n\x02lt\x18\x06 \x01(\x08\x12\n\n\x02\x63h\x18\x07 \x01(\x08\",\n\x0bScoreMember\x12\r\n\x05score\x18\x01 \x01(\x01\x12\x0e\n\x06member\x18\x02 \x01(\t\"+\n\x0bZRemRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07members\x18\x02 \x03(\t\",\n\rZScoreRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06member\x18\x02 \x01(\t\"5\n\x15OptionalFloatResponse\x12\x12\n\x05value\x18\x01 \x01(\x01H\x00\x88\x01\x01\x42\x08\n\x06_value\"+\n\x0cZRankRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06member\x18\x02 \x01(\t\"3\n\x13OptionalIntResponse\x12\x12\n\x05value\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\x08\n\x06_value\"\x1b\n\x0cZCardRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"N\n\rZRangeRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05start\x18\x02 \x01(\x03\x12\x0c\n\x04stop\x18\x03 \x01(\x03\x12\x13\n\x0bwith_scores\x18\x04 \x01(\x08\"8\n\x0eZRangeResponse\x12&\n\x07members\x18\x01 \x03(\x0b\x32\x15.ember.v1.ScoreMember\"\xf9\x01\n\x0bVAddRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07\x65lement\x18\x02 \x01(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x10\x01\x12&\n\x06metric\x18\x04 \x01(\x0e\x32\x16.ember.v1.VectorMetric\x12\x32\n\x0cquantization\x18\x05 \x01(\x0e\x32\x1c.ember.v1.VectorQuantization\x12\x19\n\x0c\x63onnectivity\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x0f\x65\x66_construction\x18\x07 \x01(\rH\x01\x88\x01\x01\x42\x0f\n\r_connectivityB\x12\n\x10_ef_construction\"b\n\x0bVSimRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x11\n\x05query\x18\x02 \x03(\x02\x42\x02\x10\x01\x12\r\n\x05\x63ount\x18\x03 \x01(\r\x12\x16\n\tef_search\x18\x04 \x01(\rH\x00\x88\x01\x01\x42\x0c\n\n_ef_search\"5\n\x0cVSimResponse\x12%\n\x07results\x18\x01 \x03(\x0b\x32\x14.ember.v1.VSimResult\"/\n\nVSimResult\x12\x0f\n\x07\x65lement\x18\x01 \x01(\t\x12\x10\n\x08\x64istance\x18\x02 \x01(\x02\"+\n\x0bVRemRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07\x65lement\x18\x02 \x01(\t\"+\n\x0bVGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07\x65lement\x18\x02 \x01(\t\"B\n\x0cVGetResponse\x12\x13\n\x06\x65xists\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\x06vector\x18\x02 \x03(\x02\x42\x02\x10\x01\x42\t\n\x07_exists\"\x1b\n\x0cVCardRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1a\n\x0bVDimRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1b\n\x0cVInfoRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"C\n\rVInfoResponse\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\x12\"\n\x04info\x18\x02 \x03(\x0b\x32\x14.ember.v1.FieldValue\"/\n\x0bPingRequest\x12\x14\n\x07message\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_message\"\x1f\n\x0cPingResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"\x1f\n\x0e\x46lushDbRequest\x12\r\n\x05\x61sync\x18\x01 \x01(\x08\"\x0f\n\rDbSizeRequest\"/\n\x0bInfoRequest\x12\x14\n\x07section\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_section\"\x1c\n\x0cInfoResponse\x12\x0c\n\x04info\x18\x01 \x01(\t\"\xff\x12\n\x0fPipelineRequest\x12\n\n\x02id\x18\x01 \x01(\x04\x12#\n\x03get\x18\x02 \x01(\x0b\x32\x14.ember.v1.GetRequestH\x00\x12#\n\x03set\x18\x03 \x01(\x0b\x32\x14.ember.v1.SetRequestH\x00\x12#\n\x03\x64\x65l\x18\x04 \x01(\x0b\x32\x14.ember.v1.DelRequestH\x00\x12)\n\x06\x65xists\x18\x05 \x01(\x0b\x32\x17.ember.v1.ExistsRequestH\x00\x12%\n\x04incr\x18\x06 \x01(\x0b\x32\x15.ember.v1.IncrRequestH\x00\x12*\n\x07incr_by\x18\x07 \x01(\x0b\x32\x17.ember.v1.IncrByRequestH\x00\x12*\n\x07\x64\x65\x63r_by\x18\x08 \x01(\x0b\x32\x17.ember.v1.DecrByRequestH\x00\x12\x35\n\rincr_by_float\x18\t \x01(\x0b\x32\x1c.ember.v1.IncrByFloatRequestH\x00\x12)\n\x06\x61ppend\x18\n \x01(\x0b\x32\x17.ember.v1.AppendRequestH\x00\x12)\n\x06strlen\x18\x0b \x01(\x0b\x32\x17.ember.v1.StrlenRequestH\x00\x12)\n\x06\x65xpire\x18\x0c \x01(\x0b\x32\x17.ember.v1.ExpireRequestH\x00\x12+\n\x07pexpire\x18\r \x01(\x0b\x32\x18.ember.v1.PExpireRequestH\x00\x12+\n\x07persist\x18\x0e \x01(\x0b\x32\x18.ember.v1.PersistRequestH\x00\x12#\n\x03ttl\x18\x0f \x01(\x0b\x32\x14.ember.v1.TtlRequestH\x00\x12%\n\x04pttl\x18\x10 \x01(\x0b\x32\x15.ember.v1.PTtlRequestH\x00\x12%\n\x04type\x18\x11 \x01(\x0b\x32\x15.ember.v1.TypeRequestH\x00\x12\'\n\x05lpush\x18\x12 \x01(\x0b\x32\x16.ember.v1.LPushRequestH\x00\x12\'\n\x05rpush\x18\x13 \x01(\x0b\x32\x16.ember.v1.RPushRequestH\x00\x12%\n\x04lpop\x18\x14 \x01(\x0b\x32\x15.ember.v1.LPopRequestH\x00\x12%\n\x04rpop\x18\x15 \x01(\x0b\x32\x15.ember.v1.RPopRequestH\x00\x12)\n\x06lrange\x18\x16 \x01(\x0b\x32\x17.ember.v1.LRangeRequestH\x00\x12%\n\x04llen\x18\x17 \x01(\x0b\x32\x15.ember.v1.LLenRequestH\x00\x12%\n\x04hset\x18\x18 \x01(\x0b\x32\x15.ember.v1.HSetRequestH\x00\x12%\n\x04hget\x18\x19 \x01(\x0b\x32\x15.ember.v1.HGetRequestH\x00\x12+\n\x07hgetall\x18\x1a \x01(\x0b\x32\x18.ember.v1.HGetAllRequestH\x00\x12%\n\x04hdel\x18\x1b \x01(\x0b\x32\x15.ember.v1.HDelRequestH\x00\x12+\n\x07hexists\x18\x1c \x01(\x0b\x32\x18.ember.v1.HExistsRequestH\x00\x12%\n\x04hlen\x18\x1d \x01(\x0b\x32\x15.ember.v1.HLenRequestH\x00\x12,\n\x08hincr_by\x18\x1e \x01(\x0b\x32\x18.ember.v1.HIncrByRequestH\x00\x12\'\n\x05hkeys\x18\x1f \x01(\x0b\x32\x16.ember.v1.HKeysRequestH\x00\x12\'\n\x05hvals\x18 \x01(\x0b\x32\x16.ember.v1.HValsRequestH\x00\x12\'\n\x05hmget\x18! \x01(\x0b\x32\x16.ember.v1.HMGetRequestH\x00\x12%\n\x04sadd\x18\" \x01(\x0b\x32\x15.ember.v1.SAddRequestH\x00\x12%\n\x04srem\x18# \x01(\x0b\x32\x15.ember.v1.SRemRequestH\x00\x12-\n\x08smembers\x18$ \x01(\x0b\x32\x19.ember.v1.SMembersRequestH\x00\x12/\n\tsismember\x18% \x01(\x0b\x32\x1a.ember.v1.SIsMemberRequestH\x00\x12\'\n\x05scard\x18& \x01(\x0b\x32\x16.ember.v1.SCardRequestH\x00\x12%\n\x04zadd\x18\' \x01(\x0b\x32\x15.ember.v1.ZAddRequestH\x00\x12%\n\x04zrem\x18( \x01(\x0b\x32\x15.ember.v1.ZRemRequestH\x00\x12)\n\x06zscore\x18) \x01(\x0b\x32\x17.ember.v1.ZScoreRequestH\x00\x12\'\n\x05zrank\x18* \x01(\x0b\x32\x16.ember.v1.ZRankRequestH\x00\x12\'\n\x05zcard\x18+ \x01(\x0b\x32\x16.ember.v1.ZCardRequestH\x00\x12)\n\x06zrange\x18, \x01(\x0b\x32\x17.ember.v1.ZRangeRequestH\x00\x12%\n\x04vadd\x18- \x01(\x0b\x32\x15.ember.v1.VAddRequestH\x00\x12%\n\x04vsim\x18. \x01(\x0b\x32\x15.ember.v1.VSimRequestH\x00\x12%\n\x04vrem\x18/ \x01(\x0b\x32\x15.ember.v1.VRemRequestH\x00\x12%\n\x04vget\x18\x30 \x01(\x0b\x32\x15.ember.v1.VGetRequestH\x00\x12\'\n\x05vcard\x18\x31 \x01(\x0b\x32\x16.ember.v1.VCardRequestH\x00\x12%\n\x04vdim\x18\x32 \x01(\x0b\x32\x15.ember.v1.VDimRequestH\x00\x12\'\n\x05vinfo\x18\x33 \x01(\x0b\x32\x16.ember.v1.VInfoRequestH\x00\x12%\n\x04ping\x18\x34 \x01(\x0b\x32\x15.ember.v1.PingRequestH\x00\x12+\n\x07\x66lushdb\x18\x35 \x01(\x0b\x32\x18.ember.v1.FlushDbRequestH\x00\x12)\n\x06\x64\x62size\x18\x36 \x01(\x0b\x32\x17.ember.v1.DbSizeRequestH\x00\x12%\n\x04mget\x18\x37 \x01(\x0b\x32\x15.ember.v1.MGetRequestH\x00\x12%\n\x04mset\x18\x38 \x01(\x0b\x32\x15.ember.v1.MSetRequestH\x00\x12%\n\x04keys\x18\x39 \x01(\x0b\x32\x15.ember.v1.KeysRequestH\x00\x12)\n\x06rename\x18: \x01(\x0b\x32\x17.ember.v1.RenameRequestH\x00\x12%\n\x04scan\x18; \x01(\x0b\x32\x15.ember.v1.ScanRequestH\x00\x42\t\n\x07\x63ommand\"\xd7\x08\n\x10PipelineResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12$\n\x03get\x18\x02 \x01(\x0b\x32\x15.ember.v1.GetResponseH\x00\x12$\n\x03set\x18\x03 \x01(\x0b\x32\x15.ember.v1.SetResponseH\x00\x12$\n\x03\x64\x65l\x18\x04 \x01(\x0b\x32\x15.ember.v1.DelResponseH\x00\x12(\n\x07int_val\x18\x05 \x01(\x0b\x32\x15.ember.v1.IntResponseH\x00\x12*\n\x08\x62ool_val\x18\x06 \x01(\x0b\x32\x16.ember.v1.BoolResponseH\x00\x12,\n\tfloat_val\x18\x07 \x01(\x0b\x32\x17.ember.v1.FloatResponseH\x00\x12*\n\x06status\x18\x08 \x01(\x0b\x32\x18.ember.v1.StatusResponseH\x00\x12$\n\x03ttl\x18\t \x01(\x0b\x32\x15.ember.v1.TtlResponseH\x00\x12&\n\x04type\x18\n \x01(\x0b\x32\x16.ember.v1.TypeResponseH\x00\x12(\n\x05\x61rray\x18\x0b \x01(\x0b\x32\x17.ember.v1.ArrayResponseH\x00\x12&\n\x04hash\x18\x0c \x01(\x0b\x32\x16.ember.v1.HashResponseH\x00\x12\x39\n\x0eoptional_array\x18\r \x01(\x0b\x32\x1f.ember.v1.OptionalArrayResponseH\x00\x12&\n\x04keys\x18\x0e \x01(\x0b\x32\x16.ember.v1.KeysResponseH\x00\x12&\n\x04scan\x18\x0f \x01(\x0b\x32\x16.ember.v1.ScanResponseH\x00\x12\x39\n\x0eoptional_float\x18\x10 \x01(\x0b\x32\x1f.ember.v1.OptionalFloatResponseH\x00\x12\x35\n\x0coptional_int\x18\x11 \x01(\x0b\x32\x1d.ember.v1.OptionalIntResponseH\x00\x12*\n\x06zrange\x18\x12 \x01(\x0b\x32\x18.ember.v1.ZRangeResponseH\x00\x12&\n\x04vsim\x18\x13 \x01(\x0b\x32\x16.ember.v1.VSimResponseH\x00\x12&\n\x04vget\x18\x14 \x01(\x0b\x32\x16.ember.v1.VGetResponseH\x00\x12(\n\x05vinfo\x18\x15 \x01(\x0b\x32\x17.ember.v1.VInfoResponseH\x00\x12&\n\x04mget\x18\x16 \x01(\x0b\x32\x16.ember.v1.MGetResponseH\x00\x12&\n\x04mset\x18\x17 \x01(\x0b\x32\x16.ember.v1.MSetResponseH\x00\x12&\n\x04ping\x18\x18 \x01(\x0b\x32\x16.ember.v1.PingResponseH\x00\x12(\n\x05\x65rror\x18\x19 \x01(\x0b\x32\x17.ember.v1.ErrorResponseH\x00\x12&\n\x04info\x18\x1a \x01(\x0b\x32\x16.ember.v1.InfoResponseH\x00\x42\x08\n\x06result\"C\n\rErrorResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12!\n\x04kind\x18\x02 \x01(\x0e\x32\x13.ember.v1.ErrorKind*f\n\x0cVectorMetric\x12\x18\n\x14VECTOR_METRIC_COSINE\x10\x00\x12\x1b\n\x17VECTOR_METRIC_EUCLIDEAN\x10\x01\x12\x1f\n\x1bVECTOR_METRIC_INNER_PRODUCT\x10\x02*k\n\x12VectorQuantization\x12\x1c\n\x18VECTOR_QUANTIZATION_NONE\x10\x00\x12\x1b\n\x17VECTOR_QUANTIZATION_F16\x10\x01\x12\x1a\n\x16VECTOR_QUANTIZATION_I8\x10\x02*\x9a\x01\n\tErrorKind\x12\x1a\n\x16\x45RROR_KIND_UNSPECIFIED\x10\x00\x12\x19\n\x15\x45RROR_KIND_WRONG_TYPE\x10\x01\x12\x1c\n\x18\x45RROR_KIND_OUT_OF_MEMORY\x10\x02\x12\x17\n\x13\x45RROR_KIND_INTERNAL\x10\x03\x12\x1f\n\x1b\x45RROR_KIND_INVALID_ARGUMENT\x10\x04\x32\x81\x1b\n\nEmberCache\x12\x32\n\x03Get\x12\x14.ember.v1.GetRequest\x1a\x15.ember.v1.GetResponse\x12\x32\n\x03Set\x12\x14.ember.v1.SetRequest\x1a\x15.ember.v1.SetResponse\x12\x32\n\x03\x44\x65l\x12\x14.ember.v1.DelRequest\x1a\x15.ember.v1.DelResponse\x12\x35\n\x04MGet\x12\x15.ember.v1.MGetRequest\x1a\x16.ember.v1.MGetResponse\x12\x35\n\x04MSet\x12\x15.ember.v1.MSetRequest\x1a\x16.ember.v1.MSetResponse\x12\x34\n\x04Incr\x12\x15.ember.v1.IncrRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06IncrBy\x12\x17.ember.v1.IncrByRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06\x44\x65\x63rBy\x12\x17.ember.v1.DecrByRequest\x1a\x15.ember.v1.IntResponse\x12\x44\n\x0bIncrByFloat\x12\x1c.ember.v1.IncrByFloatRequest\x1a\x17.ember.v1.FloatResponse\x12\x38\n\x06\x41ppend\x12\x17.ember.v1.AppendRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06Strlen\x12\x17.ember.v1.StrlenRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06\x45xists\x12\x17.ember.v1.ExistsRequest\x1a\x15.ember.v1.IntResponse\x12\x39\n\x06\x45xpire\x12\x17.ember.v1.ExpireRequest\x1a\x16.ember.v1.BoolResponse\x12;\n\x07PExpire\x12\x18.ember.v1.PExpireRequest\x1a\x16.ember.v1.BoolResponse\x12;\n\x07Persist\x12\x18.ember.v1.PersistRequest\x1a\x16.ember.v1.BoolResponse\x12\x32\n\x03Ttl\x12\x14.ember.v1.TtlRequest\x1a\x15.ember.v1.TtlResponse\x12\x34\n\x04PTtl\x12\x15.ember.v1.PTtlRequest\x1a\x15.ember.v1.TtlResponse\x12\x35\n\x04Type\x12\x15.ember.v1.TypeRequest\x1a\x16.ember.v1.TypeResponse\x12\x35\n\x04Keys\x12\x15.ember.v1.KeysRequest\x1a\x16.ember.v1.KeysResponse\x12;\n\x06Rename\x12\x17.ember.v1.RenameRequest\x1a\x18.ember.v1.StatusResponse\x12\x35\n\x04Scan\x12\x15.ember.v1.ScanRequest\x1a\x16.ember.v1.ScanResponse\x12\x36\n\x05LPush\x12\x16.ember.v1.LPushRequest\x1a\x15.ember.v1.IntResponse\x12\x36\n\x05RPush\x12\x16.ember.v1.RPushRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04LPop\x12\x15.ember.v1.LPopRequest\x1a\x15.ember.v1.GetResponse\x12\x34\n\x04RPop\x12\x15.ember.v1.RPopRequest\x1a\x15.ember.v1.GetResponse\x12:\n\x06LRange\x12\x17.ember.v1.LRangeRequest\x1a\x17.ember.v1.ArrayResponse\x12\x34\n\x04LLen\x12\x15.ember.v1.LLenRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04HSet\x12\x15.ember.v1.HSetRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04HGet\x12\x15.ember.v1.HGetRequest\x1a\x15.ember.v1.GetResponse\x12;\n\x07HGetAll\x12\x18.ember.v1.HGetAllRequest\x1a\x16.ember.v1.HashResponse\x12\x34\n\x04HDel\x12\x15.ember.v1.HDelRequest\x1a\x15.ember.v1.IntResponse\x12;\n\x07HExists\x12\x18.ember.v1.HExistsRequest\x1a\x16.ember.v1.BoolResponse\x12\x34\n\x04HLen\x12\x15.ember.v1.HLenRequest\x1a\x15.ember.v1.IntResponse\x12:\n\x07HIncrBy\x12\x18.ember.v1.HIncrByRequest\x1a\x15.ember.v1.IntResponse\x12\x37\n\x05HKeys\x12\x16.ember.v1.HKeysRequest\x1a\x16.ember.v1.KeysResponse\x12\x38\n\x05HVals\x12\x16.ember.v1.HValsRequest\x1a\x17.ember.v1.ArrayResponse\x12@\n\x05HMGet\x12\x16.ember.v1.HMGetRequest\x1a\x1f.ember.v1.OptionalArrayResponse\x12\x34\n\x04SAdd\x12\x15.ember.v1.SAddRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04SRem\x12\x15.ember.v1.SRemRequest\x1a\x15.ember.v1.IntResponse\x12=\n\x08SMembers\x12\x19.ember.v1.SMembersRequest\x1a\x16.ember.v1.KeysResponse\x12?\n\tSIsMember\x12\x1a.ember.v1.SIsMemberRequest\x1a\x16.ember.v1.BoolResponse\x12\x36\n\x05SCard\x12\x16.ember.v1.SCardRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04ZAdd\x12\x15.ember.v1.ZAddRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04ZRem\x12\x15.ember.v1.ZRemRequest\x1a\x15.ember.v1.IntResponse\x12\x42\n\x06ZScore\x12\x17.ember.v1.ZScoreRequest\x1a\x1f.ember.v1.OptionalFloatResponse\x12>\n\x05ZRank\x12\x16.ember.v1.ZRankRequest\x1a\x1d.ember.v1.OptionalIntResponse\x12\x36\n\x05ZCard\x12\x16.ember.v1.ZCardRequest\x1a\x15.ember.v1.IntResponse\x12;\n\x06ZRange\x12\x17.ember.v1.ZRangeRequest\x1a\x18.ember.v1.ZRangeResponse\x12\x35\n\x04VAdd\x12\x15.ember.v1.VAddRequest\x1a\x16.ember.v1.BoolResponse\x12\x35\n\x04VSim\x12\x15.ember.v1.VSimRequest\x1a\x16.ember.v1.VSimResponse\x12\x35\n\x04VRem\x12\x15.ember.v1.VRemRequest\x1a\x16.ember.v1.BoolResponse\x12\x35\n\x04VGet\x12\x15.ember.v1.VGetRequest\x1a\x16.ember.v1.VGetResponse\x12\x36\n\x05VCard\x12\x16.ember.v1.VCardRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04VDim\x12\x15.ember.v1.VDimRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x05VInfo\x12\x16.ember.v1.VInfoRequest\x1a\x17.ember.v1.VInfoResponse\x12\x35\n\x04Ping\x12\x15.ember.v1.PingRequest\x1a\x16.ember.v1.PingResponse\x12=\n\x07\x46lushDb\x12\x18.ember.v1.FlushDbRequest\x1a\x18.ember.v1.StatusResponse\x12\x38\n\x06\x44\x62Size\x12\x17.ember.v1.DbSizeRequest\x1a\x15.ember.v1.IntResponse\x12\x35\n\x04Info\x12\x15.ember.v1.InfoRequest\x1a\x16.ember.v1.InfoResponse\x12\x45\n\x08Pipeline\x12\x19.ember.v1.PipelineRequest\x1a\x1a.ember.v1.PipelineResponse(\x01\x30\x01\x42\x31Z/github.com/kacy/ember-go/proto/ember/v1;emberv1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x65mber/v1/ember.proto\x12\x08\x65mber.v1\"\x1c\n\x0bIntResponse\x12\r\n\x05value\x18\x01 \x01(\x03\"\x1d\n\x0c\x42oolResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"\x1e\n\rFloatResponse\x12\r\n\x05value\x18\x01 \x01(\t\" \n\x0eStatusResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\x19\n\nGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"+\n\x0bGetResponse\x12\x12\n\x05value\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x08\n\x06_value\"o\n\nSetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x16\n\x0e\x65xpire_seconds\x18\x03 \x01(\x04\x12\x15\n\rexpire_millis\x18\x04 \x01(\x04\x12\n\n\x02nx\x18\x05 \x01(\x08\x12\n\n\x02xx\x18\x06 \x01(\x08\"\x19\n\x0bSetResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\"\x1a\n\nDelRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"\x1e\n\x0b\x44\x65lResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x03\"\x1b\n\x0bMGetRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"7\n\x0cMGetResponse\x12\'\n\x06values\x18\x01 \x03(\x0b\x32\x17.ember.v1.OptionalValue\"-\n\rOptionalValue\x12\x12\n\x05value\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x08\n\x06_value\"0\n\x0bMSetRequest\x12!\n\x05pairs\x18\x01 \x03(\x0b\x32\x12.ember.v1.KeyValue\"&\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x0e\n\x0cMSetResponse\"\x1a\n\x0bIncrRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"+\n\rIncrByRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x03\"+\n\rDecrByRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x03\"0\n\x12IncrByFloatRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x02 \x01(\x01\"+\n\rAppendRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1c\n\rStrlenRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1d\n\rExistsRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"-\n\rExpireRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07seconds\x18\x02 \x01(\x04\"3\n\x0ePExpireRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x14\n\x0cmilliseconds\x18\x02 \x01(\x04\"\x1d\n\x0ePersistRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x19\n\nTtlRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1a\n\x0bPTtlRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1c\n\x0bTtlResponse\x12\r\n\x05value\x18\x01 \x01(\x03\"\x1a\n\x0bTypeRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"!\n\x0cTypeResponse\x12\x11\n\ttype_name\x18\x01 \x01(\t\"\x1e\n\x0bKeysRequest\x12\x0f\n\x07pattern\x18\x01 \x01(\t\"\x1c\n\x0cKeysResponse\x12\x0c\n\x04keys\x18\x01 \x03(\t\"-\n\rRenameRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07new_key\x18\x02 \x01(\t\"N\n\x0bScanRequest\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\x04\x12\r\n\x05\x63ount\x18\x02 \x01(\r\x12\x14\n\x07pattern\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_pattern\",\n\x0cScanResponse\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\x04\x12\x0c\n\x04keys\x18\x02 \x03(\t\"+\n\x0cLPushRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\x0c\"+\n\x0cRPushRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06values\x18\x02 \x03(\x0c\"\x1a\n\x0bLPopRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1a\n\x0bRPopRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"9\n\rLRangeRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05start\x18\x02 \x01(\x03\x12\x0c\n\x04stop\x18\x03 \x01(\x03\"\x1f\n\rArrayResponse\x12\x0e\n\x06values\x18\x01 \x03(\x0c\"\x1a\n\x0bLLenRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"@\n\x0bHSetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x14.ember.v1.FieldValue\"*\n\nFieldValue\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\")\n\x0bHGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\"\x1d\n\x0eHGetAllRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"4\n\x0cHashResponse\x12$\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x14.ember.v1.FieldValue\"*\n\x0bHDelRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06\x66ields\x18\x02 \x03(\t\",\n\x0eHExistsRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\"\x1a\n\x0bHLenRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\";\n\x0eHIncrByRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05\x66ield\x18\x02 \x01(\t\x12\r\n\x05\x64\x65lta\x18\x03 \x01(\x03\"\x1b\n\x0cHKeysRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1b\n\x0cHValsRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"+\n\x0cHMGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06\x66ields\x18\x02 \x03(\t\"@\n\x15OptionalArrayResponse\x12\'\n\x06values\x18\x01 \x03(\x0b\x32\x17.ember.v1.OptionalValue\"+\n\x0bSAddRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07members\x18\x02 \x03(\t\"+\n\x0bSRemRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07members\x18\x02 \x03(\t\"\x1e\n\x0fSMembersRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"/\n\x10SIsMemberRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06member\x18\x02 \x01(\t\"\x1b\n\x0cSCardRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"~\n\x0bZAddRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x07members\x18\x02 \x03(\x0b\x32\x15.ember.v1.ScoreMember\x12\n\n\x02nx\x18\x03 \x01(\x08\x12\n\n\x02xx\x18\x04 \x01(\x08\x12\n\n\x02gt\x18\x05 \x01(\x08\x12\n\n\x02lt\x18\x06 \x01(\x08\x12\n\n\x02\x63h\x18\x07 \x01(\x08\",\n\x0bScoreMember\x12\r\n\x05score\x18\x01 \x01(\x01\x12\x0e\n\x06member\x18\x02 \x01(\t\"+\n\x0bZRemRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07members\x18\x02 \x03(\t\",\n\rZScoreRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06member\x18\x02 \x01(\t\"5\n\x15OptionalFloatResponse\x12\x12\n\x05value\x18\x01 \x01(\x01H\x00\x88\x01\x01\x42\x08\n\x06_value\"+\n\x0cZRankRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0e\n\x06member\x18\x02 \x01(\t\"3\n\x13OptionalIntResponse\x12\x12\n\x05value\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\x08\n\x06_value\"\x1b\n\x0cZCardRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"N\n\rZRangeRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05start\x18\x02 \x01(\x03\x12\x0c\n\x04stop\x18\x03 \x01(\x03\x12\x13\n\x0bwith_scores\x18\x04 \x01(\x08\"8\n\x0eZRangeResponse\x12&\n\x07members\x18\x01 \x03(\x0b\x32\x15.ember.v1.ScoreMember\"\xf9\x01\n\x0bVAddRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07\x65lement\x18\x02 \x01(\t\x12\x12\n\x06vector\x18\x03 \x03(\x02\x42\x02\x10\x01\x12&\n\x06metric\x18\x04 \x01(\x0e\x32\x16.ember.v1.VectorMetric\x12\x32\n\x0cquantization\x18\x05 \x01(\x0e\x32\x1c.ember.v1.VectorQuantization\x12\x19\n\x0c\x63onnectivity\x18\x06 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x0f\x65\x66_construction\x18\x07 \x01(\rH\x01\x88\x01\x01\x42\x0f\n\r_connectivityB\x12\n\x10_ef_construction\"b\n\x0bVSimRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x11\n\x05query\x18\x02 \x03(\x02\x42\x02\x10\x01\x12\r\n\x05\x63ount\x18\x03 \x01(\r\x12\x16\n\tef_search\x18\x04 \x01(\rH\x00\x88\x01\x01\x42\x0c\n\n_ef_search\"5\n\x0cVSimResponse\x12%\n\x07results\x18\x01 \x03(\x0b\x32\x14.ember.v1.VSimResult\"/\n\nVSimResult\x12\x0f\n\x07\x65lement\x18\x01 \x01(\t\x12\x10\n\x08\x64istance\x18\x02 \x01(\x02\"+\n\x0bVRemRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07\x65lement\x18\x02 \x01(\t\"+\n\x0bVGetRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07\x65lement\x18\x02 \x01(\t\"B\n\x0cVGetResponse\x12\x13\n\x06\x65xists\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\x06vector\x18\x02 \x03(\x02\x42\x02\x10\x01\x42\t\n\x07_exists\"\x1b\n\x0cVCardRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1a\n\x0bVDimRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1b\n\x0cVInfoRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"C\n\rVInfoResponse\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\x12\"\n\x04info\x18\x02 \x03(\x0b\x32\x14.ember.v1.FieldValue\"/\n\x0bPingRequest\x12\x14\n\x07message\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_message\"\x1f\n\x0cPingResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"\x1f\n\x0e\x46lushDbRequest\x12\r\n\x05\x61sync\x18\x01 \x01(\x08\"\x0f\n\rDbSizeRequest\"/\n\x0bInfoRequest\x12\x14\n\x07section\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_section\"\x1c\n\x0cInfoResponse\x12\x0c\n\x04info\x18\x01 \x01(\t\"\x1e\n\x0b\x45\x63hoRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"\x1f\n\x0c\x45\x63hoResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"\x1a\n\x0b\x44\x65\x63rRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1d\n\rUnlinkRequest\x12\x0c\n\x04keys\x18\x01 \x03(\t\"\x0f\n\rBgSaveRequest\"\x15\n\x13\x42gRewriteAofRequest\"1\n\x11SlowLogGetRequest\x12\x12\n\x05\x63ount\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\x08\n\x06_count\"=\n\x12SlowLogGetResponse\x12\'\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x16.ember.v1.SlowLogEntry\"\\\n\x0cSlowLogEntry\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x16\n\x0etimestamp_unix\x18\x02 \x01(\x04\x12\x17\n\x0f\x64uration_micros\x18\x03 \x01(\x04\x12\x0f\n\x07\x63ommand\x18\x04 \x01(\t\"\x13\n\x11SlowLogLenRequest\"\x15\n\x13SlowLogResetRequest\"2\n\x0ePublishRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"6\n\x10SubscribeRequest\x12\x10\n\x08\x63hannels\x18\x01 \x03(\t\x12\x10\n\x08patterns\x18\x02 \x03(\t\"_\n\x0eSubscribeEvent\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0f\n\x07\x63hannel\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x14\n\x07pattern\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_pattern\"9\n\x15PubSubChannelsRequest\x12\x14\n\x07pattern\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_pattern\"\'\n\x13PubSubNumSubRequest\x12\x10\n\x08\x63hannels\x18\x01 \x03(\t\">\n\x14PubSubNumSubResponse\x12&\n\x06\x63ounts\x18\x01 \x03(\x0b\x32\x16.ember.v1.ChannelCount\"\x15\n\x13PubSubNumPatRequest\".\n\x0c\x43hannelCount\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\"\xd3\x17\n\x0fPipelineRequest\x12\n\n\x02id\x18\x01 \x01(\x04\x12#\n\x03get\x18\x02 \x01(\x0b\x32\x14.ember.v1.GetRequestH\x00\x12#\n\x03set\x18\x03 \x01(\x0b\x32\x14.ember.v1.SetRequestH\x00\x12#\n\x03\x64\x65l\x18\x04 \x01(\x0b\x32\x14.ember.v1.DelRequestH\x00\x12)\n\x06\x65xists\x18\x05 \x01(\x0b\x32\x17.ember.v1.ExistsRequestH\x00\x12%\n\x04incr\x18\x06 \x01(\x0b\x32\x15.ember.v1.IncrRequestH\x00\x12*\n\x07incr_by\x18\x07 \x01(\x0b\x32\x17.ember.v1.IncrByRequestH\x00\x12*\n\x07\x64\x65\x63r_by\x18\x08 \x01(\x0b\x32\x17.ember.v1.DecrByRequestH\x00\x12\x35\n\rincr_by_float\x18\t \x01(\x0b\x32\x1c.ember.v1.IncrByFloatRequestH\x00\x12)\n\x06\x61ppend\x18\n \x01(\x0b\x32\x17.ember.v1.AppendRequestH\x00\x12)\n\x06strlen\x18\x0b \x01(\x0b\x32\x17.ember.v1.StrlenRequestH\x00\x12)\n\x06\x65xpire\x18\x0c \x01(\x0b\x32\x17.ember.v1.ExpireRequestH\x00\x12+\n\x07pexpire\x18\r \x01(\x0b\x32\x18.ember.v1.PExpireRequestH\x00\x12+\n\x07persist\x18\x0e \x01(\x0b\x32\x18.ember.v1.PersistRequestH\x00\x12#\n\x03ttl\x18\x0f \x01(\x0b\x32\x14.ember.v1.TtlRequestH\x00\x12%\n\x04pttl\x18\x10 \x01(\x0b\x32\x15.ember.v1.PTtlRequestH\x00\x12%\n\x04type\x18\x11 \x01(\x0b\x32\x15.ember.v1.TypeRequestH\x00\x12\'\n\x05lpush\x18\x12 \x01(\x0b\x32\x16.ember.v1.LPushRequestH\x00\x12\'\n\x05rpush\x18\x13 \x01(\x0b\x32\x16.ember.v1.RPushRequestH\x00\x12%\n\x04lpop\x18\x14 \x01(\x0b\x32\x15.ember.v1.LPopRequestH\x00\x12%\n\x04rpop\x18\x15 \x01(\x0b\x32\x15.ember.v1.RPopRequestH\x00\x12)\n\x06lrange\x18\x16 \x01(\x0b\x32\x17.ember.v1.LRangeRequestH\x00\x12%\n\x04llen\x18\x17 \x01(\x0b\x32\x15.ember.v1.LLenRequestH\x00\x12%\n\x04hset\x18\x18 \x01(\x0b\x32\x15.ember.v1.HSetRequestH\x00\x12%\n\x04hget\x18\x19 \x01(\x0b\x32\x15.ember.v1.HGetRequestH\x00\x12+\n\x07hgetall\x18\x1a \x01(\x0b\x32\x18.ember.v1.HGetAllRequestH\x00\x12%\n\x04hdel\x18\x1b \x01(\x0b\x32\x15.ember.v1.HDelRequestH\x00\x12+\n\x07hexists\x18\x1c \x01(\x0b\x32\x18.ember.v1.HExistsRequestH\x00\x12%\n\x04hlen\x18\x1d \x01(\x0b\x32\x15.ember.v1.HLenRequestH\x00\x12,\n\x08hincr_by\x18\x1e \x01(\x0b\x32\x18.ember.v1.HIncrByRequestH\x00\x12\'\n\x05hkeys\x18\x1f \x01(\x0b\x32\x16.ember.v1.HKeysRequestH\x00\x12\'\n\x05hvals\x18 \x01(\x0b\x32\x16.ember.v1.HValsRequestH\x00\x12\'\n\x05hmget\x18! \x01(\x0b\x32\x16.ember.v1.HMGetRequestH\x00\x12%\n\x04sadd\x18\" \x01(\x0b\x32\x15.ember.v1.SAddRequestH\x00\x12%\n\x04srem\x18# \x01(\x0b\x32\x15.ember.v1.SRemRequestH\x00\x12-\n\x08smembers\x18$ \x01(\x0b\x32\x19.ember.v1.SMembersRequestH\x00\x12/\n\tsismember\x18% \x01(\x0b\x32\x1a.ember.v1.SIsMemberRequestH\x00\x12\'\n\x05scard\x18& \x01(\x0b\x32\x16.ember.v1.SCardRequestH\x00\x12%\n\x04zadd\x18\' \x01(\x0b\x32\x15.ember.v1.ZAddRequestH\x00\x12%\n\x04zrem\x18( \x01(\x0b\x32\x15.ember.v1.ZRemRequestH\x00\x12)\n\x06zscore\x18) \x01(\x0b\x32\x17.ember.v1.ZScoreRequestH\x00\x12\'\n\x05zrank\x18* \x01(\x0b\x32\x16.ember.v1.ZRankRequestH\x00\x12\'\n\x05zcard\x18+ \x01(\x0b\x32\x16.ember.v1.ZCardRequestH\x00\x12)\n\x06zrange\x18, \x01(\x0b\x32\x17.ember.v1.ZRangeRequestH\x00\x12%\n\x04vadd\x18- \x01(\x0b\x32\x15.ember.v1.VAddRequestH\x00\x12%\n\x04vsim\x18. \x01(\x0b\x32\x15.ember.v1.VSimRequestH\x00\x12%\n\x04vrem\x18/ \x01(\x0b\x32\x15.ember.v1.VRemRequestH\x00\x12%\n\x04vget\x18\x30 \x01(\x0b\x32\x15.ember.v1.VGetRequestH\x00\x12\'\n\x05vcard\x18\x31 \x01(\x0b\x32\x16.ember.v1.VCardRequestH\x00\x12%\n\x04vdim\x18\x32 \x01(\x0b\x32\x15.ember.v1.VDimRequestH\x00\x12\'\n\x05vinfo\x18\x33 \x01(\x0b\x32\x16.ember.v1.VInfoRequestH\x00\x12%\n\x04ping\x18\x34 \x01(\x0b\x32\x15.ember.v1.PingRequestH\x00\x12+\n\x07\x66lushdb\x18\x35 \x01(\x0b\x32\x18.ember.v1.FlushDbRequestH\x00\x12)\n\x06\x64\x62size\x18\x36 \x01(\x0b\x32\x17.ember.v1.DbSizeRequestH\x00\x12%\n\x04mget\x18\x37 \x01(\x0b\x32\x15.ember.v1.MGetRequestH\x00\x12%\n\x04mset\x18\x38 \x01(\x0b\x32\x15.ember.v1.MSetRequestH\x00\x12%\n\x04keys\x18\x39 \x01(\x0b\x32\x15.ember.v1.KeysRequestH\x00\x12)\n\x06rename\x18: \x01(\x0b\x32\x17.ember.v1.RenameRequestH\x00\x12%\n\x04scan\x18; \x01(\x0b\x32\x15.ember.v1.ScanRequestH\x00\x12%\n\x04\x65\x63ho\x18< \x01(\x0b\x32\x15.ember.v1.EchoRequestH\x00\x12%\n\x04\x64\x65\x63r\x18= \x01(\x0b\x32\x15.ember.v1.DecrRequestH\x00\x12)\n\x06unlink\x18> \x01(\x0b\x32\x17.ember.v1.UnlinkRequestH\x00\x12)\n\x06\x62gsave\x18? \x01(\x0b\x32\x17.ember.v1.BgSaveRequestH\x00\x12\x35\n\x0c\x62grewriteaof\x18@ \x01(\x0b\x32\x1d.ember.v1.BgRewriteAofRequestH\x00\x12\x32\n\x0bslowlog_get\x18\x41 \x01(\x0b\x32\x1b.ember.v1.SlowLogGetRequestH\x00\x12\x32\n\x0bslowlog_len\x18\x42 \x01(\x0b\x32\x1b.ember.v1.SlowLogLenRequestH\x00\x12\x36\n\rslowlog_reset\x18\x43 \x01(\x0b\x32\x1d.ember.v1.SlowLogResetRequestH\x00\x12+\n\x07publish\x18\x44 \x01(\x0b\x32\x18.ember.v1.PublishRequestH\x00\x12:\n\x0fpubsub_channels\x18\x45 \x01(\x0b\x32\x1f.ember.v1.PubSubChannelsRequestH\x00\x12\x36\n\rpubsub_numsub\x18\x46 \x01(\x0b\x32\x1d.ember.v1.PubSubNumSubRequestH\x00\x12\x36\n\rpubsub_numpat\x18G \x01(\x0b\x32\x1d.ember.v1.PubSubNumPatRequestH\x00\x42\t\n\x07\x63ommand\"\xed\t\n\x10PipelineResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12$\n\x03get\x18\x02 \x01(\x0b\x32\x15.ember.v1.GetResponseH\x00\x12$\n\x03set\x18\x03 \x01(\x0b\x32\x15.ember.v1.SetResponseH\x00\x12$\n\x03\x64\x65l\x18\x04 \x01(\x0b\x32\x15.ember.v1.DelResponseH\x00\x12(\n\x07int_val\x18\x05 \x01(\x0b\x32\x15.ember.v1.IntResponseH\x00\x12*\n\x08\x62ool_val\x18\x06 \x01(\x0b\x32\x16.ember.v1.BoolResponseH\x00\x12,\n\tfloat_val\x18\x07 \x01(\x0b\x32\x17.ember.v1.FloatResponseH\x00\x12*\n\x06status\x18\x08 \x01(\x0b\x32\x18.ember.v1.StatusResponseH\x00\x12$\n\x03ttl\x18\t \x01(\x0b\x32\x15.ember.v1.TtlResponseH\x00\x12&\n\x04type\x18\n \x01(\x0b\x32\x16.ember.v1.TypeResponseH\x00\x12(\n\x05\x61rray\x18\x0b \x01(\x0b\x32\x17.ember.v1.ArrayResponseH\x00\x12&\n\x04hash\x18\x0c \x01(\x0b\x32\x16.ember.v1.HashResponseH\x00\x12\x39\n\x0eoptional_array\x18\r \x01(\x0b\x32\x1f.ember.v1.OptionalArrayResponseH\x00\x12&\n\x04keys\x18\x0e \x01(\x0b\x32\x16.ember.v1.KeysResponseH\x00\x12&\n\x04scan\x18\x0f \x01(\x0b\x32\x16.ember.v1.ScanResponseH\x00\x12\x39\n\x0eoptional_float\x18\x10 \x01(\x0b\x32\x1f.ember.v1.OptionalFloatResponseH\x00\x12\x35\n\x0coptional_int\x18\x11 \x01(\x0b\x32\x1d.ember.v1.OptionalIntResponseH\x00\x12*\n\x06zrange\x18\x12 \x01(\x0b\x32\x18.ember.v1.ZRangeResponseH\x00\x12&\n\x04vsim\x18\x13 \x01(\x0b\x32\x16.ember.v1.VSimResponseH\x00\x12&\n\x04vget\x18\x14 \x01(\x0b\x32\x16.ember.v1.VGetResponseH\x00\x12(\n\x05vinfo\x18\x15 \x01(\x0b\x32\x17.ember.v1.VInfoResponseH\x00\x12&\n\x04mget\x18\x16 \x01(\x0b\x32\x16.ember.v1.MGetResponseH\x00\x12&\n\x04mset\x18\x17 \x01(\x0b\x32\x16.ember.v1.MSetResponseH\x00\x12&\n\x04ping\x18\x18 \x01(\x0b\x32\x16.ember.v1.PingResponseH\x00\x12(\n\x05\x65rror\x18\x19 \x01(\x0b\x32\x17.ember.v1.ErrorResponseH\x00\x12&\n\x04info\x18\x1a \x01(\x0b\x32\x16.ember.v1.InfoResponseH\x00\x12&\n\x04\x65\x63ho\x18\x1b \x01(\x0b\x32\x16.ember.v1.EchoResponseH\x00\x12\x33\n\x0bslowlog_get\x18\x1c \x01(\x0b\x32\x1c.ember.v1.SlowLogGetResponseH\x00\x12\x37\n\rpubsub_numsub\x18\x1d \x01(\x0b\x32\x1e.ember.v1.PubSubNumSubResponseH\x00\x42\x08\n\x06result\"C\n\rErrorResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12!\n\x04kind\x18\x02 \x01(\x0e\x32\x13.ember.v1.ErrorKind*f\n\x0cVectorMetric\x12\x18\n\x14VECTOR_METRIC_COSINE\x10\x00\x12\x1b\n\x17VECTOR_METRIC_EUCLIDEAN\x10\x01\x12\x1f\n\x1bVECTOR_METRIC_INNER_PRODUCT\x10\x02*k\n\x12VectorQuantization\x12\x1c\n\x18VECTOR_QUANTIZATION_NONE\x10\x00\x12\x1b\n\x17VECTOR_QUANTIZATION_F16\x10\x01\x12\x1a\n\x16VECTOR_QUANTIZATION_I8\x10\x02*\x9a\x01\n\tErrorKind\x12\x1a\n\x16\x45RROR_KIND_UNSPECIFIED\x10\x00\x12\x19\n\x15\x45RROR_KIND_WRONG_TYPE\x10\x01\x12\x1c\n\x18\x45RROR_KIND_OUT_OF_MEMORY\x10\x02\x12\x17\n\x13\x45RROR_KIND_INTERNAL\x10\x03\x12\x1f\n\x1b\x45RROR_KIND_INVALID_ARGUMENT\x10\x04\x32\xe3!\n\nEmberCache\x12\x32\n\x03Get\x12\x14.ember.v1.GetRequest\x1a\x15.ember.v1.GetResponse\x12\x32\n\x03Set\x12\x14.ember.v1.SetRequest\x1a\x15.ember.v1.SetResponse\x12\x32\n\x03\x44\x65l\x12\x14.ember.v1.DelRequest\x1a\x15.ember.v1.DelResponse\x12\x35\n\x04MGet\x12\x15.ember.v1.MGetRequest\x1a\x16.ember.v1.MGetResponse\x12\x35\n\x04MSet\x12\x15.ember.v1.MSetRequest\x1a\x16.ember.v1.MSetResponse\x12\x34\n\x04Incr\x12\x15.ember.v1.IncrRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06IncrBy\x12\x17.ember.v1.IncrByRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06\x44\x65\x63rBy\x12\x17.ember.v1.DecrByRequest\x1a\x15.ember.v1.IntResponse\x12\x44\n\x0bIncrByFloat\x12\x1c.ember.v1.IncrByFloatRequest\x1a\x17.ember.v1.FloatResponse\x12\x38\n\x06\x41ppend\x12\x17.ember.v1.AppendRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06Strlen\x12\x17.ember.v1.StrlenRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06\x45xists\x12\x17.ember.v1.ExistsRequest\x1a\x15.ember.v1.IntResponse\x12\x39\n\x06\x45xpire\x12\x17.ember.v1.ExpireRequest\x1a\x16.ember.v1.BoolResponse\x12;\n\x07PExpire\x12\x18.ember.v1.PExpireRequest\x1a\x16.ember.v1.BoolResponse\x12;\n\x07Persist\x12\x18.ember.v1.PersistRequest\x1a\x16.ember.v1.BoolResponse\x12\x32\n\x03Ttl\x12\x14.ember.v1.TtlRequest\x1a\x15.ember.v1.TtlResponse\x12\x34\n\x04PTtl\x12\x15.ember.v1.PTtlRequest\x1a\x15.ember.v1.TtlResponse\x12\x35\n\x04Type\x12\x15.ember.v1.TypeRequest\x1a\x16.ember.v1.TypeResponse\x12\x35\n\x04Keys\x12\x15.ember.v1.KeysRequest\x1a\x16.ember.v1.KeysResponse\x12;\n\x06Rename\x12\x17.ember.v1.RenameRequest\x1a\x18.ember.v1.StatusResponse\x12\x35\n\x04Scan\x12\x15.ember.v1.ScanRequest\x1a\x16.ember.v1.ScanResponse\x12\x36\n\x05LPush\x12\x16.ember.v1.LPushRequest\x1a\x15.ember.v1.IntResponse\x12\x36\n\x05RPush\x12\x16.ember.v1.RPushRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04LPop\x12\x15.ember.v1.LPopRequest\x1a\x15.ember.v1.GetResponse\x12\x34\n\x04RPop\x12\x15.ember.v1.RPopRequest\x1a\x15.ember.v1.GetResponse\x12:\n\x06LRange\x12\x17.ember.v1.LRangeRequest\x1a\x17.ember.v1.ArrayResponse\x12\x34\n\x04LLen\x12\x15.ember.v1.LLenRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04HSet\x12\x15.ember.v1.HSetRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04HGet\x12\x15.ember.v1.HGetRequest\x1a\x15.ember.v1.GetResponse\x12;\n\x07HGetAll\x12\x18.ember.v1.HGetAllRequest\x1a\x16.ember.v1.HashResponse\x12\x34\n\x04HDel\x12\x15.ember.v1.HDelRequest\x1a\x15.ember.v1.IntResponse\x12;\n\x07HExists\x12\x18.ember.v1.HExistsRequest\x1a\x16.ember.v1.BoolResponse\x12\x34\n\x04HLen\x12\x15.ember.v1.HLenRequest\x1a\x15.ember.v1.IntResponse\x12:\n\x07HIncrBy\x12\x18.ember.v1.HIncrByRequest\x1a\x15.ember.v1.IntResponse\x12\x37\n\x05HKeys\x12\x16.ember.v1.HKeysRequest\x1a\x16.ember.v1.KeysResponse\x12\x38\n\x05HVals\x12\x16.ember.v1.HValsRequest\x1a\x17.ember.v1.ArrayResponse\x12@\n\x05HMGet\x12\x16.ember.v1.HMGetRequest\x1a\x1f.ember.v1.OptionalArrayResponse\x12\x34\n\x04SAdd\x12\x15.ember.v1.SAddRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04SRem\x12\x15.ember.v1.SRemRequest\x1a\x15.ember.v1.IntResponse\x12=\n\x08SMembers\x12\x19.ember.v1.SMembersRequest\x1a\x16.ember.v1.KeysResponse\x12?\n\tSIsMember\x12\x1a.ember.v1.SIsMemberRequest\x1a\x16.ember.v1.BoolResponse\x12\x36\n\x05SCard\x12\x16.ember.v1.SCardRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04ZAdd\x12\x15.ember.v1.ZAddRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04ZRem\x12\x15.ember.v1.ZRemRequest\x1a\x15.ember.v1.IntResponse\x12\x42\n\x06ZScore\x12\x17.ember.v1.ZScoreRequest\x1a\x1f.ember.v1.OptionalFloatResponse\x12>\n\x05ZRank\x12\x16.ember.v1.ZRankRequest\x1a\x1d.ember.v1.OptionalIntResponse\x12\x36\n\x05ZCard\x12\x16.ember.v1.ZCardRequest\x1a\x15.ember.v1.IntResponse\x12;\n\x06ZRange\x12\x17.ember.v1.ZRangeRequest\x1a\x18.ember.v1.ZRangeResponse\x12\x35\n\x04VAdd\x12\x15.ember.v1.VAddRequest\x1a\x16.ember.v1.BoolResponse\x12\x35\n\x04VSim\x12\x15.ember.v1.VSimRequest\x1a\x16.ember.v1.VSimResponse\x12\x35\n\x04VRem\x12\x15.ember.v1.VRemRequest\x1a\x16.ember.v1.BoolResponse\x12\x35\n\x04VGet\x12\x15.ember.v1.VGetRequest\x1a\x16.ember.v1.VGetResponse\x12\x36\n\x05VCard\x12\x16.ember.v1.VCardRequest\x1a\x15.ember.v1.IntResponse\x12\x34\n\x04VDim\x12\x15.ember.v1.VDimRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x05VInfo\x12\x16.ember.v1.VInfoRequest\x1a\x17.ember.v1.VInfoResponse\x12\x35\n\x04Ping\x12\x15.ember.v1.PingRequest\x1a\x16.ember.v1.PingResponse\x12\x35\n\x04\x45\x63ho\x12\x15.ember.v1.EchoRequest\x1a\x16.ember.v1.EchoResponse\x12\x34\n\x04\x44\x65\x63r\x12\x15.ember.v1.DecrRequest\x1a\x15.ember.v1.IntResponse\x12\x38\n\x06Unlink\x12\x17.ember.v1.UnlinkRequest\x1a\x15.ember.v1.DelResponse\x12=\n\x07\x46lushDb\x12\x18.ember.v1.FlushDbRequest\x1a\x18.ember.v1.StatusResponse\x12\x38\n\x06\x44\x62Size\x12\x17.ember.v1.DbSizeRequest\x1a\x15.ember.v1.IntResponse\x12\x35\n\x04Info\x12\x15.ember.v1.InfoRequest\x1a\x16.ember.v1.InfoResponse\x12;\n\x06\x42gSave\x12\x17.ember.v1.BgSaveRequest\x1a\x18.ember.v1.StatusResponse\x12G\n\x0c\x42gRewriteAof\x12\x1d.ember.v1.BgRewriteAofRequest\x1a\x18.ember.v1.StatusResponse\x12G\n\nSlowLogGet\x12\x1b.ember.v1.SlowLogGetRequest\x1a\x1c.ember.v1.SlowLogGetResponse\x12@\n\nSlowLogLen\x12\x1b.ember.v1.SlowLogLenRequest\x1a\x15.ember.v1.IntResponse\x12G\n\x0cSlowLogReset\x12\x1d.ember.v1.SlowLogResetRequest\x1a\x18.ember.v1.StatusResponse\x12:\n\x07Publish\x12\x18.ember.v1.PublishRequest\x1a\x15.ember.v1.IntResponse\x12\x43\n\tSubscribe\x12\x1a.ember.v1.SubscribeRequest\x1a\x18.ember.v1.SubscribeEvent0\x01\x12I\n\x0ePubSubChannels\x12\x1f.ember.v1.PubSubChannelsRequest\x1a\x16.ember.v1.KeysResponse\x12M\n\x0cPubSubNumSub\x12\x1d.ember.v1.PubSubNumSubRequest\x1a\x1e.ember.v1.PubSubNumSubResponse\x12\x44\n\x0cPubSubNumPat\x12\x1d.ember.v1.PubSubNumPatRequest\x1a\x15.ember.v1.IntResponse\x12\x45\n\x08Pipeline\x12\x19.ember.v1.PipelineRequest\x1a\x1a.ember.v1.PipelineResponse(\x01\x30\x01\x42\x31Z/github.com/kacy/ember-go/proto/ember/v1;emberv1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -38,12 +38,12 @@ _globals['_VSIMREQUEST'].fields_by_name['query']._serialized_options = b'\020\001' _globals['_VGETRESPONSE'].fields_by_name['vector']._loaded_options = None _globals['_VGETRESPONSE'].fields_by_name['vector']._serialized_options = b'\020\001' - _globals['_VECTORMETRIC']._serialized_start=7694 - _globals['_VECTORMETRIC']._serialized_end=7796 - _globals['_VECTORQUANTIZATION']._serialized_start=7798 - _globals['_VECTORQUANTIZATION']._serialized_end=7905 - _globals['_ERRORKIND']._serialized_start=7908 - _globals['_ERRORKIND']._serialized_end=8062 + _globals['_VECTORMETRIC']._serialized_start=9296 + _globals['_VECTORMETRIC']._serialized_end=9398 + _globals['_VECTORQUANTIZATION']._serialized_start=9400 + _globals['_VECTORQUANTIZATION']._serialized_end=9507 + _globals['_ERRORKIND']._serialized_start=9510 + _globals['_ERRORKIND']._serialized_end=9664 _globals['_INTRESPONSE']._serialized_start=34 _globals['_INTRESPONSE']._serialized_end=62 _globals['_BOOLRESPONSE']._serialized_start=64 @@ -220,12 +220,50 @@ _globals['_INFOREQUEST']._serialized_end=4045 _globals['_INFORESPONSE']._serialized_start=4047 _globals['_INFORESPONSE']._serialized_end=4075 - _globals['_PIPELINEREQUEST']._serialized_start=4078 - _globals['_PIPELINEREQUEST']._serialized_end=6509 - _globals['_PIPELINERESPONSE']._serialized_start=6512 - _globals['_PIPELINERESPONSE']._serialized_end=7623 - _globals['_ERRORRESPONSE']._serialized_start=7625 - _globals['_ERRORRESPONSE']._serialized_end=7692 - _globals['_EMBERCACHE']._serialized_start=8065 - _globals['_EMBERCACHE']._serialized_end=11522 + _globals['_ECHOREQUEST']._serialized_start=4077 + _globals['_ECHOREQUEST']._serialized_end=4107 + _globals['_ECHORESPONSE']._serialized_start=4109 + _globals['_ECHORESPONSE']._serialized_end=4140 + _globals['_DECRREQUEST']._serialized_start=4142 + _globals['_DECRREQUEST']._serialized_end=4168 + _globals['_UNLINKREQUEST']._serialized_start=4170 + _globals['_UNLINKREQUEST']._serialized_end=4199 + _globals['_BGSAVEREQUEST']._serialized_start=4201 + _globals['_BGSAVEREQUEST']._serialized_end=4216 + _globals['_BGREWRITEAOFREQUEST']._serialized_start=4218 + _globals['_BGREWRITEAOFREQUEST']._serialized_end=4239 + _globals['_SLOWLOGGETREQUEST']._serialized_start=4241 + _globals['_SLOWLOGGETREQUEST']._serialized_end=4290 + _globals['_SLOWLOGGETRESPONSE']._serialized_start=4292 + _globals['_SLOWLOGGETRESPONSE']._serialized_end=4353 + _globals['_SLOWLOGENTRY']._serialized_start=4355 + _globals['_SLOWLOGENTRY']._serialized_end=4447 + _globals['_SLOWLOGLENREQUEST']._serialized_start=4449 + _globals['_SLOWLOGLENREQUEST']._serialized_end=4468 + _globals['_SLOWLOGRESETREQUEST']._serialized_start=4470 + _globals['_SLOWLOGRESETREQUEST']._serialized_end=4491 + _globals['_PUBLISHREQUEST']._serialized_start=4493 + _globals['_PUBLISHREQUEST']._serialized_end=4543 + _globals['_SUBSCRIBEREQUEST']._serialized_start=4545 + _globals['_SUBSCRIBEREQUEST']._serialized_end=4599 + _globals['_SUBSCRIBEEVENT']._serialized_start=4601 + _globals['_SUBSCRIBEEVENT']._serialized_end=4696 + _globals['_PUBSUBCHANNELSREQUEST']._serialized_start=4698 + _globals['_PUBSUBCHANNELSREQUEST']._serialized_end=4755 + _globals['_PUBSUBNUMSUBREQUEST']._serialized_start=4757 + _globals['_PUBSUBNUMSUBREQUEST']._serialized_end=4796 + _globals['_PUBSUBNUMSUBRESPONSE']._serialized_start=4798 + _globals['_PUBSUBNUMSUBRESPONSE']._serialized_end=4860 + _globals['_PUBSUBNUMPATREQUEST']._serialized_start=4862 + _globals['_PUBSUBNUMPATREQUEST']._serialized_end=4883 + _globals['_CHANNELCOUNT']._serialized_start=4885 + _globals['_CHANNELCOUNT']._serialized_end=4931 + _globals['_PIPELINEREQUEST']._serialized_start=4934 + _globals['_PIPELINEREQUEST']._serialized_end=7961 + _globals['_PIPELINERESPONSE']._serialized_start=7964 + _globals['_PIPELINERESPONSE']._serialized_end=9225 + _globals['_ERRORRESPONSE']._serialized_start=9227 + _globals['_ERRORRESPONSE']._serialized_end=9294 + _globals['_EMBERCACHE']._serialized_start=9667 + _globals['_EMBERCACHE']._serialized_end=13990 # @@protoc_insertion_point(module_scope) diff --git a/clients/ember-py/ember/proto/ember/v1/ember_pb2_grpc.py b/clients/ember-py/ember/proto/ember/v1/ember_pb2_grpc.py index 31f18a59..4117d383 100644 --- a/clients/ember-py/ember/proto/ember/v1/ember_pb2_grpc.py +++ b/clients/ember-py/ember/proto/ember/v1/ember_pb2_grpc.py @@ -318,6 +318,21 @@ def __init__(self, channel): request_serializer=ember_dot_v1_dot_ember__pb2.PingRequest.SerializeToString, response_deserializer=ember_dot_v1_dot_ember__pb2.PingResponse.FromString, _registered_method=True) + self.Echo = channel.unary_unary( + '/ember.v1.EmberCache/Echo', + request_serializer=ember_dot_v1_dot_ember__pb2.EchoRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.EchoResponse.FromString, + _registered_method=True) + self.Decr = channel.unary_unary( + '/ember.v1.EmberCache/Decr', + request_serializer=ember_dot_v1_dot_ember__pb2.DecrRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + _registered_method=True) + self.Unlink = channel.unary_unary( + '/ember.v1.EmberCache/Unlink', + request_serializer=ember_dot_v1_dot_ember__pb2.UnlinkRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.DelResponse.FromString, + _registered_method=True) self.FlushDb = channel.unary_unary( '/ember.v1.EmberCache/FlushDb', request_serializer=ember_dot_v1_dot_ember__pb2.FlushDbRequest.SerializeToString, @@ -333,6 +348,56 @@ def __init__(self, channel): request_serializer=ember_dot_v1_dot_ember__pb2.InfoRequest.SerializeToString, response_deserializer=ember_dot_v1_dot_ember__pb2.InfoResponse.FromString, _registered_method=True) + self.BgSave = channel.unary_unary( + '/ember.v1.EmberCache/BgSave', + request_serializer=ember_dot_v1_dot_ember__pb2.BgSaveRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.StatusResponse.FromString, + _registered_method=True) + self.BgRewriteAof = channel.unary_unary( + '/ember.v1.EmberCache/BgRewriteAof', + request_serializer=ember_dot_v1_dot_ember__pb2.BgRewriteAofRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.StatusResponse.FromString, + _registered_method=True) + self.SlowLogGet = channel.unary_unary( + '/ember.v1.EmberCache/SlowLogGet', + request_serializer=ember_dot_v1_dot_ember__pb2.SlowLogGetRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.SlowLogGetResponse.FromString, + _registered_method=True) + self.SlowLogLen = channel.unary_unary( + '/ember.v1.EmberCache/SlowLogLen', + request_serializer=ember_dot_v1_dot_ember__pb2.SlowLogLenRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + _registered_method=True) + self.SlowLogReset = channel.unary_unary( + '/ember.v1.EmberCache/SlowLogReset', + request_serializer=ember_dot_v1_dot_ember__pb2.SlowLogResetRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.StatusResponse.FromString, + _registered_method=True) + self.Publish = channel.unary_unary( + '/ember.v1.EmberCache/Publish', + request_serializer=ember_dot_v1_dot_ember__pb2.PublishRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + _registered_method=True) + self.Subscribe = channel.unary_stream( + '/ember.v1.EmberCache/Subscribe', + request_serializer=ember_dot_v1_dot_ember__pb2.SubscribeRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.SubscribeEvent.FromString, + _registered_method=True) + self.PubSubChannels = channel.unary_unary( + '/ember.v1.EmberCache/PubSubChannels', + request_serializer=ember_dot_v1_dot_ember__pb2.PubSubChannelsRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.KeysResponse.FromString, + _registered_method=True) + self.PubSubNumSub = channel.unary_unary( + '/ember.v1.EmberCache/PubSubNumSub', + request_serializer=ember_dot_v1_dot_ember__pb2.PubSubNumSubRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.PubSubNumSubResponse.FromString, + _registered_method=True) + self.PubSubNumPat = channel.unary_unary( + '/ember.v1.EmberCache/PubSubNumPat', + request_serializer=ember_dot_v1_dot_ember__pb2.PubSubNumPatRequest.SerializeToString, + response_deserializer=ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + _registered_method=True) self.Pipeline = channel.stream_stream( '/ember.v1.EmberCache/Pipeline', request_serializer=ember_dot_v1_dot_ember__pb2.PipelineRequest.SerializeToString, @@ -698,6 +763,24 @@ def Ping(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def Echo(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Decr(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Unlink(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def FlushDb(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -716,6 +799,70 @@ def Info(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def BgSave(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def BgRewriteAof(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SlowLogGet(self, request, context): + """--- slowlog --- + + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SlowLogLen(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SlowLogReset(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Publish(self, request, context): + """--- pub/sub --- + + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Subscribe(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def PubSubChannels(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def PubSubNumSub(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def PubSubNumPat(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def Pipeline(self, request_iterator, context): """--- streaming --- bidirectional streaming for batch operations, matching RESP3 pipelining. @@ -1008,6 +1155,21 @@ def add_EmberCacheServicer_to_server(servicer, server): request_deserializer=ember_dot_v1_dot_ember__pb2.PingRequest.FromString, response_serializer=ember_dot_v1_dot_ember__pb2.PingResponse.SerializeToString, ), + 'Echo': grpc.unary_unary_rpc_method_handler( + servicer.Echo, + request_deserializer=ember_dot_v1_dot_ember__pb2.EchoRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.EchoResponse.SerializeToString, + ), + 'Decr': grpc.unary_unary_rpc_method_handler( + servicer.Decr, + request_deserializer=ember_dot_v1_dot_ember__pb2.DecrRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.IntResponse.SerializeToString, + ), + 'Unlink': grpc.unary_unary_rpc_method_handler( + servicer.Unlink, + request_deserializer=ember_dot_v1_dot_ember__pb2.UnlinkRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.DelResponse.SerializeToString, + ), 'FlushDb': grpc.unary_unary_rpc_method_handler( servicer.FlushDb, request_deserializer=ember_dot_v1_dot_ember__pb2.FlushDbRequest.FromString, @@ -1023,6 +1185,56 @@ def add_EmberCacheServicer_to_server(servicer, server): request_deserializer=ember_dot_v1_dot_ember__pb2.InfoRequest.FromString, response_serializer=ember_dot_v1_dot_ember__pb2.InfoResponse.SerializeToString, ), + 'BgSave': grpc.unary_unary_rpc_method_handler( + servicer.BgSave, + request_deserializer=ember_dot_v1_dot_ember__pb2.BgSaveRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.StatusResponse.SerializeToString, + ), + 'BgRewriteAof': grpc.unary_unary_rpc_method_handler( + servicer.BgRewriteAof, + request_deserializer=ember_dot_v1_dot_ember__pb2.BgRewriteAofRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.StatusResponse.SerializeToString, + ), + 'SlowLogGet': grpc.unary_unary_rpc_method_handler( + servicer.SlowLogGet, + request_deserializer=ember_dot_v1_dot_ember__pb2.SlowLogGetRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.SlowLogGetResponse.SerializeToString, + ), + 'SlowLogLen': grpc.unary_unary_rpc_method_handler( + servicer.SlowLogLen, + request_deserializer=ember_dot_v1_dot_ember__pb2.SlowLogLenRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.IntResponse.SerializeToString, + ), + 'SlowLogReset': grpc.unary_unary_rpc_method_handler( + servicer.SlowLogReset, + request_deserializer=ember_dot_v1_dot_ember__pb2.SlowLogResetRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.StatusResponse.SerializeToString, + ), + 'Publish': grpc.unary_unary_rpc_method_handler( + servicer.Publish, + request_deserializer=ember_dot_v1_dot_ember__pb2.PublishRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.IntResponse.SerializeToString, + ), + 'Subscribe': grpc.unary_stream_rpc_method_handler( + servicer.Subscribe, + request_deserializer=ember_dot_v1_dot_ember__pb2.SubscribeRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.SubscribeEvent.SerializeToString, + ), + 'PubSubChannels': grpc.unary_unary_rpc_method_handler( + servicer.PubSubChannels, + request_deserializer=ember_dot_v1_dot_ember__pb2.PubSubChannelsRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.KeysResponse.SerializeToString, + ), + 'PubSubNumSub': grpc.unary_unary_rpc_method_handler( + servicer.PubSubNumSub, + request_deserializer=ember_dot_v1_dot_ember__pb2.PubSubNumSubRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.PubSubNumSubResponse.SerializeToString, + ), + 'PubSubNumPat': grpc.unary_unary_rpc_method_handler( + servicer.PubSubNumPat, + request_deserializer=ember_dot_v1_dot_ember__pb2.PubSubNumPatRequest.FromString, + response_serializer=ember_dot_v1_dot_ember__pb2.IntResponse.SerializeToString, + ), 'Pipeline': grpc.stream_stream_rpc_method_handler( servicer.Pipeline, request_deserializer=ember_dot_v1_dot_ember__pb2.PipelineRequest.FromString, @@ -2555,6 +2767,87 @@ def Ping(request, metadata, _registered_method=True) + @staticmethod + def Echo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/Echo', + ember_dot_v1_dot_ember__pb2.EchoRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.EchoResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Decr(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/Decr', + ember_dot_v1_dot_ember__pb2.DecrRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Unlink(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/Unlink', + ember_dot_v1_dot_ember__pb2.UnlinkRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.DelResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + @staticmethod def FlushDb(request, target, @@ -2636,6 +2929,276 @@ def Info(request, metadata, _registered_method=True) + @staticmethod + def BgSave(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/BgSave', + ember_dot_v1_dot_ember__pb2.BgSaveRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.StatusResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def BgRewriteAof(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/BgRewriteAof', + ember_dot_v1_dot_ember__pb2.BgRewriteAofRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.StatusResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SlowLogGet(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/SlowLogGet', + ember_dot_v1_dot_ember__pb2.SlowLogGetRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.SlowLogGetResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SlowLogLen(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/SlowLogLen', + ember_dot_v1_dot_ember__pb2.SlowLogLenRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def SlowLogReset(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/SlowLogReset', + ember_dot_v1_dot_ember__pb2.SlowLogResetRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.StatusResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Publish(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/Publish', + ember_dot_v1_dot_ember__pb2.PublishRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def Subscribe(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/ember.v1.EmberCache/Subscribe', + ember_dot_v1_dot_ember__pb2.SubscribeRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.SubscribeEvent.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def PubSubChannels(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/PubSubChannels', + ember_dot_v1_dot_ember__pb2.PubSubChannelsRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.KeysResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def PubSubNumSub(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/PubSubNumSub', + ember_dot_v1_dot_ember__pb2.PubSubNumSubRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.PubSubNumSubResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def PubSubNumPat(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/ember.v1.EmberCache/PubSubNumPat', + ember_dot_v1_dot_ember__pb2.PubSubNumPatRequest.SerializeToString, + ember_dot_v1_dot_ember__pb2.IntResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + @staticmethod def Pipeline(request_iterator, target, diff --git a/crates/ember-server/src/grpc.rs b/crates/ember-server/src/grpc.rs index 65d6f4ca..8a1fc8ba 100644 --- a/crates/ember-server/src/grpc.rs +++ b/crates/ember-server/src/grpc.rs @@ -14,6 +14,7 @@ use ember_core::{Engine, ShardRequest, ShardResponse, TtlResult, Value}; use tokio_stream::wrappers::ReceiverStream; use tonic::{Request, Response, Status, Streaming}; +use crate::pubsub::PubSubManager; use crate::server::ServerContext; use crate::slowlog::SlowLog; @@ -29,14 +30,21 @@ pub struct EmberService { engine: Engine, ctx: Arc, slow_log: Arc, + pubsub: Arc, } impl EmberService { - pub fn new(engine: Engine, ctx: Arc, slow_log: Arc) -> Self { + pub fn new( + engine: Engine, + ctx: Arc, + slow_log: Arc, + pubsub: Arc, + ) -> Self { Self { engine, ctx, slow_log, + pubsub, } } @@ -1681,6 +1689,241 @@ impl EmberCache for EmberService { Ok(Response::new(InfoResponse { info })) } + // ----------------------------------------------------------------------- + // additional commands + // ----------------------------------------------------------------------- + + async fn echo(&self, request: Request) -> Result, Status> { + Ok(Response::new(EchoResponse { + message: request.into_inner().message, + })) + } + + async fn decr(&self, request: Request) -> Result, Status> { + let start = Instant::now(); + let key = request.into_inner().key; + validate_key(&key)?; + let resp = self + .route(&key, ShardRequest::Decr { key: key.clone() }) + .await?; + self.record_command(start, "DECR"); + + match resp { + ShardResponse::Integer(v) => Ok(Response::new(IntResponse { value: v })), + other => Err(unexpected_response(&other)), + } + } + + async fn unlink( + &self, + request: Request, + ) -> Result, Status> { + let start = Instant::now(); + let keys = request.into_inner().keys; + for k in &keys { + validate_key(k)?; + } + + let responses = self + .engine + .route_multi(&keys, |k| ShardRequest::Unlink { key: k }) + .await + .map_err(|_| Status::unavailable("shard unavailable"))?; + + let mut deleted = 0i64; + for resp in responses { + if let ShardResponse::Bool(true) = resp { + deleted += 1; + } + } + self.record_command(start, "UNLINK"); + Ok(Response::new(DelResponse { deleted })) + } + + async fn bg_save( + &self, + _request: Request, + ) -> Result, Status> { + let start = Instant::now(); + self.broadcast(|| ShardRequest::Snapshot).await?; + self.record_command(start, "BGSAVE"); + Ok(Response::new(StatusResponse { + status: "Background saving started".to_string(), + })) + } + + async fn bg_rewrite_aof( + &self, + _request: Request, + ) -> Result, Status> { + let start = Instant::now(); + self.broadcast(|| ShardRequest::RewriteAof).await?; + self.record_command(start, "BGREWRITEAOF"); + Ok(Response::new(StatusResponse { + status: "Background append only file rewriting started".to_string(), + })) + } + + // ----------------------------------------------------------------------- + // slowlog + // ----------------------------------------------------------------------- + + async fn slow_log_get( + &self, + request: Request, + ) -> Result, Status> { + let count = request.into_inner().count.map(|c| c as usize); + let entries = self.slow_log.get(count); + Ok(Response::new(SlowLogGetResponse { + entries: entries + .into_iter() + .map(|e| { + let ts = e + .timestamp + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_secs(); + SlowLogEntry { + id: e.id, + timestamp_unix: ts, + duration_micros: e.duration.as_micros() as u64, + command: e.command, + } + }) + .collect(), + })) + } + + async fn slow_log_len( + &self, + _request: Request, + ) -> Result, Status> { + Ok(Response::new(IntResponse { + value: self.slow_log.len() as i64, + })) + } + + async fn slow_log_reset( + &self, + _request: Request, + ) -> Result, Status> { + self.slow_log.reset(); + Ok(Response::new(StatusResponse { + status: "OK".to_string(), + })) + } + + // ----------------------------------------------------------------------- + // pub/sub + // ----------------------------------------------------------------------- + + async fn publish( + &self, + request: Request, + ) -> Result, Status> { + let req = request.into_inner(); + let count = self.pubsub.publish(&req.channel, Bytes::from(req.message)); + Ok(Response::new(IntResponse { + value: count as i64, + })) + } + + type SubscribeStream = ReceiverStream>; + + async fn subscribe( + &self, + request: Request, + ) -> Result, Status> { + let req = request.into_inner(); + if req.channels.is_empty() && req.patterns.is_empty() { + return Err(Status::invalid_argument( + "at least one channel or pattern required", + )); + } + + let (tx, rx) = tokio::sync::mpsc::channel(256); + let pubsub = Arc::clone(&self.pubsub); + + // collect all broadcast receivers + let mut channel_rxs: Vec<(String, tokio::sync::broadcast::Receiver)> = Vec::new(); + let mut pattern_rxs: Vec<(String, tokio::sync::broadcast::Receiver)> = Vec::new(); + + for ch in &req.channels { + channel_rxs.push((ch.clone(), pubsub.subscribe(ch))); + } + for pat in &req.patterns { + pattern_rxs.push((pat.clone(), pubsub.psubscribe(pat))); + } + + tokio::spawn(async move { + loop { + // build a future that races all receivers + let event = tokio::select! { + biased; + result = recv_any_channel(&mut channel_rxs) => result, + result = recv_any_pattern(&mut pattern_rxs) => result, + }; + + match event { + Some(evt) => { + if tx.send(Ok(evt)).await.is_err() { + break; // client disconnected + } + } + None => { + // all receivers closed + break; + } + } + } + + // cleanup subscriptions + for (ch, _) in &channel_rxs { + pubsub.unsubscribe(ch); + } + for (pat, _) in &pattern_rxs { + pubsub.punsubscribe(pat); + } + }); + + Ok(Response::new(ReceiverStream::new(rx))) + } + + async fn pub_sub_channels( + &self, + request: Request, + ) -> Result, Status> { + let pattern = request.into_inner().pattern; + let names = self.pubsub.channel_names(pattern.as_deref()); + Ok(Response::new(KeysResponse { keys: names })) + } + + async fn pub_sub_num_sub( + &self, + request: Request, + ) -> Result, Status> { + let channels = request.into_inner().channels; + let pairs = self.pubsub.numsub(&channels); + Ok(Response::new(PubSubNumSubResponse { + counts: pairs + .into_iter() + .map(|(channel, count)| ChannelCount { + channel, + count: count as i64, + }) + .collect(), + })) + } + + async fn pub_sub_num_pat( + &self, + _request: Request, + ) -> Result, Status> { + Ok(Response::new(IntResponse { + value: self.pubsub.active_patterns() as i64, + })) + } + // ----------------------------------------------------------------------- // pipeline (bidirectional streaming) // ----------------------------------------------------------------------- @@ -1695,11 +1938,12 @@ impl EmberCache for EmberService { let engine = self.engine.clone(); let ctx = Arc::clone(&self.ctx); let slow_log = Arc::clone(&self.slow_log); + let pubsub = Arc::clone(&self.pubsub); let (tx, rx) = tokio::sync::mpsc::channel(256); tokio::spawn(async move { - let svc = EmberService::new(engine, ctx, slow_log); + let svc = EmberService::new(engine, ctx, slow_log, pubsub); while let Ok(Some(req)) = stream.message().await { let id = req.id; let result = handle_pipeline_command(&svc, req).await; @@ -1822,12 +2066,92 @@ async fn handle_pipeline_command( // server commands Ping => ping => Ping, + Echo => echo => Echo, + Decr => decr => IntVal, + Unlink => unlink => Del, Flushdb => flush_db => Status, Dbsize => db_size => IntVal, + Bgsave => bg_save => Status, + Bgrewriteaof => bg_rewrite_aof => Status, Mget => m_get => Mget, Mset => m_set => Mset, Keys => keys => Keys, Rename => rename => Status, Scan => scan => Scan, + + // slowlog + SlowlogGet => slow_log_get => SlowlogGet, + SlowlogLen => slow_log_len => IntVal, + SlowlogReset => slow_log_reset => Status, + + // pub/sub (unary only — Subscribe is streaming) + Publish => publish => IntVal, + PubsubChannels => pub_sub_channels => Keys, + PubsubNumsub => pub_sub_num_sub => PubsubNumsub, + PubsubNumpat => pub_sub_num_pat => IntVal, }) } + +/// Waits for the next message on any channel subscription receiver. +/// Returns None when all receivers are closed. +async fn recv_any_channel( + rxs: &mut [(String, tokio::sync::broadcast::Receiver)], +) -> Option { + if rxs.is_empty() { + // no channel subscriptions — park forever so pattern branch can drive + std::future::pending::<()>().await; + return None; + } + + loop { + // poll each receiver in round-robin (tokio::select! on a slice + // requires a loop because we can't use select! with dynamic count). + for (_, rx) in rxs.iter_mut() { + match rx.try_recv() { + Ok(msg) => { + return Some(SubscribeEvent { + kind: "message".to_string(), + channel: msg.channel, + data: msg.data.to_vec(), + pattern: None, + }); + } + Err(tokio::sync::broadcast::error::TryRecvError::Empty) => continue, + Err(tokio::sync::broadcast::error::TryRecvError::Lagged(_)) => continue, + Err(tokio::sync::broadcast::error::TryRecvError::Closed) => return None, + } + } + // yield to avoid busy-spinning + tokio::time::sleep(Duration::from_millis(1)).await; + } +} + +/// Waits for the next message on any pattern subscription receiver. +/// Returns None when all receivers are closed. +async fn recv_any_pattern( + rxs: &mut [(String, tokio::sync::broadcast::Receiver)], +) -> Option { + if rxs.is_empty() { + std::future::pending::<()>().await; + return None; + } + + loop { + for (pat, rx) in rxs.iter_mut() { + match rx.try_recv() { + Ok(msg) => { + return Some(SubscribeEvent { + kind: "pmessage".to_string(), + channel: msg.channel, + data: msg.data.to_vec(), + pattern: Some(pat.clone()), + }); + } + Err(tokio::sync::broadcast::error::TryRecvError::Empty) => continue, + Err(tokio::sync::broadcast::error::TryRecvError::Lagged(_)) => continue, + Err(tokio::sync::broadcast::error::TryRecvError::Closed) => return None, + } + } + tokio::time::sleep(Duration::from_millis(1)).await; + } +} diff --git a/crates/ember-server/src/server.rs b/crates/ember-server/src/server.rs index 76424624..b3a08e38 100644 --- a/crates/ember-server/src/server.rs +++ b/crates/ember-server/src/server.rs @@ -132,7 +132,7 @@ pub async fn run( #[cfg(feature = "grpc")] let _grpc_handle = if let Some(grpc_addr) = grpc_addr { let svc = - crate::grpc::EmberService::new(engine.clone(), Arc::clone(&ctx), Arc::clone(&slow_log)); + crate::grpc::EmberService::new(engine.clone(), Arc::clone(&ctx), Arc::clone(&slow_log), Arc::clone(&pubsub)); info!("gRPC listening on {grpc_addr}"); let server = tonic::transport::Server::builder() .add_service(svc.into_service()) @@ -397,7 +397,7 @@ pub async fn run_concurrent( #[cfg(feature = "grpc")] let _grpc_handle = if let Some(grpc_addr) = grpc_addr { let svc = - crate::grpc::EmberService::new(engine.clone(), Arc::clone(&ctx), Arc::clone(&slow_log)); + crate::grpc::EmberService::new(engine.clone(), Arc::clone(&ctx), Arc::clone(&slow_log), Arc::clone(&pubsub)); info!("gRPC listening on {grpc_addr}"); let server = tonic::transport::Server::builder() .add_service(svc.into_service()) diff --git a/proto/ember/v1/ember.proto b/proto/ember/v1/ember.proto index 640816dc..e63e7c84 100644 --- a/proto/ember/v1/ember.proto +++ b/proto/ember/v1/ember.proto @@ -87,9 +87,28 @@ service EmberCache { // --- server --- rpc Ping(PingRequest) returns (PingResponse); + rpc Echo(EchoRequest) returns (EchoResponse); + rpc Decr(DecrRequest) returns (IntResponse); + rpc Unlink(UnlinkRequest) returns (DelResponse); rpc FlushDb(FlushDbRequest) returns (StatusResponse); rpc DbSize(DbSizeRequest) returns (IntResponse); rpc Info(InfoRequest) returns (InfoResponse); + rpc BgSave(BgSaveRequest) returns (StatusResponse); + rpc BgRewriteAof(BgRewriteAofRequest) returns (StatusResponse); + + // --- slowlog --- + + rpc SlowLogGet(SlowLogGetRequest) returns (SlowLogGetResponse); + rpc SlowLogLen(SlowLogLenRequest) returns (IntResponse); + rpc SlowLogReset(SlowLogResetRequest) returns (StatusResponse); + + // --- pub/sub --- + + rpc Publish(PublishRequest) returns (IntResponse); + rpc Subscribe(SubscribeRequest) returns (stream SubscribeEvent); + rpc PubSubChannels(PubSubChannelsRequest) returns (KeysResponse); + rpc PubSubNumSub(PubSubNumSubRequest) returns (PubSubNumSubResponse); + rpc PubSubNumPat(PubSubNumPatRequest) returns (IntResponse); // --- streaming --- // bidirectional streaming for batch operations, matching RESP3 pipelining. @@ -560,6 +579,91 @@ message InfoResponse { string info = 1; } +message EchoRequest { + string message = 1; +} + +message EchoResponse { + string message = 1; +} + +message DecrRequest { + string key = 1; +} + +message UnlinkRequest { + repeated string keys = 1; +} + +message BgSaveRequest {} + +message BgRewriteAofRequest {} + +// --------------------------------------------------------------------------- +// slowlog +// --------------------------------------------------------------------------- + +message SlowLogGetRequest { + optional uint32 count = 1; +} + +message SlowLogGetResponse { + repeated SlowLogEntry entries = 1; +} + +message SlowLogEntry { + uint64 id = 1; + uint64 timestamp_unix = 2; + uint64 duration_micros = 3; + string command = 4; +} + +message SlowLogLenRequest {} + +message SlowLogResetRequest {} + +// --------------------------------------------------------------------------- +// pub/sub +// --------------------------------------------------------------------------- + +message PublishRequest { + string channel = 1; + bytes message = 2; +} + +message SubscribeRequest { + repeated string channels = 1; + repeated string patterns = 2; +} + +message SubscribeEvent { + // "message" for exact channel match, "pmessage" for pattern match. + string kind = 1; + string channel = 2; + bytes data = 3; + // the pattern that matched (only set for pmessage). + optional string pattern = 4; +} + +message PubSubChannelsRequest { + optional string pattern = 1; +} + +message PubSubNumSubRequest { + repeated string channels = 1; +} + +message PubSubNumSubResponse { + repeated ChannelCount counts = 1; +} + +message PubSubNumPatRequest {} + +message ChannelCount { + string channel = 1; + int64 count = 2; +} + // --------------------------------------------------------------------------- // pipeline (bidirectional streaming) // --------------------------------------------------------------------------- @@ -625,6 +729,18 @@ message PipelineRequest { KeysRequest keys = 57; RenameRequest rename = 58; ScanRequest scan = 59; + EchoRequest echo = 60; + DecrRequest decr = 61; + UnlinkRequest unlink = 62; + BgSaveRequest bgsave = 63; + BgRewriteAofRequest bgrewriteaof = 64; + SlowLogGetRequest slowlog_get = 65; + SlowLogLenRequest slowlog_len = 66; + SlowLogResetRequest slowlog_reset = 67; + PublishRequest publish = 68; + PubSubChannelsRequest pubsub_channels = 69; + PubSubNumSubRequest pubsub_numsub = 70; + PubSubNumPatRequest pubsub_numpat = 71; } } @@ -656,6 +772,9 @@ message PipelineResponse { PingResponse ping = 24; ErrorResponse error = 25; InfoResponse info = 26; + EchoResponse echo = 27; + SlowLogGetResponse slowlog_get = 28; + PubSubNumSubResponse pubsub_numsub = 29; } }