mirror of
https://github.com/v2fly/v2ray-core.git
synced 2026-06-12 22:19:09 -04:00
9
main/formats/errors.generated.go
Normal file
9
main/formats/errors.generated.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package formats
|
||||
|
||||
import "github.com/v2fly/v2ray-core/v4/common/errors"
|
||||
|
||||
type errPathObjHolder struct{}
|
||||
|
||||
func newError(values ...interface{}) *errors.Error {
|
||||
return errors.New(values...).WithPathObj(errPathObjHolder{})
|
||||
}
|
||||
56
main/formats/formats.go
Normal file
56
main/formats/formats.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package formats
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
core "github.com/v2fly/v2ray-core/v4"
|
||||
"github.com/v2fly/v2ray-core/v4/common"
|
||||
"github.com/v2fly/v2ray-core/v4/infra/conf/merge"
|
||||
"github.com/v2fly/v2ray-core/v4/infra/conf/mergers"
|
||||
"github.com/v2fly/v2ray-core/v4/infra/conf/serial"
|
||||
)
|
||||
|
||||
func init() {
|
||||
for _, formatName := range mergers.GetAllNames() {
|
||||
loader, err := makeMergeLoader(formatName)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if formatName == core.FormatAuto {
|
||||
loader.Extension = nil
|
||||
}
|
||||
common.Must(core.RegisterConfigLoader(loader))
|
||||
}
|
||||
}
|
||||
|
||||
func makeMergeLoader(formatName string) (*core.ConfigFormat, error) {
|
||||
extenstoins, err := mergers.GetExtensions(formatName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &core.ConfigFormat{
|
||||
Name: []string{formatName},
|
||||
Extension: extenstoins,
|
||||
Loader: makeLoaderFunc(formatName),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func makeLoaderFunc(formatName string) core.ConfigLoader {
|
||||
return func(input interface{}) (*core.Config, error) {
|
||||
m := make(map[string]interface{})
|
||||
err := mergers.MergeAs(formatName, input, m)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
data, err := merge.FromMap(m)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r := bytes.NewReader(data)
|
||||
cf, err := serial.DecodeJSONConfig(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cf.Build()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user