diff misc/encode.go @ 340:4c211ad5349e

Embed Reader and Writer in BinReader and BinWriter to make API more distinct.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 05 Aug 2018 15:48:36 +0200
parents 33b59c848771
children 999f4f83a072
line wrap: on
line diff
--- a/misc/encode.go	Sun Aug 05 15:35:29 2018 +0200
+++ b/misc/encode.go	Sun Aug 05 15:48:36 2018 +0200
@@ -6,13 +6,22 @@
 )
 
 type BinReader struct {
-	R   io.Reader
+	io.Reader
 	Err error
 }
 
-func (r *BinReader) Read(x interface{}) {
+func (r *BinReader) Read(buf []byte) (int, error) {
+	if r.Err != nil {
+		return 0, r.Err
+	}
+	var n int
+	n, r.Err = r.Read(buf)
+	return n, r.Err
+}
+
+func (r *BinReader) ReadBin(x interface{}) {
 	if r.Err == nil {
-		r.Err = binary.Read(r.R, binary.BigEndian, x)
+		r.Err = binary.Read(r.Reader, binary.BigEndian, x)
 	}
 }
 
@@ -21,32 +30,41 @@
 		return
 	}
 	var l uint32
-	if r.Err = binary.Read(r.R, binary.BigEndian, &l); r.Err != nil {
+	if r.Err = binary.Read(r.Reader, binary.BigEndian, &l); r.Err != nil {
 		return
 	}
 	b := make([]byte, l)
-	if r.Err = binary.Read(r.R, binary.BigEndian, b); r.Err != nil {
+	if r.Err = binary.Read(r.Reader, binary.BigEndian, b); r.Err != nil {
 		return
 	}
 	*s = string(b)
 }
 
 type BinWriter struct {
-	W   io.Writer
+	io.Writer
 	Err error
 }
 
-func (w *BinWriter) Write(x interface{}) {
+func (w *BinWriter) Write(buf []byte) (int, error) {
+	if w.Err != nil {
+		return 0, w.Err
+	}
+	var n int
+	n, w.Err = w.Writer.Write(buf)
+	return n, w.Err
+}
+
+func (w *BinWriter) WriteBin(x interface{}) {
 	if w.Err == nil {
-		w.Err = binary.Write(w.W, binary.BigEndian, x)
+		w.Err = binary.Write(w.Writer, binary.BigEndian, x)
 	}
 }
 
 func (w *BinWriter) WriteString(s string) {
 	if w.Err == nil {
-		w.Err = binary.Write(w.W, binary.BigEndian, uint32(len(s)))
+		w.Err = binary.Write(w.Writer, binary.BigEndian, uint32(len(s)))
 	}
 	if w.Err == nil {
-		w.Err = binary.Write(w.W, binary.BigEndian, []byte(s))
+		w.Err = binary.Write(w.Writer, binary.BigEndian, []byte(s))
 	}
 }