Skip to content
Snippets Groups Projects
decode.go 1.1 KiB
Newer Older
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
	}

	*x = uint32(a)*256*256*256 + uint32(b)*256*256*256 + uint32(c)*256 + uint32(d)
	return nil
}