extern crate serde_json;
use std::collections::HashMap;
use crate::error::KairoError;
#[derive(Serialize, Deserialize, Debug, Default)]
pub struct QueryResult {
queries: Vec<Query>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Query {
sample_size: i64,
results: Vec<ResultValues>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ResultValues {
name: String,
values: Vec<Vec<f64>>,
}
#[derive(Debug)]
pub struct Value {
pub time: u64,
pub value: f64,
}
pub type ResultMap = HashMap<String, ResultVector>;
type ResultVector = Vec<Value>;
impl QueryResult {
pub fn new() -> QueryResult {
QueryResult { queries: vec![] }
}
pub fn parse_result(&self, body: &str) -> Result<ResultMap, KairoError> {
let mut result: ResultMap = HashMap::new();
let deserialized: QueryResult = serde_json::from_str(body)?;
for query in deserialized.queries {
for r in query.results {
let mut values: ResultVector = Vec::new();
for v in r.values {
values.push(Value {
time: v[0] as u64,
value: v[1] as f64,
});
}
result.insert(r.name, values);
}
}
Ok(result)
}
}