github.com/argoproj/argo-cd/v3@v3.2.1/util/io/bytereadseeker.go (about) 1 package io 2 3 import ( 4 "io" 5 "io/fs" 6 ) 7 8 func NewByteReadSeeker(data []byte) *byteReadSeeker { 9 return &byteReadSeeker{data: data} 10 } 11 12 type byteReadSeeker struct { 13 data []byte 14 offset int64 15 } 16 17 func (f *byteReadSeeker) Read(b []byte) (int, error) { 18 if f.offset >= int64(len(f.data)) { 19 return 0, io.EOF 20 } 21 n := copy(b, f.data[f.offset:]) 22 f.offset += int64(n) 23 return n, nil 24 } 25 26 func (f *byteReadSeeker) Seek(offset int64, whence int) (int64, error) { 27 switch whence { 28 case 1: 29 offset += f.offset 30 case 2: 31 offset += int64(len(f.data)) 32 } 33 if offset < 0 || offset > int64(len(f.data)) { 34 return 0, &fs.PathError{Op: "seek", Err: fs.ErrInvalid} 35 } 36 f.offset = offset 37 return offset, nil 38 }