diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/encode.go	Sun Aug 05 15:35:29 2018 +0200
@@ -0,0 +1,52 @@
+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))
+	}
+}