1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2025-11-10 17:27:18 -05:00

improve commands

(rebased from ebbf31f07e)
This commit is contained in:
Jebbs
2021-02-21 23:02:42 +08:00
committed by Shelikhoo
parent fa0cf6db26
commit 2523d77919
67 changed files with 1723 additions and 1220 deletions

View File

@@ -18,95 +18,46 @@ package merge
import (
"bytes"
"encoding/json"
"fmt"
"io"
"github.com/v2fly/v2ray-core/v4/common/cmdarg"
"github.com/v2fly/v2ray-core/v4/infra/conf/serial"
)
// FilesToJSON merges multiple jsons files into one json, accepts remote url, or local file path
func FilesToJSON(args []string) ([]byte, error) {
m, err := FilesToMap(args)
if err != nil {
return nil, err
}
return json.Marshal(m)
}
// BytesToJSON merges multiple json contents into one json.
func BytesToJSON(args [][]byte) ([]byte, error) {
m, err := BytesToMap(args)
if err != nil {
return nil, err
}
return json.Marshal(m)
}
// FilesToMap merges multiple json files into one map, accepts remote url, or local file path
func FilesToMap(args []string) (m map[string]interface{}, err error) {
m, err = loadFiles(args)
if err != nil {
return nil, err
}
err = applyRules(m)
if err != nil {
return nil, err
}
return m, nil
}
// BytesToMap merges multiple json contents into one map.
func BytesToMap(args [][]byte) (m map[string]interface{}, err error) {
m, err = loadBytes(args)
if err != nil {
return nil, err
}
err = applyRules(m)
if err != nil {
return nil, err
}
return m, nil
}
func loadFiles(args []string) (map[string]interface{}, error) {
c := make(map[string]interface{})
// JSONs merges multiple json contents into one json.
func JSONs(args [][]byte) ([]byte, error) {
m := make(map[string]interface{})
for _, arg := range args {
r, err := cmdarg.LoadArg(arg)
if err != nil {
return nil, fmt.Errorf("fail to load %s: %s", arg, err)
}
m, err := decode(r)
if err != nil {
return nil, fmt.Errorf("fail to decode %s: %s", arg, err)
}
if err = mergeMaps(c, m); err != nil {
return nil, fmt.Errorf("fail to merge %s: %s", arg, err)
}
}
return c, nil
}
func loadBytes(args [][]byte) (map[string]interface{}, error) {
conf := make(map[string]interface{})
for _, arg := range args {
r := bytes.NewReader(arg)
m, err := decode(r)
if err != nil {
return nil, err
}
if err = mergeMaps(conf, m); err != nil {
if _, err := ToMap(arg, m); err != nil {
return nil, err
}
}
return conf, nil
return FromMap(m)
}
func decode(r io.Reader) (map[string]interface{}, error) {
c := make(map[string]interface{})
err := serial.DecodeJSON(r, &c)
// ToMap merges json content to target map and returns it
func ToMap(content []byte, target map[string]interface{}) (map[string]interface{}, error) {
if target == nil {
target = make(map[string]interface{})
}
r := bytes.NewReader(content)
n := make(map[string]interface{})
err := serial.DecodeJSON(r, &n)
if err != nil {
return nil, err
}
return c, nil
if err = mergeMaps(target, n); err != nil {
return nil, err
}
return target, nil
}
// FromMap apply merge rules to map and convert it to json
func FromMap(target map[string]interface{}) ([]byte, error) {
if target == nil {
target = make(map[string]interface{})
}
err := ApplyRules(target)
if err != nil {
return nil, err
}
return json.Marshal(target)
}