package ioutils

import (
	"io"
	"net"
)

type ReadWriteAddrCloser interface {
	io.ReadWriteCloser

	RemoteAddr() net.Addr
}

type SimpleReadWriteAddrCloser struct {
	rw   io.ReadWriteCloser
	addr net.Addr
}

func NewSimpleReadWriteAddrCloser(rw io.ReadWriteCloser, addr net.Addr) *SimpleReadWriteAddrCloser {
	return &SimpleReadWriteAddrCloser{
		rw:   rw,
		addr: addr,
	}
}

func (s *SimpleReadWriteAddrCloser) Read(p []byte) (int, error) {
	return s.rw.Read(p)
}

func (s *SimpleReadWriteAddrCloser) Write(p []byte) (int, error) {
	return s.rw.Write(p)
}

func (s *SimpleReadWriteAddrCloser) Close() error {
	return s.rw.Close()
}

func (s *SimpleReadWriteAddrCloser) RemoteAddr() net.Addr {
	return s.addr
}