From d255ca1955b3658aaf12aba84ded8693d2be482f Mon Sep 17 00:00:00 2001 From: Alexander NeonXP Kiryukhin Date: Sun, 12 May 2024 18:17:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + go.sum | 1 + main.go | 21 +++++++++++++++++---- readme.md | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 .gitignore 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` ## Пример