use std::path::Path;
use mq_lang::{DefaultEngine, parse_markdown_input};
use crate::{DocumentStore, MqdbError};
pub struct MqEngine;
impl MqEngine {
pub fn eval_files(code: &str, paths: &[&Path]) -> Result<Vec<String>, MqdbError> {
let mut engine = DefaultEngine::default();
engine.load_builtin_module();
let mut results = Vec::new();
for path in paths {
let content = std::fs::read_to_string(path)?;
let input = parse_markdown_input(&content).map_err(|e| MqdbError::Mq(e.to_string()))?;
let output = engine
.eval(code, input.into_iter())
.map_err(|e| MqdbError::Mq(e.to_string()))?;
for v in output.compact() {
results.push(v.to_string());
}
}
Ok(results)
}
pub fn eval_store(code: &str, store: &DocumentStore) -> Result<Vec<String>, MqdbError> {
let paths: Vec<&Path> = store
.documents()
.iter()
.filter_map(|d| d.path.as_deref())
.collect();
Self::eval_files(code, &paths)
}
}