allow writing primitives to static buffers

This commit is contained in:
aler9
2022-05-11 14:52:20 +02:00
parent ee6d7a87a3
commit c1b10a80be
19 changed files with 662 additions and 786 deletions

View File

@@ -105,16 +105,28 @@ func (f *InterleavedFrame) Read(maxPayloadSize int, br *bufio.Reader) error {
return nil
}
// Write writes an InterleavedFrame into a buffered writer.
func (f InterleavedFrame) Write(w io.Writer) error {
buf := []byte{0x24, byte(f.Channel), 0x00, 0x00}
binary.BigEndian.PutUint16(buf[2:], uint16(len(f.Payload)))
_, err := w.Write(buf)
if err != nil {
return err
}
_, err = w.Write(f.Payload)
return err
// WriteSize returns the size of an InterleavedFrame.
func (f InterleavedFrame) WriteSize() int {
return 4 + len(f.Payload)
}
// WriteTo writes an InterleavedFrame.
func (f InterleavedFrame) WriteTo(buf []byte) (int, error) {
pos := 0
pos += copy(buf[pos:], []byte{0x24, byte(f.Channel)})
binary.BigEndian.PutUint16(buf[pos:], uint16(len(f.Payload)))
pos += 2
pos += copy(buf[pos:], f.Payload)
return pos, nil
}
// Write writes an InterleavedFrame.
func (f InterleavedFrame) Write() ([]byte, error) {
buf := make([]byte, f.WriteSize())
_, err := f.WriteTo(buf)
return buf, err
}