refactor: plugin code structure

This commit is contained in:
debugtalk
2022-03-05 00:34:55 +08:00
parent 1904d404fd
commit 0ede8d7989
27 changed files with 297 additions and 25 deletions

View File

@@ -1,10 +1,62 @@
## Updating the Protocol
# Updating the Protocol
If you update the protocol buffers file, you can regenerate the file using the following command from the project root directory. You do not need to run this if you're just using the plugin.
For Go:
## For Go
### Install dependencies
ref: https://www.grpc.io/docs/languages/go/quickstart/
Install the protocol compiler plugins for Go using the following commands:
```bash
$ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative plugin/proto/debugtalk.proto
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
```
Update your PATH so that the protoc compiler can find the plugins:
```bash
$ export PATH="$PATH:$(go env GOPATH)/bin"
```
### Generate gRPC code
```bash
$ protoc --go_out=. --go-grpc_out=. plugin/proto/debugtalk.proto
```
This will generate two go files in `plugin/go/proto` folder:
- debugtalk.pb.go
- debugtalk_grpc.pb.go
## For Python
### Install dependencies
ref: https://www.grpc.io/docs/languages/python/quickstart/
Install gRPC:
```bash
$ pip3 install grpcio
```
Install gRPC tools:
```bash
$ pip3 install grpcio-tools
```
### Generate gRPC code
```bash
$ python3 -m grpc_tools.protoc -I plugin/proto --python_out=plugin/python/ --grpc_python_out=plugin/python/ plugin/proto/debugtalk.proto
```
This will generate two python files in `plugin/python` folder:
- debugtalk_pb2.py
- debugtalk_pb2_grpc.py

View File

@@ -1,341 +0,0 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.19.4
// source: plugin/proto/debugtalk.proto
package proto
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type Empty struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *Empty) Reset() {
*x = Empty{}
if protoimpl.UnsafeEnabled {
mi := &file_plugin_proto_debugtalk_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Empty) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Empty) ProtoMessage() {}
func (x *Empty) ProtoReflect() protoreflect.Message {
mi := &file_plugin_proto_debugtalk_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Empty.ProtoReflect.Descriptor instead.
func (*Empty) Descriptor() ([]byte, []int) {
return file_plugin_proto_debugtalk_proto_rawDescGZIP(), []int{0}
}
type GetNamesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"`
}
func (x *GetNamesResponse) Reset() {
*x = GetNamesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_plugin_proto_debugtalk_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetNamesResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetNamesResponse) ProtoMessage() {}
func (x *GetNamesResponse) ProtoReflect() protoreflect.Message {
mi := &file_plugin_proto_debugtalk_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetNamesResponse.ProtoReflect.Descriptor instead.
func (*GetNamesResponse) Descriptor() ([]byte, []int) {
return file_plugin_proto_debugtalk_proto_rawDescGZIP(), []int{1}
}
func (x *GetNamesResponse) GetNames() []string {
if x != nil {
return x.Names
}
return nil
}
type CallRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Args []byte `protobuf:"bytes,2,opt,name=args,proto3" json:"args,omitempty"` // []interface{}
}
func (x *CallRequest) Reset() {
*x = CallRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_plugin_proto_debugtalk_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CallRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CallRequest) ProtoMessage() {}
func (x *CallRequest) ProtoReflect() protoreflect.Message {
mi := &file_plugin_proto_debugtalk_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 CallRequest.ProtoReflect.Descriptor instead.
func (*CallRequest) Descriptor() ([]byte, []int) {
return file_plugin_proto_debugtalk_proto_rawDescGZIP(), []int{2}
}
func (x *CallRequest) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *CallRequest) GetArgs() []byte {
if x != nil {
return x.Args
}
return nil
}
type CallResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // interface{}
}
func (x *CallResponse) Reset() {
*x = CallResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_plugin_proto_debugtalk_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CallResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CallResponse) ProtoMessage() {}
func (x *CallResponse) ProtoReflect() protoreflect.Message {
mi := &file_plugin_proto_debugtalk_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 CallResponse.ProtoReflect.Descriptor instead.
func (*CallResponse) Descriptor() ([]byte, []int) {
return file_plugin_proto_debugtalk_proto_rawDescGZIP(), []int{3}
}
func (x *CallResponse) GetValue() []byte {
if x != nil {
return x.Value
}
return nil
}
var File_plugin_proto_debugtalk_proto protoreflect.FileDescriptor
var file_plugin_proto_debugtalk_proto_rawDesc = []byte{
0x0a, 0x1c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x64,
0x65, 0x62, 0x75, 0x67, 0x74, 0x61, 0x6c, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x28,
0x0a, 0x10, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x35, 0x0a, 0x0b, 0x43, 0x61, 0x6c, 0x6c,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61,
0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22,
0x24, 0x0a, 0x0c, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x6f, 0x0a, 0x09, 0x44, 0x65, 0x62, 0x75, 0x67, 0x54, 0x61,
0x6c, 0x6b, 0x12, 0x31, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x0c,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x2f,
0x68, 0x72, 0x70, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_plugin_proto_debugtalk_proto_rawDescOnce sync.Once
file_plugin_proto_debugtalk_proto_rawDescData = file_plugin_proto_debugtalk_proto_rawDesc
)
func file_plugin_proto_debugtalk_proto_rawDescGZIP() []byte {
file_plugin_proto_debugtalk_proto_rawDescOnce.Do(func() {
file_plugin_proto_debugtalk_proto_rawDescData = protoimpl.X.CompressGZIP(file_plugin_proto_debugtalk_proto_rawDescData)
})
return file_plugin_proto_debugtalk_proto_rawDescData
}
var file_plugin_proto_debugtalk_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_plugin_proto_debugtalk_proto_goTypes = []interface{}{
(*Empty)(nil), // 0: proto.Empty
(*GetNamesResponse)(nil), // 1: proto.GetNamesResponse
(*CallRequest)(nil), // 2: proto.CallRequest
(*CallResponse)(nil), // 3: proto.CallResponse
}
var file_plugin_proto_debugtalk_proto_depIdxs = []int32{
0, // 0: proto.DebugTalk.GetNames:input_type -> proto.Empty
2, // 1: proto.DebugTalk.Call:input_type -> proto.CallRequest
1, // 2: proto.DebugTalk.GetNames:output_type -> proto.GetNamesResponse
3, // 3: proto.DebugTalk.Call:output_type -> proto.CallResponse
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
}
func init() { file_plugin_proto_debugtalk_proto_init() }
func file_plugin_proto_debugtalk_proto_init() {
if File_plugin_proto_debugtalk_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_plugin_proto_debugtalk_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Empty); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_plugin_proto_debugtalk_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetNamesResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_plugin_proto_debugtalk_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CallRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_plugin_proto_debugtalk_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CallResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_plugin_proto_debugtalk_proto_rawDesc,
NumEnums: 0,
NumMessages: 4,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_plugin_proto_debugtalk_proto_goTypes,
DependencyIndexes: file_plugin_proto_debugtalk_proto_depIdxs,
MessageInfos: file_plugin_proto_debugtalk_proto_msgTypes,
}.Build()
File_plugin_proto_debugtalk_proto = out.File
file_plugin_proto_debugtalk_proto_rawDesc = nil
file_plugin_proto_debugtalk_proto_goTypes = nil
file_plugin_proto_debugtalk_proto_depIdxs = nil
}

