[READ-ONLY] Mirror of https://github.com/probablykasper/csv-pipeline.
0

Configure Feed

Select the types of activity you want to include in your feed.

String writer struct for StringTarget

Kasper (Jan 8, 2023, 10:06 PM +0100) bcea5587 d4724d7c

+22 -7
+22 -7
src/target.rs
··· 78 78 } 79 79 } 80 80 81 + pub struct StringWriter<'a> { 82 + s: &'a mut String, 83 + } 84 + impl<'a> io::Write for StringWriter<'a> { 85 + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { 86 + match std::str::from_utf8(buf) { 87 + Ok(s) => { 88 + self.s.push_str(s); 89 + Ok(buf.len()) 90 + } 91 + Err(e) => Err(io::Error::new(io::ErrorKind::InvalidData, e)), 92 + } 93 + } 94 + fn flush(&mut self) -> io::Result<()> { 95 + Ok(()) 96 + } 97 + } 98 + 81 99 pub struct StringTarget<'a> { 82 - s: &'a mut String, 100 + writer: csv::Writer<StringWriter<'a>>, 83 101 } 84 102 impl<'a> StringTarget<'a> { 85 103 pub fn new(s: &'a mut String) -> Self { 86 - Self { s } 104 + let writer = WriterBuilder::new().from_writer(StringWriter { s }); 105 + Self { writer } 87 106 } 88 107 } 89 108 impl<'a> Target for StringTarget<'a> { ··· 91 110 self.write_row(headers.get_row()) 92 111 } 93 112 fn write_row(&mut self, row: &Row) -> Result<(), Error> { 94 - let mut wtr = csv::Writer::from_writer(vec![]); 95 - wtr.write_record(row)?; 96 - // not sure if this unwrap is safe 97 - let row_s = String::from_utf8(wtr.into_inner().unwrap()).unwrap(); 98 - *self.s += &row_s; 113 + self.writer.write_record(row)?; 99 114 Ok(()) 100 115 } 101 116 }