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 }