From f23f18457e66721f99ac661e3b715231ad766b5e Mon Sep 17 00:00:00 2001 From: dudaodong Date: Thu, 6 Apr 2023 16:30:38 +0800 Subject: [PATCH] feat: add Pretty and PrettyToWriter --- docs/formatter.md | 84 +++++++++++++++++++++++++++++ docs/formatter_zh-CN.md | 84 +++++++++++++++++++++++++++++ formatter/formatter.go | 22 ++++++++ formatter/formatter_example_test.go | 45 +++++++++++++++- formatter/formatter_test.go | 52 ++++++++++++++++++ 5 files changed, 286 insertions(+), 1 deletion(-) diff --git a/docs/formatter.md b/docs/formatter.md index d022e02..18e5192 100644 --- a/docs/formatter.md +++ b/docs/formatter.md @@ -23,6 +23,8 @@ import ( ## Index - [Comma](#Comma) +- [Pretty](#Pretty) +- [PrettyToWriter](#PrettyToWriter)
@@ -63,3 +65,85 @@ func main() { // ¥1,234,567 } ``` + +### Pretty + +

Pretty data to JSON string.

+ +Signature: + +```go +func Pretty(v any) (string, error) +``` + +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/formatter" +) + +func main() { + result1, _ := formatter.Pretty([]string{"a", "b", "c"}) + result2, _ := formatter.Pretty(map[string]int{"a": 1}) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // [ + // "a", + // "b", + // "c" + // ] + // { + // "a": 1 + // } +} +``` + +### PrettyToWriter + +

Pretty encode data to writer.

+ +Signature: + +```go +func PrettyToWriter(v any, out io.Writer) error +``` + +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/formatter" +) + +func main() { + type User struct { + Name string `json:"name"` + Aage uint `json:"age"` + } + user := User{Name: "King", Aage: 10000} + + buf := &bytes.Buffer{} + err := formatter.PrettyToWriter(user, buf) + + fmt.Println(buf) + fmt.Println(err) + + // Output: + // { + // "name": "King", + // "age": 10000 + // } + // + // +} +``` diff --git a/docs/formatter_zh-CN.md b/docs/formatter_zh-CN.md index 6eddd08..080dabd 100644 --- a/docs/formatter_zh-CN.md +++ b/docs/formatter_zh-CN.md @@ -23,6 +23,8 @@ import ( ## 目录 - [Comma](#Comma) +- [Pretty](#Pretty) +- [PrettyToWriter](#PrettyToWriter)
@@ -63,3 +65,85 @@ func main() { // ¥1,234,567 } ``` + +### Pretty + +

返回pretty JSON字符串.

+ +函数签名: + +```go +func Pretty(v any) (string, error) +``` + +示例: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/formatter" +) + +func main() { + result1, _ := formatter.Pretty([]string{"a", "b", "c"}) + result2, _ := formatter.Pretty(map[string]int{"a": 1}) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // [ + // "a", + // "b", + // "c" + // ] + // { + // "a": 1 + // } +} +``` + +### PrettyToWriter + +

Pretty encode数据到writer。

+ +函数签名: + +```go +func PrettyToWriter(v any, out io.Writer) error +``` + +示例: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/formatter" +) + +func main() { + type User struct { + Name string `json:"name"` + Aage uint `json:"age"` + } + user := User{Name: "King", Aage: 10000} + + buf := &bytes.Buffer{} + err := formatter.PrettyToWriter(user, buf) + + fmt.Println(buf) + fmt.Println(err) + + // Output: + // { + // "name": "King", + // "age": 10000 + // } + // + // +} +``` diff --git a/formatter/formatter.go b/formatter/formatter.go index d88622a..30ccadb 100644 --- a/formatter/formatter.go +++ b/formatter/formatter.go @@ -5,7 +5,9 @@ package formatter import ( + "encoding/json" "fmt" + "io" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/strutil" @@ -44,3 +46,23 @@ func Comma[T constraints.Float | constraints.Integer | string](value T, symbol s return "" } + +// Pretty data to JSON string. +// Play: todo +func Pretty(v any) (string, error) { + out, err := json.MarshalIndent(v, "", " ") + return string(out), err +} + +// PrettyToWriter pretty encode data to writer. +// Play: todo +func PrettyToWriter(v any, out io.Writer) error { + enc := json.NewEncoder(out) + enc.SetIndent("", " ") + + if err := enc.Encode(v); err != nil { + return err + } + + return nil +} diff --git a/formatter/formatter_example_test.go b/formatter/formatter_example_test.go index 53162ad..ec14587 100644 --- a/formatter/formatter_example_test.go +++ b/formatter/formatter_example_test.go @@ -1,6 +1,9 @@ package formatter -import "fmt" +import ( + "bytes" + "fmt" +) func ExampleComma() { result1 := Comma("123", "") @@ -16,3 +19,43 @@ func ExampleComma() { // $12,345 // ¥1,234,567 } + +func ExamplePretty() { + result1, _ := Pretty([]string{"a", "b", "c"}) + result2, _ := Pretty(map[string]int{"a": 1}) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // [ + // "a", + // "b", + // "c" + // ] + // { + // "a": 1 + // } +} + +func ExamplePrettyToWriter() { + type User struct { + Name string `json:"name"` + Aage uint `json:"age"` + } + user := User{Name: "King", Aage: 10000} + + buf := &bytes.Buffer{} + err := PrettyToWriter(user, buf) + + fmt.Println(buf) + fmt.Println(err) + + // Output: + // { + // "name": "King", + // "age": 10000 + // } + // + // +} diff --git a/formatter/formatter_test.go b/formatter/formatter_test.go index 0ec05d9..ed31290 100644 --- a/formatter/formatter_test.go +++ b/formatter/formatter_test.go @@ -1,6 +1,7 @@ package formatter import ( + "bytes" "testing" "github.com/duke-git/lancet/v2/internal" @@ -26,3 +27,54 @@ func TestComma(t *testing.T) { assert.Equal("12,345,678.9", Comma(12345678.9, "")) assert.Equal("123,456,789,000", Comma(123456789000, "")) } + +func TestPretty(t *testing.T) { + assert := internal.NewAssert(t, "TestPretty") + + cases := []any{ + "", + "abc", + 123, + []string{"a", "b", "c"}, + map[string]int{"a": 1}, + struct { + Abc int `json:"abc"` + }{Abc: 123}, + } + + expects := []string{ + "\"\"", + `"abc"`, + "123", + "[\n \"a\",\n \"b\",\n \"c\"\n]", + "{\n \"a\": 1\n}", + "{\n \"abc\": 123\n}", + } + + for i, v := range cases { + result, err := Pretty(v) + + assert.IsNil(err) + + t.Log("result -> ", result) + assert.Equal(expects[i], result) + } +} + +func TestPrettyToWriter(t *testing.T) { + assert := internal.NewAssert(t, "TestPrettyToWriter") + + type User struct { + Name string `json:"name"` + Aage uint `json:"age"` + } + user := User{Name: "King", Aage: 10000} + + expects := "{\n \"name\": \"King\",\n \"age\": 10000\n}\n" + + buf := &bytes.Buffer{} + err := PrettyToWriter(user, buf) + + assert.IsNil(err) + assert.Equal(expects, buf.String()) +}