config_loader.go 760 B

123456789101112131415161718192021222324252627282930313233343536
  1. package core
  2. import (
  3. "io"
  4. "io/ioutil"
  5. "v2ray.com/core/common"
  6. "github.com/golang/protobuf/proto"
  7. )
  8. type ConfigLoader func(input io.Reader) (*Config, error)
  9. var configLoaderCache map[ConfigFormat]ConfigLoader
  10. func RegisterConfigLoader(format ConfigFormat, loader ConfigLoader) error {
  11. configLoaderCache[format] = loader
  12. return nil
  13. }
  14. func LoadConfig(format ConfigFormat, input io.Reader) (*Config, error) {
  15. loader, found := configLoaderCache[format]
  16. if !found {
  17. return nil, common.ErrBadConfiguration
  18. }
  19. return loader(input)
  20. }
  21. func LoadProtobufConfig(input io.Reader) (*Config, error) {
  22. config := new(Config)
  23. data, _ := ioutil.ReadAll(input)
  24. if err := proto.Unmarshal(data, config); err != nil {
  25. return nil, err
  26. }
  27. return config, nil
  28. }