Slide 10
Slide 10 text
マッチ結果を受け取る Sink を実装
use grep_searcher::{Sink, SinkMatch};
struct SearchSink<'a> {
tx: &'a Sender>,
path: &'a Path,
}
// 結果を集めるためのコールバックを Sink で実装.マッチ箇所ごとに `matched` が呼ばれる
impl<'a> Sink for SearchSink<'a> {
type Error = io::Error;
// `SinkMatch` にマッチ情報が入っている
fn matched(&mut self, _searcher: &Searcher, mat: &SinkMatch<'_>) -> Result {
let m = Match {
path: self.path.to_owned(),
lnum: mat.line_number().unwrap_or(0),
line: mat.bytes().to_vec(),
};
self.tx.send(Ok(m)).unwrap(); // マッチ結果を返す
Ok(true)
}
}