From d0a468e52c6f7bc7e3cb4731f03e1693eb535a38 Mon Sep 17 00:00:00 2001 From: Mateusz Poliwczak Date: Mon, 29 Jul 2024 18:39:02 +0000 Subject: encoding: add TextAppender and BinaryAppender For #62384 Change-Id: I54707a29653df72ad9cd5633f434b87e0f630b94 GitHub-Last-Rev: 4f78947ac563d78f862c5c8de1c2e1578a8d6e08 GitHub-Pull-Request: golang/go#68620 Reviewed-on: https://go-review.googlesource.com/c/go/+/601595 LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Reviewed-by: Michael Knyszek --- src/encoding/encoding.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/encoding/encoding.go') diff --git a/src/encoding/encoding.go b/src/encoding/encoding.go index 50acf3c23a..4d288b6d3b 100644 --- a/src/encoding/encoding.go +++ b/src/encoding/encoding.go @@ -35,6 +35,18 @@ type BinaryUnmarshaler interface { UnmarshalBinary(data []byte) error } +// BinaryAppender is the interface implemented by an object +// that can append the binary representation of itself. +// If a type implements both [BinaryAppender] and [BinaryMarshaler], +// then v.MarshalBinary() must be semantically identical to v.AppendBinary(nil). +type BinaryAppender interface { + // AppendBinary appends the binary representation of itself to the end of b + // (allocating a larger slice if necessary) and returns the updated slice. + // + // Implementations must not retain b, nor mutate any bytes within b[:len(b)]. + AppendBinary(b []byte) ([]byte, error) +} + // TextMarshaler is the interface implemented by an object that can // marshal itself into a textual form. // @@ -52,3 +64,15 @@ type TextMarshaler interface { type TextUnmarshaler interface { UnmarshalText(text []byte) error } + +// TextAppender is the interface implemented by an object +// that can append the textual representation of itself. +// If a type implements both [TextAppender] and [TextMarshaler], +// then v.MarshalText() must be semantically identical to v.AppendText(nil). +type TextAppender interface { + // AppendText appends the textual representation of itself to the end of b + // (allocating a larger slice if necessary) and returns the updated slice. + // + // Implementations must not retain b, nor mutate any bytes within b[:len(b)]. + AppendText(b []byte) ([]byte, error) +} -- cgit v1.3