///|
/// The transport abstraction. The protocol core never touches sockets
/// directly; it only depends on this interface. Implementations include the
/// scripted `FakeTransport` and the native socket adapter.
pub(open) trait LdapTransport {
async fn connect(Self, LdapConfig) -> Result[Unit, LdapError]
async fn write(Self, Bytes) -> Result[Unit, LdapError]
async fn read(Self) -> Result[Bytes, LdapError]
fn close(Self) -> Unit
}