| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package kafka
- import (
- "encoding/binary"
- "errors"
- "math"
- )
- func stringLen(in *string) (n int, err error) {
- if in == nil {
- return 2, nil
- }
- n = len(*in)
- if n > math.MaxInt16 {
- return -1, errors.New("kafka: string too long to encode")
- }
- return 2 + n, nil
- }
- func encodeString(in *string, buf []byte) (err error) {
- if len(buf) < 2 {
- return errors.New("kafka: buffer too short to encode any string")
- }
- n := -1
- if in != nil {
- n = len(*in)
- }
- if n > math.MaxInt16 {
- return errors.New("kafka: string too long to encode")
- }
- if n > len(buf) {
- return errors.New("kafka: buffer too short to encode string")
- }
- binary.BigEndian.PutUint16(buf, uint16(n))
- if n > 0 {
- copy(buf[2:], *in)
- }
- return nil
- }
- func decodeString(buf []byte) (out *string, err error) {
- if len(buf) < 2 {
- return nil, errors.New("kafka: buffer too short to contain string")
- }
- n := int16(binary.BigEndian.Uint16(buf))
- switch {
- case n < -1:
- return nil, errors.New("kafka: invalid negative string length")
- case n == -1:
- return nil, nil
- case n == 0:
- emptyString := ""
- return &emptyString, nil
- case int(n) > len(buf)-2:
- return nil, errors.New("kafka: buffer too short to decode string")
- default:
- result := string(buf[2:])
- return &result, nil
- }
- }
- func bytesLen(in *[]byte) (n int, err error) {
- if in == nil {
- return 4, nil
- }
- n = len(*in)
- if n > math.MaxInt32 {
- return -1, errors.New("kafka: bytes too long to encode")
- }
- return 4 + n, nil
- }
- func encodeBytes(in *[]byte, buf []byte) (err error) {
- if len(buf) < 4 {
- return errors.New("kafka: buffer too short to encode any bytes")
- }
- n := -1
- if in != nil {
- n = len(*in)
- }
- if n > math.MaxInt32 {
- return errors.New("kafka: bytes too long to encode")
- }
- if n > len(buf) {
- return errors.New("kafka: buffer too short to encode bytes")
- }
- binary.BigEndian.PutUint32(buf, uint32(n))
- if n > 0 {
- copy(buf[4:], *in)
- }
- return nil
- }
- func decodebyte(buf []byte) (out *[]byte, err error) {
- if len(buf) < 4 {
- return nil, errors.New("kafka: buffer too short to contain bytes")
- }
- n := int32(binary.BigEndian.Uint32(buf))
- switch {
- case n < -1:
- return nil, errors.New("kafka: invalid negative byte length")
- case n == -1:
- return nil, nil
- case n == 0:
- emptyBytes := make([]byte, 0)
- return &emptyBytes, nil
- case int(n) > len(buf)-4:
- return nil, errors.New("kafka: buffer too short to decode bytes")
- default:
- result := buf[4:]
- return &result, nil
- }
- }
|