formats.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package mergers
  2. //go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen
  3. import (
  4. "strings"
  5. )
  6. // MergeableFormat is a configurable mergeable format of V2Ray config file.
  7. type MergeableFormat struct {
  8. Name string
  9. Extensions []string
  10. Loader MergeLoader
  11. }
  12. // MergeLoader is a utility to merge V2Ray config from external source into a map and returns it.
  13. type MergeLoader func(input interface{}, m map[string]interface{}) error
  14. var (
  15. mergeLoaderByName = make(map[string]*MergeableFormat)
  16. mergeLoaderByExt = make(map[string]*MergeableFormat)
  17. )
  18. // RegisterMergeLoader add a new MergeLoader.
  19. func RegisterMergeLoader(format *MergeableFormat) error {
  20. if _, found := mergeLoaderByName[format.Name]; found {
  21. return newError(format.Name, " already registered.")
  22. }
  23. mergeLoaderByName[format.Name] = format
  24. for _, ext := range format.Extensions {
  25. lext := strings.ToLower(ext)
  26. if f, found := mergeLoaderByExt[lext]; found {
  27. return newError(ext, " already registered to ", f.Name)
  28. }
  29. mergeLoaderByExt[lext] = format
  30. }
  31. return nil
  32. }