From c51df858afa2a6ed10080879141d5133e212900a Mon Sep 17 00:00:00 2001 From: Richard Kosegi Date: Mon, 17 Jun 2024 23:33:19 +0200 Subject: [PATCH] Props: Add encoding func for DOM's container Signed-off-by: Richard Kosegi --- props/codec.go | 18 +++++++++++++++++- props/codec_test.go | 15 +++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/props/codec.go b/props/codec.go index 94ea825..e069b7e 100644 --- a/props/codec.go +++ b/props/codec.go @@ -19,13 +19,29 @@ package props import ( "fmt" "github.com/magiconair/properties" + "github.com/rkosegi/yaml-toolkit/dom" "github.com/rkosegi/yaml-toolkit/utils" "io" ) +func encodeKv(k string, v interface{}, w io.Writer) error { + _, err := w.Write([]byte(fmt.Sprintf("%s=%v\n", k, v))) + return err +} + func EncoderFn(w io.Writer, x interface{}) error { for k, v := range x.(map[string]interface{}) { - _, err := w.Write([]byte(fmt.Sprintf("%s=%v\n", k, v))) + err := encodeKv(k, v, w) + if err != nil { + return err + } + } + return nil +} + +func DomEncoderFn(w io.Writer, x interface{}) error { + for k, v := range x.(dom.Container).Children() { + err := encodeKv(k, v.(dom.Leaf).Value(), w) if err != nil { return err } diff --git a/props/codec_test.go b/props/codec_test.go index ced5da9..0c08663 100644 --- a/props/codec_test.go +++ b/props/codec_test.go @@ -18,6 +18,7 @@ package props import ( "bytes" + "github.com/rkosegi/yaml-toolkit/dom" "github.com/rkosegi/yaml-toolkit/utils" "github.com/stretchr/testify/assert" "strings" @@ -38,6 +39,20 @@ func TestEncoderFn(t *testing.T) { assert.Error(t, EncoderFn(utils.FailingWriter(), m)) } +func TestDomEncoderFn(t *testing.T) { + m := map[string]interface{}{ + "a.b.c": 1, + "x.y.z": "Hi!", + } + var buff bytes.Buffer + c := dom.Builder().FromMap(m) + err := DomEncoderFn(&buff, c) + assert.NoError(t, err) + assert.Contains(t, buff.String(), "a.b.c=1\n") + assert.Contains(t, buff.String(), "x.y.z=Hi!\n") + assert.Error(t, DomEncoderFn(utils.FailingWriter(), c)) +} + func TestDecoderFn(t *testing.T) { m := make(map[string]interface{}) err := DecoderFn(strings.NewReader("a.b=1\nx.y=Hi!\n"), &m)