View File

@@ -1,7 +1,7 @@
syntax = "proto3";
package proto;
option go_package = "github.com/httprunner/hrp/plugin/proto";
option go_package = "plugin/go/proto";
message Empty {}

View File

@@ -1,137 +0,0 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
package proto
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.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
// DebugTalkClient is the client API for DebugTalk 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 DebugTalkClient interface {
GetNames(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetNamesResponse, error)
Call(ctx context.Context, in *CallRequest, opts ...grpc.CallOption) (*CallResponse, error)
}
type debugTalkClient struct {
cc grpc.ClientConnInterface
}
func NewDebugTalkClient(cc grpc.ClientConnInterface) DebugTalkClient {
return &debugTalkClient{cc}
}
func (c *debugTalkClient) GetNames(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetNamesResponse, error) {
out := new(GetNamesResponse)
err := c.cc.Invoke(ctx, "/proto.DebugTalk/GetNames", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *debugTalkClient) Call(ctx context.Context, in *CallRequest, opts ...grpc.CallOption) (*CallResponse, error) {
out := new(CallResponse)
err := c.cc.Invoke(ctx, "/proto.DebugTalk/Call", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DebugTalkServer is the server API for DebugTalk service.
// All implementations must embed UnimplementedDebugTalkServer
// for forward compatibility
type DebugTalkServer interface {
GetNames(context.Context, *Empty) (*GetNamesResponse, error)
Call(context.Context, *CallRequest) (*CallResponse, error)
mustEmbedUnimplementedDebugTalkServer()
}
// UnimplementedDebugTalkServer must be embedded to have forward compatible implementations.
type UnimplementedDebugTalkServer struct {
}
func (UnimplementedDebugTalkServer) GetNames(context.Context, *Empty) (*GetNamesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetNames not implemented")
}
func (UnimplementedDebugTalkServer) Call(context.Context, *CallRequest) (*CallResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Call not implemented")
}
func (UnimplementedDebugTalkServer) mustEmbedUnimplementedDebugTalkServer() {}
// UnsafeDebugTalkServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to DebugTalkServer will
// result in compilation errors.
type UnsafeDebugTalkServer interface {
mustEmbedUnimplementedDebugTalkServer()
}
func RegisterDebugTalkServer(s grpc.ServiceRegistrar, srv DebugTalkServer) {
s.RegisterService(&DebugTalk_ServiceDesc, srv)
}
func _DebugTalk_GetNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DebugTalkServer).GetNames(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/proto.DebugTalk/GetNames",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DebugTalkServer).GetNames(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _DebugTalk_Call_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CallRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DebugTalkServer).Call(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/proto.DebugTalk/Call",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DebugTalkServer).Call(ctx, req.(*CallRequest))
}
return interceptor(ctx, in, info, handler)
}
// DebugTalk_ServiceDesc is the grpc.ServiceDesc for DebugTalk service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var DebugTalk_ServiceDesc = grpc.ServiceDesc{
ServiceName: "proto.DebugTalk",
HandlerType: (*DebugTalkServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetNames",
Handler: _DebugTalk_GetNames_Handler,
},
{
MethodName: "Call",
Handler: _DebugTalk_Call_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "plugin/proto/debugtalk.proto",
}