1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2026-05-08 05:29:09 -04:00
Files
v2fly/infra/conf/mergers/formats.go
Jebbs 2523d77919 improve commands
(rebased from ebbf31f07e)
2021-09-04 11:11:45 +01:00

41 lines
1.1 KiB
Go

package mergers
//go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen
import (
"strings"
)
// MergeableFormat is a configurable mergeable format of V2Ray config file.
type MergeableFormat struct {
Name string
Extensions []string
Loader MergeLoader
}
// MergeLoader is a utility to merge V2Ray config from external source into a map and returns it.
type MergeLoader func(input interface{}, m map[string]interface{}) error
var (
mergeLoaderByName = make(map[string]*MergeableFormat)
mergeLoaderByExt = make(map[string]*MergeableFormat)
)
// RegisterMergeLoader add a new MergeLoader.
func RegisterMergeLoader(format *MergeableFormat) error {
if _, found := mergeLoaderByName[format.Name]; found {
return newError(format.Name, " already registered.")
}
mergeLoaderByName[format.Name] = format
for _, ext := range format.Extensions {
lext := strings.ToLower(ext)
if f, found := mergeLoaderByExt[lext]; found {
return newError(ext, " already registered to ", f.Name)
}
mergeLoaderByExt[lext] = format
}
return nil
}