package transport

import (
	"io"
	"os"
)

// Transport is the interface defining a method of transporting data in a
// connection-like way.
// Examples of a Transport implementation could be:
//
//	-Hyper-V socket transport
//	-TCP/IP socket transport
//	-Mocked-out local transport
type Transport interface {
	// Dial takes a port number and returns a connected connection.
	Dial(port uint32) (Connection, error)
}

// Connection is the interface defining a data connection, such as a socket or
// a mocked implementation.
type Connection interface {
	io.ReadWriteCloser
	CloseRead() error
	CloseWrite() error
	File() (*os.File, error)
}
