///|
/// ライブチャットの入口。`emit` にコメントを 1 件ずつ渡す。
/// `run` は Source が尽きるまで(チャットなら配信が終わるか、呼び出し側が止めるまで)戻らない。
/// `emit` の中で起きたエラーの扱いは呼び出し側に任せる(Source は次のコメントに進む)。
pub(open) trait ChatSource {
  async fn run(Self, emit : async (Comment) -> Unit) -> Unit
}