forked from mirror/go-json
Add Colorize option
This commit is contained in:
parent
374d8261fa
commit
c294f01ac5
|
@ -0,0 +1,70 @@
|
||||||
|
package json
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/goccy/go-json/internal/encoder"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
ColorFormat = encoder.ColorFormat
|
||||||
|
ColorScheme = encoder.ColorScheme
|
||||||
|
)
|
||||||
|
|
||||||
|
const escape = "\x1b"
|
||||||
|
|
||||||
|
type colorAttr int
|
||||||
|
|
||||||
|
const (
|
||||||
|
fgBlackColor colorAttr = iota + 30
|
||||||
|
fgRedColor
|
||||||
|
fgGreenColor
|
||||||
|
fgYellowColor
|
||||||
|
fgBlueColor
|
||||||
|
fgMagentaColor
|
||||||
|
fgCyanColor
|
||||||
|
fgWhiteColor
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
fgHiBlackColor colorAttr = iota + 90
|
||||||
|
fgHiRedColor
|
||||||
|
fgHiGreenColor
|
||||||
|
fgHiYellowColor
|
||||||
|
fgHiBlueColor
|
||||||
|
fgHiMagentaColor
|
||||||
|
fgHiCyanColor
|
||||||
|
fgHiWhiteColor
|
||||||
|
)
|
||||||
|
|
||||||
|
func createColorFormat(attr colorAttr) ColorFormat {
|
||||||
|
return ColorFormat{
|
||||||
|
Header: wrapColor(attr),
|
||||||
|
Footer: resetColor(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func wrapColor(attr colorAttr) string {
|
||||||
|
return fmt.Sprintf("%s[%dm", escape, attr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func resetColor() string {
|
||||||
|
return wrapColor(colorAttr(0))
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
DefaultColorScheme = &ColorScheme{
|
||||||
|
Int: createColorFormat(fgHiMagentaColor),
|
||||||
|
Uint: createColorFormat(fgHiMagentaColor),
|
||||||
|
Float: createColorFormat(fgHiMagentaColor),
|
||||||
|
Bool: createColorFormat(fgHiYellowColor),
|
||||||
|
String: createColorFormat(fgHiGreenColor),
|
||||||
|
Binary: createColorFormat(fgHiRedColor),
|
||||||
|
ObjectStart: createColorFormat(fgHiCyanColor),
|
||||||
|
ObjectEnd: createColorFormat(fgHiCyanColor),
|
||||||
|
ArrayStart: createColorFormat(fgHiCyanColor),
|
||||||
|
ArrayEnd: createColorFormat(fgHiCyanColor),
|
||||||
|
Colon: createColorFormat(fgWhiteColor),
|
||||||
|
Comma: createColorFormat(fgWhiteColor),
|
||||||
|
}
|
||||||
|
)
|
|
@ -0,0 +1,32 @@
|
||||||
|
package json_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/goccy/go-json"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestColorize(t *testing.T) {
|
||||||
|
v := struct {
|
||||||
|
A int
|
||||||
|
B uint
|
||||||
|
C float32
|
||||||
|
D string
|
||||||
|
E bool
|
||||||
|
F []byte
|
||||||
|
G []int
|
||||||
|
}{
|
||||||
|
A: 123,
|
||||||
|
B: 456,
|
||||||
|
C: 3.14,
|
||||||
|
D: "hello",
|
||||||
|
E: true,
|
||||||
|
F: []byte("binary"),
|
||||||
|
G: []int{1, 2, 3, 4},
|
||||||
|
}
|
||||||
|
b, err := json.MarshalWithOption(v, json.Colorize(json.DefaultColorScheme))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(string(b))
|
||||||
|
}
|
|
@ -5,4 +5,31 @@ type Option struct {
|
||||||
Indent bool
|
Indent bool
|
||||||
UnorderedMap bool
|
UnorderedMap bool
|
||||||
Debug bool
|
Debug bool
|
||||||
|
Colorize bool
|
||||||
|
ColorScheme *ColorScheme
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EncodeFormat struct {
|
||||||
|
Header string
|
||||||
|
Footer string
|
||||||
|
}
|
||||||
|
|
||||||
|
type EncodeFormatScheme struct {
|
||||||
|
Int EncodeFormat
|
||||||
|
Uint EncodeFormat
|
||||||
|
Float EncodeFormat
|
||||||
|
Bool EncodeFormat
|
||||||
|
String EncodeFormat
|
||||||
|
Binary EncodeFormat
|
||||||
|
ObjectStart EncodeFormat
|
||||||
|
ObjectEnd EncodeFormat
|
||||||
|
ArrayStart EncodeFormat
|
||||||
|
ArrayEnd EncodeFormat
|
||||||
|
Colon EncodeFormat
|
||||||
|
Comma EncodeFormat
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
ColorScheme = EncodeFormatScheme
|
||||||
|
ColorFormat = EncodeFormat
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue