github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/xio/wrapper.go (about) 1 package xio 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "time" 8 ) 9 10 // ReaderF is wrapper for io.Reader 11 type ReaderF func(p []byte) (n int, err error) 12 13 func (r ReaderF) Read(p []byte) (n int, err error) { 14 n, err = r(p) 15 return 16 } 17 18 // WriterF is wrapper for io.Writer 19 type WriterF func(p []byte) (n int, err error) 20 21 func (w WriterF) Write(p []byte) (n int, err error) { 22 n, err = w(p) 23 return 24 } 25 26 // CloserF is wrapper for io.Closer 27 type CloserF func() (err error) 28 29 // Close will close by func 30 func (c CloserF) Close() (err error) { 31 err = c() 32 return 33 } 34 35 // ConnWrapper is wrapper for net.Conn by ReadWriteCloser 36 type ConnWrapper struct { 37 io.ReadWriteCloser 38 } 39 40 // NewConnWrapper will create new ConnWrapper 41 func NewConnWrapper(base io.ReadWriteCloser) (wrapper *ConnWrapper) { 42 return &ConnWrapper{ReadWriteCloser: base} 43 } 44 45 // Network impl net.Addr 46 func (c *ConnWrapper) Network() string { 47 return "wrapper" 48 } 49 50 func (c *ConnWrapper) String() string { 51 return fmt.Sprintf("%v", c.ReadWriteCloser) 52 } 53 54 // LocalAddr return then local network address 55 func (c *ConnWrapper) LocalAddr() net.Addr { 56 return c 57 } 58 59 // RemoteAddr returns the remote network address. 60 func (c *ConnWrapper) RemoteAddr() net.Addr { 61 return c 62 } 63 64 // SetDeadline impl net.Conn do nothing 65 func (c *ConnWrapper) SetDeadline(t time.Time) error { 66 return nil 67 } 68 69 // SetReadDeadline impl net.Conn do nothing 70 func (c *ConnWrapper) SetReadDeadline(t time.Time) error { 71 return nil 72 } 73 74 // SetWriteDeadline impl net.Conn do nothing 75 func (c *ConnWrapper) SetWriteDeadline(t time.Time) error { 76 return nil 77 }