Mercurial > gemma
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)) +}