[][src]Function jiragen::csv_to_json

pub fn csv_to_json(
    headers: Vec<&str>,
    records: Vec<StringRecord>
) -> Result<Vec<Value>, Error>

Reads the issues template .csv file and converts it to a JSON object

use jiragen::csv_to_json;
use csv::StringRecord;
use serde_json::json;

// string conversion
let headers = vec!["summary"];
let records = vec![StringRecord::from(vec!["A Test Summary"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "summary": "A Test Summary" })]
);

// string array conversion
let headers = vec!["labels[]"];
let records = vec![StringRecord::from(vec!["a-label"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "labels": ["a-label"] })]
);

// single array, multiple string values
let headers = vec!["labels[]", "labels[]"];
let records = vec![StringRecord::from(vec!["a-label", "b-label"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "labels": ["a-label", "b-label"] })]
);

// object property
let headers = vec!["issuetype.id"];
let records = vec![StringRecord::from(vec!["12345"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "issuetype": {"id": "12345"} })]
);

// an array of object
let headers = vec!["components[].id"];
let records = vec![StringRecord::from(vec!["A Component"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "components": [{"id": "A Component"}] })]
);

// an object with an array of objects
let headers = vec!["watcher.watchers[].accountId"];
let records = vec![StringRecord::from(vec!["abcc281-qk3j8d8fj"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({
    "watcher": {
      "watchers": [
        {"accountId": "abcc281-qk3j8d8fj"}
      ]
    }
  })]
);

// single object, multiple properties
let headers = vec![
  "timetracking.originalEstimate",
  "timetracking.remainingEstimate",
];
let records = vec![StringRecord::from(vec!["10", "5"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "timetracking": { "originalEstimate": "10", "remainingEstimate": "5" } })]
);

// an array with mutiple objects (each with 1 item)
let headers = vec!["fixVersions[].id", "fixVersions[].id"];
let records = vec![StringRecord::from(vec!["10000", "10001"])];
assert_eq!(
  csv_to_json(headers, records).unwrap(),
  vec![json!({ "fixVersions": [ {"id": "10000"}, {"id": "10001"} ] })]
);