Source file src/encoding/encoding.go
1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package encoding defines interfaces shared by other packages that 6 // convert data to and from byte-level and textual representations. 7 // Packages that check for these interfaces include encoding/gob, 8 // encoding/json, and encoding/xml. As a result, implementing an 9 // interface once can make a type useful in multiple encodings. 10 // Standard types that implement these interfaces include time.Time and net.IP. 11 // The interfaces come in pairs that produce and consume encoded data. 12 // 13 // Adding encoding/decoding methods to existing types may constitute a breaking change, 14 // as they can be used for serialization in communicating with programs 15 // written with different library versions. 16 // The policy for packages maintained by the Go project is to only allow 17 // the addition of marshaling functions if no existing, reasonable marshaling exists. 18 package encoding 19 20 // BinaryMarshaler is the interface implemented by an object that can 21 // marshal itself into a binary form. 22 // 23 // MarshalBinary encodes the receiver into a binary form and returns the result. 24 type BinaryMarshaler interface { 25 MarshalBinary() (data []byte, err error) 26 } 27 28 // BinaryUnmarshaler is the interface implemented by an object that can 29 // unmarshal a binary representation of itself. 30 // 31 // UnmarshalBinary must be able to decode the form generated by MarshalBinary. 32 // UnmarshalBinary must copy the data if it wishes to retain the data 33 // after returning. 34 type BinaryUnmarshaler interface { 35 UnmarshalBinary(data []byte) error 36 } 37 38 // BinaryAppender is the interface implemented by an object 39 // that can append the binary representation of itself. 40 // If a type implements both [BinaryAppender] and [BinaryMarshaler], 41 // then v.MarshalBinary() must be semantically identical to v.AppendBinary(nil). 42 type BinaryAppender interface { 43 // AppendBinary appends the binary representation of itself to the end of b 44 // (allocating a larger slice if necessary) and returns the updated slice. 45 // 46 // Implementations must not retain b, nor mutate any bytes within b[:len(b)]. 47 AppendBinary(b []byte) ([]byte, error) 48 } 49 50 // TextMarshaler is the interface implemented by an object that can 51 // marshal itself into a textual form. 52 // 53 // MarshalText encodes the receiver into UTF-8-encoded text and returns the result. 54 type TextMarshaler interface { 55 MarshalText() (text []byte, err error) 56 } 57 58 // TextUnmarshaler is the interface implemented by an object that can 59 // unmarshal a textual representation of itself. 60 // 61 // UnmarshalText must be able to decode the form generated by MarshalText. 62 // UnmarshalText must copy the text if it wishes to retain the text 63 // after returning. 64 type TextUnmarshaler interface { 65 UnmarshalText(text []byte) error 66 } 67 68 // TextAppender is the interface implemented by an object 69 // that can append the textual representation of itself. 70 // If a type implements both [TextAppender] and [TextMarshaler], 71 // then v.MarshalText() must be semantically identical to v.AppendText(nil). 72 type TextAppender interface { 73 // AppendText appends the textual representation of itself to the end of b 74 // (allocating a larger slice if necessary) and returns the updated slice. 75 // 76 // Implementations must not retain b, nor mutate any bytes within b[:len(b)]. 77 AppendText(b []byte) ([]byte, error) 78 } 79