| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | package coreimport (	"io"	"v2ray.com/core/common"	"v2ray.com/core/common/buf"	"github.com/golang/protobuf/proto")// ConfigLoader is an utility to load V2Ray config from external source.type ConfigLoader func(input io.Reader) (*Config, error)var configLoaderCache = make(map[ConfigFormat]ConfigLoader)// RegisterConfigLoader add a new ConfigLoader.func RegisterConfigLoader(format ConfigFormat, loader ConfigLoader) error {	configLoaderCache[format] = loader	return nil}// LoadConfig loads config with given format from given source.func LoadConfig(format ConfigFormat, input io.Reader) (*Config, error) {	loader, found := configLoaderCache[format]	if !found {		return nil, newError(ConfigFormat_name[int32(format)], " is not loadable.").AtWarning()	}	return loader(input)}func loadProtobufConfig(input io.Reader) (*Config, error) {	config := new(Config)	data, err := buf.ReadAllToBytes(input)	if err != nil {		return nil, err	}	if err := proto.Unmarshal(data, config); err != nil {		return nil, err	}	return config, nil}func init() {	common.Must(RegisterConfigLoader(ConfigFormat_Protobuf, loadProtobufConfig))}
 |