diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e192558 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +test/* \ No newline at end of file diff --git a/go.sum b/go.sum index 4bc0337..a62c313 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index b41afa4..588cda3 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,9 @@ package main import ( + "encoding/json" "flag" + "fmt" "os" "strings" @@ -11,15 +13,15 @@ import ( var ( input = stringsArray{} output = "" - indent = 2 replaceArrays = false + outType = "yaml" ) func main() { flag.Var(&input, "i", "input files") flag.StringVar(&output, "o", "out.yaml", "output file") - flag.IntVar(&indent, "indent", 2, "changes the used indentation used when encoding") flag.BoolVar(&replaceArrays, "replace_arrays", false, "replace arrays with same keys. Merge otherwise.") + flag.StringVar(&outType, "out_type", "yaml", "output type, 'yaml' (default) or 'json'") flag.Parse() result := map[string]any{} @@ -42,8 +44,15 @@ func main() { } defer fp.Close() - enc := yaml.NewEncoder(fp) - enc.SetIndent(indent) + var enc Encoder + switch outType { + case "yaml": + enc = yaml.NewEncoder(fp) + case "json": + enc = json.NewEncoder(fp) + default: + panic(fmt.Errorf("unknown output type: %s", outType)) + } if err := enc.Encode(result); err != nil { panic(err) } @@ -86,3 +95,7 @@ func (i *stringsArray) Set(value string) error { func (i *stringsArray) String() string { return strings.Join(*i, ",") } + +type Encoder interface { + Encode(any) error +} diff --git a/readme.md b/readme.md index 09122e9..a189337 100644 --- a/readme.md +++ b/readme.md @@ -16,8 +16,8 @@ merger -i file1.yaml -i file2.yaml -i fileN.yaml -o output.yaml Есть ещё ключи: -- `-indent 2` устанавливает отступ в результирующем yaml'е - `-replace_arrays false` - если true то массивы по одинаковым ключам будут перезатираться. По умолчанию - соединяться. +- `-out_type` - выходной формат `yaml` (умолчание) или `json` ## Пример