reader_writer.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package zioutil
  2. import (
  3. "fmt"
  4. "io"
  5. )
  6. type ReadWriterBind struct {
  7. Reader io.Reader
  8. Writer io.Writer
  9. }
  10. func (rwb ReadWriterBind) Read(b []byte) (n int, err error) {
  11. return rwb.Reader.Read(b)
  12. }
  13. func (rwb ReadWriterBind) Write(b []byte) (n int, err error) {
  14. return rwb.Writer.Write(b)
  15. }
  16. type ReadWriteCloserBind struct {
  17. ReadCloser io.ReadCloser
  18. WriteCloser io.WriteCloser
  19. }
  20. func (rwb ReadWriteCloserBind) Read(b []byte) (n int, err error) {
  21. return rwb.ReadCloser.Read(b)
  22. }
  23. func (rwb ReadWriteCloserBind) Write(b []byte) (n int, err error) {
  24. return rwb.WriteCloser.Write(b)
  25. }
  26. func (rwb ReadWriteCloserBind) Close() error {
  27. e1 := rwb.ReadCloser.Close()
  28. e2 := rwb.WriteCloser.Close()
  29. if e1 != nil {
  30. return e1
  31. }
  32. if e2 != nil {
  33. return e2
  34. }
  35. return nil
  36. }
  37. type Reader2ReadCloser struct {
  38. Reader io.Reader
  39. }
  40. func (rcb Reader2ReadCloser) Read(b []byte) (n int, err error) {
  41. return rcb.Reader.Read(b)
  42. }
  43. func (rcb Reader2ReadCloser) Close() error {
  44. return nil
  45. }
  46. type Writer2ReadCloser struct {
  47. Writer io.Writer
  48. }
  49. func (wcb Writer2ReadCloser) Write(b []byte) (n int, err error) {
  50. return wcb.Writer.Write(b)
  51. }
  52. func (wcb Writer2ReadCloser) Close() error {
  53. return nil
  54. }
  55. type NullWriter struct {
  56. }
  57. func (nw NullWriter) Write(b []byte) (int, error) {
  58. return len(b), nil
  59. }
  60. type NullReader struct {
  61. }
  62. func (nw NullReader) Read(b []byte) (int, error) {
  63. return 0, fmt.Errorf("null reader")
  64. }