From 3a705cec5a660ff0d38003d838338f7f86c79bb4 Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Sat, 6 Mar 2021 18:05:44 +0000 Subject: [PATCH] reflective api loader --- infra/conf/api.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/infra/conf/api.go b/infra/conf/api.go index 58014cc79..c5a199c4d 100644 --- a/infra/conf/api.go +++ b/infra/conf/api.go @@ -1,6 +1,8 @@ package conf import ( + "github.com/jhump/protoreflect/desc" + "github.com/jhump/protoreflect/dynamic" "strings" "github.com/v2fly/v2ray-core/v4/app/commander" @@ -31,6 +33,16 @@ func (c *APIConfig) Build() (*commander.Config, error) { services = append(services, serial.ToTypedMessage(&loggerservice.Config{})) case "statsservice": services = append(services, serial.ToTypedMessage(&statsservice.Config{})) + default: + if !strings.HasPrefix(s, "#") { + continue + } + message, err := desc.LoadMessageDescriptor(s[:]) + if err != nil || message == nil { + return nil, newError("Cannot find API", s, "").Base(err) + } + serviceConfig := dynamic.NewMessage(message) + services = append(services, serial.ToTypedMessage(serviceConfig)) } }