quake 0.5.0

Simple knowledge management tool for geek.
use std::error::Error;
use std::fs::File;

use csv::Reader;
use json::{array, object, JsonValue};

#[allow(dead_code)]
pub fn csv_to_json(rdr: &mut Reader<File>) -> Result<JsonValue, Box<dyn Error>> {
    let mut json: JsonValue = array![];

    let mut header = vec![];
    if let Ok(record) = rdr.headers() {
        for str in record {
            header.push(String::from(str))
        }
    }

    for result in rdr.records() {
        let mut element = object! {};
        let record = result.unwrap();
        for (index, str) in record.iter().enumerate() {
            element[header[index].clone()] = str.into();
        }

        json.push(element.clone())?;
    }

    Ok(json)
}

#[cfg(test)]
mod tests {
    use std::fs::File;
    use std::path::PathBuf;

    use crate::server::helper::csv_to_json::csv_to_json;

    #[test]
    fn json_to_csv() {
        let path = PathBuf::from("examples").join("todo").join("entries.csv");
        let mut rdr = csv::Reader::from_reader(File::open(path).expect("cannot open file"));
        let output = csv_to_json(&mut rdr).unwrap();

        assert_eq!(output.to_string(), "[{\"id\":\"1\",\"title\":\"time support\",\"author\":\"\",\"created_date\":\"2021-11-24 19:14:10\",\"updated_date\":\"2021-11-24 19:14:10\"}]")
    }
}