mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-30 05:25:35 +00:00
a5dd0bcb09
The cornerstone API is a more memory-efficient Unmarshal. The savings come from re-using a json.Decoder. BenchmarkUnmarshal-8 4016418 288 ns/op 8 B/op 1 allocs/op BenchmarkStdUnmarshal-8 4189261 283 ns/op 184 B/op 2 allocs/op It also includes a Bytes type to reduce allocations when unmarshalling a non-hex-encoded JSON string into a []byte. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
18 lines
590 B
Go
18 lines
590 B
Go
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package jsonutil
|
|
|
|
// Bytes is a byte slice in a json-encoded struct.
|
|
// encoding/json assumes that []byte fields are hex-encoded.
|
|
// Bytes are not hex-encoded; they are treated the same as strings.
|
|
// This can avoid unnecessary allocations due to a round trip through strings.
|
|
type Bytes []byte
|
|
|
|
func (b *Bytes) UnmarshalText(text []byte) error {
|
|
// Copy the contexts of text.
|
|
*b = append(*b, text...)
|
|
return nil
|
|
}
|