///|
/// 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
}