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 }