jsonem.go 880 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package jsonem
  2. import (
  3. "bytes"
  4. "io"
  5. core "github.com/v2fly/v2ray-core/v4"
  6. "github.com/v2fly/v2ray-core/v4/common"
  7. "github.com/v2fly/v2ray-core/v4/common/cmdarg"
  8. "github.com/v2fly/v2ray-core/v4/infra/conf/merge"
  9. "github.com/v2fly/v2ray-core/v4/infra/conf/serial"
  10. )
  11. func init() {
  12. common.Must(core.RegisterConfigLoader(&core.ConfigFormat{
  13. Name: []string{"JSON"},
  14. Extension: []string{".json", ".jsonc"},
  15. Loader: func(input interface{}) (*core.Config, error) {
  16. switch v := input.(type) {
  17. case cmdarg.Arg:
  18. data, err := merge.FilesToJSON(v)
  19. if err != nil {
  20. return nil, err
  21. }
  22. r := bytes.NewReader(data)
  23. cf, err := serial.DecodeJSONConfig(r)
  24. if err != nil {
  25. return nil, err
  26. }
  27. return cf.Build()
  28. case io.Reader:
  29. return serial.LoadJSONConfig(v)
  30. default:
  31. return nil, newError("unknow type")
  32. }
  33. },
  34. }))
  35. }