diff --git a/gui/gui.go b/gui/gui.go index 95467ea..ff53a1a 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -3,7 +3,9 @@ package gui import ( "bytes" "encoding/json" + "errors" "fmt" + "io" "io/ioutil" "log" "os" @@ -14,6 +16,10 @@ import ( "github.com/rivo/tview" ) +var ( + ErrEmptyJSON = errors.New("empty json") +) + type Gui struct { Tree *Tree App *tview.Application @@ -262,3 +268,21 @@ func (g *Gui) parseValue(node *tview.TreeNode) interface{} { return v } +func UnMarshalJSON(in io.Reader) (interface{}, error) { + b, err := ioutil.ReadAll(in) + if err != nil { + return nil, err + } + if len(b) == 0 { + log.Println(err) + return nil, ErrEmptyJSON + } + + var i interface{} + if err := json.Unmarshal(b, &i); err != nil { + log.Println(err) + return nil, err + } + + return i, nil +} diff --git a/main.go b/main.go index e18049d..5d22a2a 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,6 @@ package main import ( - "encoding/json" - "errors" "flag" "fmt" "io/ioutil" @@ -21,10 +19,6 @@ var ( url = flag.String("url", "", "get json from url") ) -var ( - errEmptyJSON = errors.New("empty json") -) - func printError(err error) int { fmt.Fprintln(os.Stderr, err) return 1 @@ -58,15 +52,11 @@ func run() int { return printError(err) } - b, err := ioutil.ReadAll(resp.Body) + i, err := gui.UnMarshalJSON(resp.Body) if err != nil { return printError(err) } - var i interface{} - if err := json.Unmarshal(b, &i); err != nil { - return printError(err) - } if err := gui.New().Run(i); err != nil { return printError(err) } @@ -74,18 +64,10 @@ func run() int { } if !terminal.IsTerminal(0) { - b, err := ioutil.ReadAll(os.Stdin) + i, err := gui.UnMarshalJSON(os.Stdin) if err != nil { return printError(err) } - if len(b) == 0 { - return printError(err) - } - - var i interface{} - if err := json.Unmarshal(b, &i); err != nil { - return printError(err) - } if err := gui.New().Run(i); err != nil { log.Println(err)