...
1 package transport
2
3 import (
4 "errors"
5 "io"
6 )
7
8 type bytesReader struct {
9 s *[]byte
10 i int64
11 }
12
13 func (r *bytesReader) Read(b []byte) (n int, err error) {
14 if r.s == nil {
15 return 0, errors.New("byte slice pointer is nil")
16 }
17 if r.i >= int64(len(*r.s)) {
18 return 0, io.EOF
19 }
20 n = copy(b, (*r.s)[r.i:])
21 r.i += int64(n)
22 return
23 }
24
25 func (r *bytesReader) Seek(offset int64, whence int) (int64, error) {
26 if r.s == nil {
27 return 0, errors.New("byte slice pointer is nil")
28 }
29 var abs int64
30 switch whence {
31 case io.SeekStart:
32 abs = offset
33 case io.SeekCurrent:
34 abs = r.i + offset
35 case io.SeekEnd:
36 abs = int64(len(*r.s)) + offset
37 default:
38 return 0, errors.New("invalid whence")
39 }
40 if abs < 0 {
41 return 0, errors.New("negative position")
42 }
43 r.i = abs
44 return abs, nil
45 }
46
View as plain text