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  }