1extern crate itertools;
2extern crate serde;
3
4#[cfg(test)]
5#[macro_use]
6extern crate indoc;
7#[macro_use]
8extern crate serde_derive;
9#[macro_use]
10extern crate serde_json;
11
12pub mod to_delimited;
13pub mod to_row_array;
14pub mod types;
15
16use crate::to_delimited::response_to_delimited_reports;
17use crate::to_row_array::response_to_row_array;
18use crate::types::ReportResponse;
19use serde_json::value::Value;
20use serde_json::Error;
21
22pub fn to_delimited(raw_report_response: &str, delimiter: &str) -> Result<Vec<String>, Error> {
23 if raw_report_response.is_empty() {
24 return Ok(vec!["".to_string()]);
25 }
26
27 let deserialized_response: ReportResponse = serde_json::from_str(raw_report_response)?;
28
29 Ok(response_to_delimited_reports(
30 &deserialized_response,
31 &delimiter,
32 ))
33}
34
35pub fn to_flat_json(raw_report: &str) -> Result<Value, Error> {
36 if raw_report.is_empty() {
37 return Ok(json!("[]"));
38 }
39
40 let deserialized_response: ReportResponse = serde_json::from_str(raw_report)?;
41
42 Ok(response_to_row_array(&deserialized_response))
43}
44
45#[cfg(test)]
46mod tests {
47 use super::to_delimited;
48 use std::fs;
49 use std::path::PathBuf;
50
51 #[test]
52 fn rejects_reports_containing_unsupported_features() {
53 let data: String = fs::read_to_string(PathBuf::from(format!(
54 "{}{}",
55 env!("CARGO_MANIFEST_DIR"),
56 "/test_reports/unsupported_feature.json"
57 )))
58 .unwrap();
59
60 assert!(to_delimited(&data, ",").is_err())
61 }
62}