package common import ( "io" ) type PrefixedReader struct { Prefix []byte reader io.Reader } func NewPrefixedReader(prefix []byte, reader io.Reader) *PrefixedReader { return &PrefixedReader{prefix, reader} } func (pr *PrefixedReader) Read(p []byte) (n int, err error) { if len(pr.Prefix) > 0 { read := copy(p, pr.Prefix) pr.Prefix = pr.Prefix[read:] return read, nil } else { return pr.reader.Read(p) } }