github.com/99designs/gqlgen@v0.17.45/graphql/handler/transport/reader.go (about) 1 package transport 2 3 import ( 4 "errors" 5 "io" 6 ) 7 8 type bytesReader struct { 9 s *[]byte 10 i int64 // current reading index 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 }