fix!: handle sql/driver.Valuer types properly in slogjson
#219
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.

Currently, if a field like
sql.NullInt32hasValid: False,sloghumanwill export it's value as<nil>, regardless of it'sString.This is because it checks
(driver.Valuer).Value().However,
slogjsoncurrently sets the value to the json string of the raw struct:{ "fields": { "Code": "{Int32:0 Valid:false}", "ValidCode": "{Int32:12 Valid:true}" } }This PR handles this case by first checking if the type implements
sql/driver.Valuer. IfValidisfalsethen a JSONnullvalue is produced:{ "fields": { "Code": null, "ValidCode": 12 } }This matches the behaviour of
sloghuman.This is technically a breaking change, as these types are now
T | nullinstead ofString, whereTis the corresponding JSON type ofsql.Null<V>