]> git.scottworley.com Git - tablify/commitdiff
Entry type
authorScott Worley <scottworley@scottworley.com>
Mon, 19 Aug 2024 19:21:49 +0000 (12:21 -0700)
committerScott Worley <scottworley@scottworley.com>
Mon, 19 Aug 2024 19:21:49 +0000 (12:21 -0700)
src/lib.rs

index c2da4c91909375963110e9b64969c710d254e774..245a47ae469dae6a426f471b1297701432167494 100644 (file)
@@ -38,10 +38,13 @@ const FOOTER: &str = "    </tbody>
 </body>
 </html>";
 
 </body>
 </html>";
 
+#[derive(Debug, PartialEq, Eq, Hash)]
+struct Entry(String);
+
 #[derive(Debug, PartialEq, Eq)]
 struct RowInput {
     label: String,
 #[derive(Debug, PartialEq, Eq)]
 struct RowInput {
     label: String,
-    entries: Vec<String>,
+    entries: Vec<Entry>,
 }
 
 struct Reader<Input: Iterator<Item = Result<String, std::io::Error>>> {
 }
 
 struct Reader<Input: Iterator<Item = Result<String, std::io::Error>>> {
@@ -78,7 +81,7 @@ impl<Input: Iterator<Item = Result<String, std::io::Error>>> Iterator for Reader
                             n + 1
                         ))))
                     }
                             n + 1
                         ))))
                     }
-                    Some(ref mut row) => row.entries.push(String::from(line.trim())),
+                    Some(ref mut row) => row.entries.push(Entry(String::from(line.trim()))),
                 },
                 Some((_, Ok(line))) => {
                     let prev = std::mem::take(&mut self.row);
                 },
                 Some((_, Ok(line))) => {
                     let prev = std::mem::take(&mut self.row);
@@ -104,7 +107,7 @@ fn column_counts(rows: &[RowInput]) -> Vec<(usize, String)> {
         .iter()
         .flat_map(|r| r.entries.iter().collect::<HashSet<_>>().into_iter())
         .fold(HashMap::new(), |mut cs, e| {
         .iter()
         .flat_map(|r| r.entries.iter().collect::<HashSet<_>>().into_iter())
         .fold(HashMap::new(), |mut cs, e| {
-            cs.entry(String::from(e))
+            cs.entry(String::from(&e.0))
                 .and_modify(|n| *n += 1)
                 .or_insert(1);
             cs
                 .and_modify(|n| *n += 1)
                 .or_insert(1);
             cs
@@ -165,7 +168,7 @@ mod tests {
             read_rows(&b"foo\n bar\n"[..]).flatten().collect::<Vec<_>>(),
             vec![RowInput {
                 label: String::from("foo"),
             read_rows(&b"foo\n bar\n"[..]).flatten().collect::<Vec<_>>(),
             vec![RowInput {
                 label: String::from("foo"),
-                entries: vec![String::from("bar")]
+                entries: vec![Entry(String::from("bar"))]
             }]
         );
         assert_eq!(
             }]
         );
         assert_eq!(
@@ -174,7 +177,7 @@ mod tests {
                 .collect::<Vec<_>>(),
             vec![RowInput {
                 label: String::from("foo"),
                 .collect::<Vec<_>>(),
             vec![RowInput {
                 label: String::from("foo"),
-                entries: vec![String::from("bar"), String::from("baz")]
+                entries: vec![Entry(String::from("bar")), Entry(String::from("baz"))]
             }]
         );
         assert_eq!(
             }]
         );
         assert_eq!(
@@ -213,7 +216,7 @@ mod tests {
                 .collect::<Vec<_>>(),
             vec![RowInput {
                 label: String::from("foo"),
                 .collect::<Vec<_>>(),
             vec![RowInput {
                 label: String::from("foo"),
-                entries: vec![String::from("bar")]
+                entries: vec![Entry(String::from("bar"))]
             }]
         );
 
             }]
         );