init.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package v5cfg
  2. import (
  3. "bytes"
  4. "io"
  5. core "github.com/v2fly/v2ray-core/v5"
  6. "github.com/v2fly/v2ray-core/v5/common"
  7. "github.com/v2fly/v2ray-core/v5/common/buf"
  8. "github.com/v2fly/v2ray-core/v5/common/cmdarg"
  9. "github.com/v2fly/v2ray-core/v5/infra/conf/json"
  10. )
  11. const jsonV5 = "jsonv5"
  12. func init() {
  13. common.Must(core.RegisterConfigLoader(&core.ConfigFormat{
  14. Name: []string{jsonV5},
  15. Extension: []string{".v5.json", ".v5.jsonc"},
  16. Loader: func(input interface{}) (*core.Config, error) {
  17. switch v := input.(type) {
  18. case string:
  19. r, err := cmdarg.LoadArg(v)
  20. if err != nil {
  21. return nil, err
  22. }
  23. data, err := buf.ReadAllToBytes(&json.Reader{
  24. Reader: r,
  25. })
  26. if err != nil {
  27. return nil, err
  28. }
  29. return loadJSONConfig(data)
  30. case []byte:
  31. r := &json.Reader{
  32. Reader: bytes.NewReader(v),
  33. }
  34. data, err := buf.ReadAllToBytes(r)
  35. if err != nil {
  36. return nil, err
  37. }
  38. return loadJSONConfig(data)
  39. case io.Reader:
  40. data, err := buf.ReadAllToBytes(&json.Reader{
  41. Reader: v,
  42. })
  43. if err != nil {
  44. return nil, err
  45. }
  46. return loadJSONConfig(data)
  47. default:
  48. return nil, newError("unknown type")
  49. }
  50. },
  51. }))
  52. }