diff pkg/misc/encode.go @ 414:c1047fd04a3a

Moved project specific Go packages to new pkg folder.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 15 Aug 2018 17:30:50 +0200
parents misc/encode.go@999f4f83a072
children f827dc4f3e95
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/misc/encode.go	Wed Aug 15 17:30:50 2018 +0200
@@ -0,0 +1,76 @@
+package misc
+
+import (
+	"encoding/base64"
+	"encoding/binary"
+	"io"
+)
+
+type BinReader struct {
+	io.Reader
+	Err error
+}
+
+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.Reader, binary.BigEndian, x)
+	}
+}
+
+func (r *BinReader) ReadString(s *string) {
+	if r.Err != nil {
+		return
+	}
+	var l uint32
+	if r.Err = binary.Read(r.Reader, binary.BigEndian, &l); r.Err != nil {
+		return
+	}
+	b := make([]byte, l)
+	if r.Err = binary.Read(r.Reader, binary.BigEndian, b); r.Err != nil {
+		return
+	}
+	*s = string(b)
+}
+
+type BinWriter struct {
+	io.Writer
+	Err error
+}
+
+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.Writer, binary.BigEndian, x)
+	}
+}
+
+func (w *BinWriter) WriteString(s string) {
+	if w.Err == nil {
+		w.Err = binary.Write(w.Writer, binary.BigEndian, uint32(len(s)))
+	}
+	if w.Err == nil {
+		w.Err = binary.Write(w.Writer, binary.BigEndian, []byte(s))
+	}
+}
+
+func BasicAuth(user, password string) string {
+	auth := user + ":" + password
+	return base64.StdEncoding.EncodeToString([]byte(auth))
+}