From a1f0bcbafe86d84d306ad4f3a241c0a582a7651f Mon Sep 17 00:00:00 2001 From: MacRat Date: Sun, 20 Nov 2022 00:07:21 +0900 Subject: [PATCH] fix(lib): avoid to print invalid JSON even if target is nil --- lib-ayd/record.go | 7 ++++++- lib-ayd/record_test.go | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib-ayd/record.go b/lib-ayd/record.go index 6de0bb65..aa843825 100644 --- a/lib-ayd/record.go +++ b/lib-ayd/record.go @@ -180,13 +180,18 @@ func (r *Record) UnmarshalJSON(data []byte) error { func (r Record) MarshalJSON() ([]byte, error) { head := bytes.NewBuffer(make([]byte, 0, 256)) + target := "" + if r.Target != nil { + target = r.Target.String() + } + _, err := fmt.Fprintf( head, `{"time":"%s", "status":"%s", "latency":%.3f, "target":%q`, r.Time.Format(time.RFC3339), r.Status, float64(r.Latency.Microseconds())/1000, - r.Target, + target, ) if err != nil { return nil, err diff --git a/lib-ayd/record_test.go b/lib-ayd/record_test.go index c406e27e..8f0c9423 100644 --- a/lib-ayd/record_test.go +++ b/lib-ayd/record_test.go @@ -377,6 +377,10 @@ func TestRecord_MarshalJSON(t *testing.T) { }, `{"time":"2021-01-02T15:04:05Z", "status":"HEALTHY", "latency":0.000, "target":"dummy:", "foo":"bar"}`, }, + { + ayd.Record{}, + `{"time":"0001-01-01T00:00:00Z", "status":"UNKNOWN", "latency":0.000, "target":""}`, + }, } for i, tt := range tests {