use std::collections::HashMap;
use serde_json::Value;
use crate::{compiler::window_functions::WindowExecutionPlan, error::Result};
pub struct WindowProjector;
impl WindowProjector {
pub fn project(
rows: Vec<HashMap<String, Value>>,
_plan: &WindowExecutionPlan,
) -> Result<Value> {
let projected_rows: Vec<Value> = rows
.into_iter()
.map(|row| {
let mut obj = serde_json::Map::new();
for (key, value) in row {
obj.insert(key, value);
}
Value::Object(obj)
})
.collect();
Ok(Value::Array(projected_rows))
}
#[must_use]
pub fn wrap_in_data_envelope(projected: Value, query_name: &str) -> Value {
let mut data = serde_json::Map::new();
data.insert(query_name.to_string(), projected);
let mut response = serde_json::Map::new();
response.insert("data".to_string(), Value::Object(data));
Value::Object(response)
}
}