use super::DataQuery;
use shape_ast::error::{Result, ShapeError};
use shape_value::KindedSlot;
use std::collections::HashMap;
#[derive(Debug, Clone, Default)]
pub struct LoadQuery {
pub provider: Option<String>,
pub params: HashMap<String, KindedSlot>,
pub target_type: Option<String>,
pub column_mapping: Option<HashMap<String, String>>,
}
impl LoadQuery {
pub fn new() -> Self {
Self::default()
}
pub fn with_provider(mut self, name: &str) -> Self {
self.provider = Some(name.to_string());
self
}
pub fn with_param(mut self, key: &str, value: KindedSlot) -> Self {
self.params.insert(key.to_string(), value);
self
}
pub fn with_type(mut self, type_name: &str) -> Self {
self.target_type = Some(type_name.to_string());
self
}
pub fn with_column_mapping(mut self, mapping: HashMap<String, String>) -> Self {
self.column_mapping = Some(mapping);
self
}
pub fn to_data_query(&self) -> Result<DataQuery> {
Err(ShapeError::RuntimeError {
message: "LoadQuery::to_data_query: pending Phase 2c kind-threaded param decode — see ADR-006 §2.7.4".to_string(),
location: None,
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_basic_query_metadata() {
let query = LoadQuery::new()
.with_provider("data")
.with_type("Candle");
assert_eq!(query.provider, Some("data".to_string()));
assert_eq!(query.target_type, Some("Candle".to_string()));
}
}