feat: add to json string

This commit is contained in:
崔竞宁
2022-12-12 01:05:31 +08:00
parent 7d4accc441
commit ae151264e7
2 changed files with 55 additions and 52 deletions

View File

@@ -3,14 +3,10 @@ package main
import (
"context"
"flag"
"fmt"
"os"
"os/signal"
"unsafe"
"github.com/abc950309/acp"
jsoniter "github.com/json-iterator/go"
"github.com/modern-go/reflect2"
"github.com/sirupsen/logrus"
)
@@ -113,14 +109,7 @@ func main() {
}
defer r.Close()
var buf []byte
if *reportIndent {
buf, _ = reportJSON.MarshalIndent(report, "", "\t")
} else {
buf, _ = reportJSON.Marshal(report)
}
r.Write(buf)
r.Write([]byte(report.ToJSONString(*reportIndent)))
}()
}
@@ -131,40 +120,3 @@ func main() {
c.Wait()
}
var (
reportJSON jsoniter.API
)
type errValCoder struct{}
func (*errValCoder) IsEmpty(ptr unsafe.Pointer) bool {
val := (*error)(ptr)
return *val == nil
}
func (*errValCoder) Encode(ptr unsafe.Pointer, stream *jsoniter.Stream) {
val := (*error)(ptr)
stream.WriteString((*val).Error())
}
func (*errValCoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
val := (*error)(ptr)
*val = fmt.Errorf(iter.ReadString())
}
func init() {
reportJSON = jsoniter.Config{
EscapeHTML: true,
SortMapKeys: true,
ValidateJsonRawMessage: true,
}.Froze()
var emptyErr error
reportJSON.RegisterExtension(jsoniter.EncoderExtension{
reflect2.TypeOf(emptyErr): &errValCoder{},
})
reportJSON.RegisterExtension(jsoniter.DecoderExtension{
reflect2.TypeOf(emptyErr): &errValCoder{},
})
}

View File

@@ -1,8 +1,13 @@
package acp
import (
"fmt"
"path"
"sync"
"unsafe"
jsoniter "github.com/json-iterator/go"
"github.com/modern-go/reflect2"
)
type ReportGetter func() *Report
@@ -35,10 +40,9 @@ func NewReportGetter() (EventHandler, ReportGetter) {
for _, j := range jobs {
jobsCopyed = append(jobsCopyed, j)
}
errorsCopyed := make([]*Error, 0, len(jobs))
for _, e := range errors {
errorsCopyed = append(errorsCopyed, e)
}
errorsCopyed = append(errorsCopyed, errors...)
return &Report{
Jobs: jobsCopyed,
@@ -52,3 +56,50 @@ type Report struct {
Jobs []*Job `json:"files,omitempty"`
Errors []*Error `json:"errors,omitempty"`
}
func (r *Report) ToJSONString(indent bool) string {
if indent {
buf, _ := reportJSON.MarshalIndent(r, "", "\t")
return string(buf)
}
buf, _ := reportJSON.Marshal(r)
return string(buf)
}
var (
reportJSON jsoniter.API
)
type errValCoder struct{}
func (*errValCoder) IsEmpty(ptr unsafe.Pointer) bool {
val := (*error)(ptr)
return *val == nil
}
func (*errValCoder) Encode(ptr unsafe.Pointer, stream *jsoniter.Stream) {
val := (*error)(ptr)
stream.WriteString((*val).Error())
}
func (*errValCoder) Decode(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
val := (*error)(ptr)
*val = fmt.Errorf(iter.ReadString())
}
func init() {
reportJSON = jsoniter.Config{
EscapeHTML: true,
SortMapKeys: true,
ValidateJsonRawMessage: true,
}.Froze()
var emptyErr error
reportJSON.RegisterExtension(jsoniter.EncoderExtension{
reflect2.TypeOf(emptyErr): &errValCoder{},
})
reportJSON.RegisterExtension(jsoniter.DecoderExtension{
reflect2.TypeOf(emptyErr): &errValCoder{},
})
}