1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use build_html::{Html, Table};

pub fn convert(csv: &String, has_header: &bool) -> String {
    let mut csv_reader = csv::Reader::from_reader(csv.as_bytes());
    let mut table = Table::new();
    match csv_reader.headers() {
        Ok(record) => {
            let header: Vec<&str> = record.iter().collect();
            if *has_header {
                table.add_header_row(header);
            } else {
                table.add_body_row(header);
            }
        }
        Err(_) => (),
    }
    let records = csv_reader.records();
    for r in records {
        match r {
            Ok(record) => table.add_body_row(record.iter().collect::<Vec<&str>>()),
            Err(_) => (),
        }
    }
    table.to_html_string()
}