diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-16 17:32:17 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-18 22:45:54 -0700 |
commit | a87d6cbbb51a19071c5c742ef3c91bbb90a727c6 (patch) | |
tree | 5a1f15a62553a6dbddd10d32cdd5335e660225bc /compat/json/compat.go | |
parent | 2eb60b8be25a4b0fe3f1c5d5ca302e7e68190bad (diff) |
compat/json: Indent: Preserve trailing whitespace
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r-- | compat/json/compat.go | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/compat/json/compat.go b/compat/json/compat.go index edc6908..d33f278 100644 --- a/compat/json/compat.go +++ b/compat/json/compat.go @@ -188,6 +188,15 @@ func Compact(dst *bytes.Buffer, src []byte) error { return err } +func isSpace(c byte) bool { + switch c { + case 0x0020, 0x000A, 0x000D, 0x0009: + return true + default: + return false + } +} + func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error { start := dst.Len() err := reencode(dst, src, lowmemjson.ReEncoderConfig{ @@ -198,8 +207,18 @@ func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error { }) if err != nil { dst.Truncate(start) + return err } - return err + + // Preserve trailing whitespace. + lastNonWS := len(src) - 1 + for ; lastNonWS >= 0 && isSpace(src[lastNonWS]); lastNonWS-- { + } + if _, err := dst.Write(src[lastNonWS+1:]); err != nil { + return err + } + + return nil } func Valid(data []byte) bool { |