From 7bc2b482b93054d72903838ae96f323c1bc9c3ce Mon Sep 17 00:00:00 2001
From: Tom Guinther <tguinther@gfxlabs.io>
Date: Fri, 26 Jul 2024 11:48:42 -0400
Subject: [PATCH] add an eofReader and CloneDecoder function so I can "preview"
 packets w/o effecting stream

---
 lib/fed/decoder.go | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/lib/fed/decoder.go b/lib/fed/decoder.go
index 8cafd3a6..920e4d29 100644
--- a/lib/fed/decoder.go
+++ b/lib/fed/decoder.go
@@ -10,6 +10,14 @@ import (
 	"gfx.cafe/gfx/pggat/lib/util/decorator"
 )
 
+type eofReader struct{}
+
+func (*eofReader) Read(p []byte) (n int, err error) {
+	return 0, io.EOF
+}
+
+var _eofReader = &eofReader{}
+
 type Decoder struct {
 	noCopy decorator.NoCopy
 
@@ -30,6 +38,23 @@ func NewDecoder(r io.Reader) *Decoder {
 	return d
 }
 
+func CloneDecoder(d *Decoder, r io.Reader) *Decoder {
+	if r == nil {
+		r = _eofReader
+	}
+
+	return &Decoder{
+		buffer:       d.buffer,
+		bufferWrite:  d.bufferWrite,
+		bufferRead:   d.bufferRead,
+		packetType:   d.packetType,
+		packetLength: d.packetLength,
+		packetPos:    d.packetPos,
+		decodeBuf:    d.decodeBuf,
+		reader:       r,
+	}
+}
+
 func (T *Decoder) Reset(r io.Reader) {
 	T.packetLength = 0
 	T.packetPos = 0
-- 
GitLab