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