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