mirror of https://github.com/XTLS/Xray-core
				
				
				
			
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
package toml
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"io"
 | 
						|
 | 
						|
	"github.com/xtls/xray-core/common"
 | 
						|
	"github.com/xtls/xray-core/common/cmdarg"
 | 
						|
	"github.com/xtls/xray-core/common/errors"
 | 
						|
	"github.com/xtls/xray-core/core"
 | 
						|
	"github.com/xtls/xray-core/infra/conf"
 | 
						|
	"github.com/xtls/xray-core/infra/conf/serial"
 | 
						|
	"github.com/xtls/xray-core/main/confloader"
 | 
						|
)
 | 
						|
 | 
						|
func init() {
 | 
						|
	common.Must(core.RegisterConfigLoader(&core.ConfigFormat{
 | 
						|
		Name:      "TOML",
 | 
						|
		Extension: []string{"toml"},
 | 
						|
		Loader: func(input interface{}) (*core.Config, error) {
 | 
						|
			switch v := input.(type) {
 | 
						|
			case cmdarg.Arg:
 | 
						|
				cf := &conf.Config{}
 | 
						|
				for i, arg := range v {
 | 
						|
					errors.LogInfo(context.Background(), "Reading config: ", arg)
 | 
						|
					r, err := confloader.LoadConfig(arg)
 | 
						|
					if err != nil {
 | 
						|
						return nil, errors.New("failed to read config: ", arg).Base(err)
 | 
						|
					}
 | 
						|
					c, err := serial.DecodeTOMLConfig(r)
 | 
						|
					if err != nil {
 | 
						|
						return nil, errors.New("failed to decode config: ", arg).Base(err)
 | 
						|
					}
 | 
						|
					if i == 0 {
 | 
						|
						// This ensure even if the muti-json parser do not support a setting,
 | 
						|
						// It is still respected automatically for the first configure file
 | 
						|
						*cf = *c
 | 
						|
						continue
 | 
						|
					}
 | 
						|
					cf.Override(c, arg)
 | 
						|
				}
 | 
						|
				return cf.Build()
 | 
						|
			case io.Reader:
 | 
						|
				return serial.LoadTOMLConfig(v)
 | 
						|
			default:
 | 
						|
				return nil, errors.New("unknown type")
 | 
						|
			}
 | 
						|
		},
 | 
						|
	}))
 | 
						|
}
 |