]> git.scottworley.com Git - tablify/blobdiff - src/lib.rs
Clippy wants this to use mut and write!
[tablify] / src / lib.rs
index 9504c7f69928be110927531fadfe64dac0ed9a1b..a3878c56f879436aedd0d18220a60a076e3ffa7c 100644 (file)
@@ -1,4 +1,5 @@
 use std::collections::{HashMap, HashSet};
+use std::fmt::Write;
 use std::io::BufRead;
 use std::iter::Iterator;
 
@@ -32,7 +33,8 @@ const HEADER: &str = "<!DOCTYPE html>
 </head>
 <body>
   <table>
-    <tbody>";
+    <tbody>
+";
 const FOOTER: &str = "    </tbody>
   </table>
 </body>
@@ -186,6 +188,16 @@ fn render_row(columns: &[String], row: &RowInput) -> String {
     )
 }
 
+fn render_column_headers(columns: &[String]) -> String {
+    // TODO: Escape HTML special characters
+    String::from("<th></th>")
+        + &columns.iter().fold(String::new(), |mut acc, c| {
+            write!(&mut acc, "<th>{c}</th>").unwrap();
+            acc
+        })
+        + "\n"
+}
+
 /// # Errors
 ///
 /// Will return `Err` if
@@ -196,6 +208,7 @@ pub fn tablify(input: impl std::io::Read) -> Result<String, std::io::Error> {
     let rows = read_rows(input).collect::<Result<Vec<_>, _>>()?;
     let columns = column_order(&rows);
     Ok(String::from(HEADER)
+        + &render_column_headers(&columns)
         + &rows
             .into_iter()
             .map(|r| render_row(&columns, &r))