github.com/v2fly/v2ray-core/v5@v5.16.2-0.20240507031116-8191faa6e095/infra/conf/v5cfg/init.go (about)

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