-func (f Field) Payload() []byte {
- return concat.Slices(f.ID, f.FieldSize, f.Data)
+// Read implements io.Reader for Field
+func (f *Field) Read(p []byte) (int, error) {
+ buf := slices.Concat(f.ID[:], f.FieldSize[:], f.Data)
+
+ if f.readOffset >= len(buf) {
+ return 0, io.EOF // All bytes have been read
+ }
+
+ n := copy(p, buf[f.readOffset:])
+ f.readOffset += n
+
+ return n, nil
+}
+
+// Write implements io.Writer for Field
+func (f *Field) Write(p []byte) (int, error) {
+ f.ID = [2]byte(p[0:2])
+ f.FieldSize = [2]byte(p[2:4])
+
+ i := int(binary.BigEndian.Uint16(f.FieldSize[:]))
+ f.Data = p[4 : 4+i]
+
+ return minFieldLen + i, nil