e071084ebe
govulncheck / govulncheck (push) Waiting to run
Harness (E2E) / Harnesses (mock LLM) (push) Waiting to run
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Run Tests / Unit Tests (push) Waiting to run
Run Tests / Etcd Integration Tests (push) Waiting to run
37 lines
785 B
Go
37 lines
785 B
Go
package protorpc
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"io"
|
|
)
|
|
|
|
// WriteNetString writes data to a big-endian netstring on a Writer.
|
|
// Size is always a 32-bit unsigned int.
|
|
func WriteNetString(w io.Writer, data []byte) (written int, err error) {
|
|
size := make([]byte, 4)
|
|
binary.BigEndian.PutUint32(size, uint32(len(data)))
|
|
if written, err = w.Write(size); err != nil {
|
|
return
|
|
}
|
|
return w.Write(data)
|
|
}
|
|
|
|
// ReadNetString reads data from a big-endian netstring.
|
|
func ReadNetString(r io.Reader) (data []byte, err error) {
|
|
sizeBuf := make([]byte, 4)
|
|
_, err = r.Read(sizeBuf)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
size := binary.BigEndian.Uint32(sizeBuf)
|
|
if size == 0 {
|
|
return nil, nil
|
|
}
|
|
data = make([]byte, size)
|
|
_, err = r.Read(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|