1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2026-04-10 15:55:32 -04:00

add support for custom loader in json parser

This commit is contained in:
Shelikhoo
2021-09-04 19:22:41 +01:00
parent 7e9f4acd9b
commit cef6a46548
3 changed files with 50 additions and 36 deletions

View File

@@ -1,37 +1,11 @@
package v5cfg
import (
"bytes"
"encoding/json"
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
"github.com/v2fly/v2ray-core/v4/common/registry"
"github.com/v2fly/v2ray-core/v4/common/serial"
"strings"
)
func loadHeterogeneousConfigFromRawJson(interfaceType, name string, rawJson json.RawMessage) (proto.Message, error) {
var implementationFullName string
if strings.HasPrefix(name, "#") {
// skip resolution for full name
implementationFullName = name
} else {
registryResult, err := registry.FindImplementationByAlias(interfaceType, name)
if err != nil {
return nil, newError("unable to find implementation").Base(err)
}
implementationFullName = registryResult
}
implementationConfigInstance, err := serial.GetInstance(implementationFullName)
if err != nil {
return nil, newError("unable to create implementation config instance").Base(err)
}
unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: false}
err = unmarshaler.Unmarshal(bytes.NewReader([]byte(rawJson)), implementationConfigInstance.(proto.Message))
if err != nil {
return nil, newError("unable to parse json content").Base(err)
}
return implementationConfigInstance.(proto.Message), nil
return registry.LoadImplementationByAlias(interfaceType, name, []byte(rawJson))
}