///|
/// 再接続までの待ち時間(ミリ秒)。失敗が続くごとに倍にし、`max_ms` で止める。
pub fn reconnect_delay_ms(
  failures : Int,
  base_ms? : Int = 1000,
  max_ms? : Int = 60_000,
) -> Int {
  let mut delay = base_ms
  for _ in 0..= max_ms {
      return max_ms
    }
    delay = delay * 2
  }
  if delay > max_ms {
    max_ms
  } else {
    delay
  }
}

///|
/// 切れる前の接続が十分に長くもっていたか。もっていたなら失敗の数を 0 に戻してすぐ再接続する。
pub fn connection_was_healthy(
  connected_ms~ : Int64,
  healthy_ms? : Int64 = 60_000,
) -> Bool {
  connected_ms >= healthy_ms
}