Skip to content
Snippets Groups Projects
decode.go 1.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • package decode
    
    import (
    	"bytes"
    	"encoding/binary"
    
    Julian Kornberger's avatar
    Julian Kornberger committed
    
    	"github.com/pkg/errors"
    
    )
    
    // Decode reads fields from a buffer
    func Decode(buf *bytes.Buffer, fields []interface{}) error {
    	var err error
    	for _, field := range fields {
    		err = binary.Read(buf, binary.BigEndian, field)
    		if err != nil {
    
    Julian Kornberger's avatar
    Julian Kornberger committed
    			return errors.Wrap(err, "Unable to read from buffer")
    
    takt's avatar
    takt committed
    
    func DecodeUint8(buf *bytes.Buffer, x *uint8) error {
    	y, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    	*x = y
    	return nil
    }
    
    func DecodeUint16(buf *bytes.Buffer, x *uint16) error {
    	a, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    	b, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    	*x = uint16(a)*256 + uint16(b)
    	return nil
    }
    
    func DecodeUint32(buf *bytes.Buffer, x *uint32) error {
    	a, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    	b, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    	c, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    	d, err := buf.ReadByte()
    	if err != nil {
    		return err
    	}
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    	*x = uint32(a)<<24 + uint32(b)<<16 + uint32(c)<<8 + uint32(d)
    
    takt's avatar
    takt committed
    	return nil
    }