use async_trait::async_trait;
use std::collections::HashMap;
use crate::data::DataTable;
use crate::error::ChartError;
use crate::spec::TransformSpec;
#[derive(Debug, Clone, Default)]
pub struct TransformContext {
pub params: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone)]
pub struct TransformResult {
pub data: DataTable,
pub metadata: HashMap<String, serde_json::Value>,
}
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
pub trait TransformMiddleware: Send + Sync {
async fn transform(
&self,
data: DataTable,
spec: &TransformSpec,
context: &TransformContext,
) -> Result<TransformResult, ChartError>;
}