From b251ec1363f7941dad37117eb454c44d6403d238 Mon Sep 17 00:00:00 2001 From: skanehira Date: Thu, 21 Nov 2019 13:45:32 +0900 Subject: [PATCH] add lib package to use tson as a library --- gui/gui.go | 10 +++++----- lib/edit.go | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 lib/edit.go diff --git a/gui/gui.go b/gui/gui.go index 5332dee..f674049 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -216,7 +216,7 @@ func (g *Gui) SaveJSONToFile(file string) error { enc := json.NewEncoder(&buf) enc.SetIndent("", " ") - if err := enc.Encode(g.makeJSON(g.Tree.GetRoot())); err != nil { + if err := enc.Encode(g.MakeJSON(g.Tree.GetRoot())); err != nil { log.Println(fmt.Sprintf("can't marshal json: %s", err)) return err } @@ -229,7 +229,7 @@ func (g *Gui) SaveJSONToFile(file string) error { return nil } -func (g *Gui) makeJSON(node *tview.TreeNode) interface{} { +func (g *Gui) MakeJSON(node *tview.TreeNode) interface{} { ref := node.GetReference().(Reference) children := node.GetChildren() @@ -237,13 +237,13 @@ func (g *Gui) makeJSON(node *tview.TreeNode) interface{} { case Object: i := make(map[string]interface{}) for _, n := range children { - i[n.GetText()] = g.makeJSON(n) + i[n.GetText()] = g.MakeJSON(n) } return i case Array: var i []interface{} for _, n := range children { - i = append(i, g.makeJSON(n)) + i = append(i, g.MakeJSON(n)) } return i case Key: @@ -252,7 +252,7 @@ func (g *Gui) makeJSON(node *tview.TreeNode) interface{} { return g.parseValue(v) } return map[string]interface{}{ - node.GetText(): g.makeJSON(v), + node.GetText(): g.MakeJSON(v), } } diff --git a/lib/edit.go b/lib/edit.go new file mode 100644 index 0000000..2867064 --- /dev/null +++ b/lib/edit.go @@ -0,0 +1,24 @@ +package lib + +import ( + "encoding/json" + "log" + + "github.com/skanehira/tson/gui" +) + +// Edit use tson as a library +func Edit(b []byte) ([]byte, error) { + var i interface{} + if err := json.Unmarshal(b, &i); err != nil { + log.Println(err) + return nil, err + } + + g := gui.New() + if err := g.Run(i); err != nil { + return nil, err + } + + return json.Marshal(g.MakeJSON(g.Tree.GetRoot())) +}