///|
/// An admission gate injected by an async runtime so sans-IO code can hold a
/// slot across an exchange without importing that runtime.
pub(open) trait Gate {
  /// Waits for a slot; runtime cancellation propagates as a signal, not an Error.
  async fn acquire(Self) -> Unit noraise
  /// Returns one slot taken by a successful acquire.
  fn release(Self) -> Unit
}