github.com/altipla-consulting/ravendb-go-client@v0.1.3/clean_closeable.go (about)

     1  package ravendb
     2  
     3  // Note: we use io.Closer instead of CleanCloseable
     4  
     5  // nilCloser is meant for functions that return io.Closer type and
     6  // want to return nil.
     7  // Instead do:
     8  // var res *nilCloser
     9  // return res
    10  // That way the caller can call Close() without checking for nil
    11  type nilCloser struct {
    12  }
    13  
    14  // Close closes nil closer
    15  func (n *nilCloser) Close() error {
    16  	// works even if n is nil
    17  	return nil
    18  }
    19  
    20  // funcCloser wraps a function as io.Closer
    21  type funcCloser struct {
    22  	fn func() error
    23  }
    24  
    25  // newFuncCloser returns a new funcCloser
    26  func newFuncCloser(fn func() error) *funcCloser {
    27  	return &funcCloser{
    28  		fn: fn,
    29  	}
    30  }
    31  
    32  // Close calls underlying Close function
    33  func (f *funcCloser) Close() error {
    34  	return f.fn()
    35  }