From 9e8e2dd8d877556373ec4a791dc7473569187542 Mon Sep 17 00:00:00 2001 From: gjs Date: Mon, 31 Aug 2026 11:21:04 +0800 Subject: [PATCH] =?UTF-8?q?float62=2032=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E4=B8=BA=E4=B8=A4=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/utils/tools.go | 13 + rpc/task/pb/task.pb.go | 418 ++++++++++++++++++ rpc/task/pb/task_grpc.pb.go | 273 ++++++++++++ rpc/task/task.pb | Bin 0 -> 14157 bytes rpc/task/task.proto | 69 +++ services/order/internal/dao/cart.go | 11 + services/order/internal/logic/webCartLogic.go | 52 ++- 7 files changed, 835 insertions(+), 1 deletion(-) create mode 100644 rpc/task/pb/task.pb.go create mode 100644 rpc/task/pb/task_grpc.pb.go create mode 100644 rpc/task/task.pb create mode 100644 rpc/task/task.proto diff --git a/pkg/utils/tools.go b/pkg/utils/tools.go index e796816..0acd02a 100644 --- a/pkg/utils/tools.go +++ b/pkg/utils/tools.go @@ -621,3 +621,16 @@ func UniqueStr(arr []string) []string { } return res } + +// Float 泛型约束,只允许 float32 / float64 +type Float interface { + ~float32 | ~float64 +} + +// RoundFloat 四舍五入保留n位小数,泛型版本 +func RoundFloat[T Float](val T) T { + shift := math.Pow10(NumberTwo) + f := float64(val) + res := math.Round(f*shift) / shift + return T(res) +} diff --git a/rpc/task/pb/task.pb.go b/rpc/task/pb/task.pb.go new file mode 100644 index 0000000..7785f5f --- /dev/null +++ b/rpc/task/pb/task.pb.go @@ -0,0 +1,418 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v4.25.8 +// source: task/task.proto + +package task + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Response struct { + state protoimpl.MessageState `protogen:"open.v1"` + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Response) Reset() { + *x = Response{} + mi := &file_task_task_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Response) ProtoMessage() {} + +func (x *Response) ProtoReflect() protoreflect.Message { + mi := &file_task_task_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Response.ProtoReflect.Descriptor instead. +func (*Response) Descriptor() ([]byte, []int) { + return file_task_task_proto_rawDescGZIP(), []int{0} +} + +func (x *Response) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Response) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *Response) GetData() string { + if x != nil { + return x.Data + } + return "" +} + +type EmtpyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EmtpyRequest) Reset() { + *x = EmtpyRequest{} + mi := &file_task_task_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EmtpyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmtpyRequest) ProtoMessage() {} + +func (x *EmtpyRequest) ProtoReflect() protoreflect.Message { + mi := &file_task_task_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmtpyRequest.ProtoReflect.Descriptor instead. +func (*EmtpyRequest) Descriptor() ([]byte, []int) { + return file_task_task_proto_rawDescGZIP(), []int{1} +} + +type EditRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Type int32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` + Time int32 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` + Province int64 `protobuf:"varint,4,opt,name=province,proto3" json:"province,omitempty"` + ProvinceName string `protobuf:"bytes,5,opt,name=province_name,json=provinceName,proto3" json:"province_name,omitempty"` + Task string `protobuf:"bytes,6,opt,name=task,proto3" json:"task,omitempty"` + Award string `protobuf:"bytes,7,opt,name=award,proto3" json:"award,omitempty"` + ProductId int64 `protobuf:"varint,8,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EditRequest) Reset() { + *x = EditRequest{} + mi := &file_task_task_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EditRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EditRequest) ProtoMessage() {} + +func (x *EditRequest) ProtoReflect() protoreflect.Message { + mi := &file_task_task_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EditRequest.ProtoReflect.Descriptor instead. +func (*EditRequest) Descriptor() ([]byte, []int) { + return file_task_task_proto_rawDescGZIP(), []int{2} +} + +func (x *EditRequest) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *EditRequest) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *EditRequest) GetTime() int32 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *EditRequest) GetProvince() int64 { + if x != nil { + return x.Province + } + return 0 +} + +func (x *EditRequest) GetProvinceName() string { + if x != nil { + return x.ProvinceName + } + return "" +} + +func (x *EditRequest) GetTask() string { + if x != nil { + return x.Task + } + return "" +} + +func (x *EditRequest) GetAward() string { + if x != nil { + return x.Award + } + return "" +} + +func (x *EditRequest) GetProductId() int64 { + if x != nil { + return x.ProductId + } + return 0 +} + +type IdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IdRequest) Reset() { + *x = IdRequest{} + mi := &file_task_task_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdRequest) ProtoMessage() {} + +func (x *IdRequest) ProtoReflect() protoreflect.Message { + mi := &file_task_task_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdRequest.ProtoReflect.Descriptor instead. +func (*IdRequest) Descriptor() ([]byte, []int) { + return file_task_task_proto_rawDescGZIP(), []int{3} +} + +func (x *IdRequest) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +type StatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusRequest) Reset() { + *x = StatusRequest{} + mi := &file_task_task_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusRequest) ProtoMessage() {} + +func (x *StatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_task_task_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. +func (*StatusRequest) Descriptor() ([]byte, []int) { + return file_task_task_proto_rawDescGZIP(), []int{4} +} + +func (x *StatusRequest) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *StatusRequest) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *StatusRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +var File_task_task_proto protoreflect.FileDescriptor + +const file_task_task_proto_rawDesc = "" + + "\n" + + "\x0ftask/task.proto\x12\x04task\x1a\x1cgoogle/api/annotations.proto\"D\n" + + "\bResponse\x12\x12\n" + + "\x04code\x18\x01 \x01(\x05R\x04code\x12\x10\n" + + "\x03msg\x18\x02 \x01(\tR\x03msg\x12\x12\n" + + "\x04data\x18\x03 \x01(\tR\x04data\"\x0e\n" + + "\fEmtpyRequest\"\xcf\x01\n" + + "\vEditRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" + + "\x04type\x18\x02 \x01(\x05R\x04type\x12\x12\n" + + "\x04time\x18\x03 \x01(\x05R\x04time\x12\x1a\n" + + "\bprovince\x18\x04 \x01(\x03R\bprovince\x12#\n" + + "\rprovince_name\x18\x05 \x01(\tR\fprovinceName\x12\x12\n" + + "\x04task\x18\x06 \x01(\tR\x04task\x12\x14\n" + + "\x05award\x18\a \x01(\tR\x05award\x12\x1d\n" + + "\n" + + "product_id\x18\b \x01(\x03R\tproductId\"\x1b\n" + + "\tIdRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\"O\n" + + "\rStatusRequest\x12\x0e\n" + + "\x02id\x18\x01 \x01(\x03R\x02id\x12\x16\n" + + "\x06status\x18\x02 \x01(\x05R\x06status\x12\x16\n" + + "\x06reason\x18\x03 \x01(\tR\x06reason2\x88\x03\n" + + "\x04Task\x12L\n" + + "\x05Items\x12\x12.task.EmtpyRequest\x1a\x0e.task.Response\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\x12\x14/admin/v3/task/items\x12G\n" + + "\x04Info\x12\x0f.task.IdRequest\x1a\x0e.task.Response\"\x1e\x82\xd3\xe4\x93\x02\x18:\x01*\x12\x13/admin/v3/task/info\x12M\n" + + "\x06Create\x12\x11.task.EditRequest\x1a\x0e.task.Response\" \x82\xd3\xe4\x93\x02\x1a:\x01*\"\x15/admin/v3/task/create\x12I\n" + + "\x04Edit\x12\x11.task.EditRequest\x1a\x0e.task.Response\"\x1e\x82\xd3\xe4\x93\x02\x18:\x01*\"\x13/admin/v3/task/edit\x12O\n" + + "\x06Status\x12\x13.task.StatusRequest\x1a\x0e.task.Response\" \x82\xd3\xe4\x93\x02\x1a:\x01*\"\x15/admin/v3/task/statusB\bZ\x06./taskb\x06proto3" + +var ( + file_task_task_proto_rawDescOnce sync.Once + file_task_task_proto_rawDescData []byte +) + +func file_task_task_proto_rawDescGZIP() []byte { + file_task_task_proto_rawDescOnce.Do(func() { + file_task_task_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_task_task_proto_rawDesc), len(file_task_task_proto_rawDesc))) + }) + return file_task_task_proto_rawDescData +} + +var file_task_task_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_task_task_proto_goTypes = []any{ + (*Response)(nil), // 0: task.Response + (*EmtpyRequest)(nil), // 1: task.EmtpyRequest + (*EditRequest)(nil), // 2: task.EditRequest + (*IdRequest)(nil), // 3: task.IdRequest + (*StatusRequest)(nil), // 4: task.StatusRequest +} +var file_task_task_proto_depIdxs = []int32{ + 1, // 0: task.Task.Items:input_type -> task.EmtpyRequest + 3, // 1: task.Task.Info:input_type -> task.IdRequest + 2, // 2: task.Task.Create:input_type -> task.EditRequest + 2, // 3: task.Task.Edit:input_type -> task.EditRequest + 4, // 4: task.Task.Status:input_type -> task.StatusRequest + 0, // 5: task.Task.Items:output_type -> task.Response + 0, // 6: task.Task.Info:output_type -> task.Response + 0, // 7: task.Task.Create:output_type -> task.Response + 0, // 8: task.Task.Edit:output_type -> task.Response + 0, // 9: task.Task.Status:output_type -> task.Response + 5, // [5:10] is the sub-list for method output_type + 0, // [0:5] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_task_task_proto_init() } +func file_task_task_proto_init() { + if File_task_task_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_task_task_proto_rawDesc), len(file_task_task_proto_rawDesc)), + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_task_task_proto_goTypes, + DependencyIndexes: file_task_task_proto_depIdxs, + MessageInfos: file_task_task_proto_msgTypes, + }.Build() + File_task_task_proto = out.File + file_task_task_proto_goTypes = nil + file_task_task_proto_depIdxs = nil +} diff --git a/rpc/task/pb/task_grpc.pb.go b/rpc/task/pb/task_grpc.pb.go new file mode 100644 index 0000000..04d1706 --- /dev/null +++ b/rpc/task/pb/task_grpc.pb.go @@ -0,0 +1,273 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.2 +// - protoc v4.25.8 +// source: task/task.proto + +package task + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Task_Items_FullMethodName = "/task.Task/Items" + Task_Info_FullMethodName = "/task.Task/Info" + Task_Create_FullMethodName = "/task.Task/Create" + Task_Edit_FullMethodName = "/task.Task/Edit" + Task_Status_FullMethodName = "/task.Task/Status" +) + +// TaskClient is the client API for Task service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type TaskClient interface { + Items(ctx context.Context, in *EmtpyRequest, opts ...grpc.CallOption) (*Response, error) + Info(ctx context.Context, in *IdRequest, opts ...grpc.CallOption) (*Response, error) + Create(ctx context.Context, in *EditRequest, opts ...grpc.CallOption) (*Response, error) + Edit(ctx context.Context, in *EditRequest, opts ...grpc.CallOption) (*Response, error) + Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*Response, error) +} + +type taskClient struct { + cc grpc.ClientConnInterface +} + +func NewTaskClient(cc grpc.ClientConnInterface) TaskClient { + return &taskClient{cc} +} + +func (c *taskClient) Items(ctx context.Context, in *EmtpyRequest, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Task_Items_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Info(ctx context.Context, in *IdRequest, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Task_Info_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Create(ctx context.Context, in *EditRequest, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Task_Create_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Edit(ctx context.Context, in *EditRequest, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Task_Edit_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*Response, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Response) + err := c.cc.Invoke(ctx, Task_Status_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// TaskServer is the server API for Task service. +// All implementations must embed UnimplementedTaskServer +// for forward compatibility. +type TaskServer interface { + Items(context.Context, *EmtpyRequest) (*Response, error) + Info(context.Context, *IdRequest) (*Response, error) + Create(context.Context, *EditRequest) (*Response, error) + Edit(context.Context, *EditRequest) (*Response, error) + Status(context.Context, *StatusRequest) (*Response, error) + mustEmbedUnimplementedTaskServer() +} + +// UnimplementedTaskServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedTaskServer struct{} + +func (UnimplementedTaskServer) Items(context.Context, *EmtpyRequest) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method Items not implemented") +} +func (UnimplementedTaskServer) Info(context.Context, *IdRequest) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method Info not implemented") +} +func (UnimplementedTaskServer) Create(context.Context, *EditRequest) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedTaskServer) Edit(context.Context, *EditRequest) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method Edit not implemented") +} +func (UnimplementedTaskServer) Status(context.Context, *StatusRequest) (*Response, error) { + return nil, status.Error(codes.Unimplemented, "method Status not implemented") +} +func (UnimplementedTaskServer) mustEmbedUnimplementedTaskServer() {} +func (UnimplementedTaskServer) testEmbeddedByValue() {} + +// UnsafeTaskServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to TaskServer will +// result in compilation errors. +type UnsafeTaskServer interface { + mustEmbedUnimplementedTaskServer() +} + +func RegisterTaskServer(s grpc.ServiceRegistrar, srv TaskServer) { + // If the following call panics, it indicates UnimplementedTaskServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Task_ServiceDesc, srv) +} + +func _Task_Items_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EmtpyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Items(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Task_Items_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Items(ctx, req.(*EmtpyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Info(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Task_Info_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Info(ctx, req.(*IdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EditRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Task_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Create(ctx, req.(*EditRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Edit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EditRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Edit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Task_Edit_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Edit(ctx, req.(*EditRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Status(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Task_Status_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Status(ctx, req.(*StatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Task_ServiceDesc is the grpc.ServiceDesc for Task service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Task_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "task.Task", + HandlerType: (*TaskServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Items", + Handler: _Task_Items_Handler, + }, + { + MethodName: "Info", + Handler: _Task_Info_Handler, + }, + { + MethodName: "Create", + Handler: _Task_Create_Handler, + }, + { + MethodName: "Edit", + Handler: _Task_Edit_Handler, + }, + { + MethodName: "Status", + Handler: _Task_Status_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "task/task.proto", +} diff --git a/rpc/task/task.pb b/rpc/task/task.pb new file mode 100644 index 0000000000000000000000000000000000000000..56dff6bc730a882662b01efb1e87f716efd48f32 GIT binary patch literal 14157 zcmd5@U5pz?ayEaLY_7Povnz>S|463Kwk+G+JIZIv^5HJza&|?TOEOKaEIA1#v*hfG z7XOYz%341hE|+`o;S%5u2?8a+CBVHn2@)U(kN^SllGj6!9|Qq{ye5bpBtTyBaBr8d zx_f@ep``Tz4y=b2ySl2ny1Kfmy1Iw`QG%U49*vIs_O>k~ixDcp(9kzod^~cdxwry~mY!qDE;vu^TtdNBTR+DVV{6*ElS`@& z+0@@;$5Th$}2o*mZbx(3D#E*;L`t$4z^fMj} z9orP0tD|Dhr+hD zWfv^V5msjnhoh-Q^K#w}{Qhw?zE^5i50irE3j63+*+ogYEg*-pqwTKkbSAwq3__Xh zni|%{$o~>s-|hA7iig;OVO(YLBLI~hf61MMOH`PrXwsCppt!u6`u2bS*XVEl zL4s{8!6khStpV{DYfQgkV$gf%u61lHHM&jxS;o5d*dBK6Vdn(a8iQQ~Ao?q8eLOqt z_d3{19vTB$f@`v);=%Qo*xCoSbvKAg7Lwpu0tXOx*y_M`9LQr%PsTPj1nudIAzk>I zlX}P~sy2x95=+~|*+6ng2o7Ow8o*fOk|Hw2Vud_IuVZ72kq9q^L}UU@N1sFhaGXpI*YEZ#N_kcailf)11+4(y>k9=X%4V zQ7$c9!i5lnmO$KrKdb_cXCWIuNi z^M93OYYVeoYL;)a#1Ux*MoG#)rQRgXyyE5RosvO7@g8sjdn)1Eej)cl#PUsNXbrb+>9%q?mK;w|+aqGJ%

mT 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