blob: ab033854e5e8ef20443e82992f4a61760dfbc095 [file] [log] [blame]
Jakub Koturc72d7202020-12-21 17:28:15 +01001use std::env;
2use std::error::Error;
3use std::io;
4use std::process;
5
6fn run() -> Result<(), Box<dyn Error>> {
7 let query = match env::args().nth(1) {
8 None => return Err(From::from("expected 1 argument, but got none")),
9 Some(query) => query,
10 };
11
12 let mut rdr = csv::Reader::from_reader(io::stdin());
13 let mut wtr = csv::Writer::from_writer(io::stdout());
14
15 wtr.write_record(rdr.byte_headers()?)?;
16
17 for result in rdr.byte_records() {
18 let record = result?;
19 // `query` is a `String` while `field` is now a `&[u8]`, so we'll
20 // need to convert `query` to `&[u8]` before doing a comparison.
21 if record.iter().any(|field| field == query.as_bytes()) {
22 wtr.write_record(&record)?;
23 }
24 }
25
26 wtr.flush()?;
27 Ok(())
28}
29
30fn main() {
31 if let Err(err) = run() {
32 println!("{}", err);
33 process::exit(1);
34 }
35}