-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
json: AppendTimeLayout should add field separators #799
Conversation
In #786, we added support for improving the performance of encoding time by allowing encoder implementations to implement AppendTimeLayout. If the encoder implements, `AppendTimeLayout(time.Time, string)`, some of the time encoders shipped with Zap will use that method, which in turn can make use of `Buffer.AppendTime`. That change inadvertently broke the JSON output for arrays of time that make use of that functionality. Compare the old version of AppendTimeLayout with AppendString (both operations append a string to the array). func (enc *jsonEncoder) AppendString(val string) { enc.addElementSeparator() enc.buf.AppendByte('"') // ... } func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) { enc.buf.AppendByte('"') // ... } Without the `enc.addElementSeparator` call, `AppendTimeLayout` does not include the `,` separator between array elements, instead yielding the following. ["2001-12-19T00:00:00Z""2002-12-18T00:00:00Z""2003-12-17T00:00:00Z"] Fixes #798
Codecov Report
@@ Coverage Diff @@
## master #799 +/- ##
=======================================
Coverage 98.31% 98.31%
=======================================
Files 43 43
Lines 2310 2311 +1
=======================================
+ Hits 2271 2272 +1
Misses 32 32
Partials 7 7
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for fixing my bug and adding tests to make sure this is caught in future!
In uber-go#786, we added support for improving the performance of encoding time by allowing encoder implementations to implement AppendTimeLayout. If the encoder implements, `AppendTimeLayout(time.Time, string)`, some of the time encoders shipped with Zap will use that method, which in turn can make use of `Buffer.AppendTime`. That change inadvertently broke the JSON output for arrays of time that make use of that functionality. Compare the old version of AppendTimeLayout with AppendString (both operations append a string to the array). func (enc *jsonEncoder) AppendString(val string) { enc.addElementSeparator() enc.buf.AppendByte('"') // ... } func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) { enc.buf.AppendByte('"') // ... } Without the `enc.addElementSeparator` call, `AppendTimeLayout` does not include the `,` separator between array elements, instead yielding the following. ["2001-12-19T00:00:00Z""2002-12-18T00:00:00Z""2003-12-17T00:00:00Z"] Fixes uber-go#798
In #786, we added support for improving the performance of encoding time
by allowing encoder implementations to implement AppendTimeLayout.
If the encoder implements,
AppendTimeLayout(time.Time, string)
, someof the time encoders shipped with Zap will use that method, which in
turn can make use of
Buffer.AppendTime
.That change inadvertently broke the JSON output for arrays of time that
make use of that functionality.
Compare the old version of AppendTimeLayout with AppendString (both
operations append a string to the array).
Without the
enc.addElementSeparator
call,AppendTimeLayout
does notinclude the
,
separator between array elements, instead yielding thefollowing.
Fixes #798