78 lines
1.3 KiB
Go
78 lines
1.3 KiB
Go
|
package prettify
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
|
||
|
"github.com/TylerBrock/colorjson"
|
||
|
)
|
||
|
|
||
|
// Print will beautify the output of v
|
||
|
func Print(v any) {
|
||
|
typeOfVar := reflect.TypeOf(v)
|
||
|
switch typeOfVar.Kind() {
|
||
|
case reflect.Slice:
|
||
|
pprintArray(v)
|
||
|
case reflect.Struct:
|
||
|
pprint(v)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// pprint will beautify the output of body
|
||
|
func pprint(body any) error {
|
||
|
b, err := json.Marshal(body)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
var obj map[string]any
|
||
|
json.Unmarshal(b, &obj)
|
||
|
|
||
|
// Make a custom formatter with indent set
|
||
|
f := colorjson.NewFormatter()
|
||
|
f.Indent = 2
|
||
|
|
||
|
// Marshal the Colorized JSON
|
||
|
s, err := f.Marshal(obj)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Print out string to stdout
|
||
|
fmt.Printf("%s\n", s)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// pprintArray will beautify the output of bodyArray
|
||
|
func pprintArray(bodyArray any) error {
|
||
|
b, err := json.Marshal(bodyArray)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
var obj []map[string]any
|
||
|
json.Unmarshal(b, &obj)
|
||
|
|
||
|
// Make a custom formatter with indent set
|
||
|
f := colorjson.NewFormatter()
|
||
|
f.Indent = 2
|
||
|
|
||
|
for i := range obj {
|
||
|
// Marshal the Colorized JSON
|
||
|
s, err := f.Marshal(obj[i])
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Print out string to stdout
|
||
|
fmt.Printf("%s", s)
|
||
|
|
||
|
// include a comma between elements
|
||
|
if i < len(obj)-1 {
|
||
|
fmt.Printf(",")
|
||
|
}
|
||
|
// include newline at the end of all elements
|
||
|
fmt.Printf("\n")
|
||
|
}
|
||
|
return nil
|
||
|
}
|