diff --git a/id/handler/id.go b/id/handler/id.go index 1fa61d1..ebadf23 100644 --- a/id/handler/id.go +++ b/id/handler/id.go @@ -76,3 +76,13 @@ func (id *Id) Generate(ctx context.Context, req *pb.GenerateRequest, rsp *pb.Gen return nil } + +func (id *Id) Types(ctx context.Context, req *pb.TypesRequest, rsp *pb.TypesResponse) error { + rsp.Types = []string{ + "uuid", + "shortid", + "snowflake", + "bigflake", + } + return nil +} diff --git a/id/proto/id.pb.go b/id/proto/id.pb.go index 028d07d..9781314 100644 --- a/id/proto/id.pb.go +++ b/id/proto/id.pb.go @@ -26,7 +26,7 @@ type GenerateRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // type of id e.g uuid, snowflake (64 bit), bigflake (128 bit) + // type of id e.g uuid, shortid, snowflake (64 bit), bigflake (128 bit) Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` } @@ -126,6 +126,92 @@ func (x *GenerateResponse) GetType() string { return "" } +// List the types of IDs available. No query params needed. +type TypesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *TypesRequest) Reset() { + *x = TypesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_id_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TypesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypesRequest) ProtoMessage() {} + +func (x *TypesRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_id_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TypesRequest.ProtoReflect.Descriptor instead. +func (*TypesRequest) Descriptor() ([]byte, []int) { + return file_proto_id_proto_rawDescGZIP(), []int{2} +} + +type TypesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Types []string `protobuf:"bytes,1,rep,name=types,proto3" json:"types,omitempty"` +} + +func (x *TypesResponse) Reset() { + *x = TypesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_id_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TypesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypesResponse) ProtoMessage() {} + +func (x *TypesResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_id_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TypesResponse.ProtoReflect.Descriptor instead. +func (*TypesResponse) Descriptor() ([]byte, []int) { + return file_proto_id_proto_rawDescGZIP(), []int{3} +} + +func (x *TypesResponse) GetTypes() []string { + if x != nil { + return x.Types + } + return nil +} + var File_proto_id_proto protoreflect.FileDescriptor var file_proto_id_proto_rawDesc = []byte{ @@ -136,12 +222,18 @@ var file_proto_id_proto_rawDesc = []byte{ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x32, 0x3d, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x69, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x64, 0x2e, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x69, 0x64, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x70, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x25, 0x0a, 0x0d, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x32, 0x6d, 0x0a, 0x02, 0x49, 0x64, + 0x12, 0x37, 0x0a, 0x08, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x69, + 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x14, 0x2e, 0x69, 0x64, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x05, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x12, 0x10, 0x2e, 0x69, 0x64, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x69, 0x64, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x69, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -156,16 +248,20 @@ func file_proto_id_proto_rawDescGZIP() []byte { return file_proto_id_proto_rawDescData } -var file_proto_id_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_proto_id_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_proto_id_proto_goTypes = []interface{}{ (*GenerateRequest)(nil), // 0: id.GenerateRequest (*GenerateResponse)(nil), // 1: id.GenerateResponse + (*TypesRequest)(nil), // 2: id.TypesRequest + (*TypesResponse)(nil), // 3: id.TypesResponse } var file_proto_id_proto_depIdxs = []int32{ 0, // 0: id.Id.Generate:input_type -> id.GenerateRequest - 1, // 1: id.Id.Generate:output_type -> id.GenerateResponse - 1, // [1:2] is the sub-list for method output_type - 0, // [0:1] is the sub-list for method input_type + 2, // 1: id.Id.Types:input_type -> id.TypesRequest + 1, // 2: id.Id.Generate:output_type -> id.GenerateResponse + 3, // 3: id.Id.Types:output_type -> id.TypesResponse + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] 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 @@ -201,6 +297,30 @@ func file_proto_id_proto_init() { return nil } } + file_proto_id_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TypesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_id_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TypesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -208,7 +328,7 @@ func file_proto_id_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_id_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 4, NumExtensions: 0, NumServices: 1, }, diff --git a/id/proto/id.pb.micro.go b/id/proto/id.pb.micro.go index aa2d166..3c769a6 100644 --- a/id/proto/id.pb.micro.go +++ b/id/proto/id.pb.micro.go @@ -43,6 +43,7 @@ func NewIdEndpoints() []*api.Endpoint { type IdService interface { Generate(ctx context.Context, in *GenerateRequest, opts ...client.CallOption) (*GenerateResponse, error) + Types(ctx context.Context, in *TypesRequest, opts ...client.CallOption) (*TypesResponse, error) } type idService struct { @@ -67,15 +68,27 @@ func (c *idService) Generate(ctx context.Context, in *GenerateRequest, opts ...c return out, nil } +func (c *idService) Types(ctx context.Context, in *TypesRequest, opts ...client.CallOption) (*TypesResponse, error) { + req := c.c.NewRequest(c.name, "Id.Types", in) + out := new(TypesResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Id service type IdHandler interface { Generate(context.Context, *GenerateRequest, *GenerateResponse) error + Types(context.Context, *TypesRequest, *TypesResponse) error } func RegisterIdHandler(s server.Server, hdlr IdHandler, opts ...server.HandlerOption) error { type id interface { Generate(ctx context.Context, in *GenerateRequest, out *GenerateResponse) error + Types(ctx context.Context, in *TypesRequest, out *TypesResponse) error } type Id struct { id @@ -91,3 +104,7 @@ type idHandler struct { func (h *idHandler) Generate(ctx context.Context, in *GenerateRequest, out *GenerateResponse) error { return h.IdHandler.Generate(ctx, in, out) } + +func (h *idHandler) Types(ctx context.Context, in *TypesRequest, out *TypesResponse) error { + return h.IdHandler.Types(ctx, in, out) +} diff --git a/id/proto/id.proto b/id/proto/id.proto index 9db8def..d88fa17 100644 --- a/id/proto/id.proto +++ b/id/proto/id.proto @@ -6,6 +6,7 @@ option go_package = "./proto;id"; service Id { rpc Generate(GenerateRequest) returns (GenerateResponse) {} + rpc Types(TypesRequest) returns (TypesResponse) {} } // Generate a unique ID. Defaults to uuid. @@ -21,3 +22,9 @@ message GenerateResponse { string type = 2; } +// List the types of IDs available. No query params needed. +message TypesRequest {} + +message TypesResponse { + repeated string types = 1; +}