github.com/ipld/go-ipld-prime@v0.21.0/traversal/selector/matcher_util.go (about) 1 package selector 2 3 import ( 4 "io" 5 ) 6 7 type readerat struct { 8 rs io.ReadSeeker 9 off int64 10 } 11 12 // ReadAt provides the io.ReadAt method over a ReadSeeker. It will track the 13 // current offset and seek if necessary. 14 func (r *readerat) ReadAt(p []byte, off int64) (n int, err error) { 15 if off != r.off { 16 if _, err = r.rs.Seek(off, io.SeekStart); err != nil { 17 return 0, err 18 } 19 r.off = off 20 } 21 c, err := r.rs.Read(p) 22 if err != nil { 23 return c, err 24 } 25 r.off += int64(c) 26 return c, nil 27 }