1 // Package byteio helps with writing number types in both big and little endian formats 2 package byteio // import "vimagination.zapto.org/byteio" 3 4 import "io" 5 6 // EndianReader is an interface that reads various types with a particular 7 // endianness 8 type EndianReader interface { 9 io.Reader 10 io.ByteReader 11 ReadBool() (bool, int, error) 12 ReadUint8() (uint8, int, error) 13 ReadInt8() (int8, int, error) 14 ReadUint16() (uint16, int, error) 15 ReadInt16() (int16, int, error) 16 ReadUint32() (uint32, int, error) 17 ReadInt32() (int32, int, error) 18 ReadUint64() (uint64, int, error) 19 ReadInt64() (int64, int, error) 20 ReadFloat32() (float32, int, error) 21 ReadFloat64() (float64, int, error) 22 ReadUintX() (uint64, int, error) 23 ReadIntX() (int64, int, error) 24 ReadString(int) (string, int, error) 25 ReadStringX() (string, int, error) 26 ReadString8() (string, int, error) 27 ReadString16() (string, int, error) 28 ReadString32() (string, int, error) 29 ReadString64() (string, int, error) 30 } 31 32 // EndianWriter is an interface that writes various types with a particular 33 // endianness 34 type EndianWriter interface { 35 io.Writer 36 io.ByteWriter 37 WriteBool(bool) (int, error) 38 WriteUint8(uint8) (int, error) 39 WriteInt8(int8) (int, error) 40 WriteUint16(uint16) (int, error) 41 WriteInt16(int16) (int, error) 42 WriteUint32(uint32) (int, error) 43 WriteInt32(int32) (int, error) 44 WriteUint64(uint64) (int, error) 45 WriteInt64(int64) (int, error) 46 WriteFloat32(float32) (int, error) 47 WriteFloat64(float64) (int, error) 48 WriteUintX(uint64) (int, error) 49 WriteIntX(int64) (int, error) 50 WriteString(string) (int, error) 51 WriteStringX(string) (int, error) 52 WriteString8(string) (int, error) 53 WriteString16(string) (int, error) 54 WriteString32(string) (int, error) 55 WriteString64(string) (int, error) 56 } 57 58 // StickyEndianReader is an interface that reads various types with a 59 // particular endianness and stores the Read return values 60 type StickyEndianReader interface { 61 io.Reader 62 io.ByteReader 63 ReadBool() bool 64 ReadUint8() uint8 65 ReadInt8() int8 66 ReadUint16() uint16 67 ReadInt16() int16 68 ReadUint32() uint32 69 ReadInt32() int32 70 ReadUint64() uint64 71 ReadInt64() int64 72 ReadFloat32() float32 73 ReadFloat64() float64 74 ReadUintX() uint64 75 ReadIntX() int64 76 ReadString(int) string 77 ReadStringX() string 78 ReadString8() string 79 ReadString16() string 80 ReadString32() string 81 ReadString64() string 82 } 83 84 // StickyEndianWriter is an interface that writes various types with a 85 // particular endianness and stores the Write return values 86 type StickyEndianWriter interface { 87 io.Writer 88 io.ByteWriter 89 WriteBool(bool) 90 WriteUint8(uint8) 91 WriteInt8(int8) 92 WriteUint16(uint16) 93 WriteInt16(int16) 94 WriteUint32(uint32) 95 WriteInt32(int32) 96 WriteUint64(uint64) 97 WriteInt64(int64) 98 WriteFloat32(float32) 99 WriteFloat64(float64) 100 WriteUintX(uint64) 101 WriteIntX(int64) 102 WriteString(string) (int, error) 103 WriteStringX(string) 104 WriteString8(string) 105 WriteString16(string) 106 WriteString32(string) 107 WriteString64(string) 108 } 109 110 var ( 111 _ EndianReader = (*BigEndianReader)(nil) 112 _ EndianReader = (*LittleEndianReader)(nil) 113 _ EndianWriter = (*BigEndianWriter)(nil) 114 _ EndianWriter = (*LittleEndianWriter)(nil) 115 _ StickyEndianReader = (*StickyBigEndianReader)(nil) 116 _ StickyEndianReader = (*StickyLittleEndianReader)(nil) 117 _ StickyEndianWriter = (*StickyBigEndianWriter)(nil) 118 _ StickyEndianWriter = (*StickyLittleEndianWriter)(nil) 119 ) 120