From 055f5a826d360398f7a4d495def80e1b08fadb44 Mon Sep 17 00:00:00 2001 From: Samuel Mutel Date: Thu, 12 Oct 2023 17:51:40 +0200 Subject: [PATCH] feat: Manage ini files --- cmd/utils.go | 2 ++ go.mod | 1 + go.sum | 2 ++ pkg/yqlib/decoder.go | 5 ++++- pkg/yqlib/decoder_ini.go | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 pkg/yqlib/decoder_ini.go diff --git a/cmd/utils.go b/cmd/utils.go index 331a65e5..a9df3743 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -130,6 +130,8 @@ func configureDecoder(evaluateTogether bool) (yqlib.Decoder, error) { func createDecoder(format yqlib.InputFormat, evaluateTogether bool) (yqlib.Decoder, error) { switch format { + case yqlib.IniInputFormat: + return yqlib.NewIniDecoder(), nil case yqlib.LuaInputFormat: return yqlib.NewLuaDecoder(yqlib.ConfiguredLuaPreferences), nil case yqlib.XMLInputFormat: diff --git a/go.mod b/go.mod index c755e5f0..46bf14d1 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/yuin/gopher-lua v1.1.0 golang.org/x/net v0.17.0 golang.org/x/text v0.13.0 + gopkg.in/ini.v1 v1.67.0 gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index fde4c7ca..427c83cd 100644 --- a/go.sum +++ b/go.sum @@ -63,6 +63,8 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= 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/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 h1:6D+BvnJ/j6e222UW8s2qTSe3wGBtvo0MbVQG/c5k8RE= gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473/go.mod h1:N1eN2tsCx0Ydtgjl4cqmbRCsY4/+z4cYDeqwZTk6zog= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/yqlib/decoder.go b/pkg/yqlib/decoder.go index 284b4316..e56892e6 100644 --- a/pkg/yqlib/decoder.go +++ b/pkg/yqlib/decoder.go @@ -19,6 +19,7 @@ const ( TomlInputFormat UriInputFormat LuaInputFormat + IniInputFormat ) type Decoder interface { @@ -44,8 +45,10 @@ func InputFormatFromString(format string) (InputFormat, error) { return TomlInputFormat, nil case "lua", "l": return LuaInputFormat, nil + case "ini", "i": + return IniInputFormat, nil default: - return 0, fmt.Errorf("unknown format '%v' please use [yaml|json|props|csv|tsv|xml|toml]", format) + return 0, fmt.Errorf("unknown format '%v' please use [yaml|json|props|csv|tsv|xml|toml|ini]", format) } } diff --git a/pkg/yqlib/decoder_ini.go b/pkg/yqlib/decoder_ini.go new file mode 100644 index 00000000..4a3b9fe3 --- /dev/null +++ b/pkg/yqlib/decoder_ini.go @@ -0,0 +1,37 @@ +package yqlib + +import ( + "io" + + ini "gopkg.in/ini.v1" +) + +type iniDecoder struct { + cfg *ini.File + finished bool +} + +func NewIniDecoder() Decoder { + return &iniDecoder{ + finished: false, + } +} + +func (dec *iniDecoder) Init(reader io.Reader) error { + var err error + dec.cfg, err = ini.Load(reader) + if err != nil { + return err + } + + return nil +} + +func (dec *iniDecoder) Decode() (*CandidateNode, error) { + if dec.finished { + return nil, io.EOF + } + + log.Debug("ok here we go") + return nil, nil +}