package ioutils

import (
	"io"
	"net"
)

type ReadWriterAddrCombiner struct {
	reader     io.Reader
	writer     io.Writer
	closer     func() error
	remoteAddr net.Addr
}

func (rw *ReadWriterAddrCombiner) Read(p []byte) (n int, err error) {
	return rw.reader.Read(p)
}

func NewReadWriterAddrCombiner(reader io.Reader, writer io.Writer,
	closer func() error, remoteAddr net.Addr) *ReadWriterAddrCombiner {
	return &ReadWriterAddrCombiner{
		reader:     reader,
		writer:     writer,
		closer:     closer,
		remoteAddr: remoteAddr,
	}
}

func (rw *ReadWriterAddrCombiner) Write(p []byte) (n int, err error) {
	return rw.writer.Write(p)
}
func (rw *ReadWriterAddrCombiner) Close() error {
	return rw.closer()
}
func (rw *ReadWriterAddrCombiner) RemoteAddr() net.Addr {
	return rw.remoteAddr
}