diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 37 |
1 files changed, 35 insertions, 2 deletions
@@ -36,7 +36,7 @@ use format::{TableFormat, LinePosition, consts}; use utils::StringWriter; /// An owned printable table -#[derive(Clone, Debug, Hash)] +#[derive(Clone, Debug, Hash, PartialEq, Eq)] pub struct Table { format: Box<TableFormat>, titles: Box<Option<Row>>, @@ -62,7 +62,7 @@ pub struct Table { /// # } /// ``` /// -#[derive(Clone, Debug, Hash)] +#[derive(Clone, Debug, Hash, PartialEq, Eq)] pub struct TableSlice<'a> { format: &'a TableFormat, titles: &'a Option<Row>, @@ -473,6 +473,14 @@ impl<B: ToString, A: IntoIterator<Item = B>> FromIterator<A> for Table { } } +impl FromIterator<Row> for Table { + fn from_iter<T>(iterator: T) -> Table + where T: IntoIterator<Item = Row> + { + Self::init(iterator.into_iter().collect()) + } +} + impl<T, A, B> From<T> for Table where B: ToString, A: IntoIterator<Item = B>, @@ -499,6 +507,20 @@ impl<'a> IntoIterator for &'a mut Table { } } +// impl IntoIterator for Table { +// type Item = Row; +// type IntoIter = std::vec::IntoIter<Self::Item>; +// fn into_iter(self) -> Self::IntoIter { +// self.rows.into_iter() +// } +// } + +impl <A: Into<Row>> Extend<A> for Table { + fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) { + self.rows.extend(iter.into_iter().map(|r| r.into())); + } +} + /// Iterator over immutable cells in a column pub struct ColumnIter<'a>(Iter<'a, Row>, usize); @@ -990,5 +1012,16 @@ mod tests { .replace("\r\n", "\n"), test_table().to_string().replace("\r\n", "\n")); } + + #[test] + fn extend_table() { + let mut table = Table::new(); + table.add_row(Row::new(vec![Cell::new("ABC"), Cell::new("DEFG"), Cell::new("HIJKLMN")])); + table.extend(vec![vec!["A", "B", "C"]]); + let t2 = table.clone(); + table.extend(t2.rows); + assert_eq!(table.get_row(1).unwrap().get_cell(2).unwrap().get_content(), "C"); + assert_eq!(table.get_row(2).unwrap().get_cell(1).unwrap().get_content(), "DEFG"); + } } } |