You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

closer.go 1.0 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package io2
  2. import "io"
  3. type nopWriteCloser struct {
  4. writer io.Writer
  5. }
  6. func NopWriteCloser(w io.Writer) io.WriteCloser {
  7. return &nopWriteCloser{writer: w}
  8. }
  9. func (w *nopWriteCloser) Write(p []byte) (n int, err error) {
  10. return w.writer.Write(p)
  11. }
  12. func (w *nopWriteCloser) Close() error {
  13. return nil
  14. }
  15. type delegateWriteCloser struct {
  16. writer io.Writer
  17. fn func() error
  18. }
  19. func DelegateWriteCloser(w io.Writer, fn func() error) io.WriteCloser {
  20. return &delegateWriteCloser{writer: w, fn: fn}
  21. }
  22. func (w *delegateWriteCloser) Write(p []byte) (n int, err error) {
  23. return w.writer.Write(p)
  24. }
  25. func (w *delegateWriteCloser) Close() error {
  26. return w.fn()
  27. }
  28. type delegateReadCloser struct {
  29. reader io.Reader
  30. fn func() error
  31. }
  32. func DelegateReadCloser(r io.Reader, fn func() error) io.ReadCloser {
  33. return &delegateReadCloser{reader: r, fn: fn}
  34. }
  35. func (r *delegateReadCloser) Read(p []byte) (n int, err error) {
  36. return r.reader.Read(p)
  37. }
  38. func (r *delegateReadCloser) Close() error {
  39. return r.fn()
  40. }