view misc/encode.go @ 339:33b59c848771

Factored out some miscellaneous code into own package.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 05 Aug 2018 15:35:29 +0200
parents auth/encode.go@f345edb409b2
children 4c211ad5349e
line wrap: on
line source

package misc

import (
	"encoding/binary"
	"io"
)

type BinReader struct {
	R   io.Reader
	Err error
}

func (r *BinReader) Read(x interface{}) {
	if r.Err == nil {
		r.Err = binary.Read(r.R, binary.BigEndian, x)
	}
}

func (r *BinReader) ReadString(s *string) {
	if r.Err != nil {
		return
	}
	var l uint32
	if r.Err = binary.Read(r.R, binary.BigEndian, &l); r.Err != nil {
		return
	}
	b := make([]byte, l)
	if r.Err = binary.Read(r.R, binary.BigEndian, b); r.Err != nil {
		return
	}
	*s = string(b)
}

type BinWriter struct {
	W   io.Writer
	Err error
}

func (w *BinWriter) Write(x interface{}) {
	if w.Err == nil {
		w.Err = binary.Write(w.W, binary.BigEndian, x)
	}
}

func (w *BinWriter) WriteString(s string) {
	if w.Err == nil {
		w.Err = binary.Write(w.W, binary.BigEndian, uint32(len(s)))
	}
	if w.Err == nil {
		w.Err = binary.Write(w.W, binary.BigEndian, []byte(s))
	}
}