You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

24 lines
424 B

  1. package common
  2. import (
  3. "io"
  4. )
  5. type PrefixedReader struct {
  6. Prefix []byte
  7. reader io.Reader
  8. }
  9. func NewPrefixedReader(prefix []byte, reader io.Reader) *PrefixedReader {
  10. return &PrefixedReader{prefix, reader}
  11. }
  12. func (pr *PrefixedReader) Read(p []byte) (n int, err error) {
  13. if len(pr.Prefix) > 0 {
  14. read := copy(p, pr.Prefix)
  15. pr.Prefix = pr.Prefix[read:]
  16. return read, nil
  17. } else {
  18. return pr.reader.Read(p)
  19. }
  20. }