use async_trait::async_trait;
use crate::data::DataTable;
use crate::error::ChartError;
#[derive(Debug, Clone, Default)]
pub struct FetchOptions {
pub cache_ttl: Option<String>,
}
#[derive(Debug, Clone)]
pub struct DataSpec {
pub provider: String,
pub rows: Option<Vec<serde_json::Value>>,
pub url: Option<String>,
pub endpoint: Option<String>,
}
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
pub trait DataSource: Send + Sync {
async fn fetch(&self, spec: &DataSpec, options: &FetchOptions) -> Result<DataTable, ChartError>;
}