From a1440b5dbb6db5ff6dcdd5a6e4eb27fd5d44ab87 Mon Sep 17 00:00:00 2001 From: Pierre-Henri Symoneaux Date: Fri, 21 Sep 2018 14:54:29 +0200 Subject: Moved CSV module into dedicated file --- src/csv.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 80 +------------------------------------------------------------- 2 files changed, 80 insertions(+), 79 deletions(-) create mode 100644 src/csv.rs diff --git a/src/csv.rs b/src/csv.rs new file mode 100644 index 0000000..cb8ec72 --- /dev/null +++ b/src/csv.rs @@ -0,0 +1,79 @@ +//! CSV impl and reexported types + +extern crate csv; + +pub use self::csv::{Reader, Writer, Result, ReaderBuilder}; +use std::path::Path; +use std::io::{Read, Write}; + +impl<'a> super::TableSlice<'a> { + /// Write the table to the specified writer. + pub fn to_csv(&self, w: W) -> Result> { + self.to_csv_writer(Writer::from_writer(w)) + } + + /// Write the table to the specified writer. + /// + /// This allows for format customisation. + pub fn to_csv_writer(&self, + mut writer: Writer) + -> Result> { + for title in self.titles { + writer.write_record(title.iter().map(|c| c.get_content()))?; + } + for row in self.rows { + writer.write_record(row.iter().map(|c| c.get_content()))?; + } + + writer.flush()?; + Ok(writer) + } +} + +impl super::Table { + /// Create a table from a CSV string + /// + /// For more customisability use `from_csv()` + pub fn from_csv_string(csv_s: &str) -> Result { + Ok(Self::from_csv( + &mut ReaderBuilder::new() + .has_headers(false) + .from_reader(csv_s.as_bytes()))) + } + + /// Create a table from a CSV file + /// + /// For more customisability use `from_csv()` + pub fn from_csv_file>(csv_p: P) -> Result { + Ok(Self::from_csv( + &mut ReaderBuilder::new() + .has_headers(false) + .from_path(csv_p)?)) + } + + /// Create a table from a CSV reader + pub fn from_csv(reader: &mut Reader) -> Self { + Self::init(reader + .records() + .map(|row| { + super::row::Row::new(row.unwrap() + .into_iter() + .map(|cell| super::cell::Cell::new(&cell)) + .collect()) + }) + .collect()) + } + + + /// Write the table to the specified writer. + pub fn to_csv(&self, w: W) -> Result> { + self.as_ref().to_csv(w) + } + + /// Write the table to the specified writer. + /// + /// This allows for format customisation. + pub fn to_csv_writer(&self, writer: Writer) -> Result> { + self.as_ref().to_csv_writer(writer) + } +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 323003d..4bf3521 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,86 +25,8 @@ pub mod row; pub mod format; mod utils; -/// CSV impl and reexported types #[cfg(feature = "csv")] -pub mod csv { - extern crate csv; - pub use self::csv::{Reader, Writer, Result, ReaderBuilder}; - use std::path::Path; - use std::io::{Read, Write}; - - impl<'a> super::TableSlice<'a> { - /// Write the table to the specified writer. - pub fn to_csv(&self, w: W) -> Result> { - self.to_csv_writer(Writer::from_writer(w)) - } - - /// Write the table to the specified writer. - /// - /// This allows for format customisation. - pub fn to_csv_writer(&self, - mut writer: Writer) - -> Result> { - for title in self.titles { - writer.write_record(title.iter().map(|c| c.get_content()))?; - } - for row in self.rows { - writer.write_record(row.iter().map(|c| c.get_content()))?; - } - - writer.flush()?; - Ok(writer) - } - } - - impl super::Table { - /// Create a table from a CSV string - /// - /// For more customisability use `from_csv()` - pub fn from_csv_string(csv_s: &str) -> Result { - Ok(Self::from_csv( - &mut ReaderBuilder::new() - .has_headers(false) - .from_reader(csv_s.as_bytes()))) - } - - /// Create a table from a CSV file - /// - /// For more customisability use `from_csv()` - pub fn from_csv_file>(csv_p: P) -> Result { - Ok(Self::from_csv( - &mut ReaderBuilder::new() - .has_headers(false) - .from_path(csv_p)?)) - } - - /// Create a table from a CSV reader - pub fn from_csv(reader: &mut Reader) -> Self { - Self::init(reader - .records() - .map(|row| { - super::row::Row::new(row.unwrap() - .into_iter() - .map(|cell| super::cell::Cell::new(&cell)) - .collect()) - }) - .collect()) - } - - - /// Write the table to the specified writer. - pub fn to_csv(&self, w: W) -> Result> { - self.as_ref().to_csv(w) - } - - /// Write the table to the specified writer. - /// - /// This allows for format customisation. - pub fn to_csv_writer(&self, writer: Writer) -> Result> { - self.as_ref().to_csv_writer(writer) - } - } -} +pub mod csv; use row::Row; use cell::Cell; -- cgit v1.2.3