1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-07-06 13:25:13 -04:00
v2fly/infra/conf/v5cfg/common.go
2021-09-04 16:48:23 +01:00

38 lines
1.2 KiB
Go

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
}