github.com/vertgenlab/gonomics@v1.0.0/fileio/easyioMethods.go (about)

     1  package fileio
     2  
     3  import (
     4  	"errors"
     5  	"log"
     6  )
     7  
     8  // Close the receiving EasyReader.
     9  func (er *EasyReader) Close() error {
    10  	var gzErr, fileErr error
    11  	if er.internalGzip != nil {
    12  		gzErr = er.internalGzip.Close()
    13  	}
    14  	if er.File != nil {
    15  		fileErr = er.File.Close()
    16  	} else {
    17  		return errors.New("no file found")
    18  	}
    19  
    20  	switch { // Handle error returns. Priority is gzErr > fileErr
    21  	case gzErr != nil:
    22  		return gzErr
    23  
    24  	case fileErr != nil:
    25  		log.Println("WARNING: attempted to close file, but file already closed")
    26  		return nil
    27  
    28  	default:
    29  		return nil
    30  	}
    31  }
    32  
    33  // Read retrieves n bytes from the receiving EasyReader.
    34  func (er *EasyReader) Read(p []byte) (n int, err error) {
    35  	if er.internalGzip != nil {
    36  		return er.internalGzip.Read(p)
    37  	} else {
    38  		return er.BuffReader.Read(p)
    39  	}
    40  }
    41  
    42  // Close the receiving EasyWriter.
    43  func (ew *EasyWriter) Close() error {
    44  	var gzErr, bufErr, fileErr error
    45  	if ew.internalGzip != nil {
    46  		gzErr = ew.internalGzip.Close() // Serious write errors possible.
    47  	}
    48  	if ew.internalBuff != nil {
    49  		bufErr = ew.internalBuff.Flush() // Serious write errors possible.
    50  	}
    51  	if ew.file != nil {
    52  		fileErr = ew.file.Close() // The only possible err is that the file has already been closed.
    53  	} else {
    54  		return errors.New("no open file")
    55  	}
    56  
    57  	switch { // Handle error returns. Priority is gzErr > bufErr > fileErr
    58  	case gzErr != nil:
    59  		return gzErr
    60  
    61  	case bufErr != nil:
    62  		return bufErr
    63  
    64  	case fileErr != nil:
    65  		log.Println("WARNING: attempted to close file, but file already closed")
    66  		return nil
    67  
    68  	default:
    69  		return nil
    70  	}
    71  }
    72  
    73  // Write bytes to the receiving EasyWriter.
    74  func (ew *EasyWriter) Write(p []byte) (n int, err error) {
    75  	if ew.internalGzip != nil {
    76  		return ew.internalGzip.Write(p)
    77  	} else {
    78  		return ew.internalBuff.Write(p)
    79  	}
    80  }
    81  
    82  // Peek retrieves the next n bytes of the receiving EasyReader without advancing the reader.
    83  func (er *EasyReader) Peek(n int) ([]byte, error) {
    84  	return er.BuffReader.Peek(n)
    85  }