...

Source file src/go.etcd.io/etcd/client/pkg/v3/fileutil/filereader.go

Documentation: go.etcd.io/etcd/client/pkg/v3/fileutil

     1  // Copyright 2022 The etcd Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package fileutil
    16  
    17  import (
    18  	"bufio"
    19  	"io"
    20  	"io/fs"
    21  	"os"
    22  )
    23  
    24  // FileReader is a wrapper of io.Reader. It also provides file info.
    25  type FileReader interface {
    26  	io.Reader
    27  	FileInfo() (fs.FileInfo, error)
    28  }
    29  
    30  type fileReader struct {
    31  	*os.File
    32  }
    33  
    34  func NewFileReader(f *os.File) FileReader {
    35  	return &fileReader{f}
    36  }
    37  
    38  func (fr *fileReader) FileInfo() (fs.FileInfo, error) {
    39  	return fr.Stat()
    40  }
    41  
    42  // FileBufReader is a wrapper of bufio.Reader. It also provides file info.
    43  type FileBufReader struct {
    44  	*bufio.Reader
    45  	fi fs.FileInfo
    46  }
    47  
    48  func NewFileBufReader(fr FileReader) *FileBufReader {
    49  	bufReader := bufio.NewReader(fr)
    50  	fi, err := fr.FileInfo()
    51  	if err != nil {
    52  		// This should never happen.
    53  		panic(err)
    54  	}
    55  	return &FileBufReader{bufReader, fi}
    56  }
    57  
    58  func (fbr *FileBufReader) FileInfo() fs.FileInfo {
    59  	return fbr.fi
    60  }
    61  

View as plain text