v2fly/main/commands/helpers/config_load.go

56 lines
1.4 KiB
Go

package helpers
import (
"bytes"
"os"
"github.com/v2fly/v2ray-core/v4/infra/conf"
"github.com/v2fly/v2ray-core/v4/infra/conf/merge"
"github.com/v2fly/v2ray-core/v4/infra/conf/mergers"
"github.com/v2fly/v2ray-core/v4/infra/conf/serial"
)
// LoadConfig load config files to *conf.Config, it will:
// - resolve folder to files
// - try to read stdin if no file specified
func LoadConfig(files []string, format string, recursively bool) (*conf.Config, error) {
m, err := LoadConfigToMap(files, format, recursively)
if err != nil {
return nil, err
}
bs, err := merge.FromMap(m)
if err != nil {
return nil, err
}
r := bytes.NewReader(bs)
return serial.DecodeJSONConfig(r)
}
// LoadConfigToMap load config files to map, it will:
// - resolve folder to files
// - try to read stdin if no file specified
func LoadConfigToMap(files []string, format string, recursively bool) (map[string]interface{}, error) {
var err error
if len(files) > 0 {
var extensions []string
extensions, err := mergers.GetExtensions(format)
if err != nil {
return nil, err
}
files, err = ResolveFolderToFiles(files, extensions, recursively)
if err != nil {
return nil, err
}
}
m := make(map[string]interface{})
if len(files) == 0 {
err = mergers.MergeAs(format, os.Stdin, m)
} else {
err = mergers.MergeAs(format, files, m)
}
if err != nil {
return nil, err
}
return m, nil
}